diff options
author | Nicolás Reynolds <apoyosis@correo.inta.gob.ar> | 2012-05-06 15:22:29 -0300 |
---|---|---|
committer | Nicolás Reynolds <apoyosis@correo.inta.gob.ar> | 2012-05-06 15:22:29 -0300 |
commit | d48da3adb2e5eaab66403aa3f0fce2d78f3ecd12 (patch) | |
tree | 5ee819230850950842e1fb61d7ca156eef7d8fd4 | |
parent | 43aea814a4cda71f48a3fd7c3b7cb2d6318e043a (diff) | |
parent | 7033c58cfeb084f26e1a9b9aa90e45ebc8a739a0 (diff) | |
download | abslibre-d48da3adb2e5eaab66403aa3f0fce2d78f3ecd12.tar.gz abslibre-d48da3adb2e5eaab66403aa3f0fce2d78f3ecd12.tar.bz2 abslibre-d48da3adb2e5eaab66403aa3f0fce2d78f3ecd12.zip |
Merge branch 'master' of ssh://gparabola/srv/git/abslibre
27 files changed, 293 insertions, 2070 deletions
diff --git a/kernels/linux-libre-aufs_friendly/CVE-2012-0056.patch b/kernels/linux-libre-aufs_friendly/CVE-2012-0056.patch deleted file mode 100644 index 6a83fef1c..000000000 --- a/kernels/linux-libre-aufs_friendly/CVE-2012-0056.patch +++ /dev/null @@ -1,268 +0,0 @@ -From e268337dfe26dfc7efd422a804dbb27977a3cccc Mon Sep 17 00:00:00 2001 -From: Linus Torvalds <torvalds@linux-foundation.org> -Date: Tue, 17 Jan 2012 15:21:19 -0800 -Subject: [PATCH] proc: clean up and fix /proc/<pid>/mem handling -MIME-Version: 1.0 -Content-Type: text/plain; charset=utf8 -Content-Transfer-Encoding: 8bit - -Jüri Aedla reported that the /proc/<pid>/mem handling really isn't very -robust, and it also doesn't match the permission checking of any of the -other related files. - -This changes it to do the permission checks at open time, and instead of -tracking the process, it tracks the VM at the time of the open. That -simplifies the code a lot, but does mean that if you hold the file -descriptor open over an execve(), you'll continue to read from the _old_ -VM. - -That is different from our previous behavior, but much simpler. If -somebody actually finds a load where this matters, we'll need to revert -this commit. - -I suspect that nobody will ever notice - because the process mapping -addresses will also have changed as part of the execve. So you cannot -actually usefully access the fd across a VM change simply because all -the offsets for IO would have changed too. - -Reported-by: Jüri Aedla <asd@ut.ee> -Cc: Al Viro <viro@zeniv.linux.org.uk> -Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> ---- - fs/proc/base.c | 145 +++++++++++++++----------------------------------------- - 1 files changed, 39 insertions(+), 106 deletions(-) - -diff --git a/fs/proc/base.c b/fs/proc/base.c -index 5485a53..662ddf2 100644 ---- a/fs/proc/base.c -+++ b/fs/proc/base.c -@@ -198,65 +198,7 @@ static int proc_root_link(struct dentry *dentry, struct path *path) - return result; - } - --static struct mm_struct *__check_mem_permission(struct task_struct *task) --{ -- struct mm_struct *mm; -- -- mm = get_task_mm(task); -- if (!mm) -- return ERR_PTR(-EINVAL); -- -- /* -- * A task can always look at itself, in case it chooses -- * to use system calls instead of load instructions. -- */ -- if (task == current) -- return mm; -- -- /* -- * If current is actively ptrace'ing, and would also be -- * permitted to freshly attach with ptrace now, permit it. -- */ -- if (task_is_stopped_or_traced(task)) { -- int match; -- rcu_read_lock(); -- match = (ptrace_parent(task) == current); -- rcu_read_unlock(); -- if (match && ptrace_may_access(task, PTRACE_MODE_ATTACH)) -- return mm; -- } -- -- /* -- * No one else is allowed. -- */ -- mmput(mm); -- return ERR_PTR(-EPERM); --} -- --/* -- * If current may access user memory in @task return a reference to the -- * corresponding mm, otherwise ERR_PTR. -- */ --static struct mm_struct *check_mem_permission(struct task_struct *task) --{ -- struct mm_struct *mm; -- int err; -- -- /* -- * Avoid racing if task exec's as we might get a new mm but validate -- * against old credentials. -- */ -- err = mutex_lock_killable(&task->signal->cred_guard_mutex); -- if (err) -- return ERR_PTR(err); -- -- mm = __check_mem_permission(task); -- mutex_unlock(&task->signal->cred_guard_mutex); -- -- return mm; --} -- --struct mm_struct *mm_for_maps(struct task_struct *task) -+static struct mm_struct *mm_access(struct task_struct *task, unsigned int mode) - { - struct mm_struct *mm; - int err; -@@ -267,7 +209,7 @@ struct mm_struct *mm_for_maps(struct task_struct *task) - - mm = get_task_mm(task); - if (mm && mm != current->mm && -- !ptrace_may_access(task, PTRACE_MODE_READ)) { -+ !ptrace_may_access(task, mode)) { - mmput(mm); - mm = ERR_PTR(-EACCES); - } -@@ -276,6 +218,11 @@ struct mm_struct *mm_for_maps(struct task_struct *task) - return mm; - } - -+struct mm_struct *mm_for_maps(struct task_struct *task) -+{ -+ return mm_access(task, PTRACE_MODE_READ); -+} -+ - static int proc_pid_cmdline(struct task_struct *task, char * buffer) - { - int res = 0; -@@ -752,38 +699,39 @@ static const struct file_operations proc_single_file_operations = { - - static int mem_open(struct inode* inode, struct file* file) - { -- file->private_data = (void*)((long)current->self_exec_id); -+ struct task_struct *task = get_proc_task(file->f_path.dentry->d_inode); -+ struct mm_struct *mm; -+ -+ if (!task) -+ return -ESRCH; -+ -+ mm = mm_access(task, PTRACE_MODE_ATTACH); -+ put_task_struct(task); -+ -+ if (IS_ERR(mm)) -+ return PTR_ERR(mm); -+ - /* OK to pass negative loff_t, we can catch out-of-range */ - file->f_mode |= FMODE_UNSIGNED_OFFSET; -+ file->private_data = mm; -+ - return 0; - } - - static ssize_t mem_read(struct file * file, char __user * buf, - size_t count, loff_t *ppos) - { -- struct task_struct *task = get_proc_task(file->f_path.dentry->d_inode); -+ int ret; - char *page; - unsigned long src = *ppos; -- int ret = -ESRCH; -- struct mm_struct *mm; -+ struct mm_struct *mm = file->private_data; - -- if (!task) -- goto out_no_task; -+ if (!mm) -+ return 0; - -- ret = -ENOMEM; - page = (char *)__get_free_page(GFP_TEMPORARY); - if (!page) -- goto out; -- -- mm = check_mem_permission(task); -- ret = PTR_ERR(mm); -- if (IS_ERR(mm)) -- goto out_free; -- -- ret = -EIO; -- -- if (file->private_data != (void*)((long)current->self_exec_id)) -- goto out_put; -+ return -ENOMEM; - - ret = 0; - -@@ -810,13 +758,7 @@ static ssize_t mem_read(struct file * file, char __user * buf, - } - *ppos = src; - --out_put: -- mmput(mm); --out_free: - free_page((unsigned long) page); --out: -- put_task_struct(task); --out_no_task: - return ret; - } - -@@ -825,27 +767,15 @@ static ssize_t mem_write(struct file * file, const char __user *buf, - { - int copied; - char *page; -- struct task_struct *task = get_proc_task(file->f_path.dentry->d_inode); - unsigned long dst = *ppos; -- struct mm_struct *mm; -+ struct mm_struct *mm = file->private_data; - -- copied = -ESRCH; -- if (!task) -- goto out_no_task; -+ if (!mm) -+ return 0; - -- copied = -ENOMEM; - page = (char *)__get_free_page(GFP_TEMPORARY); - if (!page) -- goto out_task; -- -- mm = check_mem_permission(task); -- copied = PTR_ERR(mm); -- if (IS_ERR(mm)) -- goto out_free; -- -- copied = -EIO; -- if (file->private_data != (void *)((long)current->self_exec_id)) -- goto out_mm; -+ return -ENOMEM; - - copied = 0; - while (count > 0) { -@@ -869,13 +799,7 @@ static ssize_t mem_write(struct file * file, const char __user *buf, - } - *ppos = dst; - --out_mm: -- mmput(mm); --out_free: - free_page((unsigned long) page); --out_task: -- put_task_struct(task); --out_no_task: - return copied; - } - -@@ -895,11 +819,20 @@ loff_t mem_lseek(struct file *file, loff_t offset, int orig) - return file->f_pos; - } - -+static int mem_release(struct inode *inode, struct file *file) -+{ -+ struct mm_struct *mm = file->private_data; -+ -+ mmput(mm); -+ return 0; -+} -+ - static const struct file_operations proc_mem_operations = { - .llseek = mem_lseek, - .read = mem_read, - .write = mem_write, - .open = mem_open, -+ .release = mem_release, - }; - - static ssize_t environ_read(struct file *file, char __user *buf, --- -1.7.6.5 - diff --git a/kernels/linux-libre-aufs_friendly/dib0700-fix.patch b/kernels/linux-libre-aufs_friendly/dib0700-fix.patch deleted file mode 100644 index 48f07e6fd..000000000 --- a/kernels/linux-libre-aufs_friendly/dib0700-fix.patch +++ /dev/null @@ -1,1487 +0,0 @@ -commit 198c545cd7306dc90aaae1d61e64175e70a70dc8 -Author: Patrick Boettcher <Patrick.Boettcher@dibcom.fr> -Date: Wed Aug 3 17:08:21 2011 +0200 - - [media] DiBcom: protect the I2C bufer access - - This patch protect the I2C buffer access in order to manage concurrent - access. This protection is done using mutex. - Furthermore, for the dib9000, if a pid filtering command is - received during the tuning, this pid filtering command is delayed to - avoid any concurrent access issue. - - Cc: Mauro Carvalho Chehab <mchehab@redhat.com> - Cc: Florian Mickler <florian@mickler.org> - Cc: stable@kernel.org - - Signed-off-by: Olivier Grenie <olivier.grenie@dibcom.fr> - Signed-off-by: Patrick Boettcher <Patrick.Boettcher@dibcom.fr> - -diff --git a/drivers/media/dvb/frontends/dib0070.c b/drivers/media/dvb/frontends/dib0070.c -index 1d47d4d..dc1cb17 100644 ---- a/drivers/media/dvb/frontends/dib0070.c -+++ b/drivers/media/dvb/frontends/dib0070.c -@@ -27,6 +27,7 @@ - #include <linux/kernel.h> - #include <linux/slab.h> - #include <linux/i2c.h> -+#include <linux/mutex.h> - - #include "dvb_frontend.h" - -@@ -78,10 +79,18 @@ struct dib0070_state { - struct i2c_msg msg[2]; - u8 i2c_write_buffer[3]; - u8 i2c_read_buffer[2]; -+ struct mutex i2c_buffer_lock; - }; - --static uint16_t dib0070_read_reg(struct dib0070_state *state, u8 reg) -+static u16 dib0070_read_reg(struct dib0070_state *state, u8 reg) - { -+ u16 ret; -+ -+ if (mutex_lock_interruptible(&state->i2c_buffer_lock) < 0) { -+ dprintk("could not acquire lock"); -+ return 0; -+ } -+ - state->i2c_write_buffer[0] = reg; - - memset(state->msg, 0, 2 * sizeof(struct i2c_msg)); -@@ -96,13 +105,23 @@ static uint16_t dib0070_read_reg(struct dib0070_state *state, u8 reg) - - if (i2c_transfer(state->i2c, state->msg, 2) != 2) { - printk(KERN_WARNING "DiB0070 I2C read failed\n"); -- return 0; -- } -- return (state->i2c_read_buffer[0] << 8) | state->i2c_read_buffer[1]; -+ ret = 0; -+ } else -+ ret = (state->i2c_read_buffer[0] << 8) -+ | state->i2c_read_buffer[1]; -+ -+ mutex_unlock(&state->i2c_buffer_lock); -+ return ret; - } - - static int dib0070_write_reg(struct dib0070_state *state, u8 reg, u16 val) - { -+ int ret; -+ -+ if (mutex_lock_interruptible(&state->i2c_buffer_lock) < 0) { -+ dprintk("could not acquire lock"); -+ return -EINVAL; -+ } - state->i2c_write_buffer[0] = reg; - state->i2c_write_buffer[1] = val >> 8; - state->i2c_write_buffer[2] = val & 0xff; -@@ -115,9 +134,12 @@ static int dib0070_write_reg(struct dib0070_state *state, u8 reg, u16 val) - - if (i2c_transfer(state->i2c, state->msg, 1) != 1) { - printk(KERN_WARNING "DiB0070 I2C write failed\n"); -- return -EREMOTEIO; -- } -- return 0; -+ ret = -EREMOTEIO; -+ } else -+ ret = 0; -+ -+ mutex_unlock(&state->i2c_buffer_lock); -+ return ret; - } - - #define HARD_RESET(state) do { \ -@@ -734,6 +756,7 @@ struct dvb_frontend *dib0070_attach(struct dvb_frontend *fe, struct i2c_adapter - state->cfg = cfg; - state->i2c = i2c; - state->fe = fe; -+ mutex_init(&state->i2c_buffer_lock); - fe->tuner_priv = state; - - if (dib0070_reset(fe) != 0) -diff --git a/drivers/media/dvb/frontends/dib0090.c b/drivers/media/dvb/frontends/dib0090.c -index c9c935a..b174d1c 100644 ---- a/drivers/media/dvb/frontends/dib0090.c -+++ b/drivers/media/dvb/frontends/dib0090.c -@@ -27,6 +27,7 @@ - #include <linux/kernel.h> - #include <linux/slab.h> - #include <linux/i2c.h> -+#include <linux/mutex.h> - - #include "dvb_frontend.h" - -@@ -196,6 +197,7 @@ struct dib0090_state { - struct i2c_msg msg[2]; - u8 i2c_write_buffer[3]; - u8 i2c_read_buffer[2]; -+ struct mutex i2c_buffer_lock; - }; - - struct dib0090_fw_state { -@@ -208,10 +210,18 @@ struct dib0090_fw_state { - struct i2c_msg msg; - u8 i2c_write_buffer[2]; - u8 i2c_read_buffer[2]; -+ struct mutex i2c_buffer_lock; - }; - - static u16 dib0090_read_reg(struct dib0090_state *state, u8 reg) - { -+ u16 ret; -+ -+ if (mutex_lock_interruptible(&state->i2c_buffer_lock) < 0) { -+ dprintk("could not acquire lock"); -+ return 0; -+ } -+ - state->i2c_write_buffer[0] = reg; - - memset(state->msg, 0, 2 * sizeof(struct i2c_msg)); -@@ -226,14 +236,24 @@ static u16 dib0090_read_reg(struct dib0090_state *state, u8 reg) - - if (i2c_transfer(state->i2c, state->msg, 2) != 2) { - printk(KERN_WARNING "DiB0090 I2C read failed\n"); -- return 0; -- } -+ ret = 0; -+ } else -+ ret = (state->i2c_read_buffer[0] << 8) -+ | state->i2c_read_buffer[1]; - -- return (state->i2c_read_buffer[0] << 8) | state->i2c_read_buffer[1]; -+ mutex_unlock(&state->i2c_buffer_lock); -+ return ret; - } - - static int dib0090_write_reg(struct dib0090_state *state, u32 reg, u16 val) - { -+ int ret; -+ -+ if (mutex_lock_interruptible(&state->i2c_buffer_lock) < 0) { -+ dprintk("could not acquire lock"); -+ return -EINVAL; -+ } -+ - state->i2c_write_buffer[0] = reg & 0xff; - state->i2c_write_buffer[1] = val >> 8; - state->i2c_write_buffer[2] = val & 0xff; -@@ -246,13 +266,23 @@ static int dib0090_write_reg(struct dib0090_state *state, u32 reg, u16 val) - - if (i2c_transfer(state->i2c, state->msg, 1) != 1) { - printk(KERN_WARNING "DiB0090 I2C write failed\n"); -- return -EREMOTEIO; -- } -- return 0; -+ ret = -EREMOTEIO; -+ } else -+ ret = 0; -+ -+ mutex_unlock(&state->i2c_buffer_lock); -+ return ret; - } - - static u16 dib0090_fw_read_reg(struct dib0090_fw_state *state, u8 reg) - { -+ u16 ret; -+ -+ if (mutex_lock_interruptible(&state->i2c_buffer_lock) < 0) { -+ dprintk("could not acquire lock"); -+ return 0; -+ } -+ - state->i2c_write_buffer[0] = reg; - - memset(&state->msg, 0, sizeof(struct i2c_msg)); -@@ -262,13 +292,24 @@ static u16 dib0090_fw_read_reg(struct dib0090_fw_state *state, u8 reg) - state->msg.len = 2; - if (i2c_transfer(state->i2c, &state->msg, 1) != 1) { - printk(KERN_WARNING "DiB0090 I2C read failed\n"); -- return 0; -- } -- return (state->i2c_read_buffer[0] << 8) | state->i2c_read_buffer[1]; -+ ret = 0; -+ } else -+ ret = (state->i2c_read_buffer[0] << 8) -+ | state->i2c_read_buffer[1]; -+ -+ mutex_unlock(&state->i2c_buffer_lock); -+ return ret; - } - - static int dib0090_fw_write_reg(struct dib0090_fw_state *state, u8 reg, u16 val) - { -+ int ret; -+ -+ if (mutex_lock_interruptible(&state->i2c_buffer_lock) < 0) { -+ dprintk("could not acquire lock"); -+ return -EINVAL; -+ } -+ - state->i2c_write_buffer[0] = val >> 8; - state->i2c_write_buffer[1] = val & 0xff; - -@@ -279,9 +320,12 @@ static int dib0090_fw_write_reg(struct dib0090_fw_state *state, u8 reg, u16 val) - state->msg.len = 2; - if (i2c_transfer(state->i2c, &state->msg, 1) != 1) { - printk(KERN_WARNING "DiB0090 I2C write failed\n"); -- return -EREMOTEIO; -- } -- return 0; -+ ret = -EREMOTEIO; -+ } else -+ ret = 0; -+ -+ mutex_unlock(&state->i2c_buffer_lock); -+ return ret; - } - - #define HARD_RESET(state) do { if (cfg->reset) { if (cfg->sleep) cfg->sleep(fe, 0); msleep(10); cfg->reset(fe, 1); msleep(10); cfg->reset(fe, 0); msleep(10); } } while (0) -@@ -2440,6 +2484,7 @@ struct dvb_frontend *dib0090_register(struct dvb_frontend *fe, struct i2c_adapte - st->config = config; - st->i2c = i2c; - st->fe = fe; -+ mutex_init(&st->i2c_buffer_lock); - fe->tuner_priv = st; - - if (config->wbd == NULL) -@@ -2471,6 +2516,7 @@ struct dvb_frontend *dib0090_fw_register(struct dvb_frontend *fe, struct i2c_ada - st->config = config; - st->i2c = i2c; - st->fe = fe; -+ mutex_init(&st->i2c_buffer_lock); - fe->tuner_priv = st; - - if (dib0090_fw_reset_digital(fe, st->config) != 0) -diff --git a/drivers/media/dvb/frontends/dib7000m.c b/drivers/media/dvb/frontends/dib7000m.c -index 79cb1c2..dbb76d7 100644 ---- a/drivers/media/dvb/frontends/dib7000m.c -+++ b/drivers/media/dvb/frontends/dib7000m.c -@@ -11,6 +11,7 @@ - #include <linux/kernel.h> - #include <linux/slab.h> - #include <linux/i2c.h> -+#include <linux/mutex.h> - - #include "dvb_frontend.h" - -@@ -55,6 +56,7 @@ struct dib7000m_state { - struct i2c_msg msg[2]; - u8 i2c_write_buffer[4]; - u8 i2c_read_buffer[2]; -+ struct mutex i2c_buffer_lock; - }; - - enum dib7000m_power_mode { -@@ -69,6 +71,13 @@ enum dib7000m_power_mode { - - static u16 dib7000m_read_word(struct dib7000m_state *state, u16 reg) - { -+ u16 ret; -+ -+ if (mutex_lock_interruptible(&state->i2c_buffer_lock) < 0) { -+ dprintk("could not acquire lock"); -+ return 0; -+ } -+ - state->i2c_write_buffer[0] = (reg >> 8) | 0x80; - state->i2c_write_buffer[1] = reg & 0xff; - -@@ -85,11 +94,21 @@ static u16 dib7000m_read_word(struct dib7000m_state *state, u16 reg) - if (i2c_transfer(state->i2c_adap, state->msg, 2) != 2) - dprintk("i2c read error on %d",reg); - -- return (state->i2c_read_buffer[0] << 8) | state->i2c_read_buffer[1]; -+ ret = (state->i2c_read_buffer[0] << 8) | state->i2c_read_buffer[1]; -+ mutex_unlock(&state->i2c_buffer_lock); -+ -+ return ret; - } - - static int dib7000m_write_word(struct dib7000m_state *state, u16 reg, u16 val) - { -+ int ret; -+ -+ if (mutex_lock_interruptible(&state->i2c_buffer_lock) < 0) { -+ dprintk("could not acquire lock"); -+ return -EINVAL; -+ } -+ - state->i2c_write_buffer[0] = (reg >> 8) & 0xff; - state->i2c_write_buffer[1] = reg & 0xff; - state->i2c_write_buffer[2] = (val >> 8) & 0xff; -@@ -101,7 +120,10 @@ static int dib7000m_write_word(struct dib7000m_state *state, u16 reg, u16 val) - state->msg[0].buf = state->i2c_write_buffer; - state->msg[0].len = 4; - -- return i2c_transfer(state->i2c_adap, state->msg, 1) != 1 ? -EREMOTEIO : 0; -+ ret = (i2c_transfer(state->i2c_adap, state->msg, 1) != 1 ? -+ -EREMOTEIO : 0); -+ mutex_unlock(&state->i2c_buffer_lock); -+ return ret; - } - static void dib7000m_write_tab(struct dib7000m_state *state, u16 *buf) - { -@@ -1385,6 +1407,7 @@ struct dvb_frontend * dib7000m_attach(struct i2c_adapter *i2c_adap, u8 i2c_addr, - demod = &st->demod; - demod->demodulator_priv = st; - memcpy(&st->demod.ops, &dib7000m_ops, sizeof(struct dvb_frontend_ops)); -+ mutex_init(&st->i2c_buffer_lock); - - st->timf_default = cfg->bw->timf; - -diff --git a/drivers/media/dvb/frontends/dib7000p.c b/drivers/media/dvb/frontends/dib7000p.c -index 0c9f40c..292bc19 100644 ---- a/drivers/media/dvb/frontends/dib7000p.c -+++ b/drivers/media/dvb/frontends/dib7000p.c -@@ -10,6 +10,7 @@ - #include <linux/kernel.h> - #include <linux/slab.h> - #include <linux/i2c.h> -+#include <linux/mutex.h> - - #include "dvb_math.h" - #include "dvb_frontend.h" -@@ -68,6 +69,7 @@ struct dib7000p_state { - struct i2c_msg msg[2]; - u8 i2c_write_buffer[4]; - u8 i2c_read_buffer[2]; -+ struct mutex i2c_buffer_lock; - }; - - enum dib7000p_power_mode { -@@ -81,6 +83,13 @@ static int dib7090_set_diversity_in(struct dvb_frontend *fe, int onoff); - - static u16 dib7000p_read_word(struct dib7000p_state *state, u16 reg) - { -+ u16 ret; -+ -+ if (mutex_lock_interruptible(&state->i2c_buffer_lock) < 0) { -+ dprintk("could not acquire lock"); -+ return 0; -+ } -+ - state->i2c_write_buffer[0] = reg >> 8; - state->i2c_write_buffer[1] = reg & 0xff; - -@@ -97,11 +106,20 @@ static u16 dib7000p_read_word(struct dib7000p_state *state, u16 reg) - if (i2c_transfer(state->i2c_adap, state->msg, 2) != 2) - dprintk("i2c read error on %d", reg); - -- return (state->i2c_read_buffer[0] << 8) | state->i2c_read_buffer[1]; -+ ret = (state->i2c_read_buffer[0] << 8) | state->i2c_read_buffer[1]; -+ mutex_unlock(&state->i2c_buffer_lock); -+ return ret; - } - - static int dib7000p_write_word(struct dib7000p_state *state, u16 reg, u16 val) - { -+ int ret; -+ -+ if (mutex_lock_interruptible(&state->i2c_buffer_lock) < 0) { -+ dprintk("could not acquire lock"); -+ return -EINVAL; -+ } -+ - state->i2c_write_buffer[0] = (reg >> 8) & 0xff; - state->i2c_write_buffer[1] = reg & 0xff; - state->i2c_write_buffer[2] = (val >> 8) & 0xff; -@@ -113,7 +131,10 @@ static int dib7000p_write_word(struct dib7000p_state *state, u16 reg, u16 val) - state->msg[0].buf = state->i2c_write_buffer; - state->msg[0].len = 4; - -- return i2c_transfer(state->i2c_adap, state->msg, 1) != 1 ? -EREMOTEIO : 0; -+ ret = (i2c_transfer(state->i2c_adap, state->msg, 1) != 1 ? -+ -EREMOTEIO : 0); -+ mutex_unlock(&state->i2c_buffer_lock); -+ return ret; - } - - static void dib7000p_write_tab(struct dib7000p_state *state, u16 * buf) -@@ -1646,6 +1667,7 @@ int dib7000p_i2c_enumeration(struct i2c_adapter *i2c, int no_of_demods, u8 defau - return -ENOMEM; - - dpst->i2c_adap = i2c; -+ mutex_init(&dpst->i2c_buffer_lock); - - for (k = no_of_demods - 1; k >= 0; k--) { - dpst->cfg = cfg[k]; -@@ -2324,6 +2346,7 @@ struct dvb_frontend *dib7000p_attach(struct i2c_adapter *i2c_adap, u8 i2c_addr, - demod = &st->demod; - demod->demodulator_priv = st; - memcpy(&st->demod.ops, &dib7000p_ops, sizeof(struct dvb_frontend_ops)); -+ mutex_init(&st->i2c_buffer_lock); - - dib7000p_write_word(st, 1287, 0x0003); /* sram lead in, rdy */ - -@@ -2333,8 +2356,9 @@ struct dvb_frontend *dib7000p_attach(struct i2c_adapter *i2c_adap, u8 i2c_addr, - st->version = dib7000p_read_word(st, 897); - - /* FIXME: make sure the dev.parent field is initialized, or else -- request_firmware() will hit an OOPS (this should be moved somewhere -- more common) */ -+ request_firmware() will hit an OOPS (this should be moved somewhere -+ more common) */ -+ st->i2c_master.gated_tuner_i2c_adap.dev.parent = i2c_adap->dev.parent; - - dibx000_init_i2c_master(&st->i2c_master, DIB7000P, st->i2c_adap, st->i2c_addr); - -diff --git a/drivers/media/dvb/frontends/dib8000.c b/drivers/media/dvb/frontends/dib8000.c -index 7d2ea11..fe284d5 100644 ---- a/drivers/media/dvb/frontends/dib8000.c -+++ b/drivers/media/dvb/frontends/dib8000.c -@@ -10,6 +10,8 @@ - #include <linux/kernel.h> - #include <linux/slab.h> - #include <linux/i2c.h> -+#include <linux/mutex.h> -+ - #include "dvb_math.h" - - #include "dvb_frontend.h" -@@ -37,6 +39,7 @@ struct i2c_device { - u8 addr; - u8 *i2c_write_buffer; - u8 *i2c_read_buffer; -+ struct mutex *i2c_buffer_lock; - }; - - struct dib8000_state { -@@ -77,6 +80,7 @@ struct dib8000_state { - struct i2c_msg msg[2]; - u8 i2c_write_buffer[4]; - u8 i2c_read_buffer[2]; -+ struct mutex i2c_buffer_lock; - }; - - enum dib8000_power_mode { -@@ -86,24 +90,39 @@ enum dib8000_power_mode { - - static u16 dib8000_i2c_read16(struct i2c_device *i2c, u16 reg) - { -+ u16 ret; - struct i2c_msg msg[2] = { -- {.addr = i2c->addr >> 1, .flags = 0, -- .buf = i2c->i2c_write_buffer, .len = 2}, -- {.addr = i2c->addr >> 1, .flags = I2C_M_RD, -- .buf = i2c->i2c_read_buffer, .len = 2}, -+ {.addr = i2c->addr >> 1, .flags = 0, .len = 2}, -+ {.addr = i2c->addr >> 1, .flags = I2C_M_RD, .len = 2}, - }; - -+ if (mutex_lock_interruptible(i2c->i2c_buffer_lock) < 0) { -+ dprintk("could not acquire lock"); -+ return 0; -+ } -+ -+ msg[0].buf = i2c->i2c_write_buffer; - msg[0].buf[0] = reg >> 8; - msg[0].buf[1] = reg & 0xff; -+ msg[1].buf = i2c->i2c_read_buffer; - - if (i2c_transfer(i2c->adap, msg, 2) != 2) - dprintk("i2c read error on %d", reg); - -- return (msg[1].buf[0] << 8) | msg[1].buf[1]; -+ ret = (msg[1].buf[0] << 8) | msg[1].buf[1]; -+ mutex_unlock(i2c->i2c_buffer_lock); -+ return ret; - } - - static u16 dib8000_read_word(struct dib8000_state *state, u16 reg) - { -+ u16 ret; -+ -+ if (mutex_lock_interruptible(&state->i2c_buffer_lock) < 0) { -+ dprintk("could not acquire lock"); -+ return 0; -+ } -+ - state->i2c_write_buffer[0] = reg >> 8; - state->i2c_write_buffer[1] = reg & 0xff; - -@@ -120,7 +139,10 @@ static u16 dib8000_read_word(struct dib8000_state *state, u16 reg) - if (i2c_transfer(state->i2c.adap, state->msg, 2) != 2) - dprintk("i2c read error on %d", reg); - -- return (state->i2c_read_buffer[0] << 8) | state->i2c_read_buffer[1]; -+ ret = (state->i2c_read_buffer[0] << 8) | state->i2c_read_buffer[1]; -+ mutex_unlock(&state->i2c_buffer_lock); -+ -+ return ret; - } - - static u32 dib8000_read32(struct dib8000_state *state, u16 reg) -@@ -135,22 +157,35 @@ static u32 dib8000_read32(struct dib8000_state *state, u16 reg) - - static int dib8000_i2c_write16(struct i2c_device *i2c, u16 reg, u16 val) - { -- struct i2c_msg msg = {.addr = i2c->addr >> 1, .flags = 0, -- .buf = i2c->i2c_write_buffer, .len = 4}; -+ struct i2c_msg msg = {.addr = i2c->addr >> 1, .flags = 0, .len = 4}; - int ret = 0; - -+ if (mutex_lock_interruptible(i2c->i2c_buffer_lock) < 0) { -+ dprintk("could not acquire lock"); -+ return -EINVAL; -+ } -+ -+ msg.buf = i2c->i2c_write_buffer; - msg.buf[0] = (reg >> 8) & 0xff; - msg.buf[1] = reg & 0xff; - msg.buf[2] = (val >> 8) & 0xff; - msg.buf[3] = val & 0xff; - - ret = i2c_transfer(i2c->adap, &msg, 1) != 1 ? -EREMOTEIO : 0; -+ mutex_unlock(i2c->i2c_buffer_lock); - - return ret; - } - - static int dib8000_write_word(struct dib8000_state *state, u16 reg, u16 val) - { -+ int ret; -+ -+ if (mutex_lock_interruptible(&state->i2c_buffer_lock) < 0) { -+ dprintk("could not acquire lock"); -+ return -EINVAL; -+ } -+ - state->i2c_write_buffer[0] = (reg >> 8) & 0xff; - state->i2c_write_buffer[1] = reg & 0xff; - state->i2c_write_buffer[2] = (val >> 8) & 0xff; -@@ -162,7 +197,11 @@ static int dib8000_write_word(struct dib8000_state *state, u16 reg, u16 val) - state->msg[0].buf = state->i2c_write_buffer; - state->msg[0].len = 4; - -- return i2c_transfer(state->i2c.adap, state->msg, 1) != 1 ? -EREMOTEIO : 0; -+ ret = (i2c_transfer(state->i2c.adap, state->msg, 1) != 1 ? -+ -EREMOTEIO : 0); -+ mutex_unlock(&state->i2c_buffer_lock); -+ -+ return ret; - } - - static const s16 coeff_2k_sb_1seg_dqpsk[8] = { -@@ -2434,8 +2473,15 @@ int dib8000_i2c_enumeration(struct i2c_adapter *host, int no_of_demods, u8 defau - if (!client.i2c_read_buffer) { - dprintk("%s: not enough memory", __func__); - ret = -ENOMEM; -- goto error_memory; -+ goto error_memory_read; -+ } -+ client.i2c_buffer_lock = kzalloc(sizeof(struct mutex), GFP_KERNEL); -+ if (!client.i2c_buffer_lock) { -+ dprintk("%s: not enough memory", __func__); -+ ret = -ENOMEM; -+ goto error_memory_lock; - } -+ mutex_init(client.i2c_buffer_lock); - - for (k = no_of_demods - 1; k >= 0; k--) { - /* designated i2c address */ -@@ -2476,8 +2522,10 @@ int dib8000_i2c_enumeration(struct i2c_adapter *host, int no_of_demods, u8 defau - } - - error: -+ kfree(client.i2c_buffer_lock); -+error_memory_lock: - kfree(client.i2c_read_buffer); --error_memory: -+error_memory_read: - kfree(client.i2c_write_buffer); - - return ret; -@@ -2581,6 +2629,8 @@ struct dvb_frontend *dib8000_attach(struct i2c_adapter *i2c_adap, u8 i2c_addr, s - state->i2c.addr = i2c_addr; - state->i2c.i2c_write_buffer = state->i2c_write_buffer; - state->i2c.i2c_read_buffer = state->i2c_read_buffer; -+ mutex_init(&state->i2c_buffer_lock); -+ state->i2c.i2c_buffer_lock = &state->i2c_buffer_lock; - state->gpio_val = cfg->gpio_val; - state->gpio_dir = cfg->gpio_dir; - -diff --git a/drivers/media/dvb/frontends/dib9000.c b/drivers/media/dvb/frontends/dib9000.c -index a085588..b931074 100644 ---- a/drivers/media/dvb/frontends/dib9000.c -+++ b/drivers/media/dvb/frontends/dib9000.c -@@ -38,6 +38,15 @@ struct i2c_device { - #define DibInitLock(lock) mutex_init(lock) - #define DibFreeLock(lock) - -+struct dib9000_pid_ctrl { -+#define DIB9000_PID_FILTER_CTRL 0 -+#define DIB9000_PID_FILTER 1 -+ u8 cmd; -+ u8 id; -+ u16 pid; -+ u8 onoff; -+}; -+ - struct dib9000_state { - struct i2c_device i2c; - -@@ -99,6 +108,10 @@ struct dib9000_state { - struct i2c_msg msg[2]; - u8 i2c_write_buffer[255]; - u8 i2c_read_buffer[255]; -+ DIB_LOCK demod_lock; -+ u8 get_frontend_internal; -+ struct dib9000_pid_ctrl pid_ctrl[10]; -+ s8 pid_ctrl_index; /* -1: empty list; -2: do not use the list */ - }; - - static const u32 fe_info[44] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -@@ -1743,19 +1756,56 @@ EXPORT_SYMBOL(dib9000_set_gpio); - int dib9000_fw_pid_filter_ctrl(struct dvb_frontend *fe, u8 onoff) - { - struct dib9000_state *state = fe->demodulator_priv; -- u16 val = dib9000_read_word(state, 294 + 1) & 0xffef; -+ u16 val; -+ int ret; -+ -+ if ((state->pid_ctrl_index != -2) && (state->pid_ctrl_index < 9)) { -+ /* postpone the pid filtering cmd */ -+ dprintk("pid filter cmd postpone"); -+ state->pid_ctrl_index++; -+ state->pid_ctrl[state->pid_ctrl_index].cmd = DIB9000_PID_FILTER_CTRL; -+ state->pid_ctrl[state->pid_ctrl_index].onoff = onoff; -+ return 0; -+ } -+ -+ DibAcquireLock(&state->demod_lock); -+ -+ val = dib9000_read_word(state, 294 + 1) & 0xffef; - val |= (onoff & 0x1) << 4; - - dprintk("PID filter enabled %d", onoff); -- return dib9000_write_word(state, 294 + 1, val); -+ ret = dib9000_write_word(state, 294 + 1, val); -+ DibReleaseLock(&state->demod_lock); -+ return ret; -+ - } - EXPORT_SYMBOL(dib9000_fw_pid_filter_ctrl); - - int dib9000_fw_pid_filter(struct dvb_frontend *fe, u8 id, u16 pid, u8 onoff) - { - struct dib9000_state *state = fe->demodulator_priv; -+ int ret; -+ -+ if (state->pid_ctrl_index != -2) { -+ /* postpone the pid filtering cmd */ -+ dprintk("pid filter postpone"); -+ if (state->pid_ctrl_index < 9) { -+ state->pid_ctrl_index++; -+ state->pid_ctrl[state->pid_ctrl_index].cmd = DIB9000_PID_FILTER; -+ state->pid_ctrl[state->pid_ctrl_index].id = id; -+ state->pid_ctrl[state->pid_ctrl_index].pid = pid; -+ state->pid_ctrl[state->pid_ctrl_index].onoff = onoff; -+ } else -+ dprintk("can not add any more pid ctrl cmd"); -+ return 0; -+ } -+ -+ DibAcquireLock(&state->demod_lock); - dprintk("Index %x, PID %d, OnOff %d", id, pid, onoff); -- return dib9000_write_word(state, 300 + 1 + id, onoff ? (1 << 13) | pid : 0); -+ ret = dib9000_write_word(state, 300 + 1 + id, -+ onoff ? (1 << 13) | pid : 0); -+ DibReleaseLock(&state->demod_lock); -+ return ret; - } - EXPORT_SYMBOL(dib9000_fw_pid_filter); - -@@ -1778,6 +1828,7 @@ static void dib9000_release(struct dvb_frontend *demod) - DibFreeLock(&state->platform.risc.mbx_lock); - DibFreeLock(&state->platform.risc.mem_lock); - DibFreeLock(&state->platform.risc.mem_mbx_lock); -+ DibFreeLock(&state->demod_lock); - dibx000_exit_i2c_master(&st->i2c_master); - - i2c_del_adapter(&st->tuner_adap); -@@ -1795,14 +1846,19 @@ static int dib9000_sleep(struct dvb_frontend *fe) - { - struct dib9000_state *state = fe->demodulator_priv; - u8 index_frontend; -- int ret; -+ int ret = 0; - -+ DibAcquireLock(&state->demod_lock); - for (index_frontend = 1; (index_frontend < MAX_NUMBER_OF_FRONTENDS) && (state->fe[index_frontend] != NULL); index_frontend++) { - ret = state->fe[index_frontend]->ops.sleep(state->fe[index_frontend]); - if (ret < 0) -- return ret; -+ goto error; - } -- return dib9000_mbx_send(state, OUT_MSG_FE_SLEEP, NULL, 0); -+ ret = dib9000_mbx_send(state, OUT_MSG_FE_SLEEP, NULL, 0); -+ -+error: -+ DibReleaseLock(&state->demod_lock); -+ return ret; - } - - static int dib9000_fe_get_tune_settings(struct dvb_frontend *fe, struct dvb_frontend_tune_settings *tune) -@@ -1816,7 +1872,10 @@ static int dib9000_get_frontend(struct dvb_frontend *fe, struct dvb_frontend_par - struct dib9000_state *state = fe->demodulator_priv; - u8 index_frontend, sub_index_frontend; - fe_status_t stat; -- int ret; -+ int ret = 0; -+ -+ if (state->get_frontend_internal == 0) -+ DibAcquireLock(&state->demod_lock); - - for (index_frontend = 1; (index_frontend < MAX_NUMBER_OF_FRONTENDS) && (state->fe[index_frontend] != NULL); index_frontend++) { - state->fe[index_frontend]->ops.read_status(state->fe[index_frontend], &stat); -@@ -1846,14 +1905,15 @@ static int dib9000_get_frontend(struct dvb_frontend *fe, struct dvb_frontend_par - state->fe[index_frontend]->dtv_property_cache.rolloff; - } - } -- return 0; -+ ret = 0; -+ goto return_value; - } - } - - /* get the channel from master chip */ - ret = dib9000_fw_get_channel(fe, fep); - if (ret != 0) -- return ret; -+ goto return_value; - - /* synchronize the cache with the other frontends */ - for (index_frontend = 1; (index_frontend < MAX_NUMBER_OF_FRONTENDS) && (state->fe[index_frontend] != NULL); index_frontend++) { -@@ -1866,8 +1926,12 @@ static int dib9000_get_frontend(struct dvb_frontend *fe, struct dvb_frontend_par - state->fe[index_frontend]->dtv_property_cache.code_rate_LP = fe->dtv_property_cache.code_rate_LP; - state->fe[index_frontend]->dtv_property_cache.rolloff = fe->dtv_property_cache.rolloff; - } -+ ret = 0; - -- return 0; -+return_value: -+ if (state->get_frontend_internal == 0) -+ DibReleaseLock(&state->demod_lock); -+ return ret; - } - - static int dib9000_set_tune_state(struct dvb_frontend *fe, enum frontend_tune_state tune_state) -@@ -1912,6 +1976,10 @@ static int dib9000_set_frontend(struct dvb_frontend *fe, struct dvb_frontend_par - dprintk("dib9000: must specify bandwidth "); - return 0; - } -+ -+ state->pid_ctrl_index = -1; /* postpone the pid filtering cmd */ -+ DibAcquireLock(&state->demod_lock); -+ - fe->dtv_property_cache.delivery_system = SYS_DVBT; - - /* set the master status */ -@@ -1974,13 +2042,18 @@ static int dib9000_set_frontend(struct dvb_frontend *fe, struct dvb_frontend_par - /* check the tune result */ - if (exit_condition == 1) { /* tune failed */ - dprintk("tune failed"); -+ DibReleaseLock(&state->demod_lock); -+ /* tune failed; put all the pid filtering cmd to junk */ -+ state->pid_ctrl_index = -1; - return 0; - } - - dprintk("tune success on frontend%i", index_frontend_success); - - /* synchronize all the channel cache */ -+ state->get_frontend_internal = 1; - dib9000_get_frontend(state->fe[0], fep); -+ state->get_frontend_internal = 0; - - /* retune the other frontends with the found channel */ - channel_status.status = CHANNEL_STATUS_PARAMETERS_SET; -@@ -2025,6 +2098,28 @@ static int dib9000_set_frontend(struct dvb_frontend *fe, struct dvb_frontend_par - /* turn off the diversity for the last frontend */ - dib9000_fw_set_diversity_in(state->fe[index_frontend - 1], 0); - -+ DibReleaseLock(&state->demod_lock); -+ if (state->pid_ctrl_index >= 0) { -+ u8 index_pid_filter_cmd; -+ u8 pid_ctrl_index = state->pid_ctrl_index; -+ -+ state->pid_ctrl_index = -2; -+ for (index_pid_filter_cmd = 0; -+ index_pid_filter_cmd <= pid_ctrl_index; -+ index_pid_filter_cmd++) { -+ if (state->pid_ctrl[index_pid_filter_cmd].cmd == DIB9000_PID_FILTER_CTRL) -+ dib9000_fw_pid_filter_ctrl(state->fe[0], -+ state->pid_ctrl[index_pid_filter_cmd].onoff); -+ else if (state->pid_ctrl[index_pid_filter_cmd].cmd == DIB9000_PID_FILTER) -+ dib9000_fw_pid_filter(state->fe[0], -+ state->pid_ctrl[index_pid_filter_cmd].id, -+ state->pid_ctrl[index_pid_filter_cmd].pid, -+ state->pid_ctrl[index_pid_filter_cmd].onoff); -+ } -+ } -+ /* do not postpone any more the pid filtering */ -+ state->pid_ctrl_index = -2; -+ - return 0; - } - -@@ -2041,6 +2136,7 @@ static int dib9000_read_status(struct dvb_frontend *fe, fe_status_t * stat) - u8 index_frontend; - u16 lock = 0, lock_slave = 0; - -+ DibAcquireLock(&state->demod_lock); - for (index_frontend = 1; (index_frontend < MAX_NUMBER_OF_FRONTENDS) && (state->fe[index_frontend] != NULL); index_frontend++) - lock_slave |= dib9000_read_lock(state->fe[index_frontend]); - -@@ -2059,6 +2155,8 @@ static int dib9000_read_status(struct dvb_frontend *fe, fe_status_t * stat) - if ((lock & 0x0008) || (lock_slave & 0x0008)) - *stat |= FE_HAS_LOCK; - -+ DibReleaseLock(&state->demod_lock); -+ - return 0; - } - -@@ -2066,10 +2164,14 @@ static int dib9000_read_ber(struct dvb_frontend *fe, u32 * ber) - { - struct dib9000_state *state = fe->demodulator_priv; - u16 *c; -+ int ret = 0; - -+ DibAcquireLock(&state->demod_lock); - DibAcquireLock(&state->platform.risc.mem_mbx_lock); -- if (dib9000_fw_memmbx_sync(state, FE_SYNC_CHANNEL) < 0) -- return -EIO; -+ if (dib9000_fw_memmbx_sync(state, FE_SYNC_CHANNEL) < 0) { -+ ret = -EIO; -+ goto error; -+ } - dib9000_risc_mem_read(state, FE_MM_R_FE_MONITOR, - state->i2c_read_buffer, 16 * 2); - DibReleaseLock(&state->platform.risc.mem_mbx_lock); -@@ -2077,7 +2179,10 @@ static int dib9000_read_ber(struct dvb_frontend *fe, u32 * ber) - c = (u16 *)state->i2c_read_buffer; - - *ber = c[10] << 16 | c[11]; -- return 0; -+ -+error: -+ DibReleaseLock(&state->demod_lock); -+ return ret; - } - - static int dib9000_read_signal_strength(struct dvb_frontend *fe, u16 * strength) -@@ -2086,7 +2191,9 @@ static int dib9000_read_signal_strength(struct dvb_frontend *fe, u16 * strength) - u8 index_frontend; - u16 *c = (u16 *)state->i2c_read_buffer; - u16 val; -+ int ret = 0; - -+ DibAcquireLock(&state->demod_lock); - *strength = 0; - for (index_frontend = 1; (index_frontend < MAX_NUMBER_OF_FRONTENDS) && (state->fe[index_frontend] != NULL); index_frontend++) { - state->fe[index_frontend]->ops.read_signal_strength(state->fe[index_frontend], &val); -@@ -2097,8 +2204,10 @@ static int dib9000_read_signal_strength(struct dvb_frontend *fe, u16 * strength) - } - - DibAcquireLock(&state->platform.risc.mem_mbx_lock); -- if (dib9000_fw_memmbx_sync(state, FE_SYNC_CHANNEL) < 0) -- return -EIO; -+ if (dib9000_fw_memmbx_sync(state, FE_SYNC_CHANNEL) < 0) { -+ ret = -EIO; -+ goto error; -+ } - dib9000_risc_mem_read(state, FE_MM_R_FE_MONITOR, (u8 *) c, 16 * 2); - DibReleaseLock(&state->platform.risc.mem_mbx_lock); - -@@ -2107,7 +2216,10 @@ static int dib9000_read_signal_strength(struct dvb_frontend *fe, u16 * strength) - *strength = 65535; - else - *strength += val; -- return 0; -+ -+error: -+ DibReleaseLock(&state->demod_lock); -+ return ret; - } - - static u32 dib9000_get_snr(struct dvb_frontend *fe) -@@ -2151,6 +2263,7 @@ static int dib9000_read_snr(struct dvb_frontend *fe, u16 * snr) - u8 index_frontend; - u32 snr_master; - -+ DibAcquireLock(&state->demod_lock); - snr_master = dib9000_get_snr(fe); - for (index_frontend = 1; (index_frontend < MAX_NUMBER_OF_FRONTENDS) && (state->fe[index_frontend] != NULL); index_frontend++) - snr_master += dib9000_get_snr(state->fe[index_frontend]); -@@ -2161,6 +2274,8 @@ static int dib9000_read_snr(struct dvb_frontend *fe, u16 * snr) - } else - *snr = 0; - -+ DibReleaseLock(&state->demod_lock); -+ - return 0; - } - -@@ -2168,15 +2283,22 @@ static int dib9000_read_unc_blocks(struct dvb_frontend *fe, u32 * unc) - { - struct dib9000_state *state = fe->demodulator_priv; - u16 *c = (u16 *)state->i2c_read_buffer; -+ int ret = 0; - -+ DibAcquireLock(&state->demod_lock); - DibAcquireLock(&state->platform.risc.mem_mbx_lock); -- if (dib9000_fw_memmbx_sync(state, FE_SYNC_CHANNEL) < 0) -- return -EIO; -+ if (dib9000_fw_memmbx_sync(state, FE_SYNC_CHANNEL) < 0) { -+ ret = -EIO; -+ goto error; -+ } - dib9000_risc_mem_read(state, FE_MM_R_FE_MONITOR, (u8 *) c, 16 * 2); - DibReleaseLock(&state->platform.risc.mem_mbx_lock); - - *unc = c[12]; -- return 0; -+ -+error: -+ DibReleaseLock(&state->demod_lock); -+ return ret; - } - - int dib9000_i2c_enumeration(struct i2c_adapter *i2c, int no_of_demods, u8 default_addr, u8 first_addr) -@@ -2322,6 +2444,10 @@ struct dvb_frontend *dib9000_attach(struct i2c_adapter *i2c_adap, u8 i2c_addr, c - DibInitLock(&st->platform.risc.mbx_lock); - DibInitLock(&st->platform.risc.mem_lock); - DibInitLock(&st->platform.risc.mem_mbx_lock); -+ DibInitLock(&st->demod_lock); -+ st->get_frontend_internal = 0; -+ -+ st->pid_ctrl_index = -2; - - st->fe[0] = fe; - fe->demodulator_priv = st; -diff --git a/drivers/media/dvb/frontends/dibx000_common.c b/drivers/media/dvb/frontends/dibx000_common.c -index dc5d17a..774d507 100644 ---- a/drivers/media/dvb/frontends/dibx000_common.c -+++ b/drivers/media/dvb/frontends/dibx000_common.c -@@ -1,4 +1,5 @@ - #include <linux/i2c.h> -+#include <linux/mutex.h> - - #include "dibx000_common.h" - -@@ -10,6 +11,13 @@ MODULE_PARM_DESC(debug, "turn on debugging (default: 0)"); - - static int dibx000_write_word(struct dibx000_i2c_master *mst, u16 reg, u16 val) - { -+ int ret; -+ -+ if (mutex_lock_interruptible(&mst->i2c_buffer_lock) < 0) { -+ dprintk("could not acquire lock"); -+ return -EINVAL; -+ } -+ - mst->i2c_write_buffer[0] = (reg >> 8) & 0xff; - mst->i2c_write_buffer[1] = reg & 0xff; - mst->i2c_write_buffer[2] = (val >> 8) & 0xff; -@@ -21,11 +29,21 @@ static int dibx000_write_word(struct dibx000_i2c_master *mst, u16 reg, u16 val) - mst->msg[0].buf = mst->i2c_write_buffer; - mst->msg[0].len = 4; - -- return i2c_transfer(mst->i2c_adap, mst->msg, 1) != 1 ? -EREMOTEIO : 0; -+ ret = i2c_transfer(mst->i2c_adap, mst->msg, 1) != 1 ? -EREMOTEIO : 0; -+ mutex_unlock(&mst->i2c_buffer_lock); -+ -+ return ret; - } - - static u16 dibx000_read_word(struct dibx000_i2c_master *mst, u16 reg) - { -+ u16 ret; -+ -+ if (mutex_lock_interruptible(&mst->i2c_buffer_lock) < 0) { -+ dprintk("could not acquire lock"); -+ return 0; -+ } -+ - mst->i2c_write_buffer[0] = reg >> 8; - mst->i2c_write_buffer[1] = reg & 0xff; - -@@ -42,7 +60,10 @@ static u16 dibx000_read_word(struct dibx000_i2c_master *mst, u16 reg) - if (i2c_transfer(mst->i2c_adap, mst->msg, 2) != 2) - dprintk("i2c read error on %d", reg); - -- return (mst->i2c_read_buffer[0] << 8) | mst->i2c_read_buffer[1]; -+ ret = (mst->i2c_read_buffer[0] << 8) | mst->i2c_read_buffer[1]; -+ mutex_unlock(&mst->i2c_buffer_lock); -+ -+ return ret; - } - - static int dibx000_is_i2c_done(struct dibx000_i2c_master *mst) -@@ -257,6 +278,7 @@ static int dibx000_i2c_gated_gpio67_xfer(struct i2c_adapter *i2c_adap, - struct i2c_msg msg[], int num) - { - struct dibx000_i2c_master *mst = i2c_get_adapdata(i2c_adap); -+ int ret; - - if (num > 32) { - dprintk("%s: too much I2C message to be transmitted (%i).\ -@@ -264,10 +286,15 @@ static int dibx000_i2c_gated_gpio67_xfer(struct i2c_adapter *i2c_adap, - return -ENOMEM; - } - -- memset(mst->msg, 0, sizeof(struct i2c_msg) * (2 + num)); -- - dibx000_i2c_select_interface(mst, DIBX000_I2C_INTERFACE_GPIO_6_7); - -+ if (mutex_lock_interruptible(&mst->i2c_buffer_lock) < 0) { -+ dprintk("could not acquire lock"); -+ return -EINVAL; -+ } -+ -+ memset(mst->msg, 0, sizeof(struct i2c_msg) * (2 + num)); -+ - /* open the gate */ - dibx000_i2c_gate_ctrl(mst, &mst->i2c_write_buffer[0], msg[0].addr, 1); - mst->msg[0].addr = mst->i2c_addr; -@@ -282,7 +309,11 @@ static int dibx000_i2c_gated_gpio67_xfer(struct i2c_adapter *i2c_adap, - mst->msg[num + 1].buf = &mst->i2c_write_buffer[4]; - mst->msg[num + 1].len = 4; - -- return i2c_transfer(mst->i2c_adap, mst->msg, 2 + num) == 2 + num ? num : -EIO; -+ ret = (i2c_transfer(mst->i2c_adap, mst->msg, 2 + num) == 2 + num ? -+ num : -EIO); -+ -+ mutex_unlock(&mst->i2c_buffer_lock); -+ return ret; - } - - static struct i2c_algorithm dibx000_i2c_gated_gpio67_algo = { -@@ -294,6 +325,7 @@ static int dibx000_i2c_gated_tuner_xfer(struct i2c_adapter *i2c_adap, - struct i2c_msg msg[], int num) - { - struct dibx000_i2c_master *mst = i2c_get_adapdata(i2c_adap); -+ int ret; - - if (num > 32) { - dprintk("%s: too much I2C message to be transmitted (%i).\ -@@ -301,10 +333,14 @@ static int dibx000_i2c_gated_tuner_xfer(struct i2c_adapter *i2c_adap, - return -ENOMEM; - } - -- memset(mst->msg, 0, sizeof(struct i2c_msg) * (2 + num)); -- - dibx000_i2c_select_interface(mst, DIBX000_I2C_INTERFACE_TUNER); - -+ if (mutex_lock_interruptible(&mst->i2c_buffer_lock) < 0) { -+ dprintk("could not acquire lock"); -+ return -EINVAL; -+ } -+ memset(mst->msg, 0, sizeof(struct i2c_msg) * (2 + num)); -+ - /* open the gate */ - dibx000_i2c_gate_ctrl(mst, &mst->i2c_write_buffer[0], msg[0].addr, 1); - mst->msg[0].addr = mst->i2c_addr; -@@ -319,7 +355,10 @@ static int dibx000_i2c_gated_tuner_xfer(struct i2c_adapter *i2c_adap, - mst->msg[num + 1].buf = &mst->i2c_write_buffer[4]; - mst->msg[num + 1].len = 4; - -- return i2c_transfer(mst->i2c_adap, mst->msg, 2 + num) == 2 + num ? num : -EIO; -+ ret = (i2c_transfer(mst->i2c_adap, mst->msg, 2 + num) == 2 + num ? -+ num : -EIO); -+ mutex_unlock(&mst->i2c_buffer_lock); -+ return ret; - } - - static struct i2c_algorithm dibx000_i2c_gated_tuner_algo = { -@@ -390,8 +429,18 @@ static int i2c_adapter_init(struct i2c_adapter *i2c_adap, - int dibx000_init_i2c_master(struct dibx000_i2c_master *mst, u16 device_rev, - struct i2c_adapter *i2c_adap, u8 i2c_addr) - { -- u8 tx[4]; -- struct i2c_msg m = {.addr = i2c_addr >> 1,.buf = tx,.len = 4 }; -+ int ret; -+ -+ mutex_init(&mst->i2c_buffer_lock); -+ if (mutex_lock_interruptible(&mst->i2c_buffer_lock) < 0) { -+ dprintk("could not acquire lock"); -+ return -EINVAL; -+ } -+ memset(mst->msg, 0, sizeof(struct i2c_msg)); -+ mst->msg[0].addr = i2c_addr >> 1; -+ mst->msg[0].flags = 0; -+ mst->msg[0].buf = mst->i2c_write_buffer; -+ mst->msg[0].len = 4; - - mst->device_rev = device_rev; - mst->i2c_adap = i2c_adap; -@@ -431,9 +480,12 @@ int dibx000_init_i2c_master(struct dibx000_i2c_master *mst, u16 device_rev, - "DiBX000: could not initialize the master i2c_adapter\n"); - - /* initialize the i2c-master by closing the gate */ -- dibx000_i2c_gate_ctrl(mst, tx, 0, 0); -+ dibx000_i2c_gate_ctrl(mst, mst->i2c_write_buffer, 0, 0); -+ -+ ret = (i2c_transfer(i2c_adap, mst->msg, 1) == 1); -+ mutex_unlock(&mst->i2c_buffer_lock); - -- return i2c_transfer(i2c_adap, &m, 1) == 1; -+ return ret; - } - - EXPORT_SYMBOL(dibx000_init_i2c_master); -diff --git a/drivers/media/dvb/frontends/dibx000_common.h b/drivers/media/dvb/frontends/dibx000_common.h -index f031165..5e01147 100644 ---- a/drivers/media/dvb/frontends/dibx000_common.h -+++ b/drivers/media/dvb/frontends/dibx000_common.h -@@ -33,6 +33,7 @@ struct dibx000_i2c_master { - struct i2c_msg msg[34]; - u8 i2c_write_buffer[8]; - u8 i2c_read_buffer[2]; -+ struct mutex i2c_buffer_lock; - }; - - extern int dibx000_init_i2c_master(struct dibx000_i2c_master *mst, -commit 45cbff13693d645fa5dcbba964e802e1746b2e57 -Author: Olivier Grenie <olivier.grenie@dibcom.fr> -Date: Mon Aug 1 17:45:58 2011 +0200 - - [media] dib0700: protect the dib0700 buffer access - - This patch protects the common buffer access inside the dib0700 in order - to manage concurrent access. This protection is done using mutex. - - Cc: Mauro Carvalho Chehab <mchehab@redhat.com> - Cc: Florian Mickler <florian@mickler.org> - Cc: stable@kernel.org - - Signed-off-by: Javier Marcet <javier@marcet.info> - Signed-off-by: Olivier Grenie <olivier.grenie@dibcom.fr> - Signed-off-by: Patrick Boettcher <patrick.boettcher@dibcom.fr> - -diff --git a/drivers/media/dvb/dvb-usb/dib0700_core.c b/drivers/media/dvb/dvb-usb/dib0700_core.c -index 5eb91b4..291b645 100644 ---- a/drivers/media/dvb/dvb-usb/dib0700_core.c -+++ b/drivers/media/dvb/dvb-usb/dib0700_core.c -@@ -30,6 +30,11 @@ int dib0700_get_version(struct dvb_usb_device *d, u32 *hwversion, - struct dib0700_state *st = d->priv; - int ret; - -+ if (mutex_lock_interruptible(&d->usb_mutex) < 0) { -+ dprintk("could not acquire lock"); -+ return 0; -+ } -+ - ret = usb_control_msg(d->udev, usb_rcvctrlpipe(d->udev, 0), - REQUEST_GET_VERSION, - USB_TYPE_VENDOR | USB_DIR_IN, 0, 0, -@@ -46,6 +51,7 @@ int dib0700_get_version(struct dvb_usb_device *d, u32 *hwversion, - if (fwtype != NULL) - *fwtype = (st->buf[12] << 24) | (st->buf[13] << 16) | - (st->buf[14] << 8) | st->buf[15]; -+ mutex_unlock(&d->usb_mutex); - return ret; - } - -@@ -108,7 +114,12 @@ int dib0700_ctrl_rd(struct dvb_usb_device *d, u8 *tx, u8 txlen, u8 *rx, u8 rxlen - int dib0700_set_gpio(struct dvb_usb_device *d, enum dib07x0_gpios gpio, u8 gpio_dir, u8 gpio_val) - { - struct dib0700_state *st = d->priv; -- s16 ret; -+ int ret; -+ -+ if (mutex_lock_interruptible(&d->usb_mutex) < 0) { -+ dprintk("could not acquire lock"); -+ return 0; -+ } - - st->buf[0] = REQUEST_SET_GPIO; - st->buf[1] = gpio; -@@ -116,6 +127,7 @@ int dib0700_set_gpio(struct dvb_usb_device *d, enum dib07x0_gpios gpio, u8 gpio_ - - ret = dib0700_ctrl_wr(d, st->buf, 3); - -+ mutex_unlock(&d->usb_mutex); - return ret; - } - -@@ -125,6 +137,11 @@ static int dib0700_set_usb_xfer_len(struct dvb_usb_device *d, u16 nb_ts_packets) - int ret; - - if (st->fw_version >= 0x10201) { -+ if (mutex_lock_interruptible(&d->usb_mutex) < 0) { -+ dprintk("could not acquire lock"); -+ return 0; -+ } -+ - st->buf[0] = REQUEST_SET_USB_XFER_LEN; - st->buf[1] = (nb_ts_packets >> 8) & 0xff; - st->buf[2] = nb_ts_packets & 0xff; -@@ -132,6 +149,7 @@ static int dib0700_set_usb_xfer_len(struct dvb_usb_device *d, u16 nb_ts_packets) - deb_info("set the USB xfer len to %i Ts packet\n", nb_ts_packets); - - ret = dib0700_ctrl_wr(d, st->buf, 3); -+ mutex_unlock(&d->usb_mutex); - } else { - deb_info("this firmware does not allow to change the USB xfer len\n"); - ret = -EIO; -@@ -208,6 +226,10 @@ static int dib0700_i2c_xfer_new(struct i2c_adapter *adap, struct i2c_msg *msg, - - } else { - /* Write request */ -+ if (mutex_lock_interruptible(&d->usb_mutex) < 0) { -+ dprintk("could not acquire lock"); -+ return 0; -+ } - st->buf[0] = REQUEST_NEW_I2C_WRITE; - st->buf[1] = msg[i].addr << 1; - st->buf[2] = (en_start << 7) | (en_stop << 6) | -@@ -227,6 +249,7 @@ static int dib0700_i2c_xfer_new(struct i2c_adapter *adap, struct i2c_msg *msg, - USB_TYPE_VENDOR | USB_DIR_OUT, - 0, 0, st->buf, msg[i].len + 4, - USB_CTRL_GET_TIMEOUT); -+ mutex_unlock(&d->usb_mutex); - if (result < 0) { - deb_info("i2c write error (status = %d)\n", result); - break; -@@ -249,6 +272,10 @@ static int dib0700_i2c_xfer_legacy(struct i2c_adapter *adap, - - if (mutex_lock_interruptible(&d->i2c_mutex) < 0) - return -EAGAIN; -+ if (mutex_lock_interruptible(&d->usb_mutex) < 0) { -+ dprintk("could not acquire lock"); -+ return 0; -+ } - - for (i = 0; i < num; i++) { - /* fill in the address */ -@@ -279,6 +306,7 @@ static int dib0700_i2c_xfer_legacy(struct i2c_adapter *adap, - break; - } - } -+ mutex_unlock(&d->usb_mutex); - mutex_unlock(&d->i2c_mutex); - - return i; -@@ -337,7 +365,12 @@ static int dib0700_set_clock(struct dvb_usb_device *d, u8 en_pll, - u16 pll_loopdiv, u16 free_div, u16 dsuScaler) - { - struct dib0700_state *st = d->priv; -- s16 ret; -+ int ret; -+ -+ if (mutex_lock_interruptible(&d->usb_mutex) < 0) { -+ dprintk("could not acquire lock"); -+ return 0; -+ } - - st->buf[0] = REQUEST_SET_CLOCK; - st->buf[1] = (en_pll << 7) | (pll_src << 6) | -@@ -352,6 +385,7 @@ static int dib0700_set_clock(struct dvb_usb_device *d, u8 en_pll, - st->buf[9] = dsuScaler & 0xff; /* LSB */ - - ret = dib0700_ctrl_wr(d, st->buf, 10); -+ mutex_unlock(&d->usb_mutex); - - return ret; - } -@@ -360,10 +394,16 @@ int dib0700_set_i2c_speed(struct dvb_usb_device *d, u16 scl_kHz) - { - struct dib0700_state *st = d->priv; - u16 divider; -+ int ret; - - if (scl_kHz == 0) - return -EINVAL; - -+ if (mutex_lock_interruptible(&d->usb_mutex) < 0) { -+ dprintk("could not acquire lock"); -+ return 0; -+ } -+ - st->buf[0] = REQUEST_SET_I2C_PARAM; - divider = (u16) (30000 / scl_kHz); - st->buf[1] = 0; -@@ -379,7 +419,11 @@ int dib0700_set_i2c_speed(struct dvb_usb_device *d, u16 scl_kHz) - deb_info("setting I2C speed: %04x %04x %04x (%d kHz).", - (st->buf[2] << 8) | (st->buf[3]), (st->buf[4] << 8) | - st->buf[5], (st->buf[6] << 8) | st->buf[7], scl_kHz); -- return dib0700_ctrl_wr(d, st->buf, 8); -+ -+ ret = dib0700_ctrl_wr(d, st->buf, 8); -+ mutex_unlock(&d->usb_mutex); -+ -+ return ret; - } - - -@@ -515,6 +559,11 @@ int dib0700_streaming_ctrl(struct dvb_usb_adapter *adap, int onoff) - } - } - -+ if (mutex_lock_interruptible(&adap->dev->usb_mutex) < 0) { -+ dprintk("could not acquire lock"); -+ return 0; -+ } -+ - st->buf[0] = REQUEST_ENABLE_VIDEO; - /* this bit gives a kind of command, - * rather than enabling something or not */ -@@ -548,7 +597,10 @@ int dib0700_streaming_ctrl(struct dvb_usb_adapter *adap, int onoff) - - deb_info("data for streaming: %x %x\n", st->buf[1], st->buf[2]); - -- return dib0700_ctrl_wr(adap->dev, st->buf, 4); -+ ret = dib0700_ctrl_wr(adap->dev, st->buf, 4); -+ mutex_unlock(&adap->dev->usb_mutex); -+ -+ return ret; - } - - int dib0700_change_protocol(struct rc_dev *rc, u64 rc_type) -@@ -557,6 +609,11 @@ int dib0700_change_protocol(struct rc_dev *rc, u64 rc_type) - struct dib0700_state *st = d->priv; - int new_proto, ret; - -+ if (mutex_lock_interruptible(&d->usb_mutex) < 0) { -+ dprintk("could not acquire lock"); -+ return 0; -+ } -+ - st->buf[0] = REQUEST_SET_RC; - st->buf[1] = 0; - st->buf[2] = 0; -@@ -567,23 +624,29 @@ int dib0700_change_protocol(struct rc_dev *rc, u64 rc_type) - else if (rc_type == RC_TYPE_NEC) - new_proto = 0; - else if (rc_type == RC_TYPE_RC6) { -- if (st->fw_version < 0x10200) -- return -EINVAL; -+ if (st->fw_version < 0x10200) { -+ ret = -EINVAL; -+ goto out; -+ } - - new_proto = 2; -- } else -- return -EINVAL; -+ } else { -+ ret = -EINVAL; -+ goto out; -+ } - - st->buf[1] = new_proto; - - ret = dib0700_ctrl_wr(d, st->buf, 3); - if (ret < 0) { - err("ir protocol setup failed"); -- return ret; -+ goto out; - } - - d->props.rc.core.protocol = rc_type; - -+out: -+ mutex_unlock(&d->usb_mutex); - return ret; - } - -commit aeb2d456b746164a4bd19e53de0a6678ca63fcad -Author: Olivier Grenie <olivier.grenie@dibcom.fr> -Date: Thu Aug 4 18:10:03 2011 +0200 - - [media] dib0700: correct error message - - The goal of this patch is to correct a previous patch. In case of error, - the err() function should be used instead of dprintk() function. - - Signed-off-by: Olivier Grenie <olivier.grenie@dibcom.fr> - -diff --git a/drivers/media/dvb/dvb-usb/dib0700_core.c b/drivers/media/dvb/dvb-usb/dib0700_core.c -index 291b645..b693ed1 100644 ---- a/drivers/media/dvb/dvb-usb/dib0700_core.c -+++ b/drivers/media/dvb/dvb-usb/dib0700_core.c -@@ -31,7 +31,7 @@ int dib0700_get_version(struct dvb_usb_device *d, u32 *hwversion, - int ret; - - if (mutex_lock_interruptible(&d->usb_mutex) < 0) { -- dprintk("could not acquire lock"); -+ err("could not acquire lock"); - return 0; - } - -@@ -117,7 +117,7 @@ int dib0700_set_gpio(struct dvb_usb_device *d, enum dib07x0_gpios gpio, u8 gpio_ - int ret; - - if (mutex_lock_interruptible(&d->usb_mutex) < 0) { -- dprintk("could not acquire lock"); -+ err("could not acquire lock"); - return 0; - } - -@@ -138,7 +138,7 @@ static int dib0700_set_usb_xfer_len(struct dvb_usb_device *d, u16 nb_ts_packets) - - if (st->fw_version >= 0x10201) { - if (mutex_lock_interruptible(&d->usb_mutex) < 0) { -- dprintk("could not acquire lock"); -+ err("could not acquire lock"); - return 0; - } - -@@ -227,7 +227,7 @@ static int dib0700_i2c_xfer_new(struct i2c_adapter *adap, struct i2c_msg *msg, - } else { - /* Write request */ - if (mutex_lock_interruptible(&d->usb_mutex) < 0) { -- dprintk("could not acquire lock"); -+ err("could not acquire lock"); - return 0; - } - st->buf[0] = REQUEST_NEW_I2C_WRITE; -@@ -273,7 +273,7 @@ static int dib0700_i2c_xfer_legacy(struct i2c_adapter *adap, - if (mutex_lock_interruptible(&d->i2c_mutex) < 0) - return -EAGAIN; - if (mutex_lock_interruptible(&d->usb_mutex) < 0) { -- dprintk("could not acquire lock"); -+ err("could not acquire lock"); - return 0; - } - -@@ -368,7 +368,7 @@ static int dib0700_set_clock(struct dvb_usb_device *d, u8 en_pll, - int ret; - - if (mutex_lock_interruptible(&d->usb_mutex) < 0) { -- dprintk("could not acquire lock"); -+ err("could not acquire lock"); - return 0; - } - -@@ -400,7 +400,7 @@ int dib0700_set_i2c_speed(struct dvb_usb_device *d, u16 scl_kHz) - return -EINVAL; - - if (mutex_lock_interruptible(&d->usb_mutex) < 0) { -- dprintk("could not acquire lock"); -+ err("could not acquire lock"); - return 0; - } - -@@ -560,7 +560,7 @@ int dib0700_streaming_ctrl(struct dvb_usb_adapter *adap, int onoff) - } - - if (mutex_lock_interruptible(&adap->dev->usb_mutex) < 0) { -- dprintk("could not acquire lock"); -+ err("could not acquire lock"); - return 0; - } - -@@ -610,7 +610,7 @@ int dib0700_change_protocol(struct rc_dev *rc, u64 rc_type) - int new_proto, ret; - - if (mutex_lock_interruptible(&d->usb_mutex) < 0) { -- dprintk("could not acquire lock"); -+ err("could not acquire lock"); - return 0; - } - diff --git a/kernels/linux-libre-aufs_friendly/fix-i915.patch b/kernels/linux-libre-aufs_friendly/fix-i915.patch deleted file mode 100644 index 3b631361a..000000000 --- a/kernels/linux-libre-aufs_friendly/fix-i915.patch +++ /dev/null @@ -1,26 +0,0 @@ -Signed-off-by: Zhao Yakui <yakui.zhao@intel.com> -Tested-by: Santi <santi@agolina.net> ---- - drivers/gpu/drm/i915/intel_tv.c | 9 +++++++++ - 1 files changed, 9 insertions(+), 0 deletions(-) - -diff --git a/drivers/gpu/drm/i915/intel_tv.c b/drivers/gpu/drm/i915/intel_tv.c -index dc83b7a..c8f67bf 100644 ---- a/drivers/gpu/drm/i915/intel_tv.c -+++ b/drivers/gpu/drm/i915/intel_tv.c -@@ -1267,6 +1267,15 @@ - DAC_B_0_7_V | - DAC_C_0_7_V); - -+ /* -+ * The TV sense state should be cleared to zero on cantiga platform. Otherwise -+ * the TV is misdetected. This is hardware requirement. -+ */ -+ if (IS_GM45(dev)) -+ tv_dac &= ~(TVDAC_STATE_CHG_EN | TVDAC_A_SENSE_CTL | -+ TVDAC_B_SENSE_CTL | TVDAC_C_SENSE_CTL); -+ -+ - I915_WRITE(TV_CTL, tv_ctl); - I915_WRITE(TV_DAC, tv_dac); - POSTING_READ(TV_DAC); diff --git a/kernels/linux-libre-aufs_friendly/i915-fix-incorrect-error-message.patch b/kernels/linux-libre-aufs_friendly/i915-fix-incorrect-error-message.patch deleted file mode 100644 index e1addbb05..000000000 --- a/kernels/linux-libre-aufs_friendly/i915-fix-incorrect-error-message.patch +++ /dev/null @@ -1,22 +0,0 @@ -commit 6c76e0b94e484ffbdf38d2fe2769b6ca9aa99de4 -Author: Thomas Bächler <thomas@archlinux.org> -Date: Mon Oct 31 19:16:18 2011 +0100 - - Change accidental error message to debug message. - - According to https://lkml.org/lkml/2011/9/19/80, this is not supposed - to be an error message, but a debug message. This worries users. - -diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c -index 04411ad..02d5794 100644 ---- a/drivers/gpu/drm/i915/intel_display.c -+++ b/drivers/gpu/drm/i915/intel_display.c -@@ -5172,7 +5172,7 @@ static void ironlake_update_pch_refclk(struct drm_device *dev) - } else { - /* Enable SSC on PCH eDP if needed */ - if (intel_panel_use_ssc(dev_priv)) { -- DRM_ERROR("enabling SSC on PCH\n"); -+ DRM_DEBUG("enabling SSC on PCH\n"); - temp |= DREF_SUPERSPREAD_SOURCE_ENABLE; - } - } diff --git a/kernels/linux-libre-aufs_friendly/i915-gpu-finish.patch b/kernels/linux-libre-aufs_friendly/i915-gpu-finish.patch deleted file mode 100644 index 5840c9181..000000000 --- a/kernels/linux-libre-aufs_friendly/i915-gpu-finish.patch +++ /dev/null @@ -1,55 +0,0 @@ -commit 389a55581e30607af0fcde6cdb4e54f189cf46cf -Author: Chris Wilson <chris@chris-wilson.co.uk> -Date: Tue Nov 29 15:12:16 2011 +0000 - - drm/i915: Only clear the GPU domains upon a successful finish - - By clearing the GPU read domains before waiting upon the buffer, we run - the risk of the wait being interrupted and the domains prematurely - cleared. The next time we attempt to wait upon the buffer (after - userspace handles the signal), we believe that the buffer is idle and so - skip the wait. - - There are a number of bugs across all generations which show signs of an - overly haste reuse of active buffers. - - Such as: - - https://bugs.freedesktop.org/show_bug.cgi?id=29046 - https://bugs.freedesktop.org/show_bug.cgi?id=35863 - https://bugs.freedesktop.org/show_bug.cgi?id=38952 - https://bugs.freedesktop.org/show_bug.cgi?id=40282 - https://bugs.freedesktop.org/show_bug.cgi?id=41098 - https://bugs.freedesktop.org/show_bug.cgi?id=41102 - https://bugs.freedesktop.org/show_bug.cgi?id=41284 - https://bugs.freedesktop.org/show_bug.cgi?id=42141 - - A couple of those pre-date i915_gem_object_finish_gpu(), so may be - unrelated (such as a wild write from a userspace command buffer), but - this does look like a convincing cause for most of those bugs. - - Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> - Cc: stable@kernel.org - Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch> - Reviewed-by: Eugeni Dodonov <eugeni.dodonov@intel.com> - -diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c -index d560175..036bc58 100644 ---- a/drivers/gpu/drm/i915/i915_gem.c -+++ b/drivers/gpu/drm/i915/i915_gem.c -@@ -3087,10 +3087,13 @@ i915_gem_object_finish_gpu(struct drm_i915_gem_object *obj) - return ret; - } - -+ ret = i915_gem_object_wait_rendering(obj); -+ if (ret) -+ return ret; -+ - /* Ensure that we invalidate the GPU's caches and TLBs. */ - obj->base.read_domains &= ~I915_GEM_GPU_DOMAINS; -- -- return i915_gem_object_wait_rendering(obj); -+ return 0; - } - - /** diff --git a/kernels/linux-libre-aufs_friendly/iwlagn-fix-NULL-pointer-dereference.patch b/kernels/linux-libre-aufs_friendly/iwlagn-fix-NULL-pointer-dereference.patch deleted file mode 100644 index a53a3a425..000000000 --- a/kernels/linux-libre-aufs_friendly/iwlagn-fix-NULL-pointer-dereference.patch +++ /dev/null @@ -1,38 +0,0 @@ -This fix regression introduced by commit: - -commit 15b3f3b006b42a678523cad989bfd60b76bf4403 -Author: Wey-Yi Guy <wey-yi.w.guy@intel.com> -Date: Fri Jun 3 07:54:13 2011 -0700 - - iwlagn: set smps mode after assoc for 1000 device - -Also remove unneeded brackets on the way. - -Address: -https://bugzilla.redhat.com/show_bug.cgi?id=744155 - -If fix will not get 3.1 release, it should be applied in 3.1 stable. - -Cc: stable@kernel.org # 3.1+ -Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com> ---- - drivers/net/wireless/iwlwifi/iwl-agn-rxon.c | 4 ++-- - 1 files changed, 2 insertions(+), 2 deletions(-) - -diff --git a/drivers/net/wireless/iwlwifi/iwl-agn-rxon.c b/drivers/net/wireless/iwlwifi/iwl-agn-rxon.c -index ca632f9..5004342 100644 ---- a/drivers/net/wireless/iwlwifi/iwl-agn-rxon.c -+++ b/drivers/net/wireless/iwlwifi/iwl-agn-rxon.c -@@ -296,8 +296,8 @@ static int iwlagn_rxon_connect(struct iwl_priv *priv, - return ret; - } - -- if ((ctx->vif && ctx->vif->type == NL80211_IFTYPE_STATION) && -- priv->cfg->ht_params->smps_mode) -+ if (ctx->vif && ctx->vif->type == NL80211_IFTYPE_STATION && -+ priv->cfg->ht_params && priv->cfg->ht_params->smps_mode) - ieee80211_request_smps(ctx->vif, - priv->cfg->ht_params->smps_mode); - --- -1.7.1 diff --git a/kernels/linux-libre-aufs_friendly/md-raid10-fix-bug-when-activating-a-hot-spare.patch b/kernels/linux-libre-aufs_friendly/md-raid10-fix-bug-when-activating-a-hot-spare.patch deleted file mode 100644 index 880849db5..000000000 --- a/kernels/linux-libre-aufs_friendly/md-raid10-fix-bug-when-activating-a-hot-spare.patch +++ /dev/null @@ -1,40 +0,0 @@ -From 7fcc7c8acf0fba44d19a713207af7e58267c1179 Mon Sep 17 00:00:00 2001 -From: NeilBrown <neilb@suse.de> -Date: Mon, 31 Oct 2011 12:59:44 +1100 -Subject: md/raid10: Fix bug when activating a hot-spare. - -From: NeilBrown <neilb@suse.de> - -commit 7fcc7c8acf0fba44d19a713207af7e58267c1179 upstream. - -This is a fairly serious bug in RAID10. - -When a RAID10 array is degraded and a hot-spare is activated, the -spare does not take up the empty slot, but rather replaces the first -working device. -This is likely to make the array non-functional. It would normally -be possible to recover the data, but that would need care and is not -guaranteed. - -This bug was introduced in commit - 2bb77736ae5dca0a189829fbb7379d43364a9dac -which first appeared in 3.1. - -Signed-off-by: NeilBrown <neilb@suse.de> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - ---- - drivers/md/raid10.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - ---- a/drivers/md/raid10.c -+++ b/drivers/md/raid10.c -@@ -1337,7 +1337,7 @@ static int raid10_add_disk(mddev_t *mdde - mirror_info_t *p = &conf->mirrors[mirror]; - if (p->recovery_disabled == mddev->recovery_disabled) - continue; -- if (!p->rdev) -+ if (p->rdev) - continue; - - disk_stack_limits(mddev->gendisk, rdev->bdev, diff --git a/kernels/linux-libre-aufs_friendly/usb-add-reset-resume-quirk-for-several-webcams.patch b/kernels/linux-libre-aufs_friendly/usb-add-reset-resume-quirk-for-several-webcams.patch deleted file mode 100644 index 9e570dd3f..000000000 --- a/kernels/linux-libre-aufs_friendly/usb-add-reset-resume-quirk-for-several-webcams.patch +++ /dev/null @@ -1,99 +0,0 @@ -commit 2394d67e446bf616a0885167d5f0d397bdacfdfc -Author: Oliver Neukum <oneukum@suse.de> -Date: Tue Sep 13 08:42:21 2011 +0200 - - USB: add RESET_RESUME for webcams shown to be quirky - - The new runtime PM code has shown that many webcams suffer - from a race condition that may crash them upon resume. - Runtime PM is especially prone to show the problem because - it retains power to the cameras at all times. However - system suspension may also crash the devices and retain - power to the devices. - The only way to solve this problem without races is in - usbcore with the RESET_RESUME quirk. - - Signed-off-by: Oliver Neukum <oneukum@suse.de> - Signed-off-by: stable <stable@kernel.org> - Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - -diff --git a/drivers/usb/core/quirks.c b/drivers/usb/core/quirks.c -index 81ce6a8..38f0510 100644 ---- a/drivers/usb/core/quirks.c -+++ b/drivers/usb/core/quirks.c -@@ -38,6 +38,24 @@ static const struct usb_device_id usb_quirk_list[] = { - /* Creative SB Audigy 2 NX */ - { USB_DEVICE(0x041e, 0x3020), .driver_info = USB_QUIRK_RESET_RESUME }, - -+ /* Logitech Webcam C200 */ -+ { USB_DEVICE(0x046d, 0x0802), .driver_info = USB_QUIRK_RESET_RESUME }, -+ -+ /* Logitech Webcam C250 */ -+ { USB_DEVICE(0x046d, 0x0804), .driver_info = USB_QUIRK_RESET_RESUME }, -+ -+ /* Logitech Webcam B/C500 */ -+ { USB_DEVICE(0x046d, 0x0807), .driver_info = USB_QUIRK_RESET_RESUME }, -+ -+ /* Logitech Webcam Pro 9000 */ -+ { USB_DEVICE(0x046d, 0x0809), .driver_info = USB_QUIRK_RESET_RESUME }, -+ -+ /* Logitech Webcam C310 */ -+ { USB_DEVICE(0x046d, 0x081b), .driver_info = USB_QUIRK_RESET_RESUME }, -+ -+ /* Logitech Webcam C270 */ -+ { USB_DEVICE(0x046d, 0x0825), .driver_info = USB_QUIRK_RESET_RESUME }, -+ - /* Logitech Harmony 700-series */ - { USB_DEVICE(0x046d, 0xc122), .driver_info = USB_QUIRK_DELAY_INIT }, - -@@ -69,6 +87,9 @@ static const struct usb_device_id usb_quirk_list[] = { - { USB_DEVICE(0x06a3, 0x0006), .driver_info = - USB_QUIRK_CONFIG_INTF_STRINGS }, - -+ /* Guillemot Webcam Hercules Dualpix Exchange*/ -+ { USB_DEVICE(0x06f8, 0x0804), .driver_info = USB_QUIRK_RESET_RESUME }, -+ - /* M-Systems Flash Disk Pioneers */ - { USB_DEVICE(0x08ec, 0x1000), .driver_info = USB_QUIRK_RESET_RESUME }, - -commit 5b253d88cc6c65a23cefc457a5a4ef139913c5fc -Author: Jon Levell <linuxusb@coralbark.net> -Date: Thu Sep 29 20:42:52 2011 +0100 - - USB: add quirk for Logitech C300 web cam - - My webcam is a Logitech C300 and I get "chipmunk"ed squeaky sound. - The following trivial patch fixes it. - - Signed-off-by: Jon Levell <linuxusb@coralbark.net> - Cc: stable <stable@kernel.org> - Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - -diff --git a/drivers/usb/core/quirks.c b/drivers/usb/core/quirks.c -index 38f0510..d6a8d82 100644 ---- a/drivers/usb/core/quirks.c -+++ b/drivers/usb/core/quirks.c -@@ -44,6 +44,9 @@ static const struct usb_device_id usb_quirk_list[] = { - /* Logitech Webcam C250 */ - { USB_DEVICE(0x046d, 0x0804), .driver_info = USB_QUIRK_RESET_RESUME }, - -+ /* Logitech Webcam C300 */ -+ { USB_DEVICE(0x046d, 0x0805), .driver_info = USB_QUIRK_RESET_RESUME }, -+ - /* Logitech Webcam B/C500 */ - { USB_DEVICE(0x046d, 0x0807), .driver_info = USB_QUIRK_RESET_RESUME }, - -diff --git a/drivers/usb/core/quirks.c b/drivers/usb/core/quirks.c -index d6a8d82..caa1991 100644 ---- a/drivers/usb/core/quirks.c -+++ b/drivers/usb/core/quirks.c -@@ -50,6 +50,9 @@ static const struct usb_device_id usb_quirk_list[] = { - /* Logitech Webcam B/C500 */ - { USB_DEVICE(0x046d, 0x0807), .driver_info = USB_QUIRK_RESET_RESUME }, - -+ /* Logitech Webcam C600 */ -+ { USB_DEVICE(0x046d, 0x0808), .driver_info = USB_QUIRK_RESET_RESUME }, -+ - /* Logitech Webcam Pro 9000 */ - { USB_DEVICE(0x046d, 0x0809), .driver_info = USB_QUIRK_RESET_RESUME }, - diff --git a/libre/grub/PKGBUILD b/libre/grub/PKGBUILD index 29870d611..bc0480e6b 100644 --- a/libre/grub/PKGBUILD +++ b/libre/grub/PKGBUILD @@ -5,7 +5,7 @@ pkgname=grub pkgver=0.97 -pkgrel=21 +pkgrel=21.1 pkgdesc="A GNU multiboot boot loader (Parabola rebranded)" arch=('i686' 'x86_64') license=('GPL') @@ -13,9 +13,6 @@ url="http://www.gnu.org/software/grub/" groups=('base') depends=('ncurses' 'diffutils' 'sed') optdepends=('xfsprogs: freezing of xfs /boot in install-grub script') -replaces=('grub') -conflicts=('grub') -provides=("grub=$pkgver") source=(ftp://alpha.gnu.org/gnu/grub/grub-$pkgver.tar.gz menu.lst install-grub diff --git a/libre/kdebase-konqueror-libre/PKGBUILD b/libre/kdebase-konqueror-libre/PKGBUILD index 719cd3a4f..9507f4e0a 100644 --- a/libre/kdebase-konqueror-libre/PKGBUILD +++ b/libre/kdebase-konqueror-libre/PKGBUILD @@ -6,7 +6,7 @@ _pkgname='kdebase-konqueror' pkgname='kdebase-konqueror-libre' -pkgver=4.8.2 +pkgver=4.8.3 pkgrel=1 arch=('i686' 'x86_64' 'mips64el') url="http://kde.org/applications/internet/konqueror/" @@ -15,7 +15,7 @@ groups=('kde' 'kdebase') makedepends=('kdelibs' 'cmake' 'automoc4' 'tidyhtml') source=("http://download.kde.org/stable/${pkgver}/src/kde-baseapps-${pkgver}.tar.xz" "konq-about-fsdg.diff") -sha1sums=('13dc2e6c8639feadc9a5a334d0720a60b1e3ccb6' +sha1sums=('593053e7fdd50b32e6f9264edf2a69e499ddc0a6' 'f41541371414dcbe5e76687835e648112b3ff364') pkgdesc='KDE File Manager & Web Browser' depends=('kdebase-dolphin' 'kdebase-keditbookmarks') diff --git a/libre/kdelibs-libre/PKGBUILD b/libre/kdelibs-libre/PKGBUILD index aa2a51ddb..933527aa9 100644 --- a/libre/kdelibs-libre/PKGBUILD +++ b/libre/kdelibs-libre/PKGBUILD @@ -1,11 +1,11 @@ -# $Id: PKGBUILD 155359 2012-04-02 12:16:32Z andrea $ +# $Id: PKGBUILD 158132 2012-05-03 13:20:07Z andrea $ # Maintainer: Andrea Scarpino <andrea@archlinux.org # Contributor: Pierre Schmitz <pierre@archlinux.de> # Maintainer (Parabola): André Silva <andre.paulista@adinet.com.uy> _pkgname=kdelibs pkgname=kdelibs-libre -pkgver=4.8.2 +pkgver=4.8.3 pkgrel=1 pkgdesc="KDE Core Libraries" arch=('i686' 'x86_64' 'mips64el') @@ -24,7 +24,7 @@ source=("http://download.kde.org/stable/${pkgver}/src/${_pkgname}-${pkgver}.tar. 'kde-applications-menu.patch' 'use-pythondontwritebytecode.patch' 'khtml-fsdg.diff') -sha1sums=('f844ae0877880563361144d9577706064c3483e7' +sha1sums=('50633efa4ea2a133e51bf55286ff754c46f2eae2' '86ee8c8660f19de8141ac99cd6943964d97a1ed7' 'a1e35760d5b4e29471ad357c963a343c67200f32' 'a1502a964081ad583a00cf90c56e74bf60121830') diff --git a/libre/kdenetwork-libre/PKGBUILD b/libre/kdenetwork-libre/PKGBUILD index 6e231389d..0ffef5573 100644 --- a/libre/kdenetwork-libre/PKGBUILD +++ b/libre/kdenetwork-libre/PKGBUILD @@ -1,4 +1,4 @@ -# $Id: PKGBUILD 154726 2012-03-30 16:15:21Z andrea $ +# $Id: PKGBUILD 158333 2012-05-03 17:21:20Z andrea $ # Maintainer: Andrea Scarpino <andrea@archlinux.org> # Contributor: Pierre Schmitz <pierre@archlinux.de> # Maintainer (Parabola): André Silva <andre.paulista@adinet.com.uy> @@ -12,8 +12,8 @@ pkgname=('kdenetwork-filesharing' 'kdenetwork-kppp' 'kdenetwork-krdc' 'kdenetwork-krfb') -pkgver=4.8.2 -pkgrel=1 +pkgver=4.8.3 +pkgrel=2 arch=('i686' 'x86_64') url='http://www.kde.org' license=('GPL' 'LGPL' 'FDL') @@ -22,12 +22,16 @@ makedepends=('cmake' 'automoc4' 'boost' 'speex' 'ortp' 'libotr' 'ppp' 'qca-ossl' 'kdebase-workspace' 'kdebase-lib' 'libvncserver' 'libmsn' 'v4l-utils' 'libidn' 'rdesktop' 'qimageblitz' 'libxdamage' 'libgadu' 'libktorrent' 'libmms' 'mediastreamer') -source=("http://download.kde.org/stable/${pkgver}/src/${_pkgbase}-${pkgver}.tar.xz") -sha1sums=('a899a9ef1637612a5ec14bb3ff950f3ed565d60e') +source=("http://download.kde.org/stable/${pkgver}/src/${_pkgbase}-${pkgver}.tar.xz" + 'gcc47.patch') +sha1sums=('9da87317c6a10243d6fff8c121c04146415f65cd' + '0e1325569e296d98e7b1be12305c1c018104685b') build() { - cd "${srcdir}" + cd "${srcdir}"/${_pkgbase}-${pkgver} + patch -p4 -i "${srcdir}"/gcc47.patch + cd "${srcdir}" # Based on http://bzr.trisquel.info/package-helpers/trunk/annotate/head%3A/helpers/natty/make-kdenetwork, revision 34. sed -i 's/Skype protocol" ON/Skype protocol" OFF/g' "${_pkgbase}-${pkgver}/kopete/protocols/CMakeLists.txt" rm -rf "${_pkgbase}-${pkgver}/kopete/protocols/skype" @@ -41,7 +45,8 @@ build() { -DCMAKE_INSTALL_PREFIX=/usr \ -DMOZPLUGIN_INSTALL_DIR=/usr/lib/mozilla/plugins/ \ -DWITH_Xmms=OFF \ - -DWITH_LibMeanwhile=OFF + -DWITH_LibMeanwhile=OFF \ + -DWITH_qq=OFF make } diff --git a/libre/kdenetwork-libre/gcc47.patch b/libre/kdenetwork-libre/gcc47.patch new file mode 100644 index 000000000..78af901dc --- /dev/null +++ b/libre/kdenetwork-libre/gcc47.patch @@ -0,0 +1,59 @@ +--- branches/KDE/4.8/kdenetwork/kopete/protocols/jabber/googletalk/libjingle/talk/base/socketaddress.cc 2012/05/03 16:03:23 1292761 ++++ branches/KDE/4.8/kdenetwork/kopete/protocols/jabber/googletalk/libjingle/talk/base/socketaddress.cc 2012/05/03 16:11:00 1292762 +@@ -31,6 +31,7 @@ + #include <netinet/in.h> + #include <arpa/inet.h> + #include <netdb.h> ++#include <unistd.h> + #endif + + #include <cstring> +--- branches/KDE/4.8/kdenetwork/kopete/protocols/jabber/googletalk/libjingle/talk/base/ssladapter.cc 2012/05/03 16:03:23 1292761 ++++ branches/KDE/4.8/kdenetwork/kopete/protocols/jabber/googletalk/libjingle/talk/base/ssladapter.cc 2012/05/03 16:11:00 1292762 +@@ -27,6 +27,12 @@ + + #include "talk/base/ssladapter.h" + ++#ifdef POSIX ++extern "C" { ++#include <unistd.h> ++} ++#endif ++ + #if !defined(SSL_USE_SCHANNEL) && !defined(SSL_USE_OPENSSL) + #ifdef WIN32 + #define SSL_USE_SCHANNEL 1 +--- branches/KDE/4.8/kdenetwork/kopete/protocols/jabber/googletalk/libjingle/talk/base/stringutils.h 2012/05/03 16:03:23 1292761 ++++ branches/KDE/4.8/kdenetwork/kopete/protocols/jabber/googletalk/libjingle/talk/base/stringutils.h 2012/05/03 16:11:00 1292762 +@@ -198,15 +198,6 @@ + } + + template<class CTYPE> +-size_t sprintfn(CTYPE* buffer, size_t buflen, const CTYPE* format, ...) { +- va_list args; +- va_start(args, format); +- size_t len = vsprintfn(buffer, buflen, format, args); +- va_end(args); +- return len; +-} +- +-template<class CTYPE> + size_t vsprintfn(CTYPE* buffer, size_t buflen, const CTYPE* format, + va_list args) { + int len = vsnprintf(buffer, buflen, format, args); +@@ -217,6 +208,15 @@ + return len; + } + ++template<class CTYPE> ++size_t sprintfn(CTYPE* buffer, size_t buflen, const CTYPE* format, ...) { ++ va_list args; ++ va_start(args, format); ++ size_t len = vsprintfn(buffer, buflen, format, args); ++ va_end(args); ++ return len; ++} ++ + /////////////////////////////////////////////////////////////////////////////// + // Allow safe comparing and copying ascii (not UTF-8) with both wide and + // non-wide character strings. diff --git a/libre/kdeutils-ark-libre/PKGBUILD b/libre/kdeutils-ark-libre/PKGBUILD index 8f3ff312b..0bda68d17 100644 --- a/libre/kdeutils-ark-libre/PKGBUILD +++ b/libre/kdeutils-ark-libre/PKGBUILD @@ -1,10 +1,10 @@ -# $Id: PKGBUILD 154731 2012-03-30 16:15:36Z andrea $ +# $Id: PKGBUILD 158207 2012-05-03 13:23:51Z andrea $ # Maintainer: Andrea Scarpino <andrea@archlinux.org> # Maintainer (Parabola): André Silva <andre.paulista@adinet.com.uy> _pkgname=kdeutils-ark pkgname=kdeutils-ark-libre -pkgver=4.8.2 +pkgver=4.8.3 pkgrel=1 pkgdesc='Archiving Tool' url='http://kde.org/applications/utilities/ark/' @@ -19,7 +19,7 @@ replaces=('kdeutils-ark') conflicts=('kdeutils-ark') install=${_pkgname}.install source=("http://download.kde.org/stable/${pkgver}/src/ark-${pkgver}.tar.xz") -sha1sums=('d39be864ed818dd49aeba84ca4c02c0e5813eadf') +sha1sums=('9ff1fff082f53f31d0d31f2570005ae551fd2164') build() { cd "${srcdir}" diff --git a/libre/lilo/.directory b/libre/lilo/.directory new file mode 100644 index 000000000..ba03b0e05 --- /dev/null +++ b/libre/lilo/.directory @@ -0,0 +1,2 @@ +[Dolphin] +Timestamp=2012,5,3,19,29,58 diff --git a/libre/lilo/PKGBUILD b/libre/lilo/PKGBUILD index 169037bc2..8103a1ac1 100644 --- a/libre/lilo/PKGBUILD +++ b/libre/lilo/PKGBUILD @@ -5,7 +5,7 @@ pkgname=lilo pkgver=23.2 -pkgrel=3 +pkgrel=3.1 pkgdesc="A bootloader for Linux (Parabola rebranded)" arch=('i686' 'x86_64') url="https://alioth.debian.org/projects/lilo/" @@ -19,9 +19,6 @@ backup=('etc/lilo.conf') depends=('device-mapper' 'coreutils') makedepends=('bin86' 'sharutils') optdepends=('perl: to use keytab-lilo') -replaces=('lilo') -conflicts=('lilo') -provides=("lilo=$pkgver") install=lilo.install options=('!makeflags') source=("http://lilo.alioth.debian.org/ftp/sources/${pkgname}-${pkgver}.tar.gz" diff --git a/libre/linux-libre-lts/PKGBUILD b/libre/linux-libre-lts/PKGBUILD index 535e87424..e8de15b08 100644 --- a/libre/linux-libre-lts/PKGBUILD +++ b/libre/linux-libre-lts/PKGBUILD @@ -12,7 +12,7 @@ _basekernel=3.0 _sublevel=30 pkgver=${_basekernel}.${_sublevel} _lxopkgver=${_basekernel}.30 # nearly always the same as pkgver -pkgrel=1 +pkgrel=2 arch=('i686' 'x86_64' 'mips64el') url="http://linux-libre.fsfla.org/" license=('GPL2') @@ -141,7 +141,7 @@ build() { package_linux-libre-lts() { pkgdesc="The Linux-libre Kernel and modules - stable longtime supported kernel package suitable for servers" - depends=('coreutils' 'module-init-tools>=3.16') + depends=('coreutils' 'kmod') optdepends=('crda: to set the correct wireless channels of your country') provides=('kernel26-lts' "linux-lts=$pkgver") conflicts=('kernel26-lts' 'kernel26-libre-lts' 'linux-lts') diff --git a/libre/linux-libre-lts/linux-libre-lts.install b/libre/linux-libre-lts/linux-libre-lts.install index 4dedb01f3..870545419 100644 --- a/libre/linux-libre-lts/linux-libre-lts.install +++ b/libre/linux-libre-lts/linux-libre-lts.install @@ -2,7 +2,7 @@ # arg 2: the old package version KERNEL_NAME=-lts -KERNEL_VERSION=3.0.30-1-LIBRE-LTS +KERNEL_VERSION=3.0.30-2-LIBRE-LTS post_install () { # updating module dependencies diff --git a/libre/linux-libre/PKGBUILD b/libre/linux-libre/PKGBUILD index 2022e0e50..45b4937e5 100644 --- a/libre/linux-libre/PKGBUILD +++ b/libre/linux-libre/PKGBUILD @@ -15,7 +15,7 @@ _basekernel=3.3 _sublevel=4 pkgver=${_basekernel}.${_sublevel} _lxopkgver=${_basekernel}.4 # nearly always the same as pkgver -pkgrel=1 +pkgrel=2 arch=('i686' 'x86_64' 'mips64el') url="http://linux-libre.fsfla.org/" license=('GPL2') @@ -146,7 +146,7 @@ build() { package_linux-libre() { pkgdesc="The Linux-libre Kernel and modules" groups=('base') - depends=('coreutils' 'module-init-tools>=3.16') + depends=('coreutils' 'kmod') optdepends=('crda: to set the correct wireless channels of your country') provides=('kernel26' "linux=$pkgver") conflicts=('kernel26' 'kernel26-libre' 'linux') diff --git a/libre/linux-libre/linux-libre.install b/libre/linux-libre/linux-libre.install index a0a1dae88..69465632c 100644 --- a/libre/linux-libre/linux-libre.install +++ b/libre/linux-libre/linux-libre.install @@ -2,7 +2,7 @@ # arg 2: the old package version KERNEL_NAME= -KERNEL_VERSION=3.3.4-1-LIBRE +KERNEL_VERSION=3.3.4-2-LIBRE post_install () { # updating module dependencies diff --git a/libre/parabola-archiso-git/PKGBUILD b/libre/parabola-archiso-git/PKGBUILD new file mode 100644 index 000000000..0b07ddf8d --- /dev/null +++ b/libre/parabola-archiso-git/PKGBUILD @@ -0,0 +1,45 @@ +# Maintainer: Sven-Hendrik Haase <sh@lutzhaase.com> +# Maintainer (Parabola): André Silva <andre.paulista@adinet.com.uy> +pkgname=parabola-archiso-git +pkgver=20120506 +pkgrel=1 +pkgdesc="Parabola GNU/Linux-libre livecd/liveusb generation scripts" +arch=('any') +url="https://parabolagnulinux.org" +license=('GPL') +depends=('libisoburn' 'squashfs-tools' 'rsync') +optdepends=('qemu: quickly test isos') +makedepends=('git') +provides=('archiso') +conflicts=('archiso') +source=() +md5sums=() + +_gitroot=git://parabolagnulinux.org/archiso.git +_gitname=archiso + +build() { + cd ${srcdir} + msg "Connecting to projects.parabolagnulinux.org GIT server..." + + if [ -d ${srcdir}/$_gitname ]; then + cd $_gitname && git pull origin + msg "The local files are updated." + else + git clone $_gitroot + fi + + msg "GIT checkout done or server timeout" + msg "Starting make..." + + if [ -d ${srcdir}/$_gitname-build ]; then + rm -rf ${srcdir}/$_gitname-build + fi + + git clone ${srcdir}/$_gitname ${srcdir}/$_gitname-build || return 1 + cd ${srcdir}/$_gitname-build/$_gitname || return 1 + + make DESTDIR="$pkgdir" install +} + +# vim:set ts=2 sw=2 et: diff --git a/libre/virtualbox-modules-lts/60-vboxguest.rules b/libre/virtualbox-modules-lts/60-vboxguest.rules new file mode 100644 index 000000000..6285f7249 --- /dev/null +++ b/libre/virtualbox-modules-lts/60-vboxguest.rules @@ -0,0 +1,2 @@ +ACTION=="add", KERNEL=="vboxguest", SUBSYSTEM=="misc", OWNER="root", MODE="0600" +ACTION=="add", KERNEL=="vboxuser", SUBSYSTEM=="misc", OWNER="root", MODE="0666" diff --git a/libre/virtualbox-modules-lts/LocalConfig.kmk b/libre/virtualbox-modules-lts/LocalConfig.kmk new file mode 100644 index 000000000..af79f90cd --- /dev/null +++ b/libre/virtualbox-modules-lts/LocalConfig.kmk @@ -0,0 +1,19 @@ +VBOX_WITH_ADDITION_DRIVERS = +VBOX_WITH_INSTALLER = 1 +VBOX_WITH_LINUX_ADDITIONS = 1 +VBOX_WITH_X11_ADDITIONS = +VBOX_WITH_TESTCASES = +VBOX_WITH_TESTSUITE = +VBOX_WITH_ORIGIN := +VBOX_PATH_APP_PRIVATE_ARCH := /usr/lib/virtualbox +VBOX_PATH_SHARED_LIBS := $(VBOX_PATH_APP_PRIVATE_ARCH) +VBOX_WITH_RUNPATH := $(VBOX_PATH_APP_PRIVATE_ARCH) +VBOX_PATH_APP_PRIVATE := /usr/share/virtualbox +VBOX_PATH_APP_DOCS := /usr/share/virtualbox +VBOX_WITH_REGISTRATION_REQUEST = +VBOX_WITH_UPDATE_REQUEST = +VBOX_WITH_VNC := 1 +VBOX_BLD_PYTHON = python2 +VBOX_JAVA_HOME = /usr/lib/jvm/java-6-openjdk +VBOX_GCC_WERR = +VBOX_GCC_WARN = diff --git a/libre/virtualbox-modules-lts/PKGBUILD b/libre/virtualbox-modules-lts/PKGBUILD new file mode 100644 index 000000000..8ff59d712 --- /dev/null +++ b/libre/virtualbox-modules-lts/PKGBUILD @@ -0,0 +1,101 @@ +# $Id$ +# Maintainer: Bartłomiej Piotrowski <nospam@bpiotrowski.pl> +# Maintainer (Parabola): Márcio Silva <coadde@adinet.com.uy> +# Maintainer (Parabola): André Silva <andre.paulista@adinet.com.uy> +# Maintainer (Parabola): Jorge López <jorginho@adinet.com.uy> + +pkgbase=virtualbox-modules-lts +pkgname=('virtualbox-modules-lts' 'virtualbox-parabola-modules-lts') +pkgver=4.1.14 +pkgrel=1 +arch=('i686' 'x86_64') +url='http://virtualbox.org' +license=('GPL') +makedepends=('libstdc++5' 'bin86' 'dev86' 'iasl' 'libxslt' 'libxml2' 'libpng' 'libidl2' 'xalan-c' 'sdl' 'linux-libre-lts' 'linux-libre-lts-headers') +[[ $CARCH == "x86_64" ]] && makedepends=("${makedepends[@]}" 'gcc-multilib' 'lib32-glibc') +source=(http://download.virtualbox.org/virtualbox/${pkgver}/VirtualBox-${pkgver}.tar.bz2 + LocalConfig.kmk 60-vboxguest.rules) +md5sums=('f8baa04e6d589bc6b1fb4e7079fbe414' + '4c88bd122677a35f68abd76eb01b378b' + 'ed1341881437455d9735875ddf455fbe') + +_extramodules=extramodules-3.0-LIBRE-LTS +_kernver=$(pacman -Ss linux-libre-lts | awk 'NR==1{print $2}')-LIBRE-LTS + +export KERN_DIR=/lib/modules/${_kernver}/build +export KERN_INCL=/usr/src/linux-${_kernver}/include/ + +build() { + cd "$srcdir/VirtualBox-${pkgver}" + + cp "$srcdir/LocalConfig.kmk" . + + ./configure \ + --with-linux=/usr/src/linux-${_kernver} \ + --disable-java \ + --disable-docs \ + --disable-xpcom \ + --disable-python \ + --disable-sdl-ttf \ + --disable-alsa \ + --disable-pulse \ + --disable-dbus \ + --disable-opengl \ + --build-headless \ + --nofatal + source ./env.sh + kmk all + + make -C "$srcdir/VirtualBox-${pkgver}/out/linux.$BUILD_PLATFORM_ARCH/release/bin/src" + make -C "$srcdir/VirtualBox-${pkgver}/out/linux.$BUILD_PLATFORM_ARCH/release/bin/additions/src" +} + +package_virtualbox-parabola-modules-lts(){ + pkgdesc="Additions only for Parabola guests (long-term supported kernel modules)" + license=('GPL') + install=virtualbox-parabola-modules-lts.install + depends=('linux-libre-lts>=3.0' 'linux-libre-lts<3.1') + replaces=('virtualbox-archlinux-modules-lts') + conflicts=('virtualbox-archlinux-modules-lts') + provides=("virtualbox-parabola-modules=$pkgver" "virtualbox-archlinux-modules=$pkgver" "virtualbox-archlinux-modules-lts=$pkgver") + + source "$srcdir/VirtualBox-${pkgver}/env.sh" + + cd "$srcdir/VirtualBox-${pkgver}/out/linux.$BUILD_PLATFORM_ARCH/release/bin/additions/src" + + for module in vboxguest.ko vboxsf.ko vboxvideo.ko; do + install -D -m644 ${module} \ + "$pkgdir/lib/modules/${_extramodules}/${module}" + done + + install -D -m 0644 "$srcdir/60-vboxguest.rules" \ + "$pkgdir/usr/lib/udev/rules.d/60-vboxguest.rules" + + find "${pkgdir}" -name '*.ko' -exec gzip -9 {} \; +} + +package_virtualbox-modules-lts(){ + pkgdesc="Long-term supported kernel modules for VirtualBox" + license=('GPL') + install=virtualbox-modules-lts.install + depends=('linux-libre-lts>=3.0' 'linux-libre-lts<3.1') + provides=("virtualbox-modules=$pkgver") + + source "$srcdir/VirtualBox-${pkgver}/env.sh" + + cd "$srcdir/VirtualBox-${pkgver}/out/linux.$BUILD_PLATFORM_ARCH/release/bin/src" + + install -D -m644 vboxdrv.ko \ + "$pkgdir/lib/modules/${_extramodules}/vboxdrv.ko" + + install -D -m644 vboxnetadp.ko \ + "$pkgdir/lib/modules/${_extramodules}/vboxnetadp.ko" + + install -D -m644 vboxnetflt.ko \ + "$pkgdir/lib/modules/${_extramodules}/vboxnetflt.ko" + + install -D -m644 vboxpci.ko \ + "$pkgdir/lib/modules/${_extramodules}/vboxpci.ko" + + find "${pkgdir}" -name '*.ko' -exec gzip -9 {} \; +} diff --git a/libre/virtualbox-modules-lts/virtualbox-modules-lts.install b/libre/virtualbox-modules-lts/virtualbox-modules-lts.install new file mode 100644 index 000000000..014fa0b88 --- /dev/null +++ b/libre/virtualbox-modules-lts/virtualbox-modules-lts.install @@ -0,0 +1,18 @@ +EXTRAMODULES='extramodules-3.0-LIBRE-LTS' + +post_install() { +/bin/cat << EOF +===> You must load vboxdrv module before starting VirtualBox: +===> # modprobe vboxdrv +EOF + depmod $(cat /lib/modules/$EXTRAMODULES/version) +} + +post_upgrade() { + depmod $(cat /lib/modules/$EXTRAMODULES/version) + echo 'In order to use the new version, reload all virtualbox modules manually.' +} + +post_remove() { + depmod $(cat /lib/modules/$EXTRAMODULES/version) +} diff --git a/libre/virtualbox-modules-lts/virtualbox-parabola-modules-lts.install b/libre/virtualbox-modules-lts/virtualbox-parabola-modules-lts.install new file mode 100644 index 000000000..80d966a9d --- /dev/null +++ b/libre/virtualbox-modules-lts/virtualbox-parabola-modules-lts.install @@ -0,0 +1,16 @@ +EXTRAMODULES='extramodules-3.0-LIBRE-LTS' + +post_install() { +cat << EOF +===> You may want to load vboxguest, vboxsf and vboxvideo +EOF + depmod $(cat /lib/modules/$EXTRAMODULES/version) +} + +post_upgrade() { + depmod $(cat /lib/modules/$EXTRAMODULES/version) +} + +post_remove() { + depmod $(cat /lib/modules/$EXTRAMODULES/version) +} diff --git a/libre/virtualbox-modules/PKGBUILD b/libre/virtualbox-modules/PKGBUILD index b171e1407..9b36d7cf3 100644 --- a/libre/virtualbox-modules/PKGBUILD +++ b/libre/virtualbox-modules/PKGBUILD @@ -6,14 +6,11 @@ pkgbase=virtualbox-modules pkgname=('virtualbox-modules' 'virtualbox-parabola-modules') pkgver=4.1.14 -pkgrel=2 +pkgrel=2.1 arch=('i686' 'x86_64') url='http://virtualbox.org' license=('GPL') makedepends=('libstdc++5' 'bin86' 'dev86' 'iasl' 'libxslt' 'libxml2' 'libpng' 'libidl2' 'xalan-c' 'sdl' 'linux-libre-headers') -replaces=('virtualbox-modules') -conflicts=('virtualbox-modules') -provides=("virtualbox-modules=$pkgver") [[ $CARCH == "x86_64" ]] && makedepends=("${makedepends[@]}" 'gcc-multilib' 'lib32-glibc') source=(http://download.virtualbox.org/virtualbox/${pkgver}/VirtualBox-${pkgver}.tar.bz2 LocalConfig.kmk 60-vboxguest.rules) @@ -57,8 +54,8 @@ package_virtualbox-parabola-modules(){ license=('GPL') install=virtualbox-parabola-modules.install depends=('linux-libre>=3.3' 'linux-libre<3.4') - replaces=('virtualbox-guest-modules' 'virtualbox-archlinux-modules') - conflicts=('virtualbox-guest-modules' 'virtualbox-archlinux-modules') + replaces=('virtualbox-archlinux-modules') + conflicts=('virtualbox-archlinux-modules') provides=("virtualbox-archlinux-modules=$pkgver") source "$srcdir/VirtualBox-${pkgver}/env.sh" |