From: Jan-Pascal van Best Date: Mon, 19 Aug 2013 20:39:00 +0000 (+0200) Subject: Update to kernel 3.10 X-Git-Tag: debian/620-13~1 X-Git-Url: http://www.vanbest.org/gitweb/?a=commitdiff_plain;h=93a0c89b541982715a2d92fb7e019881259d6963;p=sasc-ng.git Update to kernel 3.10 --- diff --git a/debian/changelog b/debian/changelog index 512f62f..8c8da2f 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +sasc-ng (620-12) local; urgency=low + + * Updates for kernel 3.10, lower kernels not supported for now + + -- Jan-Pascal van Best Mon, 19 Aug 2013 10:07:09 +0200 + sasc-ng (620-11) local; urgency=low * Provide debug symbols in -dbg packages diff --git a/debian/patches/series b/debian/patches/series index a73cd7f..149919f 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -3,3 +3,4 @@ use-proper-kernel-header-locations.patch use-ldflags-in-makefiles.patch fix-tuner-lock-bug.patch #nickfudge-stability-patches-part1.patch +update-for-linux-3.10-procfs-changes diff --git a/debian/patches/update-for-linux-3.10-procfs-changes b/debian/patches/update-for-linux-3.10-procfs-changes new file mode 100644 index 0000000..98c4c11 --- /dev/null +++ b/debian/patches/update-for-linux-3.10-procfs-changes @@ -0,0 +1,280 @@ +diff --git a/contrib/sasc-ng/dvbloopback/module/dvb_loopback.c b/contrib/sasc-ng/dvbloopback/module/dvb_loopback.c +index 5299dbe..a8500dd 100644 +--- a/contrib/sasc-ng/dvbloopback/module/dvb_loopback.c ++++ b/contrib/sasc-ng/dvbloopback/module/dvb_loopback.c +@@ -49,6 +49,7 @@ + #include + #include + #include ++#include + #include + #include + #include +diff --git a/contrib/sasc-ng/dvbloopback/module/dvblb_proc.c b/contrib/sasc-ng/dvbloopback/module/dvblb_proc.c +index c78aa33..2c3637f 100644 +--- a/contrib/sasc-ng/dvbloopback/module/dvblb_proc.c ++++ b/contrib/sasc-ng/dvbloopback/module/dvblb_proc.c +@@ -23,14 +23,16 @@ + */ + #include /* >= 2.6.14 LINUX_VERSION_CODE */ + #include ++#include + #include + #include ++#include + + #include + #include "dvblb_internal.h" + + static struct proc_dir_entry *procdir; +- ++/* + static int dvblb_procfs_read(char *page, char **start, off_t off, int count, + int *eof, void *data) + { +@@ -41,7 +43,18 @@ static int dvblb_procfs_read(char *page, char **start, off_t off, int count, + val = (lbdev->forward_dev) ? 1 : 0; + return sprintf(page, "%03d", val); + } +- ++*/ ++static int dvblb_procfs_read(struct seq_file *s, void* v) ++{ ++ struct dvblb_devinfo *lbdev = s->private; ++ int val; ++ if (lbdev == NULL) ++ return 0; ++ val = (lbdev->forward_dev) ? 1 : 0; ++ seq_printf(s, "%03d", val); ++ return 0; ++} ++/* + static int dvblb_procfs_write(struct file *file, const char *buffer, + unsigned long count, void *data) + { +@@ -95,7 +108,64 @@ static int dvblb_procfs_write(struct file *file, const char *buffer, + } + return count; + } +- ++*/ ++static ssize_t dvblb_procfs_write(struct file *file, const char *buffer, ++ size_t count, loff_t *pos) ++{ ++ // TODO: maybe update *pos at end??? ++ char str[10]; ++ int val, v1, v2, v3, fm; ++ //struct dvblb_devinfo *lbdev = (struct dvblb_devinfo *)data; ++ struct seq_file *s = file->private_data; ++ struct dvblb_devinfo* lbdev = s->private; ++ if (lbdev == NULL) ++ return count; ++ if (lbdev->parent->link == -1) ++ return count; ++ if (count > 10) ++ count = 10; ++ if (copy_from_user(str, buffer, count)) { ++ return -EFAULT; ++ } ++ val = simple_strtoul(str, NULL, 0); ++ v1 = val /100; ++ v2 = (val - v1*100) / 10; ++ v3 = val - v1*100 - v2*10; ++ if (v1 < 0 || v1 > 2) ++ return -EFAULT; ++ if((fm = inuse_filemap(lbdev))) { ++ int type = lbdev->lb_dev->type; ++ printk("dvbloopback: Can't change forward on adapter%d." ++ " Device %s still has %d users!\n", ++ lbdev->parent->adapter.num, dnames[type], fm); ++ return count; ++ } ++ if (v3 == 1) { ++ struct list_head *entry; ++ list_for_each (entry, lbdev->parent->adapter_ll) { ++ struct dvb_adapter *adap; ++ adap = list_entry (entry, struct dvb_adapter, ++ list_head); ++ if (adap->num == lbdev->parent->link) { ++ struct list_head *entry0; ++ list_for_each (entry0, ++ &adap->device_list) { ++ struct dvb_device *dev; ++ dev = list_entry (entry0, ++ struct dvb_device, list_head); ++ if (dev->type == lbdev->lb_dev->type) { ++ lbdev->forward_dev = dev; ++ return count; ++ } ++ } ++ } ++ } ++ } else if (v3 == 0) { ++ lbdev->forward_dev = NULL; ++ } ++ return count; ++} ++/* + static int dvblb_procfs_adapter_read(char *page, char **start, off_t off, + int count, int *eof, void *data) + { +@@ -104,7 +174,16 @@ static int dvblb_procfs_adapter_read(char *page, char **start, off_t off, + return 0; + return sprintf(page, "%d", dvblb->link); + } +- ++*/ ++static int dvblb_procfs_adapter_read(struct seq_file *s, void* v) ++{ ++ struct dvblb *dvblb = s->private; ++ if (dvblb == NULL) ++ return 0; ++ seq_printf(s, "%d", dvblb->link); ++ return 0; ++} ++/* + static int dvblb_procfs_adapter_write(struct file *file, const char *buffer, + unsigned long count, void *data) + { +@@ -121,6 +200,54 @@ static int dvblb_procfs_adapter_write(struct file *file, const char *buffer, + val = simple_strtol(str, NULL, 0); + + if(val == -999) { ++ //This is a debug case. Try to force close all open fds ++ //This is known not to be very reliable, but better than ++ //nothing ++ ++ for(i = 0; i < DVBLB_NUM_DEVS; i++) { ++ while((fm = inuse_filemap(&dvbdev->devinfo[i]))) { ++ filp_close(dvbdev->devinfo[i].dbgfilemap[fm], ++ NULL); ++ dvbdev->devinfo[i].filemap[fm] = NULL; ++ } ++ } ++ return count; ++ } ++ for(i = 0; i < DVBLB_NUM_DEVS; i++) { ++ if(dvbdev->devinfo[i].forward_dev == NULL) ++ continue; ++ if((fm = inuse_filemap(&dvbdev->devinfo[i]))) { ++ int type = dvbdev->devinfo[i].lb_dev->type; ++ printk("dvbloopback: Can't change forward on adapter%d." ++ " Device %s still has %d users!\n", ++ dvbdev->adapter.num, dnames[type], fm); ++ return count; ++ } ++ } ++ for(i = 0; i < DVBLB_NUM_DEVS; i++) ++ dvbdev->devinfo[i].forward_dev = NULL; ++ dvbdev->link = val; ++ return count; ++} ++*/ ++static ssize_t dvblb_procfs_adapter_write(struct file *file, const char *buffer, ++ size_t count, loff_t *pos) ++{ ++ // TODO: maybe update *pos at end??? ++ char str[10]; ++ int val, i, fm; ++ struct seq_file *s = file->private_data; ++ struct dvblb* dvbdev = s->private; ++ if (dvbdev == NULL) ++ return count; ++ if (count > 10) ++ count = 10; ++ if (copy_from_user(str, buffer, count)) { ++ return -EFAULT; ++ } ++ val = simple_strtol(str, NULL, 0); ++ ++ if(val == -999) { + /*This is a debug case. Try to force close all open fds + This is known not to be very reliable, but better than + nothing +@@ -154,31 +281,47 @@ static int dvblb_procfs_adapter_write(struct file *file, const char *buffer, + int dvblb_remove_procfs(struct proc_dir_entry *pdir, + struct proc_dir_entry *parent) + { +- char name[20]; +- memcpy(name, pdir->name, pdir->namelen); +- name[pdir->namelen] = '\0'; +- // printk("Removing proc: %s\n", name); +- remove_proc_entry(name, parent); ++ proc_remove(pdir); + return 0; + } + EXPORT_SYMBOL(dvblb_remove_procfs); + ++static int dvblb_procfs_open(struct inode *inode, struct file *filep) ++{ ++ return single_open(filep, dvblb_procfs_read, PDE_DATA(inode)); ++} ++ ++static const struct file_operations dvblb_procfs_fops = { ++ .owner = THIS_MODULE, ++ .open = dvblb_procfs_open, ++ .read = seq_read, ++ .write = dvblb_procfs_write, ++ .release = single_release, ++}; ++ + int dvblb_init_procfs_device(struct dvblb *dvblb, struct dvblb_devinfo *lbdev) + { +- int type = lbdev->lb_dev->type; +- lbdev->procfile = create_proc_entry(dnames[type], 0644, dvblb->procdir); +- if (lbdev->procfile == NULL) +- return -ENOMEM; +- lbdev->procfile->data = lbdev; +- lbdev->procfile->read_proc = dvblb_procfs_read; +- lbdev->procfile->write_proc = dvblb_procfs_write; +-#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,31) +- lbdev->procfile->owner = THIS_MODULE; +-#endif +- return 0; ++ int type = lbdev->lb_dev->type; ++ lbdev->procfile = proc_create_data(dnames[type], 0644, dvblb->procdir, &dvblb_procfs_fops, lbdev); ++ if (lbdev->procfile == NULL) ++ return -ENOMEM; ++ return 0; + } + EXPORT_SYMBOL(dvblb_init_procfs_device); + ++static int dvblb_procfs_adapter_open(struct inode *inode, struct file *filep) ++{ ++ return single_open(filep, dvblb_procfs_adapter_read, PDE_DATA(inode)); ++} ++ ++static const struct file_operations dvblb_procfs_adapter_fops = { ++ .owner = THIS_MODULE, ++ .open = dvblb_procfs_adapter_open, ++ .read = seq_read, ++ .write = dvblb_procfs_adapter_write, ++ .release = single_release, ++}; ++ + int dvblb_init_procfs_adapter(struct dvblb *dvblb) + { + char name[10]; +@@ -186,20 +329,12 @@ int dvblb_init_procfs_adapter(struct dvblb *dvblb) + dvblb->procdir = proc_mkdir(name, procdir); + if (dvblb->procdir == NULL) + return -ENOMEM; +-#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,31) +- dvblb->procdir->owner = THIS_MODULE; +-#endif +- dvblb->procfile = create_proc_entry("adapter", 0644, dvblb->procdir); ++ //dvblb->procfile = create_proc_entry("adapter", 0644, dvblb->procdir); ++ dvblb->procfile = proc_create_data("adapter", 0644, dvblb->procdir, &dvblb_procfs_adapter_fops, dvblb); + if (dvblb->procfile == NULL) { + dvblb_remove_procfs(dvblb->procdir, procdir); + return -ENOMEM; + } +- dvblb->procfile->data = dvblb; +- dvblb->procfile->read_proc = dvblb_procfs_adapter_read; +- dvblb->procfile->write_proc = dvblb_procfs_adapter_write; +-#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,31) +- dvblb->procfile->owner = THIS_MODULE; +-#endif + dvblb->init |= DVBLB_STATUS_PROC; + + return 0; diff --git a/debian/rules b/debian/rules index 954e407..b91e5bb 100755 --- a/debian/rules +++ b/debian/rules @@ -68,12 +68,12 @@ build_kernel_%: VERSION="$*"; \ KERNEL=$${VERSION#*_}; \ SHORT_KERNEL=$$( echo $${KERNEL} | grep -o '[[:digit:]]\+\.[[:digit:]]\+' ); \ - KERNEL_TARBALL=/usr/src/linux-source-$${SHORT_KERNEL}.tar.bz2; \ + KERNEL_TARBALL=/usr/src/linux-source-$${SHORT_KERNEL}.tar.xz; \ BUILD_DIR=/lib/modules/$${KERNEL}/build; \ echo "Building patched dvb-core module for kernel $${KERNEL}"; \ tmpdir=$(CURDIR)/debian/tmp-$${SHORT_KERNEL}; \ mkdir -p $$tmpdir; \ - tar xjf $${KERNEL_TARBALL} -C $${tmpdir} --strip-components 4 linux-source-$${SHORT_KERNEL}/drivers/media/dvb-core/; \ + tar xJf $${KERNEL_TARBALL} -C $${tmpdir} --strip-components 4 linux-source-$${SHORT_KERNEL}/drivers/media/dvb-core/; \ patch -p4 -d $${tmpdir} < $(CURDIR)/debian/linux-3.7.1-dvb-mutex.patch; \ make -C $${BUILD_DIR} M=$${tmpdir} modules; \ mkdir -p $(CURDIR)/debian/tmp/$$KERNEL/module-updates; \ diff --git a/debian/rules.defs b/debian/rules.defs index 595d0d3..bd4a10e 100644 --- a/debian/rules.defs +++ b/debian/rules.defs @@ -1,5 +1,5 @@ -KERNELS = 3.8-trunk-amd64 -KERNEL_VERSION_3.8-trunk-amd64 = 3.8.5-1~experimental.1 +KERNELS = 3.10-2-amd64 +KERNEL_VERSION_3.10-2-amd64 = 3.10.7-1 FFDECSA_FLAVORS = core2 athlon64 atom corei5