| From gregkh@mini.kroah.org Thu Oct 16 10:49:20 2008 |
| Message-Id: <20081016174919.962532155@mini.kroah.org> |
| References: <20081016174814.734527827@mini.kroah.org> |
| User-Agent: quilt/0.46-1 |
| Date: Thu, 16 Oct 2008 10:48:15 -0700 |
| From: Greg KH <gregkh@suse.de> |
| To: linux-kernel@vger.kernel.org, |
| stable@kernel.org, |
| jejb@kernel.org |
| Cc: Justin Forbes <jmforbes@linuxtx.org>, |
| Zwane Mwaikambo <zwane@arm.linux.org.uk>, |
| Theodore Ts'o <tytso@mit.edu>, |
| Randy Dunlap <rdunlap@xenotime.net>, |
| Dave Jones <davej@redhat.com>, |
| Chuck Wolber <chuckw@quantumlinux.com>, |
| Chris Wedgwood <reviews@ml.cw.f00f.org>, |
| Michael Krufky <mkrufky@linuxtv.org>, |
| Chuck Ebbert <cebbert@redhat.com>, |
| Domenico Andreoli <cavokz@gmail.com>, |
| Willy Tarreau <w@1wt.eu>, |
| Rodrigo Rubira Branco <rbranco@la.checkpoint.com>, |
| Jake Edge <jake@lwn.net>, |
| Eugene Teo <eteo@redhat.com>, |
| torvalds@linux-foundation.org, |
| akpm@linux-foundation.org, |
| alan@lxorguk.ukuu.org.uk, |
| Dario Faggioli <raistlin@linux.it>, |
| Michael Trimarchi <trimarchimichael@yahoo.it>, |
| Peter Zijlstra <a.p.zijlstra@chello.nl>, |
| Ingo Molnar <mingo@elte.hu> |
| Subject: [patch 01/14] sched_rt.c: resch needed in rt_rq_enqueue() for the root rt_rq |
| Content-Disposition: inline; filename=sched_rt.c-resch-needed-in-rt_rq_enqueue-for-the-root-rt_rq.patch |
| Status: RO |
| Content-Length: 2361 |
| Lines: 65 |
| |
| 2.6.27-stable review patch. If anyone has any objections, please let us know. |
| |
| ------------------ |
| |
| From: Dario Faggioli <raistlin@linux.it> |
| |
| commit f6121f4f8708195e88cbdf8dd8d171b226b3f858 upstream |
| |
| While working on the new version of the code for SCHED_SPORADIC I |
| noticed something strange in the present throttling mechanism. More |
| specifically in the throttling timer handler in sched_rt.c |
| (do_sched_rt_period_timer()) and in rt_rq_enqueue(). |
| |
| The problem is that, when unthrottling a runqueue, rt_rq_enqueue() only |
| asks for rescheduling if the runqueue has a sched_entity associated to |
| it (i.e., rt_rq->rt_se != NULL). |
| Now, if the runqueue is the root rq (which has a rt_se = NULL) |
| rescheduling does not take place, and it is delayed to some undefined |
| instant in the future. |
| |
| This imply some random bandwidth usage by the RT tasks under throttling. |
| For instance, setting rt_runtime_us/rt_period_us = 950ms/1000ms an RT |
| task will get less than 95%. In our tests we got something varying |
| between 70% to 95%. |
| Using smaller time values, e.g., 95ms/100ms, things are even worse, and |
| I can see values also going down to 20-25%!! |
| |
| The tests we performed are simply running 'yes' as a SCHED_FIFO task, |
| and checking the CPU usage with top, but we can investigate thoroughly |
| if you think it is needed. |
| |
| Things go much better, for us, with the attached patch... Don't know if |
| it is the best approach, but it solved the issue for us. |
| |
| Signed-off-by: Dario Faggioli <raistlin@linux.it> |
| Signed-off-by: Michael Trimarchi <trimarchimichael@yahoo.it> |
| Acked-by: Peter Zijlstra <a.p.zijlstra@chello.nl> |
| Signed-off-by: Ingo Molnar <mingo@elte.hu> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> |
| |
| --- |
| kernel/sched_rt.c | 8 ++++---- |
| 1 file changed, 4 insertions(+), 4 deletions(-) |
| |
| --- a/kernel/sched_rt.c |
| +++ b/kernel/sched_rt.c |
| @@ -102,12 +102,12 @@ static void dequeue_rt_entity(struct sch |
| |
| static void sched_rt_rq_enqueue(struct rt_rq *rt_rq) |
| { |
| + struct task_struct *curr = rq_of_rt_rq(rt_rq)->curr; |
| struct sched_rt_entity *rt_se = rt_rq->rt_se; |
| |
| - if (rt_se && !on_rt_rq(rt_se) && rt_rq->rt_nr_running) { |
| - struct task_struct *curr = rq_of_rt_rq(rt_rq)->curr; |
| - |
| - enqueue_rt_entity(rt_se); |
| + if (rt_rq->rt_nr_running) { |
| + if (rt_se && !on_rt_rq(rt_se)) |
| + enqueue_rt_entity(rt_se); |
| if (rt_rq->highest_prio < curr->prio) |
| resched_task(curr); |
| } |
| |
| -- |
| |
| From gregkh@mini.kroah.org Thu Oct 16 10:49:20 2008 |
| Message-Id: <20081016174920.139705161@mini.kroah.org> |
| References: <20081016174814.734527827@mini.kroah.org> |
| User-Agent: quilt/0.46-1 |
| Date: Thu, 16 Oct 2008 10:48:16 -0700 |
| From: Greg KH <gregkh@suse.de> |
| To: linux-kernel@vger.kernel.org, |
| stable@kernel.org |
| Cc: Justin Forbes <jmforbes@linuxtx.org>, |
| Zwane Mwaikambo <zwane@arm.linux.org.uk>, |
| Theodore Ts'o <tytso@mit.edu>, |
| Randy Dunlap <rdunlap@xenotime.net>, |
| Dave Jones <davej@redhat.com>, |
| Chuck Wolber <chuckw@quantumlinux.com>, |
| Chris Wedgwood <reviews@ml.cw.f00f.org>, |
| Michael Krufky <mkrufky@linuxtv.org>, |
| Chuck Ebbert <cebbert@redhat.com>, |
| Domenico Andreoli <cavokz@gmail.com>, |
| Willy Tarreau <w@1wt.eu>, |
| Rodrigo Rubira Branco <rbranco@la.checkpoint.com>, |
| Jake Edge <jake@lwn.net>, |
| Eugene Teo <eteo@redhat.com>, |
| torvalds@linux-foundation.org, |
| akpm@linux-foundation.org, |
| alan@lxorguk.ukuu.org.uk, |
| Stefan Bader <stefan.bader@canonical.com>, |
| Ingo Molnar <mingo@elte.hu> |
| Subject: [patch 02/14] x86: Reserve FIRST_DEVICE_VECTOR in used_vectors bitmap. |
| Content-Disposition: inline; filename=x86-reserve-first_device_vector-in-used_vectors-bitmap.patch |
| Content-Length: 1508 |
| Lines: 44 |
| |
| 2.6.27-stable review patch. If anyone has any objections, please let us |
| know. |
| |
| ------------------ |
| From: Stefan Bader <stefan.bader@canonical.com> |
| |
| Not in upstream above 2.6.27 due to change in the way this code works |
| (has been fixed differently there.) |
| |
| Someone from the community found out, that after repeatedly unloading |
| and loading a device driver that uses MSI IRQs, the system eventually |
| assigned the vector initially reserved for IRQ0 to the device driver. |
| |
| The reason for this is, that although IRQ0 is tied to the |
| FIRST_DEVICE_VECTOR when declaring the irq_vector table, the |
| corresponding bit in the used_vectors map is not set. So, if vectors are |
| released and assigned often enough, the vector will get assigned to |
| another interrupt. This happens more often with MSI interrupts as those |
| are exclusively using a vector. |
| |
| Fix this by setting the bit for the FIRST_DEVICE_VECTOR in the bitmap. |
| |
| Signed-off-by: Stefan Bader <stefan.bader@canonical.com> |
| Acked-by: Ingo Molnar <mingo@elte.hu> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> |
| |
| --- |
| arch/x86/kernel/io_apic_32.c | 3 +++ |
| 1 file changed, 3 insertions(+) |
| |
| --- a/arch/x86/kernel/io_apic_32.c |
| +++ b/arch/x86/kernel/io_apic_32.c |
| @@ -2314,6 +2314,9 @@ void __init setup_IO_APIC(void) |
| for (i = first_system_vector; i < NR_VECTORS; i++) |
| set_bit(i, used_vectors); |
| |
| + /* Mark FIRST_DEVICE_VECTOR which is assigned to IRQ0 as used. */ |
| + set_bit(FIRST_DEVICE_VECTOR, used_vectors); |
| + |
| enable_IO_APIC(); |
| |
| io_apic_irqs = ~PIC_IRQS; |
| |
| -- |
| |
| From gregkh@mini.kroah.org Thu Oct 16 10:49:20 2008 |
| Message-Id: <20081016174920.339859581@mini.kroah.org> |
| References: <20081016174814.734527827@mini.kroah.org> |
| User-Agent: quilt/0.46-1 |
| Date: Thu, 16 Oct 2008 10:48:17 -0700 |
| From: Greg KH <gregkh@suse.de> |
| To: linux-kernel@vger.kernel.org, |
| stable@kernel.org |
| Cc: Justin Forbes <jmforbes@linuxtx.org>, |
| Zwane Mwaikambo <zwane@arm.linux.org.uk>, |
| Theodore Ts'o <tytso@mit.edu>, |
| Randy Dunlap <rdunlap@xenotime.net>, |
| Dave Jones <davej@redhat.com>, |
| Chuck Wolber <chuckw@quantumlinux.com>, |
| Chris Wedgwood <reviews@ml.cw.f00f.org>, |
| Michael Krufky <mkrufky@linuxtv.org>, |
| Chuck Ebbert <cebbert@redhat.com>, |
| Domenico Andreoli <cavokz@gmail.com>, |
| Willy Tarreau <w@1wt.eu>, |
| Rodrigo Rubira Branco <rbranco@la.checkpoint.com>, |
| Jake Edge <jake@lwn.net>, |
| Eugene Teo <eteo@redhat.com>, |
| torvalds@linux-foundation.org, |
| akpm@linux-foundation.org, |
| alan@lxorguk.ukuu.org.uk, |
| linux-wireless <linux-wireless@vger.kernel.org>, |
| John Linville <linville@tuxdriver.com>, |
| Johannes Berg <johannes@sipsolutions.net> |
| Subject: [patch 03/14] mac80211: fix two issues in debugfs |
| Content-Disposition: inline; filename=mac80211-fix-two-issues-in-debugfs.patch |
| Content-Length: 1802 |
| Lines: 60 |
| |
| 2.6.27-stable review patch. If anyone has any objections, please let us |
| know. |
| |
| ------------------ |
| From: Johannes Berg <johannes@sipsolutions.net> |
| |
| Not in trees above 2.6.27 as it is fixed differently in .28. |
| |
| This fixes RHBZ 466264, whenever the master interface is |
| renamed this code would BUG_ON. Also fixes a separately |
| reported bug with the debugfs dir being NULL. |
| |
| This patch is not applicable to the next kernel version |
| because both these issues have been fixed, the first one |
| by not having the master interface have a ieee80211_ptr |
| at all, and the second one by also leaving the function |
| early. |
| |
| Signed-off-by: Johannes Berg <johannes@sipsolutions.net> |
| Cc: John Linville <linville@tuxdriver.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> |
| |
| --- |
| net/mac80211/debugfs_netdev.c | 14 ++++++++++++-- |
| 1 file changed, 12 insertions(+), 2 deletions(-) |
| |
| --- a/net/mac80211/debugfs_netdev.c |
| +++ b/net/mac80211/debugfs_netdev.c |
| @@ -537,6 +537,7 @@ static int netdev_notify(struct notifier |
| { |
| struct net_device *dev = ndev; |
| struct dentry *dir; |
| + struct ieee80211_local *local; |
| struct ieee80211_sub_if_data *sdata; |
| char buf[10+IFNAMSIZ]; |
| |
| @@ -549,10 +550,19 @@ static int netdev_notify(struct notifier |
| if (dev->ieee80211_ptr->wiphy->privid != mac80211_wiphy_privid) |
| return 0; |
| |
| - sdata = IEEE80211_DEV_TO_SUB_IF(dev); |
| + /* |
| + * Do not use IEEE80211_DEV_TO_SUB_IF because that |
| + * BUG_ONs for the master netdev which we need to |
| + * handle here. |
| + */ |
| + sdata = netdev_priv(dev); |
| |
| - sprintf(buf, "netdev:%s", dev->name); |
| dir = sdata->debugfsdir; |
| + |
| + if (!dir) |
| + return 0; |
| + |
| + sprintf(buf, "netdev:%s", dev->name); |
| if (!debugfs_rename(dir->d_parent, dir, dir->d_parent, buf)) |
| printk(KERN_ERR "mac80211: debugfs: failed to rename debugfs " |
| "dir to %s\n", buf); |
| |
| -- |
| |
| From gregkh@mini.kroah.org Thu Oct 16 10:49:20 2008 |
| Message-Id: <20081016174920.508653449@mini.kroah.org> |
| References: <20081016174814.734527827@mini.kroah.org> |
| User-Agent: quilt/0.46-1 |
| Date: Thu, 16 Oct 2008 10:48:18 -0700 |
| From: Greg KH <gregkh@suse.de> |
| To: linux-kernel@vger.kernel.org, |
| stable@kernel.org |
| Cc: Justin Forbes <jmforbes@linuxtx.org>, |
| Zwane Mwaikambo <zwane@arm.linux.org.uk>, |
| Theodore Ts'o <tytso@mit.edu>, |
| Randy Dunlap <rdunlap@xenotime.net>, |
| Dave Jones <davej@redhat.com>, |
| Chuck Wolber <chuckw@quantumlinux.com>, |
| Chris Wedgwood <reviews@ml.cw.f00f.org>, |
| Michael Krufky <mkrufky@linuxtv.org>, |
| Chuck Ebbert <cebbert@redhat.com>, |
| Domenico Andreoli <cavokz@gmail.com>, |
| Willy Tarreau <w@1wt.eu>, |
| Rodrigo Rubira Branco <rbranco@la.checkpoint.com>, |
| Jake Edge <jake@lwn.net>, |
| Eugene Teo <eteo@redhat.com>, |
| torvalds@linux-foundation.org, |
| akpm@linux-foundation.org, |
| alan@lxorguk.ukuu.org.uk, |
| Christoph Hellwig <hch@lst.de>, |
| Tim Shimmin <tes@sgi.com> |
| Subject: [patch 04/14] Fix barrier fail detection in XFS |
| Content-Disposition: inline; filename=fix-barrier-fail-detection-in-xfs.patch |
| Content-Length: 3302 |
| Lines: 89 |
| |
| 2.6.27-stable review patch. If anyone has any objections, please let us |
| know. |
| |
| ------------------ |
| From: Christoph Hellwig <hch@lst.de> |
| |
| commit 73f6aa4d44ab6157badc456ddfa05b31e58de5f0 upstream. |
| |
| Currently we disable barriers as soon as we get a buffer in xlog_iodone |
| that has the XBF_ORDERED flag cleared. But this can be the case not only |
| for buffers where the barrier failed, but also the first buffer of a |
| split log write in case of a log wraparound. Due to the disabled |
| barriers we can easily get directory corruption on unclean shutdowns. |
| So instead of using this check add a new buffer flag for failed barrier |
| writes. |
| |
| This is a regression vs 2.6.26 caused by patch to use the right macro |
| to check for the ORDERED flag, as we previously got true returned for |
| every buffer. |
| |
| Thanks to Toei Rei for reporting the bug. |
| |
| Signed-off-by: Christoph Hellwig <hch@lst.de> |
| Reviewed-by: Eric Sandeen <sandeen@sandeen.net> |
| Reviewed-by: David Chinner <david@fromorbit.com> |
| Signed-off-by: Tim Shimmin <tes@sgi.com> |
| Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> |
| |
| --- |
| fs/xfs/linux-2.6/xfs_buf.c | 3 ++- |
| fs/xfs/linux-2.6/xfs_buf.h | 8 ++++++++ |
| fs/xfs/xfs_log.c | 7 ++++--- |
| 3 files changed, 14 insertions(+), 4 deletions(-) |
| |
| --- a/fs/xfs/linux-2.6/xfs_buf.c |
| +++ b/fs/xfs/linux-2.6/xfs_buf.c |
| @@ -1001,12 +1001,13 @@ xfs_buf_iodone_work( |
| * We can get an EOPNOTSUPP to ordered writes. Here we clear the |
| * ordered flag and reissue them. Because we can't tell the higher |
| * layers directly that they should not issue ordered I/O anymore, they |
| - * need to check if the ordered flag was cleared during I/O completion. |
| + * need to check if the _XFS_BARRIER_FAILED flag was set during I/O completion. |
| */ |
| if ((bp->b_error == EOPNOTSUPP) && |
| (bp->b_flags & (XBF_ORDERED|XBF_ASYNC)) == (XBF_ORDERED|XBF_ASYNC)) { |
| XB_TRACE(bp, "ordered_retry", bp->b_iodone); |
| bp->b_flags &= ~XBF_ORDERED; |
| + bp->b_flags |= _XFS_BARRIER_FAILED; |
| xfs_buf_iorequest(bp); |
| } else if (bp->b_iodone) |
| (*(bp->b_iodone))(bp); |
| --- a/fs/xfs/linux-2.6/xfs_buf.h |
| +++ b/fs/xfs/linux-2.6/xfs_buf.h |
| @@ -85,6 +85,14 @@ typedef enum { |
| * modifications being lost. |
| */ |
| _XBF_PAGE_LOCKED = (1 << 22), |
| + |
| + /* |
| + * If we try a barrier write, but it fails we have to communicate |
| + * this to the upper layers. Unfortunately b_error gets overwritten |
| + * when the buffer is re-issued so we have to add another flag to |
| + * keep this information. |
| + */ |
| + _XFS_BARRIER_FAILED = (1 << 23), |
| } xfs_buf_flags_t; |
| |
| typedef enum { |
| --- a/fs/xfs/xfs_log.c |
| +++ b/fs/xfs/xfs_log.c |
| @@ -1033,11 +1033,12 @@ xlog_iodone(xfs_buf_t *bp) |
| l = iclog->ic_log; |
| |
| /* |
| - * If the ordered flag has been removed by a lower |
| - * layer, it means the underlyin device no longer supports |
| + * If the _XFS_BARRIER_FAILED flag was set by a lower |
| + * layer, it means the underlying device no longer supports |
| * barrier I/O. Warn loudly and turn off barriers. |
| */ |
| - if ((l->l_mp->m_flags & XFS_MOUNT_BARRIER) && !XFS_BUF_ISORDERED(bp)) { |
| + if (bp->b_flags & _XFS_BARRIER_FAILED) { |
| + bp->b_flags &= ~_XFS_BARRIER_FAILED; |
| l->l_mp->m_flags &= ~XFS_MOUNT_BARRIER; |
| xfs_fs_cmn_err(CE_WARN, l->l_mp, |
| "xlog_iodone: Barriers are no longer supported" |
| |
| -- |
| |
| From gregkh@mini.kroah.org Thu Oct 16 10:49:20 2008 |
| Message-Id: <20081016174920.680560563@mini.kroah.org> |
| References: <20081016174814.734527827@mini.kroah.org> |
| User-Agent: quilt/0.46-1 |
| Date: Thu, 16 Oct 2008 10:48:19 -0700 |
| From: Greg KH <gregkh@suse.de> |
| To: linux-kernel@vger.kernel.org, |
| stable@kernel.org |
| Cc: Justin Forbes <jmforbes@linuxtx.org>, |
| Zwane Mwaikambo <zwane@arm.linux.org.uk>, |
| Theodore Ts'o <tytso@mit.edu>, |
| Randy Dunlap <rdunlap@xenotime.net>, |
| Dave Jones <davej@redhat.com>, |
| Chuck Wolber <chuckw@quantumlinux.com>, |
| Chris Wedgwood <reviews@ml.cw.f00f.org>, |
| Michael Krufky <mkrufky@linuxtv.org>, |
| Chuck Ebbert <cebbert@redhat.com>, |
| Domenico Andreoli <cavokz@gmail.com>, |
| Willy Tarreau <w@1wt.eu>, |
| Rodrigo Rubira Branco <rbranco@la.checkpoint.com>, |
| Jake Edge <jake@lwn.net>, |
| Eugene Teo <eteo@redhat.com>, |
| torvalds@linux-foundation.org, |
| akpm@linux-foundation.org, |
| alan@lxorguk.ukuu.org.uk, |
| Alan Cox <alan@redhat.com> |
| Subject: [patch 05/14] tty: Termios locking - sort out real_tty confusions and lock reads |
| Content-Disposition: inline; filename=tty-termios-locking-sort-out-real_tty-confusions-and-lock-reads.patch |
| Content-Length: 904 |
| Lines: 34 |
| |
| 2.6.27-stable review patch. If anyone has any objections, please let us |
| know. |
| |
| ------------------ |
| From: Alan Cox <alan@redhat.com> |
| |
| commit 8f520021837d45c47d0ab57e7271f8d88bf7f3a4 upstream |
| |
| (only the tty_io.c portion of this commit) |
| |
| This moves us towards sanity and should mean our termios locking is now |
| complete and comprehensive. |
| |
| Signed-off-by: Alan Cox <alan@redhat.com> |
| Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> |
| |
| --- |
| drivers/char/tty_io.c | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| --- a/drivers/char/tty_io.c |
| +++ b/drivers/char/tty_io.c |
| @@ -2996,7 +2996,7 @@ long tty_ioctl(struct file *file, unsign |
| case TIOCSTI: |
| return tiocsti(tty, p); |
| case TIOCGWINSZ: |
| - return tiocgwinsz(tty, p); |
| + return tiocgwinsz(real_tty, p); |
| case TIOCSWINSZ: |
| return tiocswinsz(tty, real_tty, p); |
| case TIOCCONS: |
| |
| -- |
| |
| From gregkh@mini.kroah.org Thu Oct 16 10:49:21 2008 |
| Message-Id: <20081016174920.854285645@mini.kroah.org> |
| References: <20081016174814.734527827@mini.kroah.org> |
| User-Agent: quilt/0.46-1 |
| Date: Thu, 16 Oct 2008 10:48:20 -0700 |
| From: Greg KH <gregkh@suse.de> |
| To: linux-kernel@vger.kernel.org, |
| stable@kernel.org, |
| jejb@kernel.org |
| Cc: Justin Forbes <jmforbes@linuxtx.org>, |
| Zwane Mwaikambo <zwane@arm.linux.org.uk>, |
| Theodore Ts'o <tytso@mit.edu>, |
| Randy Dunlap <rdunlap@xenotime.net>, |
| Dave Jones <davej@redhat.com>, |
| Chuck Wolber <chuckw@quantumlinux.com>, |
| Chris Wedgwood <reviews@ml.cw.f00f.org>, |
| Michael Krufky <mkrufky@linuxtv.org>, |
| Chuck Ebbert <cebbert@redhat.com>, |
| Domenico Andreoli <cavokz@gmail.com>, |
| Willy Tarreau <w@1wt.eu>, |
| Rodrigo Rubira Branco <rbranco@la.checkpoint.com>, |
| Jake Edge <jake@lwn.net>, |
| Eugene Teo <eteo@redhat.com>, |
| torvalds@linux-foundation.org, |
| akpm@linux-foundation.org, |
| alan@lxorguk.ukuu.org.uk, |
| Jeff Layton <jlayton@redhat.com>, |
| Steve French <sfrench@us.ibm.com> |
| Subject: [patch 06/14] CIFS: make sure we have the right resume info before calling CIFSFindNext |
| Content-Disposition: inline; filename=cifs-make-sure-we-have-the-right-resume-info-before-calling-cifsfindnext.patch |
| Content-Length: 7817 |
| Lines: 214 |
| |
| 2.6.27-stable review patch. If anyone has any objections, please let us |
| know. |
| |
| ------------------ |
| From: Steve French <sfrench@us.ibm.com> |
| |
| commit 0752f1522a9120f731232919f7ad904e9e22b8ce upstream |
| |
| When we do a seekdir() or equivalent, we usually end up doing a |
| FindFirst call and then call FindNext until we get to the offset that we |
| want. The problem is that when we call FindNext, the code usually |
| doesn't have the proper info (mostly, the filename of the entry from the |
| last search) to resume the search. |
| |
| Add a "last_entry" field to the cifs_search_info that points to the last |
| entry in the search. We calculate this pointer by using the |
| LastNameOffset field from the search parms that are returned. We then |
| use that info to do a cifs_save_resume_key before we call CIFSFindNext. |
| |
| This patch allows CIFS to reliably pass the "telldir" connectathon test. |
| |
| Signed-off-by: Jeff Layton <jlayton@redhat.com> |
| Signed-off-by: Steve French <sfrench@us.ibm.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> |
| |
| --- |
| fs/cifs/cifsglob.h | 1 |
| fs/cifs/cifssmb.c | 4 + |
| fs/cifs/readdir.c | 128 ++++++++++++++++++++++++++--------------------------- |
| 3 files changed, 70 insertions(+), 63 deletions(-) |
| |
| --- a/fs/cifs/cifsglob.h |
| +++ b/fs/cifs/cifsglob.h |
| @@ -309,6 +309,7 @@ struct cifs_search_info { |
| __u32 resume_key; |
| char *ntwrk_buf_start; |
| char *srch_entries_start; |
| + char *last_entry; |
| char *presume_name; |
| unsigned int resume_name_len; |
| bool endOfSearch:1; |
| --- a/fs/cifs/cifssmb.c |
| +++ b/fs/cifs/cifssmb.c |
| @@ -3636,6 +3636,8 @@ findFirstRetry: |
| le16_to_cpu(parms->SearchCount); |
| psrch_inf->index_of_last_entry = 2 /* skip . and .. */ + |
| psrch_inf->entries_in_buffer; |
| + psrch_inf->last_entry = psrch_inf->srch_entries_start + |
| + le16_to_cpu(parms->LastNameOffset); |
| *pnetfid = parms->SearchHandle; |
| } else { |
| cifs_buf_release(pSMB); |
| @@ -3751,6 +3753,8 @@ int CIFSFindNext(const int xid, struct c |
| le16_to_cpu(parms->SearchCount); |
| psrch_inf->index_of_last_entry += |
| psrch_inf->entries_in_buffer; |
| + psrch_inf->last_entry = psrch_inf->srch_entries_start + |
| + le16_to_cpu(parms->LastNameOffset); |
| /* cFYI(1,("fnxt2 entries in buf %d index_of_last %d", |
| psrch_inf->entries_in_buffer, psrch_inf->index_of_last_entry)); */ |
| |
| --- a/fs/cifs/readdir.c |
| +++ b/fs/cifs/readdir.c |
| @@ -640,6 +640,70 @@ static int is_dir_changed(struct file *f |
| |
| } |
| |
| +static int cifs_save_resume_key(const char *current_entry, |
| + struct cifsFileInfo *cifsFile) |
| +{ |
| + int rc = 0; |
| + unsigned int len = 0; |
| + __u16 level; |
| + char *filename; |
| + |
| + if ((cifsFile == NULL) || (current_entry == NULL)) |
| + return -EINVAL; |
| + |
| + level = cifsFile->srch_inf.info_level; |
| + |
| + if (level == SMB_FIND_FILE_UNIX) { |
| + FILE_UNIX_INFO *pFindData = (FILE_UNIX_INFO *)current_entry; |
| + |
| + filename = &pFindData->FileName[0]; |
| + if (cifsFile->srch_inf.unicode) { |
| + len = cifs_unicode_bytelen(filename); |
| + } else { |
| + /* BB should we make this strnlen of PATH_MAX? */ |
| + len = strnlen(filename, PATH_MAX); |
| + } |
| + cifsFile->srch_inf.resume_key = pFindData->ResumeKey; |
| + } else if (level == SMB_FIND_FILE_DIRECTORY_INFO) { |
| + FILE_DIRECTORY_INFO *pFindData = |
| + (FILE_DIRECTORY_INFO *)current_entry; |
| + filename = &pFindData->FileName[0]; |
| + len = le32_to_cpu(pFindData->FileNameLength); |
| + cifsFile->srch_inf.resume_key = pFindData->FileIndex; |
| + } else if (level == SMB_FIND_FILE_FULL_DIRECTORY_INFO) { |
| + FILE_FULL_DIRECTORY_INFO *pFindData = |
| + (FILE_FULL_DIRECTORY_INFO *)current_entry; |
| + filename = &pFindData->FileName[0]; |
| + len = le32_to_cpu(pFindData->FileNameLength); |
| + cifsFile->srch_inf.resume_key = pFindData->FileIndex; |
| + } else if (level == SMB_FIND_FILE_ID_FULL_DIR_INFO) { |
| + SEARCH_ID_FULL_DIR_INFO *pFindData = |
| + (SEARCH_ID_FULL_DIR_INFO *)current_entry; |
| + filename = &pFindData->FileName[0]; |
| + len = le32_to_cpu(pFindData->FileNameLength); |
| + cifsFile->srch_inf.resume_key = pFindData->FileIndex; |
| + } else if (level == SMB_FIND_FILE_BOTH_DIRECTORY_INFO) { |
| + FILE_BOTH_DIRECTORY_INFO *pFindData = |
| + (FILE_BOTH_DIRECTORY_INFO *)current_entry; |
| + filename = &pFindData->FileName[0]; |
| + len = le32_to_cpu(pFindData->FileNameLength); |
| + cifsFile->srch_inf.resume_key = pFindData->FileIndex; |
| + } else if (level == SMB_FIND_FILE_INFO_STANDARD) { |
| + FIND_FILE_STANDARD_INFO *pFindData = |
| + (FIND_FILE_STANDARD_INFO *)current_entry; |
| + filename = &pFindData->FileName[0]; |
| + /* one byte length, no name conversion */ |
| + len = (unsigned int)pFindData->FileNameLength; |
| + cifsFile->srch_inf.resume_key = pFindData->ResumeKey; |
| + } else { |
| + cFYI(1, ("Unknown findfirst level %d", level)); |
| + return -EINVAL; |
| + } |
| + cifsFile->srch_inf.resume_name_len = len; |
| + cifsFile->srch_inf.presume_name = filename; |
| + return rc; |
| +} |
| + |
| /* find the corresponding entry in the search */ |
| /* Note that the SMB server returns search entries for . and .. which |
| complicates logic here if we choose to parse for them and we do not |
| @@ -703,6 +767,7 @@ static int find_cifs_entry(const int xid |
| while ((index_to_find >= cifsFile->srch_inf.index_of_last_entry) && |
| (rc == 0) && !cifsFile->srch_inf.endOfSearch) { |
| cFYI(1, ("calling findnext2")); |
| + cifs_save_resume_key(cifsFile->srch_inf.last_entry, cifsFile); |
| rc = CIFSFindNext(xid, pTcon, cifsFile->netfid, |
| &cifsFile->srch_inf); |
| if (rc) |
| @@ -919,69 +984,6 @@ static int cifs_filldir(char *pfindEntry |
| return rc; |
| } |
| |
| -static int cifs_save_resume_key(const char *current_entry, |
| - struct cifsFileInfo *cifsFile) |
| -{ |
| - int rc = 0; |
| - unsigned int len = 0; |
| - __u16 level; |
| - char *filename; |
| - |
| - if ((cifsFile == NULL) || (current_entry == NULL)) |
| - return -EINVAL; |
| - |
| - level = cifsFile->srch_inf.info_level; |
| - |
| - if (level == SMB_FIND_FILE_UNIX) { |
| - FILE_UNIX_INFO *pFindData = (FILE_UNIX_INFO *)current_entry; |
| - |
| - filename = &pFindData->FileName[0]; |
| - if (cifsFile->srch_inf.unicode) { |
| - len = cifs_unicode_bytelen(filename); |
| - } else { |
| - /* BB should we make this strnlen of PATH_MAX? */ |
| - len = strnlen(filename, PATH_MAX); |
| - } |
| - cifsFile->srch_inf.resume_key = pFindData->ResumeKey; |
| - } else if (level == SMB_FIND_FILE_DIRECTORY_INFO) { |
| - FILE_DIRECTORY_INFO *pFindData = |
| - (FILE_DIRECTORY_INFO *)current_entry; |
| - filename = &pFindData->FileName[0]; |
| - len = le32_to_cpu(pFindData->FileNameLength); |
| - cifsFile->srch_inf.resume_key = pFindData->FileIndex; |
| - } else if (level == SMB_FIND_FILE_FULL_DIRECTORY_INFO) { |
| - FILE_FULL_DIRECTORY_INFO *pFindData = |
| - (FILE_FULL_DIRECTORY_INFO *)current_entry; |
| - filename = &pFindData->FileName[0]; |
| - len = le32_to_cpu(pFindData->FileNameLength); |
| - cifsFile->srch_inf.resume_key = pFindData->FileIndex; |
| - } else if (level == SMB_FIND_FILE_ID_FULL_DIR_INFO) { |
| - SEARCH_ID_FULL_DIR_INFO *pFindData = |
| - (SEARCH_ID_FULL_DIR_INFO *)current_entry; |
| - filename = &pFindData->FileName[0]; |
| - len = le32_to_cpu(pFindData->FileNameLength); |
| - cifsFile->srch_inf.resume_key = pFindData->FileIndex; |
| - } else if (level == SMB_FIND_FILE_BOTH_DIRECTORY_INFO) { |
| - FILE_BOTH_DIRECTORY_INFO *pFindData = |
| - (FILE_BOTH_DIRECTORY_INFO *)current_entry; |
| - filename = &pFindData->FileName[0]; |
| - len = le32_to_cpu(pFindData->FileNameLength); |
| - cifsFile->srch_inf.resume_key = pFindData->FileIndex; |
| - } else if (level == SMB_FIND_FILE_INFO_STANDARD) { |
| - FIND_FILE_STANDARD_INFO *pFindData = |
| - (FIND_FILE_STANDARD_INFO *)current_entry; |
| - filename = &pFindData->FileName[0]; |
| - /* one byte length, no name conversion */ |
| - len = (unsigned int)pFindData->FileNameLength; |
| - cifsFile->srch_inf.resume_key = pFindData->ResumeKey; |
| - } else { |
| - cFYI(1, ("Unknown findfirst level %d", level)); |
| - return -EINVAL; |
| - } |
| - cifsFile->srch_inf.resume_name_len = len; |
| - cifsFile->srch_inf.presume_name = filename; |
| - return rc; |
| -} |
| |
| int cifs_readdir(struct file *file, void *direntry, filldir_t filldir) |
| { |
| |
| -- |
| |
| From gregkh@mini.kroah.org Thu Oct 16 10:49:21 2008 |
| Message-Id: <20081016174921.039353301@mini.kroah.org> |
| References: <20081016174814.734527827@mini.kroah.org> |
| User-Agent: quilt/0.46-1 |
| Date: Thu, 16 Oct 2008 10:48:21 -0700 |
| From: Greg KH <gregkh@suse.de> |
| To: linux-kernel@vger.kernel.org, |
| stable@kernel.org, |
| jejb@kernel.org |
| Cc: Justin Forbes <jmforbes@linuxtx.org>, |
| Zwane Mwaikambo <zwane@arm.linux.org.uk>, |
| Theodore Ts'o <tytso@mit.edu>, |
| Randy Dunlap <rdunlap@xenotime.net>, |
| Dave Jones <davej@redhat.com>, |
| Chuck Wolber <chuckw@quantumlinux.com>, |
| Chris Wedgwood <reviews@ml.cw.f00f.org>, |
| Michael Krufky <mkrufky@linuxtv.org>, |
| Chuck Ebbert <cebbert@redhat.com>, |
| Domenico Andreoli <cavokz@gmail.com>, |
| Willy Tarreau <w@1wt.eu>, |
| Rodrigo Rubira Branco <rbranco@la.checkpoint.com>, |
| Jake Edge <jake@lwn.net>, |
| Eugene Teo <eteo@redhat.com>, |
| torvalds@linux-foundation.org, |
| akpm@linux-foundation.org, |
| alan@lxorguk.ukuu.org.uk, |
| Henrique de Moraes Holschuh <hmh@hmh.eng.br>, |
| Ivo van Doorn <IvDoorn@gmail.com>, |
| "John W. Linville" <linville@tuxdriver.com> |
| Subject: [patch 07/14] rfkill: update LEDs for all state changes |
| Content-Disposition: inline; filename=rfkill-update-leds-for-all-state-changes.patch |
| Content-Length: 1581 |
| Lines: 52 |
| |
| 2.6.27-stable review patch. If anyone has any objections, please let us |
| know. |
| |
| ------------------ |
| From: Henrique de Moraes Holschuh <hmh@hmh.eng.br> |
| |
| commit 417bd25ac4c6f76c8aafe8a584f3620f4a936b72 upstream |
| |
| The LED state was not being updated by rfkill_force_state(), which |
| will cause regressions in wireless drivers that had old-style rfkill |
| support and are updated to use rfkill_force_state(). |
| |
| The LED state was not being updated when a change was detected through |
| the rfkill->get_state() hook, either. |
| |
| Move the LED trigger update calls into notify_rfkill_state_change(), |
| where it should have been in the first place. This takes care of both |
| issues above. |
| |
| Signed-off-by: Henrique de Moraes Holschuh <hmh@hmh.eng.br> |
| Acked-by: Ivo van Doorn <IvDoorn@gmail.com> |
| Signed-off-by: John W. Linville <linville@tuxdriver.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> |
| |
| --- |
| net/rfkill/rfkill.c | 5 ++--- |
| 1 file changed, 2 insertions(+), 3 deletions(-) |
| |
| --- a/net/rfkill/rfkill.c |
| +++ b/net/rfkill/rfkill.c |
| @@ -117,6 +117,7 @@ static void rfkill_led_trigger_activate( |
| |
| static void notify_rfkill_state_change(struct rfkill *rfkill) |
| { |
| + rfkill_led_trigger(rfkill, rfkill->state); |
| blocking_notifier_call_chain(&rfkill_notifier_list, |
| RFKILL_STATE_CHANGED, |
| rfkill); |
| @@ -204,10 +205,8 @@ static int rfkill_toggle_radio(struct rf |
| rfkill->state = state; |
| } |
| |
| - if (force || rfkill->state != oldstate) { |
| - rfkill_led_trigger(rfkill, rfkill->state); |
| + if (force || rfkill->state != oldstate) |
| notify_rfkill_state_change(rfkill); |
| - } |
| |
| return retval; |
| } |
| |
| -- |
| |
| From gregkh@mini.kroah.org Thu Oct 16 10:49:21 2008 |
| Message-Id: <20081016174921.239552000@mini.kroah.org> |
| References: <20081016174814.734527827@mini.kroah.org> |
| User-Agent: quilt/0.46-1 |
| Date: Thu, 16 Oct 2008 10:48:22 -0700 |
| From: Greg KH <gregkh@suse.de> |
| To: linux-kernel@vger.kernel.org, |
| stable@kernel.org, |
| jejb@kernel.org |
| Cc: Justin Forbes <jmforbes@linuxtx.org>, |
| Zwane Mwaikambo <zwane@arm.linux.org.uk>, |
| Theodore Ts'o <tytso@mit.edu>, |
| Randy Dunlap <rdunlap@xenotime.net>, |
| Dave Jones <davej@redhat.com>, |
| Chuck Wolber <chuckw@quantumlinux.com>, |
| Chris Wedgwood <reviews@ml.cw.f00f.org>, |
| Michael Krufky <mkrufky@linuxtv.org>, |
| Chuck Ebbert <cebbert@redhat.com>, |
| Domenico Andreoli <cavokz@gmail.com>, |
| Willy Tarreau <w@1wt.eu>, |
| Rodrigo Rubira Branco <rbranco@la.checkpoint.com>, |
| Jake Edge <jake@lwn.net>, |
| Eugene Teo <eteo@redhat.com>, |
| torvalds@linux-foundation.org, |
| akpm@linux-foundation.org, |
| alan@lxorguk.ukuu.org.uk, |
| Dan Williams <dcbw@redhat.com>, |
| "John W. Linville" <linville@tuxdriver.com> |
| Subject: [patch 08/14] libertas: clear current command on card removal |
| Content-Disposition: inline; filename=libertas-clear-current-command-on-card-removal.patch |
| Content-Length: 2320 |
| Lines: 67 |
| |
| 2.6.27-stable review patch. If anyone has any objections, please let us |
| know. |
| |
| ------------------ |
| From: Dan Williams <dcbw@redhat.com> |
| |
| commit 71b35f3abeb8f7f7e0afd7573424540cc5aae2d5 upstream |
| |
| If certain commands were in-flight when the card was pulled or the |
| driver rmmod-ed, cleanup would block on the work queue stopping, but the |
| work queue was in turn blocked on the current command being canceled, |
| which didn't happen. Fix that. |
| |
| Signed-off-by: Dan Williams <dcbw@redhat.com> |
| Signed-off-by: John W. Linville <linville@tuxdriver.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> |
| |
| --- |
| drivers/net/wireless/libertas/main.c | 20 +++++++++++++++++++- |
| 1 file changed, 19 insertions(+), 1 deletion(-) |
| |
| --- a/drivers/net/wireless/libertas/main.c |
| +++ b/drivers/net/wireless/libertas/main.c |
| @@ -1196,7 +1196,13 @@ void lbs_remove_card(struct lbs_private |
| cancel_delayed_work_sync(&priv->scan_work); |
| cancel_delayed_work_sync(&priv->assoc_work); |
| cancel_work_sync(&priv->mcast_work); |
| + |
| + /* worker thread destruction blocks on the in-flight command which |
| + * should have been cleared already in lbs_stop_card(). |
| + */ |
| + lbs_deb_main("destroying worker thread\n"); |
| destroy_workqueue(priv->work_thread); |
| + lbs_deb_main("done destroying worker thread\n"); |
| |
| if (priv->psmode == LBS802_11POWERMODEMAX_PSP) { |
| priv->psmode = LBS802_11POWERMODECAM; |
| @@ -1314,14 +1320,26 @@ void lbs_stop_card(struct lbs_private *p |
| device_remove_file(&dev->dev, &dev_attr_lbs_rtap); |
| } |
| |
| - /* Flush pending command nodes */ |
| + /* Delete the timeout of the currently processing command */ |
| del_timer_sync(&priv->command_timer); |
| + |
| + /* Flush pending command nodes */ |
| spin_lock_irqsave(&priv->driver_lock, flags); |
| + lbs_deb_main("clearing pending commands\n"); |
| list_for_each_entry(cmdnode, &priv->cmdpendingq, list) { |
| cmdnode->result = -ENOENT; |
| cmdnode->cmdwaitqwoken = 1; |
| wake_up_interruptible(&cmdnode->cmdwait_q); |
| } |
| + |
| + /* Flush the command the card is currently processing */ |
| + if (priv->cur_cmd) { |
| + lbs_deb_main("clearing current command\n"); |
| + priv->cur_cmd->result = -ENOENT; |
| + priv->cur_cmd->cmdwaitqwoken = 1; |
| + wake_up_interruptible(&priv->cur_cmd->cmdwait_q); |
| + } |
| + lbs_deb_main("done clearing commands\n"); |
| spin_unlock_irqrestore(&priv->driver_lock, flags); |
| |
| unregister_netdev(dev); |
| |
| -- |
| |
| From gregkh@mini.kroah.org Thu Oct 16 10:49:21 2008 |
| Message-Id: <20081016174921.399030089@mini.kroah.org> |
| References: <20081016174814.734527827@mini.kroah.org> |
| User-Agent: quilt/0.46-1 |
| Date: Thu, 16 Oct 2008 10:48:23 -0700 |
| From: Greg KH <gregkh@suse.de> |
| To: linux-kernel@vger.kernel.org, |
| stable@kernel.org, |
| jejb@kernel.org |
| Cc: Justin Forbes <jmforbes@linuxtx.org>, |
| Zwane Mwaikambo <zwane@arm.linux.org.uk>, |
| Theodore Ts'o <tytso@mit.edu>, |
| Randy Dunlap <rdunlap@xenotime.net>, |
| Dave Jones <davej@redhat.com>, |
| Chuck Wolber <chuckw@quantumlinux.com>, |
| Chris Wedgwood <reviews@ml.cw.f00f.org>, |
| Michael Krufky <mkrufky@linuxtv.org>, |
| Chuck Ebbert <cebbert@redhat.com>, |
| Domenico Andreoli <cavokz@gmail.com>, |
| Willy Tarreau <w@1wt.eu>, |
| Rodrigo Rubira Branco <rbranco@la.checkpoint.com>, |
| Jake Edge <jake@lwn.net>, |
| Eugene Teo <eteo@redhat.com>, |
| torvalds@linux-foundation.org, |
| akpm@linux-foundation.org, |
| alan@lxorguk.ukuu.org.uk, |
| Larry Finger <Larry.Finger@lwfinger.net>, |
| "John W. Linville" <linville@tuxdriver.com> |
| Subject: [patch 09/14] b43legacy: Fix failure in rate-adjustment mechanism |
| Content-Disposition: inline; filename=b43legacy-fix-failure-in-rate-adjustment-mechanism.patch |
| Content-Length: 1197 |
| Lines: 35 |
| |
| 2.6.27-stable review patch. If anyone has any objections, please let us |
| know. |
| |
| ------------------ |
| From: Larry Finger <Larry.Finger@lwfinger.net> |
| |
| commit c6a2afdacccd56cc0be8e9a7977f0ed1509069f6 upstream |
| Date: Sat, 6 Sep 2008 16:51:22 -0500 |
| Subject: [patch 09/14] b43legacy: Fix failure in rate-adjustment mechanism |
| |
| A coding error present since b43legacy was incorporated into the |
| kernel has prevented the driver from using the rate-setting mechanism |
| of mac80211. The driver has been forced to remain at a 1 Mb/s rate. |
| |
| Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net> |
| Signed-off-by: John W. Linville <linville@tuxdriver.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> |
| |
| --- |
| drivers/net/wireless/b43legacy/xmit.c | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| --- a/drivers/net/wireless/b43legacy/xmit.c |
| +++ b/drivers/net/wireless/b43legacy/xmit.c |
| @@ -626,7 +626,7 @@ void b43legacy_handle_hwtxstatus(struct |
| tmp = hw->count; |
| status.frame_count = (tmp >> 4); |
| status.rts_count = (tmp & 0x0F); |
| - tmp = hw->flags; |
| + tmp = hw->flags << 1; |
| status.supp_reason = ((tmp & 0x1C) >> 2); |
| status.pm_indicated = !!(tmp & 0x80); |
| status.intermediate = !!(tmp & 0x40); |
| |
| -- |
| |
| From gregkh@mini.kroah.org Thu Oct 16 10:49:21 2008 |
| Message-Id: <20081016174921.585663377@mini.kroah.org> |
| References: <20081016174814.734527827@mini.kroah.org> |
| User-Agent: quilt/0.46-1 |
| Date: Thu, 16 Oct 2008 10:48:24 -0700 |
| From: Greg KH <gregkh@suse.de> |
| To: linux-kernel@vger.kernel.org, |
| stable@kernel.org, |
| jejb@kernel.org |
| Cc: Justin Forbes <jmforbes@linuxtx.org>, |
| Zwane Mwaikambo <zwane@arm.linux.org.uk>, |
| Theodore Ts'o <tytso@mit.edu>, |
| Randy Dunlap <rdunlap@xenotime.net>, |
| Dave Jones <davej@redhat.com>, |
| Chuck Wolber <chuckw@quantumlinux.com>, |
| Chris Wedgwood <reviews@ml.cw.f00f.org>, |
| Michael Krufky <mkrufky@linuxtv.org>, |
| Chuck Ebbert <cebbert@redhat.com>, |
| Domenico Andreoli <cavokz@gmail.com>, |
| Willy Tarreau <w@1wt.eu>, |
| Rodrigo Rubira Branco <rbranco@la.checkpoint.com>, |
| Jake Edge <jake@lwn.net>, |
| Eugene Teo <eteo@redhat.com>, |
| torvalds@linux-foundation.org, |
| akpm@linux-foundation.org, |
| alan@lxorguk.ukuu.org.uk, |
| Alan Cox <alan@rehat.com>, |
| Ingo Molnar <mingo@elte.hu> |
| Subject: [patch 10/14] x86, early_ioremap: fix fencepost error |
| Content-Disposition: inline; filename=x86-early_ioremap-fix-fencepost-error.patch |
| Content-Length: 1223 |
| Lines: 45 |
| |
| 2.6.27-stable review patch. If anyone has any objections, please let us |
| know. |
| |
| ------------------ |
| From: Alan Cox <alan@redhat.com> |
| |
| commit c613ec1a7ff3714da11c7c48a13bab03beb5c376 upstream |
| |
| The x86 implementation of early_ioremap has an off by one error. If we get |
| an object which ends on the first byte of a page we undermap by one page and |
| this causes a crash on boot with the ASUS P5QL whose DMI table happens to fit |
| this alignment. |
| |
| The size computation is currently |
| |
| last_addr = phys_addr + size - 1; |
| npages = (PAGE_ALIGN(last_addr) - phys_addr) |
| |
| (Consider a request for 1 byte at alignment 0...) |
| |
| Closes #11693 |
| |
| Debugging work by Ian Campbell/Felix Geyer |
| |
| Signed-off-by: Alan Cox <alan@rehat.com> |
| Signed-off-by: Ingo Molnar <mingo@elte.hu> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> |
| |
| --- |
| arch/x86/mm/ioremap.c | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| --- a/arch/x86/mm/ioremap.c |
| +++ b/arch/x86/mm/ioremap.c |
| @@ -595,7 +595,7 @@ void __init *early_ioremap(unsigned long |
| */ |
| offset = phys_addr & ~PAGE_MASK; |
| phys_addr &= PAGE_MASK; |
| - size = PAGE_ALIGN(last_addr) - phys_addr; |
| + size = PAGE_ALIGN(last_addr + 1) - phys_addr; |
| |
| /* |
| * Mappings have to fit in the FIX_BTMAP area. |
| |
| -- |
| |
| From gregkh@mini.kroah.org Thu Oct 16 10:49:21 2008 |
| Message-Id: <20081016174921.783722139@mini.kroah.org> |
| References: <20081016174814.734527827@mini.kroah.org> |
| User-Agent: quilt/0.46-1 |
| Date: Thu, 16 Oct 2008 10:48:25 -0700 |
| From: Greg KH <gregkh@suse.de> |
| To: linux-kernel@vger.kernel.org, |
| stable@kernel.org, |
| jejb@kernel.org |
| Cc: Justin Forbes <jmforbes@linuxtx.org>, |
| Zwane Mwaikambo <zwane@arm.linux.org.uk>, |
| Theodore Ts'o <tytso@mit.edu>, |
| Randy Dunlap <rdunlap@xenotime.net>, |
| Dave Jones <davej@redhat.com>, |
| Chuck Wolber <chuckw@quantumlinux.com>, |
| Chris Wedgwood <reviews@ml.cw.f00f.org>, |
| Michael Krufky <mkrufky@linuxtv.org>, |
| Chuck Ebbert <cebbert@redhat.com>, |
| Domenico Andreoli <cavokz@gmail.com>, |
| Willy Tarreau <w@1wt.eu>, |
| Rodrigo Rubira Branco <rbranco@la.checkpoint.com>, |
| Jake Edge <jake@lwn.net>, |
| Eugene Teo <eteo@redhat.com>, |
| torvalds@linux-foundation.org, |
| akpm@linux-foundation.org, |
| alan@lxorguk.ukuu.org.uk, |
| Andreas Herrmann <andreas.herrmann3@amd.com>, |
| "Maciej W. Rozycki" <macro@linux-mips.org>, |
| Ingo Molnar <mingo@elte.hu> |
| Subject: [patch 11/14] x86: SB450: skip IRQ0 override if it is not routed to INT2 of IOAPIC |
| Content-Disposition: inline; filename=x86-sb450-skip-irq0-override-if-it-is-not-routed-to-int2-of-ioapic.patch |
| Content-Length: 2610 |
| Lines: 94 |
| |
| 2.6.27-stable review patch. If anyone has any objections, please let us |
| know. |
| |
| ------------------ |
| From: Andreas Herrmann <andreas.herrmann3@amd.com> |
| |
| commit 33fb0e4eb53f16af312f9698f974e2e64af39c12 upstream |
| |
| On some HP nx6... laptops (e.g. nx6325) BIOS reports an IRQ0 override |
| but the SB450 chipset is configured such that timer interrupts goe to |
| INT0 of IOAPIC. |
| |
| Check IRQ0 routing and if it is routed to INT0 of IOAPIC skip the |
| timer override. |
| |
| [ This more generic PCI ID based quirk should alleviate the need for |
| dmi_ignore_irq0_timer_override DMI quirks. ] |
| |
| Signed-off-by: Andreas Herrmann <andreas.herrmann3@amd.com> |
| Acked-by: "Maciej W. Rozycki" <macro@linux-mips.org> |
| Tested-by: Dmitry Torokhov <dtor@mail.ru> |
| Signed-off-by: Ingo Molnar <mingo@elte.hu> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> |
| |
| --- |
| arch/x86/kernel/early-quirks.c | 48 +++++++++++++++++++++++++++++++++++++++++ |
| 1 file changed, 48 insertions(+) |
| |
| --- a/arch/x86/kernel/early-quirks.c |
| +++ b/arch/x86/kernel/early-quirks.c |
| @@ -95,6 +95,52 @@ static void __init nvidia_bugs(int num, |
| |
| } |
| |
| +static u32 ati_ixp4x0_rev(int num, int slot, int func) |
| +{ |
| + u32 d; |
| + u8 b; |
| + |
| + b = read_pci_config_byte(num, slot, func, 0xac); |
| + b &= ~(1<<5); |
| + write_pci_config_byte(num, slot, func, 0xac, b); |
| + |
| + d = read_pci_config(num, slot, func, 0x70); |
| + d |= 1<<8; |
| + write_pci_config(num, slot, func, 0x70, d); |
| + |
| + d = read_pci_config(num, slot, func, 0x8); |
| + d &= 0xff; |
| + return d; |
| +} |
| + |
| +static void __init ati_bugs(int num, int slot, int func) |
| +{ |
| +#if defined(CONFIG_ACPI) && defined (CONFIG_X86_IO_APIC) |
| + u32 d; |
| + u8 b; |
| + |
| + if (acpi_use_timer_override) |
| + return; |
| + |
| + d = ati_ixp4x0_rev(num, slot, func); |
| + if (d < 0x82) |
| + acpi_skip_timer_override = 1; |
| + else { |
| + /* check for IRQ0 interrupt swap */ |
| + outb(0x72, 0xcd6); b = inb(0xcd7); |
| + if (!(b & 0x2)) |
| + acpi_skip_timer_override = 1; |
| + } |
| + |
| + if (acpi_skip_timer_override) { |
| + printk(KERN_INFO "SB4X0 revision 0x%x\n", d); |
| + printk(KERN_INFO "Ignoring ACPI timer override.\n"); |
| + printk(KERN_INFO "If you got timer trouble " |
| + "try acpi_use_timer_override\n"); |
| + } |
| +#endif |
| +} |
| + |
| #define QFLAG_APPLY_ONCE 0x1 |
| #define QFLAG_APPLIED 0x2 |
| #define QFLAG_DONE (QFLAG_APPLY_ONCE|QFLAG_APPLIED) |
| @@ -114,6 +160,8 @@ static struct chipset early_qrk[] __init |
| PCI_CLASS_BRIDGE_PCI, PCI_ANY_ID, QFLAG_APPLY_ONCE, via_bugs }, |
| { PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_K8_NB, |
| PCI_CLASS_BRIDGE_HOST, PCI_ANY_ID, 0, fix_hypertransport_config }, |
| + { PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_IXP400_SMBUS, |
| + PCI_CLASS_SERIAL_SMBUS, PCI_ANY_ID, 0, ati_bugs }, |
| {} |
| }; |
| |
| |
| -- |
| |
| From gregkh@mini.kroah.org Thu Oct 16 10:49:22 2008 |
| Message-Id: <20081016174921.953462985@mini.kroah.org> |
| References: <20081016174814.734527827@mini.kroah.org> |
| User-Agent: quilt/0.46-1 |
| Date: Thu, 16 Oct 2008 10:48:26 -0700 |
| From: Greg KH <gregkh@suse.de> |
| To: linux-kernel@vger.kernel.org, |
| stable@kernel.org, |
| jejb@kernel.org |
| Cc: Justin Forbes <jmforbes@linuxtx.org>, |
| Zwane Mwaikambo <zwane@arm.linux.org.uk>, |
| Theodore Ts'o <tytso@mit.edu>, |
| Randy Dunlap <rdunlap@xenotime.net>, |
| Dave Jones <davej@redhat.com>, |
| Chuck Wolber <chuckw@quantumlinux.com>, |
| Chris Wedgwood <reviews@ml.cw.f00f.org>, |
| Michael Krufky <mkrufky@linuxtv.org>, |
| Chuck Ebbert <cebbert@redhat.com>, |
| Domenico Andreoli <cavokz@gmail.com>, |
| Willy Tarreau <w@1wt.eu>, |
| Rodrigo Rubira Branco <rbranco@la.checkpoint.com>, |
| Jake Edge <jake@lwn.net>, |
| Eugene Teo <eteo@redhat.com>, |
| torvalds@linux-foundation.org, |
| akpm@linux-foundation.org, |
| alan@lxorguk.ukuu.org.uk, |
| Thomas Gleixner <tglx@linutronix.de>, |
| Ingo Molnar <mingo@elte.hu> |
| Subject: [patch 12/14] x86: improve UP kernel when CPU-hotplug and SMP is enabled |
| Content-Disposition: inline; filename=x86-improve-up-kernel-when-cpu-hotplug-and-smp-is-enabled.patch |
| Content-Length: 1079 |
| Lines: 35 |
| |
| 2.6.27-stable review patch. If anyone has any objections, please let us |
| know. |
| |
| ------------------ |
| From: Thomas Gleixner <tglx@linutronix.de> |
| |
| commit 649c6653fa94ec8f3ea32b19c97b790ec4e8e4ac upstream |
| |
| num_possible_cpus() can be > 1 when disabled CPUs have been accounted. |
| |
| Disabled CPUs are not in the cpu_present_map, so we can use |
| num_present_cpus() as a safe indicator to switch to UP alternatives. |
| |
| Reported-by: Chuck Ebbert <cebbert@redhat.com> |
| Signed-off-by: Thomas Gleixner <tglx@linutronix.de> |
| Signed-off-by: Ingo Molnar <mingo@elte.hu> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> |
| |
| --- |
| arch/x86/kernel/alternative.c | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| --- a/arch/x86/kernel/alternative.c |
| +++ b/arch/x86/kernel/alternative.c |
| @@ -444,7 +444,7 @@ void __init alternative_instructions(voi |
| _text, _etext); |
| |
| /* Only switch to UP mode if we don't immediately boot others */ |
| - if (num_possible_cpus() == 1 || setup_max_cpus <= 1) |
| + if (num_present_cpus() == 1 || setup_max_cpus <= 1) |
| alternatives_smp_switch(0); |
| } |
| #endif |
| |
| -- |
| |
| From gregkh@mini.kroah.org Thu Oct 16 10:49:22 2008 |
| Message-Id: <20081016174922.161542294@mini.kroah.org> |
| References: <20081016174814.734527827@mini.kroah.org> |
| User-Agent: quilt/0.46-1 |
| Date: Thu, 16 Oct 2008 10:48:27 -0700 |
| From: Greg KH <gregkh@suse.de> |
| To: linux-kernel@vger.kernel.org, |
| stable@kernel.org |
| Cc: Justin Forbes <jmforbes@linuxtx.org>, |
| Zwane Mwaikambo <zwane@arm.linux.org.uk>, |
| Theodore Ts'o <tytso@mit.edu>, |
| Randy Dunlap <rdunlap@xenotime.net>, |
| Dave Jones <davej@redhat.com>, |
| Chuck Wolber <chuckw@quantumlinux.com>, |
| Chris Wedgwood <reviews@ml.cw.f00f.org>, |
| Michael Krufky <mkrufky@linuxtv.org>, |
| Chuck Ebbert <cebbert@redhat.com>, |
| Domenico Andreoli <cavokz@gmail.com>, |
| Willy Tarreau <w@1wt.eu>, |
| Rodrigo Rubira Branco <rbranco@la.checkpoint.com>, |
| Jake Edge <jake@lwn.net>, |
| Eugene Teo <eteo@redhat.com>, |
| torvalds@linux-foundation.org, |
| akpm@linux-foundation.org, |
| alan@lxorguk.ukuu.org.uk, |
| "Rafael J. Wysocki" <rjw@sisk.pl>, |
| Tino Keitel <tino.keitel@gmx.de>, |
| "David S. Miller" <davem@davemloft.net> |
| Subject: [patch 13/14] sky2: Fix WOL regression |
| Content-Disposition: inline; filename=sky2-fix-wol-regression.patch |
| Content-Length: 2176 |
| Lines: 76 |
| |
| 2.6.27-stable review patch. If anyone has any objections, please let us |
| know. |
| |
| ------------------ |
| From: Rafael J. Wysocki <rjw@sisk.pl> |
| |
| commit 9d731d77c9794bb0a264f58d35949a1ab6dcc41c upstream |
| |
| Since dev->power.should_wakeup bit is used by the PCI core to |
| decide whether the device should wake up the system from sleep |
| states, set/unset this bit whenever WOL is enabled/disabled using |
| sky2_set_wol(). |
| |
| Remove an open-coded reference to the standard PCI PM registers that |
| is not used any more. |
| |
| Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl> |
| Cc: Tino Keitel <tino.keitel@gmx.de> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> |
| |
| --- |
| drivers/net/sky2.c | 19 +++++-------------- |
| 1 file changed, 5 insertions(+), 14 deletions(-) |
| |
| --- a/drivers/net/sky2.c |
| +++ b/drivers/net/sky2.c |
| @@ -3034,7 +3034,8 @@ static int sky2_set_wol(struct net_devic |
| struct sky2_port *sky2 = netdev_priv(dev); |
| struct sky2_hw *hw = sky2->hw; |
| |
| - if (wol->wolopts & ~sky2_wol_supported(sky2->hw)) |
| + if ((wol->wolopts & ~sky2_wol_supported(sky2->hw)) |
| + || !device_can_wakeup(&hw->pdev->dev)) |
| return -EOPNOTSUPP; |
| |
| sky2->wol = wol->wolopts; |
| @@ -3045,6 +3046,8 @@ static int sky2_set_wol(struct net_devic |
| sky2_write32(hw, B0_CTST, sky2->wol |
| ? Y2_HW_WOL_ON : Y2_HW_WOL_OFF); |
| |
| + device_set_wakeup_enable(&hw->pdev->dev, sky2->wol); |
| + |
| if (!netif_running(dev)) |
| sky2_wol_init(sky2); |
| return 0; |
| @@ -4166,18 +4169,6 @@ static int __devinit sky2_test_msi(struc |
| return err; |
| } |
| |
| -static int __devinit pci_wake_enabled(struct pci_dev *dev) |
| -{ |
| - int pm = pci_find_capability(dev, PCI_CAP_ID_PM); |
| - u16 value; |
| - |
| - if (!pm) |
| - return 0; |
| - if (pci_read_config_word(dev, pm + PCI_PM_CTRL, &value)) |
| - return 0; |
| - return value & PCI_PM_CTRL_PME_ENABLE; |
| -} |
| - |
| /* This driver supports yukon2 chipset only */ |
| static const char *sky2_name(u8 chipid, char *buf, int sz) |
| { |
| @@ -4238,7 +4229,7 @@ static int __devinit sky2_probe(struct p |
| } |
| } |
| |
| - wol_default = pci_wake_enabled(pdev) ? WAKE_MAGIC : 0; |
| + wol_default = device_may_wakeup(&pdev->dev) ? WAKE_MAGIC : 0; |
| |
| err = -ENOMEM; |
| hw = kzalloc(sizeof(*hw), GFP_KERNEL); |
| |
| -- |
| |
| From gregkh@mini.kroah.org Thu Oct 16 10:49:22 2008 |
| Message-Id: <20081016174922.345821371@mini.kroah.org> |
| References: <20081016174814.734527827@mini.kroah.org> |
| User-Agent: quilt/0.46-1 |
| Date: Thu, 16 Oct 2008 10:48:28 -0700 |
| From: Greg KH <gregkh@suse.de> |
| To: linux-kernel@vger.kernel.org, |
| stable@kernel.org |
| Cc: Justin Forbes <jmforbes@linuxtx.org>, |
| Zwane Mwaikambo <zwane@arm.linux.org.uk>, |
| Theodore Ts'o <tytso@mit.edu>, |
| Randy Dunlap <rdunlap@xenotime.net>, |
| Dave Jones <davej@redhat.com>, |
| Chuck Wolber <chuckw@quantumlinux.com>, |
| Chris Wedgwood <reviews@ml.cw.f00f.org>, |
| Michael Krufky <mkrufky@linuxtv.org>, |
| Chuck Ebbert <cebbert@redhat.com>, |
| Domenico Andreoli <cavokz@gmail.com>, |
| Willy Tarreau <w@1wt.eu>, |
| Rodrigo Rubira Branco <rbranco@la.checkpoint.com>, |
| Jake Edge <jake@lwn.net>, |
| Eugene Teo <eteo@redhat.com>, |
| torvalds@linux-foundation.org, |
| akpm@linux-foundation.org, |
| alan@lxorguk.ukuu.org.uk, |
| Matthew Wilcox <willy@linux.intel.com>, |
| Jay Cliburn <jacliburn@bellsouth.net>, |
| Jeff Garzik <jgarzik@redhat.com>, |
| "David S. Miller" <davem@davemloft.net> |
| Subject: [patch 14/14] netdrvr: atl1e: Dont take the mdio_lock in atl1e_probe |
| Content-Disposition: inline; filename=netdrvr-atl1e-don-t-take-the-mdio_lock-in-atl1e_probe.patch |
| Content-Length: 1520 |
| Lines: 43 |
| |
| 2.6.27-stable review patch. If anyone has any objections, please let us |
| know. |
| |
| ------------------ |
| From: Matthew Wilcox <matthew@wil.cx> |
| |
| commit f382a0a8e9403c6d7f8b2cfa21e41fefb5d0c9bd upstream |
| |
| Lockdep warns about the mdio_lock taken with interrupts enabled then later |
| taken from interrupt context. Initially, I considered changing these |
| to spin_lock_irq/spin_unlock_irq, but then I looked at atl1e_phy_init() |
| and saw that it calls msleep(). Sleeping while holding a spinlock is |
| not allowed either. |
| |
| In the probe path, we haven't registered the interrupt handler, so |
| it can't poke at this card yet. It's before we call register_netdev(), |
| so I don't think any other threads can reach this card either. If I'm |
| right, we don't need a spinlock at all. |
| |
| Signed-off-by: Matthew Wilcox <willy@linux.intel.com> |
| Cc: Jay Cliburn <jacliburn@bellsouth.net> |
| Signed-off-by: Jeff Garzik <jgarzik@redhat.com> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> |
| |
| --- |
| drivers/net/atl1e/atl1e_main.c | 2 -- |
| 1 file changed, 2 deletions(-) |
| |
| --- a/drivers/net/atl1e/atl1e_main.c |
| +++ b/drivers/net/atl1e/atl1e_main.c |
| @@ -2390,9 +2390,7 @@ static int __devinit atl1e_probe(struct |
| } |
| |
| /* Init GPHY as early as possible due to power saving issue */ |
| - spin_lock(&adapter->mdio_lock); |
| atl1e_phy_init(&adapter->hw); |
| - spin_unlock(&adapter->mdio_lock); |
| /* reset the controller to |
| * put the device in a known good starting state */ |
| err = atl1e_reset_hw(&adapter->hw); |
| |
| -- |
| |
| From gregkh@mini.kroah.org Thu Oct 16 10:49:19 2008 |
| Message-Id: <20081016174814.734527827@mini.kroah.org> |
| User-Agent: quilt/0.46-1 |
| Date: Thu, 16 Oct 2008 10:48:14 -0700 |
| From: Greg KH <gregkh@suse.de> |
| To: linux-kernel@vger.kernel.org, |
| stable@kernel.org |
| Cc: Justin Forbes <jmforbes@linuxtx.org>, |
| Zwane Mwaikambo <zwane@arm.linux.org.uk>, |
| Theodore Ts'o <tytso@mit.edu>, |
| Randy Dunlap <rdunlap@xenotime.net>, |
| Dave Jones <davej@redhat.com>, |
| Chuck Wolber <chuckw@quantumlinux.com>, |
| Chris Wedgwood <reviews@ml.cw.f00f.org>, |
| Michael Krufky <mkrufky@linuxtv.org>, |
| Chuck Ebbert <cebbert@redhat.com>, |
| Domenico Andreoli <cavokz@gmail.com>, |
| Willy Tarreau <w@1wt.eu>, |
| Rodrigo Rubira Branco <rbranco@la.checkpoint.com>, |
| Jake Edge <jake@lwn.net>, |
| Eugene Teo <eteo@redhat.com>, |
| torvalds@linux-foundation.org, |
| akpm@linux-foundation.org, |
| alan@lxorguk.ukuu.org.uk |
| Subject: [patch 00/14] 2.6.27-stable review |
| Content-Length: 1909 |
| Lines: 44 |
| |
| This is the start of the stable review cycle for the 2.6.27.2 release. |
| There are 14 patches in this series, all will be posted as a response to |
| this one. If anyone has any issues with these being applied, please let |
| us know. If anyone is a maintainer of the proper subsystem, and wants |
| to add a Signed-off-by: line to the patch, please respond with it. |
| |
| These patches are sent out with a number of different people on the Cc: |
| line. If you wish to be a reviewer, please email stable@kernel.org to |
| add your name to the list. If you want to be off the reviewer list, |
| also email us. |
| |
| Responses should be made by Sat, October 18, 18:00:00 UTC. Anything |
| received after that time might be too late. |
| |
| The whole patch series can be found in one patch at: |
| kernel.org/pub/linux/kernel/v2.6/stable-review/patch-2.6.27.2-rc1.gz |
| and the diffstat can be found below. |
| |
| |
| thanks, |
| |
| the -stable release team |
| |
| |
| Makefile | 2 |
| arch/x86/kernel/alternative.c | 2 |
| arch/x86/kernel/early-quirks.c | 48 ++++++++++++ |
| arch/x86/kernel/io_apic_32.c | 3 |
| arch/x86/mm/ioremap.c | 2 |
| drivers/char/tty_io.c | 2 |
| drivers/net/atl1e/atl1e_main.c | 2 |
| drivers/net/sky2.c | 19 +---- |
| drivers/net/wireless/b43legacy/xmit.c | 2 |
| drivers/net/wireless/libertas/main.c | 20 +++++ |
| fs/cifs/cifsglob.h | 1 |
| fs/cifs/cifssmb.c | 4 + |
| fs/cifs/readdir.c | 128 +++++++++++++++++----------------- |
| fs/xfs/linux-2.6/xfs_buf.c | 3 |
| fs/xfs/linux-2.6/xfs_buf.h | 8 ++ |
| fs/xfs/xfs_log.c | 7 + |
| kernel/sched_rt.c | 8 +- |
| net/mac80211/debugfs_netdev.c | 14 +++ |
| net/rfkill/rfkill.c | 5 - |
| 19 files changed, 182 insertions(+), 98 deletions(-) |
| |