package/compcache: use mainline modules for kernels >=2.6.33 (thank you nbd)
SVN-Revision: 22458
This commit is contained in:
parent
31239d3332
commit
6978c1cb83
5 changed files with 147 additions and 11 deletions
|
@ -10,7 +10,7 @@ include $(INCLUDE_DIR)/kernel.mk
|
|||
|
||||
PKG_NAME:=compcache
|
||||
PKG_VERSION:=0.6.2
|
||||
PKG_RELEASE:=2
|
||||
PKG_RELEASE:=3
|
||||
PKG_SOURCE_URL:=http://compcache.googlecode.com/files/
|
||||
PKG_MD5SUM:=27aec78dc50e34fb800c74e879057743
|
||||
|
||||
|
@ -23,8 +23,17 @@ define KernelPackage/ramzswap
|
|||
DEPENDS:=@BUSYBOX_CONFIG_SWAPONOFF
|
||||
TITLE:=Driver for compressed ram swap device
|
||||
VERSION:=$(LINUX_VERSION)-$(BOARD)-$(LINUX_RELEASE)+$(PKG_RELEASE)
|
||||
FILES:=$(PKG_BUILD_DIR)/ramzswap.ko \
|
||||
$(PKG_BUILD_DIR)/sub-projects/compression/lzo-kmod/lzo1x.ko
|
||||
KCONFIG:=CONFIG_RAMZSWAP=m CONFIG_RAMZSWAP_STATS=n
|
||||
ifeq ($(strip $(call CompareKernelPatchVer,$(KERNEL_PATCHVER),ge,2.6.33)),1)
|
||||
FILES:= \
|
||||
$(LINUX_DIR)/drivers/staging/ramzswap/ramzswap.ko \
|
||||
$(LINUX_DIR)/lib/lzo/lzo_compress.ko \
|
||||
$(LINUX_DIR)/lib/lzo/lzo_decompress.ko
|
||||
else
|
||||
FILES:= \
|
||||
$(PKG_BUILD_DIR)/ramzswap.ko \
|
||||
$(PKG_BUILD_DIR)/sub-projects/compression/lzo-kmod/lzo1x.ko
|
||||
endif
|
||||
URL:=http://code.google.com/p/compcache/
|
||||
endef
|
||||
|
||||
|
@ -39,20 +48,21 @@ endef
|
|||
|
||||
include $(INCLUDE_DIR)/kernel-defaults.mk
|
||||
|
||||
LZO = sub-projects/compression/lzo-kmod
|
||||
RZSC = sub-projects/rzscontrol
|
||||
|
||||
BUILDFLAGS:=-DCONFIG_RAMZSWAP_STATS \
|
||||
-I$(PKG_BUILD_DIR)/$(LZO) \
|
||||
-Wall
|
||||
|
||||
RZSCFLAGS:=-I$(PKG_BUILD_DIR)/$(RZSC)/../include \
|
||||
-I$(PKG_BUILD_DIR)/$(RZSC)/../..
|
||||
|
||||
define Build/Compile
|
||||
$(MAKE) $(KERNEL_MAKEOPTS) EXTRA_CFLAGS="$(BUILDFLAGS)" M="$(PKG_BUILD_DIR)" modules
|
||||
ifeq ($(strip $(call CompareKernelPatchVer,$(KERNEL_PATCHVER),ge,2.6.33)),1)
|
||||
define Build/Compile
|
||||
$(TARGET_CC) $(TARGET_CFLAGS) $(RZSCFLAGS) $(PKG_BUILD_DIR)/$(RZSC)/rzscontrol.c -o $(PKG_BUILD_DIR)/rzscontrol
|
||||
endef
|
||||
else
|
||||
define Build/Compile
|
||||
$(MAKE) $(KERNEL_MAKEOPTS) EXTRA_CFLAGS="-I$(PKG_BUILD_DIR)/sub-projects/compression/lzo-kmod -Wall" M="$(PKG_BUILD_DIR)" modules
|
||||
$(TARGET_CC) $(TARGET_CFLAGS) $(RZSCFLAGS) $(PKG_BUILD_DIR)/$(RZSC)/rzscontrol.c -o $(PKG_BUILD_DIR)/rzscontrol
|
||||
endef
|
||||
endef
|
||||
endif
|
||||
|
||||
define Package/compcache/install
|
||||
$(INSTALL_DIR) $(1)/etc/config
|
||||
|
@ -62,7 +72,11 @@ define Package/compcache/install
|
|||
-e 's,%BACKUP_DEV%,$(call qstrip,$(CONFIG_COMPCACHE_BACKUP_DEV)),g' \
|
||||
$(1)/etc/config/compcache
|
||||
$(INSTALL_DIR) $(1)/etc/init.d
|
||||
ifeq ($(strip $(call CompareKernelPatchVer,$(KERNEL_PATCHVER),ge,2.6.33)),1)
|
||||
$(INSTALL_BIN) ./files/compcache.init.new $(1)/etc/init.d/compcache
|
||||
else
|
||||
$(INSTALL_BIN) ./files/compcache.init $(1)/etc/init.d/compcache
|
||||
endif
|
||||
$(INSTALL_DIR) $(1)/sbin
|
||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/rzscontrol $(1)/sbin/rzscontrol
|
||||
endef
|
||||
|
|
50
package/compcache/files/compcache.init.new
Normal file
50
package/compcache/files/compcache.init.new
Normal file
|
@ -0,0 +1,50 @@
|
|||
#!/bin/sh /etc/rc.common
|
||||
# Copyright (C) 2008 OpenWrt.org
|
||||
START=14
|
||||
|
||||
load_modules() {
|
||||
local section="$1"
|
||||
config_get "size_kbytes" "$section" "size_kbytes"
|
||||
config_get "backup_dev" "$section" "backup_dev"
|
||||
#CC_PARAM_STR="memlimit_kb=$1 backing_dev=$BACKING_DEV"
|
||||
config_get_bool "enabled" "$section" "enabled" '1'
|
||||
if [ "$enabled" -gt 0 ]; then
|
||||
if [ "`cat /proc/swaps | grep 'ramzswap0'`" != "" ]; then
|
||||
echo "compcache already loaded"
|
||||
else
|
||||
if [ "$backup_dev" != "" ]; then
|
||||
params_set="memlimit_kb=$size_kbytes backing_swap=$backup_dev"
|
||||
else
|
||||
params_set="disksize_kb=$size_kbytes"
|
||||
fi
|
||||
if [ "`lsmod | grep 'ramzswap'`" == "" ]; then
|
||||
insmod lzo_compress
|
||||
insmod lzo_decompress
|
||||
insmod ramzswap $params_set
|
||||
sleep 2
|
||||
swapon /dev/ramzswap0
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
remove_modules() {
|
||||
local section="$1"
|
||||
config_get_bool "enabled" "$section" "enabled" '1'
|
||||
if [ "$enabled" -gt 0 ]; then
|
||||
[ "`cat /proc/swaps | grep 'ramzswap0'`" != "" ] && swapoff /dev/ramzswap0
|
||||
[ "`lsmod | grep 'ramzswap'`" != "" ] && rmmod ramzswap &> /dev/null
|
||||
[ "`lsmod | grep 'lzo_compress'`" != "" ] && rmmod lzo_compress &> /dev/null
|
||||
[ "`lsmod | grep 'lzo_decompress'`" != "" ] && rmmod lzo_decompress &> /dev/null
|
||||
fi
|
||||
}
|
||||
|
||||
start() {
|
||||
config_load "compcache"
|
||||
config_foreach load_modules "compcache"
|
||||
}
|
||||
|
||||
stop() {
|
||||
config_load "compcache"
|
||||
config_foreach remove_modules "compcache"
|
||||
}
|
12
package/compcache/patches/003-no_stats.patch
Normal file
12
package/compcache/patches/003-no_stats.patch
Normal file
|
@ -0,0 +1,12 @@
|
|||
--- a/Makefile
|
||||
+++ b/Makefile
|
||||
@@ -2,8 +2,7 @@ KERNEL_BUILD_PATH ?= "/lib/modules/$(she
|
||||
|
||||
XVM = sub-projects/allocators/xvmalloc-kmod
|
||||
LZO = sub-projects/compression/lzo-kmod
|
||||
-EXTRA_CFLAGS := -DCONFIG_RAMZSWAP_STATS \
|
||||
- -Wall
|
||||
+EXTRA_CFLAGS := -Wall
|
||||
|
||||
obj-m += ramzswap.o $(LZO)/lzo1x.o
|
||||
ramzswap-objs := ramzswap_drv.o $(XVM)/xvmalloc.o
|
|
@ -0,0 +1,30 @@
|
|||
--- a/include/linux/blkdev.h
|
||||
+++ b/include/linux/blkdev.h
|
||||
@@ -1301,6 +1301,8 @@ struct block_device_operations {
|
||||
unsigned long long);
|
||||
int (*revalidate_disk) (struct gendisk *);
|
||||
int (*getgeo)(struct block_device *, struct hd_geometry *);
|
||||
+ /* this callback is with swap_lock and sometimes page table lock held */
|
||||
+ void (*swap_slot_free_notify) (struct block_device *, unsigned long);
|
||||
struct module *owner;
|
||||
};
|
||||
|
||||
--- a/mm/swapfile.c
|
||||
+++ b/mm/swapfile.c
|
||||
@@ -574,6 +574,7 @@ static unsigned char swap_entry_free(struct swap_info_struct *p,
|
||||
|
||||
/* free if no reference */
|
||||
if (!usage) {
|
||||
+ struct gendisk *disk = p->bdev->bd_disk;
|
||||
if (offset < p->lowest_bit)
|
||||
p->lowest_bit = offset;
|
||||
if (offset > p->highest_bit)
|
||||
@@ -583,6 +584,8 @@ static unsigned char swap_entry_free(struct swap_info_struct *p,
|
||||
swap_list.next = p->type;
|
||||
nr_swap_pages++;
|
||||
p->inuse_pages--;
|
||||
+ if (disk->fops->swap_slot_free_notify)
|
||||
+ disk->fops->swap_slot_free_notify(p->bdev, offset);
|
||||
}
|
||||
|
||||
return usage;
|
|
@ -0,0 +1,30 @@
|
|||
--- a/include/linux/blkdev.h
|
||||
+++ b/include/linux/blkdev.h
|
||||
@@ -1301,6 +1301,8 @@ struct block_device_operations {
|
||||
unsigned long long);
|
||||
int (*revalidate_disk) (struct gendisk *);
|
||||
int (*getgeo)(struct block_device *, struct hd_geometry *);
|
||||
+ /* this callback is with swap_lock and sometimes page table lock held */
|
||||
+ void (*swap_slot_free_notify) (struct block_device *, unsigned long);
|
||||
struct module *owner;
|
||||
};
|
||||
|
||||
--- a/mm/swapfile.c
|
||||
+++ b/mm/swapfile.c
|
||||
@@ -574,6 +574,7 @@ static unsigned char swap_entry_free(struct swap_info_struct *p,
|
||||
|
||||
/* free if no reference */
|
||||
if (!usage) {
|
||||
+ struct gendisk *disk = p->bdev->bd_disk;
|
||||
if (offset < p->lowest_bit)
|
||||
p->lowest_bit = offset;
|
||||
if (offset > p->highest_bit)
|
||||
@@ -583,6 +584,8 @@ static unsigned char swap_entry_free(struct swap_info_struct *p,
|
||||
swap_list.next = p->type;
|
||||
nr_swap_pages++;
|
||||
p->inuse_pages--;
|
||||
+ if (disk->fops->swap_slot_free_notify)
|
||||
+ disk->fops->swap_slot_free_notify(p->bdev, offset);
|
||||
}
|
||||
|
||||
return usage;
|
Loading…
Reference in a new issue