package/compcache: use mainline modules for kernels >=2.6.33 (thank you nbd)

SVN-Revision: 22458
owl
Alexandros C. Couloumbis 2010-08-01 16:57:24 +00:00
parent 31239d3332
commit 6978c1cb83
5 changed files with 147 additions and 11 deletions

View File

@ -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

View 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"
}

View 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

View File

@ -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;

View File

@ -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;