From: Greg Kroah-Hartman Date: Wed, 7 Mar 2007 18:29:24 +0000 (-0800) Subject: add mbox file for 2.6.20.2 review X-Git-Tag: v2.6.20.2~5 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=f2e0a659cc2f605010dece0c897f69a32283ecb7;p=thirdparty%2Fkernel%2Fstable-queue.git add mbox file for 2.6.20.2 review --- diff --git a/queue-2.6.20/mbox b/queue-2.6.20/mbox new file mode 100644 index 00000000000..14e3a050a1d --- /dev/null +++ b/queue-2.6.20/mbox @@ -0,0 +1,9768 @@ +From gregkh@mini.kroah.org Wed Mar 7 09:06:10 2007 +Message-Id: <20070307170123.677686080@mini.kroah.org> +User-Agent: quilt/0.45-1 +Date: Wed, 07 Mar 2007 09:01:23 -0800 +From: Greg KH +To: linux-kernel@vger.kernel.org, + stable@kernel.org +Cc: Justin Forbes , + Zwane Mwaikambo , + Theodore Ts'o , + Randy Dunlap , + Dave Jones , + Chuck Wolber , + Chris Wedgwood , + Michael Krufky , + Chuck Ebbert , + torvalds@linux-foundation.org, + akpm@linux-foundation.org, + alan@lxorguk.ukuu.org.uk +Subject: [patch 000/101] 2.6.20-stable review +Status: RO +Content-Length: 822 +Lines: 22 + +After many weeks of backlogs, I've finally flushed out all of the +pending -stable patches, bringing this series to a whopping 101 patches +pending for the next 2.6.20.2 release. + +If everyone could please take the time to review them and let me know if +there are any issues with any of these being applied. + +Also, if there are any patches that I am somehow missing that should go +into the 2.6.20-stable tree, please forward them on to the +stable@kernel.org alias. + +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 Friday March 9, 17:00:00 UTC. Anything +received after that time might be too late. + +thanks, + +greg k-h + +From gregkh@mini.kroah.org Wed Mar 7 09:06:10 2007 +Message-Id: <20070307170610.531145296@mini.kroah.org> +References: <20070307170123.677686080@mini.kroah.org> +User-Agent: quilt/0.45-1 +Date: Wed, 07 Mar 2007 09:01:24 -0800 +From: Greg KH +To: linux-kernel@vger.kernel.org, + stable@kernel.org +Cc: Justin Forbes , + Zwane Mwaikambo , + Theodore Ts'o , + Randy Dunlap , + Dave Jones , + Chuck Wolber , + Chris Wedgwood , + Michael Krufky , + Chuck Ebbert , + torvalds@linux-foundation.org, + akpm@linux-foundation.org, + alan@lxorguk.ukuu.org.uk, + Mark Fasheh , + Chris Wright +Subject: [patch 001/101] ocfs2: ocfs2_link() journal credits update +Content-Disposition: inline; filename=ocfs2-ocfs2_link-journal-credits-update.patch +Content-Length: 1129 +Lines: 27 + +Commit 592282cf2eaa33409c6511ddd3f3ecaa57daeaaa fixed some missing directory +c/mtime updates in part by introducing a dinode update in ocfs2_add_entry(). +Unfortunately, ocfs2_link() (which didn't update the directory inode before) +is now missing a single journal credit. Fix this by doubling the number of +inode updates expected during hard link creation. + +Signed-off-by: Mark Fasheh +Signed-off-by: Chris Wright +--- + fs/ocfs2/journal.h | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +--- linux-2.6.20.1.orig/fs/ocfs2/journal.h ++++ linux-2.6.20.1/fs/ocfs2/journal.h +@@ -306,8 +306,8 @@ int ocfs2_journal_dirty + * for the dinode, one for the new block. */ + #define OCFS2_SIMPLE_DIR_EXTEND_CREDITS (2) + +-/* file update (nlink, etc) + dir entry block */ +-#define OCFS2_LINK_CREDITS (OCFS2_INODE_UPDATE_CREDITS + 1) ++/* file update (nlink, etc) + directory mtime/ctime + dir entry block */ ++#define OCFS2_LINK_CREDITS (2*OCFS2_INODE_UPDATE_CREDITS + 1) + + /* inode + dir inode (if we unlink a dir), + dir entry block + orphan + * dir inode link */ + +-- + +From gregkh@mini.kroah.org Wed Mar 7 09:06:10 2007 +Message-Id: <20070307170610.662438762@mini.kroah.org> +References: <20070307170123.677686080@mini.kroah.org> +User-Agent: quilt/0.45-1 +Date: Wed, 07 Mar 2007 09:01:25 -0800 +From: Greg KH +To: linux-kernel@vger.kernel.org, + stable@kernel.org, + Andrew Morton +Cc: Justin Forbes , + Zwane Mwaikambo , + Theodore Ts'o , + Randy Dunlap , + Dave Jones , + Chuck Wolber , + Chris Wedgwood , + Michael Krufky , + Chuck Ebbert , + torvalds@linux-foundation.org, + akpm@linux-foundation.org, + alan@lxorguk.ukuu.org.uk, + Jeff Dike , + Andi Kleen , + user-mode-linux-devel@lists.sourceforge.net, + Paolo Blaisorblade Giarrusso +Subject: [patch 002/101] x86_64: fix 2.6.18 regression - PTRACE_OLDSETOPTIONS should be accepted +Content-Disposition: inline; filename=x86_64-fix-2.6.18-regression-ptrace_oldsetoptions-should-be-accepted.patch +Content-Length: 1292 +Lines: 42 + + +Also PTRACE_OLDSETOPTIONS should be accepted, as done by kernel/ptrace.c and +forced by binary compatibility. UML/32bit breaks because of this - since it is wise +enough to use PTRACE_OLDSETOPTIONS to be binary compatible with 2.4 host +kernels. + +Until 2.6.17 (commit f0f2d6536e3515b5b1b7ae97dc8f176860c8c2ce) we had: + + default: + return sys_ptrace(request, pid, addr, data); + +Instead here we have: + case PTRACE_GET_THREAD_AREA: + case ...: + return sys_ptrace(request, pid, addr, data); + + default: + return -EINVAL; + +This change was a style change - when a case is added, it must be explicitly +tested this way. In this case, not enough testing was done. + +Cc: Andi Kleen +Signed-off-by: Paolo 'Blaisorblade' Giarrusso +Signed-off-by: Greg Kroah-Hartman + +--- + arch/x86_64/ia32/ptrace32.c | 1 + + 1 file changed, 1 insertion(+) + +--- linux-2.6.20.1.orig/arch/x86_64/ia32/ptrace32.c ++++ linux-2.6.20.1/arch/x86_64/ia32/ptrace32.c +@@ -243,6 +243,7 @@ asmlinkage long sys32_ptrace(long reques + case PTRACE_SINGLESTEP: + case PTRACE_DETACH: + case PTRACE_SYSCALL: ++ case PTRACE_OLDSETOPTIONS: + case PTRACE_SETOPTIONS: + case PTRACE_SET_THREAD_AREA: + case PTRACE_GET_THREAD_AREA: + +-- + +From gregkh@mini.kroah.org Wed Mar 7 09:06:10 2007 +Message-Id: <20070307170610.794616138@mini.kroah.org> +References: <20070307170123.677686080@mini.kroah.org> +User-Agent: quilt/0.45-1 +Date: Wed, 07 Mar 2007 09:01:26 -0800 +From: Greg KH +To: linux-kernel@vger.kernel.org, + stable@kernel.org, + akpm@linux-foundation.org +Cc: Justin Forbes , + Zwane Mwaikambo , + Theodore Ts'o , + Randy Dunlap , + Dave Jones , + Chuck Wolber , + Chris Wedgwood , + Michael Krufky , + Chuck Ebbert , + torvalds@linux-foundation.org, + alan@lxorguk.ukuu.org.uk, + jean-baptiste.maneyrol@teamlog.com, + a.zummo@towertech.it, + dbrownell@users.sourceforge.net, + Atsushi Nemoto +Subject: [patch 003/101] rtc-pcf8563: detect polarity of century bit automatically +Content-Disposition: inline; filename=rtc-pcf8563-detect-polarity-of-century-bit-automatically.patch +Content-Length: 4808 +Lines: 139 + + +From: Atsushi Nemoto + +The usage of the century bit was inverted on 2.6.19 following to PCF8563's +description, but it was not match to usage suggested by RTC8564's +datasheet. Anyway what MO_C=1 means can vary on each platform. This patch +is to detect its polarity in get_datetime routine. The default value of +c_polarity is 0 (MO_C=1 means 19xx) so that this patch does not change +current behavior even if get_datetime was not called before set_datetime. + +Signed-off-by: Atsushi Nemoto +Cc: Jean-Baptiste Maneyrol +Cc: David Brownell +Cc: Alessandro Zummo +Signed-off-by: Andrew Morton +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/rtc/rtc-pcf8563.c | 40 ++++++++++++++++++++++++++++++++++------ + 1 file changed, 34 insertions(+), 6 deletions(-) + +--- linux-2.6.20.1.orig/drivers/rtc/rtc-pcf8563.c ++++ linux-2.6.20.1/drivers/rtc/rtc-pcf8563.c +@@ -53,6 +53,25 @@ I2C_CLIENT_INSMOD; + #define PCF8563_SC_LV 0x80 /* low voltage */ + #define PCF8563_MO_C 0x80 /* century */ + ++struct pcf8563 { ++ struct i2c_client client; ++ /* ++ * The meaning of MO_C bit varies by the chip type. ++ * From PCF8563 datasheet: this bit is toggled when the years ++ * register overflows from 99 to 00 ++ * 0 indicates the century is 20xx ++ * 1 indicates the century is 19xx ++ * From RTC8564 datasheet: this bit indicates change of ++ * century. When the year digit data overflows from 99 to 00, ++ * this bit is set. By presetting it to 0 while still in the ++ * 20th century, it will be set in year 2000, ... ++ * There seems no reliable way to know how the system use this ++ * bit. So let's do it heuristically, assuming we are live in ++ * 1970...2069. ++ */ ++ int c_polarity; /* 0: MO_C=1 means 19xx, otherwise MO_C=1 means 20xx */ ++}; ++ + static int pcf8563_probe(struct i2c_adapter *adapter, int address, int kind); + static int pcf8563_detach(struct i2c_client *client); + +@@ -62,6 +81,7 @@ static int pcf8563_detach(struct i2c_cli + */ + static int pcf8563_get_datetime(struct i2c_client *client, struct rtc_time *tm) + { ++ struct pcf8563 *pcf8563 = container_of(client, struct pcf8563, client); + unsigned char buf[13] = { PCF8563_REG_ST1 }; + + struct i2c_msg msgs[] = { +@@ -94,8 +114,12 @@ static int pcf8563_get_datetime(struct i + tm->tm_mday = BCD2BIN(buf[PCF8563_REG_DM] & 0x3F); + tm->tm_wday = buf[PCF8563_REG_DW] & 0x07; + tm->tm_mon = BCD2BIN(buf[PCF8563_REG_MO] & 0x1F) - 1; /* rtc mn 1-12 */ +- tm->tm_year = BCD2BIN(buf[PCF8563_REG_YR]) +- + (buf[PCF8563_REG_MO] & PCF8563_MO_C ? 0 : 100); ++ tm->tm_year = BCD2BIN(buf[PCF8563_REG_YR]); ++ if (tm->tm_year < 70) ++ tm->tm_year += 100; /* assume we are in 1970...2069 */ ++ /* detect the polarity heuristically. see note above. */ ++ pcf8563->c_polarity = (buf[PCF8563_REG_MO] & PCF8563_MO_C) ? ++ (tm->tm_year >= 100) : (tm->tm_year < 100); + + dev_dbg(&client->dev, "%s: tm is secs=%d, mins=%d, hours=%d, " + "mday=%d, mon=%d, year=%d, wday=%d\n", +@@ -114,6 +138,7 @@ static int pcf8563_get_datetime(struct i + + static int pcf8563_set_datetime(struct i2c_client *client, struct rtc_time *tm) + { ++ struct pcf8563 *pcf8563 = container_of(client, struct pcf8563, client); + int i, err; + unsigned char buf[9]; + +@@ -135,7 +160,7 @@ static int pcf8563_set_datetime(struct i + + /* year and century */ + buf[PCF8563_REG_YR] = BIN2BCD(tm->tm_year % 100); +- if (tm->tm_year < 100) ++ if (pcf8563->c_polarity ? (tm->tm_year >= 100) : (tm->tm_year < 100)) + buf[PCF8563_REG_MO] |= PCF8563_MO_C; + + buf[PCF8563_REG_DW] = tm->tm_wday & 0x07; +@@ -248,6 +273,7 @@ static struct i2c_driver pcf8563_driver + + static int pcf8563_probe(struct i2c_adapter *adapter, int address, int kind) + { ++ struct pcf8563 *pcf8563; + struct i2c_client *client; + struct rtc_device *rtc; + +@@ -260,11 +286,12 @@ static int pcf8563_probe(struct i2c_adap + goto exit; + } + +- if (!(client = kzalloc(sizeof(struct i2c_client), GFP_KERNEL))) { ++ if (!(pcf8563 = kzalloc(sizeof(struct pcf8563), GFP_KERNEL))) { + err = -ENOMEM; + goto exit; + } + ++ client = &pcf8563->client; + client->addr = address; + client->driver = &pcf8563_driver; + client->adapter = adapter; +@@ -301,7 +328,7 @@ exit_detach: + i2c_detach_client(client); + + exit_kfree: +- kfree(client); ++ kfree(pcf8563); + + exit: + return err; +@@ -309,6 +336,7 @@ exit: + + static int pcf8563_detach(struct i2c_client *client) + { ++ struct pcf8563 *pcf8563 = container_of(client, struct pcf8563, client); + int err; + struct rtc_device *rtc = i2c_get_clientdata(client); + +@@ -318,7 +346,7 @@ static int pcf8563_detach(struct i2c_cli + if ((err = i2c_detach_client(client))) + return err; + +- kfree(client); ++ kfree(pcf8563); + + return 0; + } + +-- + +From gregkh@mini.kroah.org Wed Mar 7 09:06:11 2007 +Message-Id: <20070307170610.924156309@mini.kroah.org> +References: <20070307170123.677686080@mini.kroah.org> +User-Agent: quilt/0.45-1 +Date: Wed, 07 Mar 2007 09:01:27 -0800 +From: Greg KH +To: linux-kernel@vger.kernel.org, + stable@kernel.org +Cc: Justin Forbes , + Zwane Mwaikambo , + Theodore Ts'o , + Randy Dunlap , + Dave Jones , + Chuck Wolber , + Chris Wedgwood , + Michael Krufky , + Chuck Ebbert , + torvalds@linux-foundation.org, + akpm@linux-foundation.org, + alan@lxorguk.ukuu.org.uk, + Dan Williams +Subject: [patch 004/101] prism54: correct assignment of DOT1XENABLE in WE-19 codepaths +Content-Disposition: inline; filename=prism54-correct-assignment-of-dot1xenable-in-we-19-codepaths.patch +Content-Length: 1483 +Lines: 49 + + +Correct assignment of DOT1XENABLE in WE-19 codepaths. +RX_UNENCRYPTED_EAPOL = 1 really means setting DOT1XENABLE _off_, and +vice versa. The original WE-19 patch erroneously reversed that. This +patch fixes association with unencrypted and WEP networks when using +wpa_supplicant. + +It also adds two missing break statements that, left out, could result +in incorrect card configuration. + +Applies to (I think) 2.6.19 and later. + +Signed-off-by: Dan Williams +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/net/wireless/prism54/isl_ioctl.c | 8 +++++++- + 1 file changed, 7 insertions(+), 1 deletion(-) + +--- linux-2.6.20.1.orig/drivers/net/wireless/prism54/isl_ioctl.c ++++ linux-2.6.20.1/drivers/net/wireless/prism54/isl_ioctl.c +@@ -1395,11 +1395,16 @@ static int prism54_set_auth(struct net_d + break; + + case IW_AUTH_RX_UNENCRYPTED_EAPOL: +- dot1x = param->value ? 1 : 0; ++ /* dot1x should be the opposite of RX_UNENCRYPTED_EAPOL; ++ * turn off dot1x when allowing recepit of unencrypted eapol ++ * frames, turn on dot1x when we disallow receipt ++ */ ++ dot1x = param->value ? 0x00 : 0x01; + break; + + case IW_AUTH_PRIVACY_INVOKED: + privinvoked = param->value ? 1 : 0; ++ break; + + case IW_AUTH_DROP_UNENCRYPTED: + exunencrypt = param->value ? 1 : 0; +@@ -1589,6 +1594,7 @@ static int prism54_set_encodeext(struct + } + key.type = DOT11_PRIV_TKIP; + key.length = KEY_SIZE_TKIP; ++ break; + default: + return -EINVAL; + } + +-- + +From gregkh@mini.kroah.org Wed Mar 7 09:06:11 2007 +Message-Id: <20070307170611.060014600@mini.kroah.org> +References: <20070307170123.677686080@mini.kroah.org> +User-Agent: quilt/0.45-1 +Date: Wed, 07 Mar 2007 09:01:28 -0800 +From: Greg KH +To: linux-kernel@vger.kernel.org, + stable@kernel.org, + Jeff Garzik , + Alan Cox , + linux-ide@vger.kernel.org +Cc: Justin Forbes , + Zwane Mwaikambo , + Theodore Ts'o , + Randy Dunlap , + Dave Jones , + Chuck Wolber , + Chris Wedgwood , + Michael Krufky , + Chuck Ebbert , + torvalds@linux-foundation.org, + akpm@linux-foundation.org, + Tejun Heo +Subject: [patch 005/101] pata_amd: fix an obvious bug in cable detection +Content-Disposition: inline; filename=pata_amd-fix-an-obvious-bug-in-cable-detection.patch +Content-Length: 994 +Lines: 33 + + +80c test mask is at bits 18 and 19 of EIDE Controller Configuration +not 22 and 23. Fix it. + +Signed-off-by: Tejun Heo +Acked-by: Alan Cox + +--- + drivers/ata/pata_amd.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +--- linux-2.6.20.1.orig/drivers/ata/pata_amd.c ++++ linux-2.6.20.1/drivers/ata/pata_amd.c +@@ -128,7 +128,7 @@ static void timing_setup(struct ata_port + + static int amd_pre_reset(struct ata_port *ap) + { +- static const u32 bitmask[2] = {0x03, 0xC0}; ++ static const u32 bitmask[2] = {0x03, 0x0C}; + static const struct pci_bits amd_enable_bits[] = { + { 0x40, 1, 0x02, 0x02 }, + { 0x40, 1, 0x01, 0x01 } +@@ -247,7 +247,7 @@ static void amd133_set_dmamode(struct at + */ + + static int nv_pre_reset(struct ata_port *ap) { +- static const u8 bitmask[2] = {0x03, 0xC0}; ++ static const u8 bitmask[2] = {0x03, 0x0C}; + static const struct pci_bits nv_enable_bits[] = { + { 0x50, 1, 0x02, 0x02 }, + { 0x50, 1, 0x01, 0x01 } + +-- + +From gregkh@mini.kroah.org Wed Mar 7 09:06:11 2007 +Message-Id: <20070307170611.193900293@mini.kroah.org> +References: <20070307170123.677686080@mini.kroah.org> +User-Agent: quilt/0.45-1 +Date: Wed, 07 Mar 2007 09:01:29 -0800 +From: Greg KH +To: linux-kernel@vger.kernel.org, + stable@kernel.org, + Andrew Morton +Cc: Justin Forbes , + Zwane Mwaikambo , + Theodore Ts'o , + Randy Dunlap , + Dave Jones , + Chuck Wolber , + Chris Wedgwood , + Michael Krufky , + Chuck Ebbert , + torvalds@linux-foundation.org, + akpm@linux-foundation.org, + alan@lxorguk.ukuu.org.uk, + nfs@lists.sourceforge.net, + Neil Brown +Subject: [patch 006/101] knfsd: Fix a race in closing NFSd connections. +Content-Disposition: inline; filename=knfsd-fix-a-race-in-closing-nfsd-connections.patch +Content-Length: 6430 +Lines: 201 + +If you lose this race, it can iput a socket inode twice and you +get a BUG in fs/inode.c + +When I added the option for user-space to close a socket, +I added some cruft to svc_delete_socket so that I could call +that function when closing a socket per user-space request. + +This was the wrong thing to do. I should have just set SK_CLOSE +and let normal mechanisms do the work. + +Not only wrong, but buggy. The locking is all wrong and it openned +up a race where-by a socket could be closed twice. + +So this patch: + Introduces svc_close_socket which sets SK_CLOSE then either leave + the close up to a thread, or calls svc_delete_socket if it can + get SK_BUSY. + + Adds a bias to sk_busy which is removed when SK_DEAD is set, + This avoid races around shutting down the socket. + + Changes several 'spin_lock' to 'spin_lock_bh' where the _bh + was missing. + +Bugzilla-url: http://bugzilla.kernel.org/show_bug.cgi?id=7916 + +Signed-off-by: Neil Brown +Signed-off-by: Greg Kroah-Hartman + + +--- + include/linux/sunrpc/svcsock.h | 2 - + net/sunrpc/svc.c | 4 +-- + net/sunrpc/svcsock.c | 52 +++++++++++++++++++++++++++++------------ + 3 files changed, 41 insertions(+), 17 deletions(-) + +--- linux-2.6.20.1.orig/include/linux/sunrpc/svcsock.h ++++ linux-2.6.20.1/include/linux/sunrpc/svcsock.h +@@ -63,7 +63,7 @@ struct svc_sock { + * Function prototypes. + */ + int svc_makesock(struct svc_serv *, int, unsigned short); +-void svc_delete_socket(struct svc_sock *); ++void svc_close_socket(struct svc_sock *); + int svc_recv(struct svc_rqst *, long); + int svc_send(struct svc_rqst *); + void svc_drop(struct svc_rqst *); +--- linux-2.6.20.1.orig/net/sunrpc/svc.c ++++ linux-2.6.20.1/net/sunrpc/svc.c +@@ -386,7 +386,7 @@ svc_destroy(struct svc_serv *serv) + svsk = list_entry(serv->sv_tempsocks.next, + struct svc_sock, + sk_list); +- svc_delete_socket(svsk); ++ svc_close_socket(svsk); + } + if (serv->sv_shutdown) + serv->sv_shutdown(serv); +@@ -395,7 +395,7 @@ svc_destroy(struct svc_serv *serv) + svsk = list_entry(serv->sv_permsocks.next, + struct svc_sock, + sk_list); +- svc_delete_socket(svsk); ++ svc_close_socket(svsk); + } + + cache_clean_deferred(serv); +--- linux-2.6.20.1.orig/net/sunrpc/svcsock.c ++++ linux-2.6.20.1/net/sunrpc/svcsock.c +@@ -62,6 +62,12 @@ + * after a clear, the socket must be read/accepted + * if this succeeds, it must be set again. + * SK_CLOSE can set at any time. It is never cleared. ++ * sk_inuse contains a bias of '1' until SK_DEAD is set. ++ * so when sk_inuse hits zero, we know the socket is dead ++ * and no-one is using it. ++ * SK_DEAD can only be set while SK_BUSY is held which ensures ++ * no other thread will be using the socket or will try to ++ * set SK_DEAD. + * + */ + +@@ -70,6 +76,7 @@ + + static struct svc_sock *svc_setup_socket(struct svc_serv *, struct socket *, + int *errp, int pmap_reg); ++static void svc_delete_socket(struct svc_sock *svsk); + static void svc_udp_data_ready(struct sock *, int); + static int svc_udp_recvfrom(struct svc_rqst *); + static int svc_udp_sendto(struct svc_rqst *); +@@ -329,8 +336,9 @@ void svc_reserve(struct svc_rqst *rqstp, + static inline void + svc_sock_put(struct svc_sock *svsk) + { +- if (atomic_dec_and_test(&svsk->sk_inuse) && +- test_bit(SK_DEAD, &svsk->sk_flags)) { ++ if (atomic_dec_and_test(&svsk->sk_inuse)) { ++ BUG_ON(! test_bit(SK_DEAD, &svsk->sk_flags)); ++ + dprintk("svc: releasing dead socket\n"); + if (svsk->sk_sock->file) + sockfd_put(svsk->sk_sock); +@@ -520,7 +528,7 @@ svc_sock_names(char *buf, struct svc_ser + + if (!serv) + return 0; +- spin_lock(&serv->sv_lock); ++ spin_lock_bh(&serv->sv_lock); + list_for_each_entry(svsk, &serv->sv_permsocks, sk_list) { + int onelen = one_sock_name(buf+len, svsk); + if (toclose && strcmp(toclose, buf+len) == 0) +@@ -528,12 +536,12 @@ svc_sock_names(char *buf, struct svc_ser + else + len += onelen; + } +- spin_unlock(&serv->sv_lock); ++ spin_unlock_bh(&serv->sv_lock); + if (closesk) + /* Should unregister with portmap, but you cannot + * unregister just one protocol... + */ +- svc_delete_socket(closesk); ++ svc_close_socket(closesk); + else if (toclose) + return -ENOENT; + return len; +@@ -683,6 +691,11 @@ svc_udp_recvfrom(struct svc_rqst *rqstp) + return svc_deferred_recv(rqstp); + } + ++ if (test_bit(SK_CLOSE, &svsk->sk_flags)) { ++ svc_delete_socket(svsk); ++ return 0; ++ } ++ + clear_bit(SK_DATA, &svsk->sk_flags); + while ((skb = skb_recv_datagram(svsk->sk_sk, 0, 1, &err)) == NULL) { + if (err == -EAGAIN) { +@@ -1176,7 +1189,8 @@ svc_tcp_sendto(struct svc_rqst *rqstp) + rqstp->rq_sock->sk_server->sv_name, + (sent<0)?"got error":"sent only", + sent, xbufp->len); +- svc_delete_socket(rqstp->rq_sock); ++ set_bit(SK_CLOSE, &rqstp->rq_sock->sk_flags); ++ svc_sock_enqueue(rqstp->rq_sock); + sent = -EAGAIN; + } + return sent; +@@ -1495,7 +1509,7 @@ svc_setup_socket(struct svc_serv *serv, + svsk->sk_odata = inet->sk_data_ready; + svsk->sk_owspace = inet->sk_write_space; + svsk->sk_server = serv; +- atomic_set(&svsk->sk_inuse, 0); ++ atomic_set(&svsk->sk_inuse, 1); + svsk->sk_lastrecv = get_seconds(); + spin_lock_init(&svsk->sk_defer_lock); + INIT_LIST_HEAD(&svsk->sk_deferred); +@@ -1618,7 +1632,7 @@ bummer: + /* + * Remove a dead socket + */ +-void ++static void + svc_delete_socket(struct svc_sock *svsk) + { + struct svc_serv *serv; +@@ -1644,16 +1658,26 @@ svc_delete_socket(struct svc_sock *svsk) + * while still attached to a queue, the queue itself + * is about to be destroyed (in svc_destroy). + */ +- if (!test_and_set_bit(SK_DEAD, &svsk->sk_flags)) ++ if (!test_and_set_bit(SK_DEAD, &svsk->sk_flags)) { ++ BUG_ON(atomic_read(&svsk->sk_inuse)<2); ++ atomic_dec(&svsk->sk_inuse); + if (test_bit(SK_TEMP, &svsk->sk_flags)) + serv->sv_tmpcnt--; ++ } + +- /* This atomic_inc should be needed - svc_delete_socket +- * should have the semantic of dropping a reference. +- * But it doesn't yet.... +- */ +- atomic_inc(&svsk->sk_inuse); + spin_unlock_bh(&serv->sv_lock); ++} ++ ++void svc_close_socket(struct svc_sock *svsk) ++{ ++ set_bit(SK_CLOSE, &svsk->sk_flags); ++ if (test_and_set_bit(SK_BUSY, &svsk->sk_flags)) ++ /* someone else will have to effect the close */ ++ return; ++ ++ atomic_inc(&svsk->sk_inuse); ++ svc_delete_socket(svsk); ++ clear_bit(SK_BUSY, &svsk->sk_flags); + svc_sock_put(svsk); + } + + +-- + +From gregkh@mini.kroah.org Wed Mar 7 09:06:11 2007 +Message-Id: <20070307170611.330628526@mini.kroah.org> +References: <20070307170123.677686080@mini.kroah.org> +User-Agent: quilt/0.45-1 +Date: Wed, 07 Mar 2007 09:01:30 -0800 +From: Greg KH +To: linux-kernel@vger.kernel.org, + stable@kernel.org +Cc: Justin Forbes , + Zwane Mwaikambo , + Theodore Ts'o , + Randy Dunlap , + Dave Jones , + Chuck Wolber , + Chris Wedgwood , + Michael Krufky , + Chuck Ebbert , + torvalds@linux-foundation.org, + akpm@linux-foundation.org, + alan@lxorguk.ukuu.org.uk, + David Howells +Subject: [patch 007/101] Keys: Fix key serial number collision handling +Content-Disposition: inline; filename=keys-fix-key-serial-number-collision-handling.patch +Content-Length: 2817 +Lines: 93 + +From: David Howells + +[PATCH] Keys: Fix key serial number collision handling + +Fix the key serial number collision avoidance code in key_alloc_serial(). + +This didn't use to be so much of a problem as the key serial numbers were +allocated from a simple incremental counter, and it would have to go through +two billion keys before it could possibly encounter a collision. However, now +that random numbers are used instead, collisions are much more likely. + +This is fixed by finding a hole in the rbtree where the next unused serial +number ought to be and using that by going almost back to the top of the +insertion routine and redoing the insertion with the new serial number rather +than trying to be clever and attempting to work out the insertion point +pointer directly. + +This fixes kernel BZ #7727. + +Signed-off-by: David Howells +Cc: Chuck Ebbert +Signed-off-by: Linus Torvalds +Signed-off-by: Greg Kroah-Hartman + +--- + security/keys/key.c | 33 ++++++++++++++------------------- + 1 file changed, 14 insertions(+), 19 deletions(-) + +--- linux-2.6.20.1.orig/security/keys/key.c ++++ linux-2.6.20.1/security/keys/key.c +@@ -188,6 +188,7 @@ static inline void key_alloc_serial(stru + + spin_lock(&key_serial_lock); + ++attempt_insertion: + parent = NULL; + p = &key_serial_tree.rb_node; + +@@ -202,39 +203,33 @@ static inline void key_alloc_serial(stru + else + goto serial_exists; + } +- goto insert_here; ++ ++ /* we've found a suitable hole - arrange for this key to occupy it */ ++ rb_link_node(&key->serial_node, parent, p); ++ rb_insert_color(&key->serial_node, &key_serial_tree); ++ ++ spin_unlock(&key_serial_lock); ++ return; + + /* we found a key with the proposed serial number - walk the tree from + * that point looking for the next unused serial number */ + serial_exists: + for (;;) { + key->serial++; +- if (key->serial < 2) +- key->serial = 2; +- +- if (!rb_parent(parent)) +- p = &key_serial_tree.rb_node; +- else if (rb_parent(parent)->rb_left == parent) +- p = &(rb_parent(parent)->rb_left); +- else +- p = &(rb_parent(parent)->rb_right); ++ if (key->serial < 3) { ++ key->serial = 3; ++ goto attempt_insertion; ++ } + + parent = rb_next(parent); + if (!parent) +- break; ++ goto attempt_insertion; + + xkey = rb_entry(parent, struct key, serial_node); + if (key->serial < xkey->serial) +- goto insert_here; ++ goto attempt_insertion; + } + +- /* we've found a suitable hole - arrange for this key to occupy it */ +-insert_here: +- rb_link_node(&key->serial_node, parent, p); +- rb_insert_color(&key->serial_node, &key_serial_tree); +- +- spin_unlock(&key_serial_lock); +- + } /* end key_alloc_serial() */ + + /*****************************************************************************/ + +-- + +From gregkh@mini.kroah.org Wed Mar 7 09:06:11 2007 +Message-Id: <20070307170611.456270996@mini.kroah.org> +References: <20070307170123.677686080@mini.kroah.org> +User-Agent: quilt/0.45-1 +Date: Wed, 07 Mar 2007 09:01:31 -0800 +From: Greg KH +To: linux-kernel@vger.kernel.org, + stable@kernel.org, + Alan +Cc: Justin Forbes , + Zwane Mwaikambo , + Theodore Ts'o , + Randy Dunlap , + Dave Jones , + Chuck Wolber , + Chris Wedgwood , + Michael Krufky , + Chuck Ebbert , + torvalds@linux-foundation.org, + akpm@linux-foundation.org, + linux-ide@vger.kernel.org, + bzolnier@gmail.com, + Tejun Heo +Subject: [patch 008/101] ide: fix drive side 80c cable check +Content-Disposition: inline; filename=ide-fix-drive-side-80c-cable-check.patch +Content-Length: 802 +Lines: 28 + + +eighty_ninty_three() had word 93 validitity check but not the 80c bit +test itself (bit 12). This increases the chance of incorrect wire +detection especially because host side cable detection is often +unreliable and we sometimes soley depend on drive side cable +detection. Fix it. + +Signed-off-by: Tejun Heo +Acked-by: Alan +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/ide/ide-iops.c | 2 ++ + 1 file changed, 2 insertions(+) + +--- linux-2.6.20.1.orig/drivers/ide/ide-iops.c ++++ linux-2.6.20.1/drivers/ide/ide-iops.c +@@ -607,6 +607,8 @@ u8 eighty_ninty_three (ide_drive_t *driv + if(!(drive->id->hw_config & 0x4000)) + return 0; + #endif /* CONFIG_IDEDMA_IVB */ ++ if (!(drive->id->hw_config & 0x2000)) ++ return 0; + return 1; + } + + +-- + +From gregkh@mini.kroah.org Wed Mar 7 09:06:11 2007 +Message-Id: <20070307170611.586849567@mini.kroah.org> +References: <20070307170123.677686080@mini.kroah.org> +User-Agent: quilt/0.45-1 +Date: Wed, 07 Mar 2007 09:01:32 -0800 +From: Greg KH +To: linux-kernel@vger.kernel.org, + stable@kernel.org +Cc: Justin Forbes , + Zwane Mwaikambo , + Theodore Ts'o , + Randy Dunlap , + Dave Jones , + Chuck Wolber , + Chris Wedgwood , + Michael Krufky , + Chuck Ebbert , + torvalds@linux-foundation.org, + akpm@linux-foundation.org, + alan@lxorguk.ukuu.org.uk, + Larry Finger +Subject: [patch 009/101] bcm43xx: Fix for oops on resume +Content-Disposition: inline; filename=bcm43xx-fix-for-oops-on-resume.patch +Content-Length: 638 +Lines: 23 + + +There is a kernel oops on bcm43xx when resuming due to an overly tight timeout loop. + +Signed-off-by: Larry Finger +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/net/wireless/bcm43xx/bcm43xx.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- linux-2.6.20.1.orig/drivers/net/wireless/bcm43xx/bcm43xx.h ++++ linux-2.6.20.1/drivers/net/wireless/bcm43xx/bcm43xx.h +@@ -21,7 +21,7 @@ + #define PFX KBUILD_MODNAME ": " + + #define BCM43xx_SWITCH_CORE_MAX_RETRIES 50 +-#define BCM43xx_IRQWAIT_MAX_RETRIES 50 ++#define BCM43xx_IRQWAIT_MAX_RETRIES 100 + + #define BCM43xx_IO_SIZE 8192 + + +-- + +From gregkh@mini.kroah.org Wed Mar 7 09:06:11 2007 +Message-Id: <20070307170611.718039667@mini.kroah.org> +References: <20070307170123.677686080@mini.kroah.org> +User-Agent: quilt/0.45-1 +Date: Wed, 07 Mar 2007 09:01:33 -0800 +From: Greg KH +To: linux-kernel@vger.kernel.org, + stable@kernel.org +Cc: Justin Forbes , + Zwane Mwaikambo , + Theodore Ts'o , + Randy Dunlap , + Dave Jones , + Chuck Wolber , + Chris Wedgwood , + Michael Krufky , + Chuck Ebbert , + torvalds@linux-foundation.org, + akpm@linux-foundation.org, + alan@lxorguk.ukuu.org.uk, + Michael Buesch , + Larry Finger +Subject: [patch 010/101] bcm43xx: Fix for oops on ampdu status +Content-Disposition: inline; filename=bcm43xx-fix-for-oops-on-ampdu-status.patch +Content-Length: 1930 +Lines: 54 + + +From: Michael Buesch + +If bcm43xx were to process an afterburner (ampdu) status response, Linux would oops. The +ampdu and intermediate status bits are properly named. + +Signed-off-by: Michael Buesch +Signed-off-by: Larry Finger +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/net/wireless/bcm43xx/bcm43xx_main.c | 8 +++----- + drivers/net/wireless/bcm43xx/bcm43xx_xmit.h | 10 ++-------- + 2 files changed, 5 insertions(+), 13 deletions(-) + +--- linux-2.6.20.1.orig/drivers/net/wireless/bcm43xx/bcm43xx_main.c ++++ linux-2.6.20.1/drivers/net/wireless/bcm43xx/bcm43xx_main.c +@@ -1453,12 +1453,10 @@ static void handle_irq_transmit_status(s + + bcm43xx_debugfs_log_txstat(bcm, &stat); + +- if (stat.flags & BCM43xx_TXSTAT_FLAG_IGNORE) ++ if (stat.flags & BCM43xx_TXSTAT_FLAG_AMPDU) ++ continue; ++ if (stat.flags & BCM43xx_TXSTAT_FLAG_INTER) + continue; +- if (!(stat.flags & BCM43xx_TXSTAT_FLAG_ACK)) { +- //TODO: packet was not acked (was lost) +- } +- //TODO: There are more (unknown) flags to test. see bcm43xx_main.h + + if (bcm43xx_using_pio(bcm)) + bcm43xx_pio_handle_xmitstatus(bcm, &stat); +--- linux-2.6.20.1.orig/drivers/net/wireless/bcm43xx/bcm43xx_xmit.h ++++ linux-2.6.20.1/drivers/net/wireless/bcm43xx/bcm43xx_xmit.h +@@ -137,14 +137,8 @@ struct bcm43xx_xmitstatus { + u16 unknown; //FIXME + }; + +-#define BCM43xx_TXSTAT_FLAG_ACK 0x01 +-//TODO #define BCM43xx_TXSTAT_FLAG_??? 0x02 +-//TODO #define BCM43xx_TXSTAT_FLAG_??? 0x04 +-//TODO #define BCM43xx_TXSTAT_FLAG_??? 0x08 +-//TODO #define BCM43xx_TXSTAT_FLAG_??? 0x10 +-#define BCM43xx_TXSTAT_FLAG_IGNORE 0x20 +-//TODO #define BCM43xx_TXSTAT_FLAG_??? 0x40 +-//TODO #define BCM43xx_TXSTAT_FLAG_??? 0x80 ++#define BCM43xx_TXSTAT_FLAG_AMPDU 0x10 ++#define BCM43xx_TXSTAT_FLAG_INTER 0x20 + + u8 bcm43xx_plcp_get_ratecode_cck(const u8 bitrate); + u8 bcm43xx_plcp_get_ratecode_ofdm(const u8 bitrate); + +-- + +From gregkh@mini.kroah.org Wed Mar 7 09:06:11 2007 +Message-Id: <20070307170611.843281807@mini.kroah.org> +References: <20070307170123.677686080@mini.kroah.org> +User-Agent: quilt/0.45-1 +Date: Wed, 07 Mar 2007 09:01:34 -0800 +From: Greg KH +To: linux-kernel@vger.kernel.org, + stable@kernel.org, + Eric Piel +Cc: Justin Forbes , + Zwane Mwaikambo , + Theodore Ts'o , + Randy Dunlap , + Dave Jones , + Chuck Wolber , + Chris Wedgwood , + Michael Krufky , + Chuck Ebbert , + torvalds@linux-foundation.org, + akpm@linux-foundation.org, + alan@lxorguk.ukuu.org.uk, + Wang Zhenyu , + Adrian Bunk +Subject: [patch 011/101] AGP: intel-agp bugfix +Content-Disposition: inline; filename=agp-intel-agp-bugfix.patch +Content-Length: 2650 +Lines: 69 + +From: Dave Jones + +On Sun, Feb 04, 2007 at 04:51:38PM +0100, Eric Piel wrote: + > Hello, + > + > I've got a regression in 2.6.20-rc7 (-rc6 was fine) due to commit + > 4b95320fc4d21b0ff2f8604305dd6c851aff6096 ([AGPGART] intel_agp: restore + > graphics device's pci space early in resume). + +I think the key to this failure is the last line here .. + + > agpgart-intel 0000:00:00.0: resuming + > PM: Writing back config space on device 0000:00:02.0 at offset f (was 10b, writing 0) + > PM: Writing back config space on device 0000:00:02.0 at offset d (was dc, writing 0) + > PM: Writing back config space on device 0000:00:02.0 at offset b (was 10161025, writing 0) + > PM: Writing back config space on device 0000:00:02.0 at offset 5 (was f4000000, writing 0) + > PM: Writing back config space on device 0000:00:02.0 at offset 4 (was f8000008, writing 0) + > PM: Writing back config space on device 0000:00:02.0 at offset 2 (was 3000011, writing 0) + > PM: Writing back config space on device 0000:00:02.0 at offset 1 (was 2b00007, writing 0) + > PM: Writing back config space on device 0000:00:02.0 at offset 0 (was 11328086, writing 0) + > agpgart: Unable to remap memory. + +This then blows up the next access to intel_i810_private.registers, which happens to +be intel_i810_insert_entries. + +Either we need .suspend methods which unmap these regions, or we need +to skip trying to map them a second time on resume. + +There's an ugly patch below which does the latter. Give it a try? + +The intel-agp suspend/resume code has really grown into something +of a monster, and could use some refactoring in a big way. + + Dave + + +From: Dave Jones +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/char/agp/intel-agp.c | 14 ++++++++------ + 1 file changed, 8 insertions(+), 6 deletions(-) + +--- linux-2.6.20.1.orig/drivers/char/agp/intel-agp.c ++++ linux-2.6.20.1/drivers/char/agp/intel-agp.c +@@ -117,13 +117,15 @@ static int intel_i810_configure(void) + + current_size = A_SIZE_FIX(agp_bridge->current_size); + +- pci_read_config_dword(intel_i810_private.i810_dev, I810_MMADDR, &temp); +- temp &= 0xfff80000; +- +- intel_i810_private.registers = ioremap(temp, 128 * 4096); + if (!intel_i810_private.registers) { +- printk(KERN_ERR PFX "Unable to remap memory.\n"); +- return -ENOMEM; ++ pci_read_config_dword(intel_i810_private.i810_dev, I810_MMADDR, &temp); ++ temp &= 0xfff80000; ++ ++ intel_i810_private.registers = ioremap(temp, 128 * 4096); ++ if (!intel_i810_private.registers) { ++ printk(KERN_ERR PFX "Unable to remap memory.\n"); ++ return -ENOMEM; ++ } + } + + if ((readl(intel_i810_private.registers+I810_DRAM_CTL) + +-- + +From gregkh@mini.kroah.org Wed Mar 7 09:06:12 2007 +Message-Id: <20070307170611.973927704@mini.kroah.org> +References: <20070307170123.677686080@mini.kroah.org> +User-Agent: quilt/0.45-1 +Date: Wed, 07 Mar 2007 09:01:35 -0800 +From: Greg KH +To: linux-kernel@vger.kernel.org, + stable@kernel.org +Cc: Justin Forbes , + Zwane Mwaikambo , + Theodore Ts'o , + Randy Dunlap , + Dave Jones , + Chuck Wolber , + Chris Wedgwood , + Michael Krufky , + Chuck Ebbert , + torvalds@linux-foundation.org, + akpm@linux-foundation.org, + alan@lxorguk.ukuu.org.uk, + discuss@x86-64.org, + Jan Beulich , + David Moore , + linux1394-devel , + David Moore , + Stefan Richter +Subject: [patch 012/101] Missing critical phys_to_virt in lib/swiotlb.c +Content-Disposition: inline; filename=missing-critical-phys_to_virt-in-lib-swiotlb.c.patch +Content-Length: 974 +Lines: 31 + +From: David Moore + +Missing critical phys_to_virt in lib/swiotlb.c + +Adds missing call to phys_to_virt() in the +lib/swiotlb.c:swiotlb_sync_sg() function. Without this change, a kernel +panic will always occur whenever a SWIOTLB bounce buffer from a +scatter-gather list gets synced. Affected are especially Intel x86_64 +machines with more than about 3 GB RAM. + +Signed-off-by: David Moore +Signed-off-by: Stefan Richter +Signed-off-by: Greg Kroah-Hartman + +--- + lib/swiotlb.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- linux-2.6.20.1.orig/lib/swiotlb.c ++++ linux-2.6.20.1/lib/swiotlb.c +@@ -750,7 +750,7 @@ swiotlb_sync_sg(struct device *hwdev, st + + for (i = 0; i < nelems; i++, sg++) + if (sg->dma_address != SG_ENT_PHYS_ADDRESS(sg)) +- sync_single(hwdev, (void *) sg->dma_address, ++ sync_single(hwdev, phys_to_virt(sg->dma_address), + sg->dma_length, dir, target); + } + + +-- + +From gregkh@mini.kroah.org Wed Mar 7 09:06:12 2007 +Message-Id: <20070307170612.107455810@mini.kroah.org> +References: <20070307170123.677686080@mini.kroah.org> +User-Agent: quilt/0.45-1 +Date: Wed, 07 Mar 2007 09:01:36 -0800 +From: Greg KH +To: linux-kernel@vger.kernel.org, + stable@kernel.org, + Greg KH +Cc: Justin Forbes , + Zwane Mwaikambo , + Theodore Ts'o , + Randy Dunlap , + Dave Jones , + Chuck Wolber , + Chris Wedgwood , + Michael Krufky , + Chuck Ebbert , + torvalds@linux-foundation.org, + akpm@linux-foundation.org, + alan@lxorguk.ukuu.org.uk, + USB development list , + Adrian Bunk , + Alan Stern +Subject: [patch 013/101] USB: fix concurrent buffer access in the hub driver +Content-Disposition: inline; filename=usb-fix-concurrent-buffer-access-in-the-hub-driver.patch +Content-Length: 1819 +Lines: 65 + + +This patch (as849) fixes a bug in the USB hub driver. A single +pre-allocated buffer is used for all port status reads, but nothing +guarantees exclusive use of the buffer. A mutex is added to provide +this guarantee. + +Signed-off-by: Alan Stern +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/core/hub.c | 6 ++++++ + 1 file changed, 6 insertions(+) + +--- linux-2.6.20.1.orig/drivers/usb/core/hub.c ++++ linux-2.6.20.1/drivers/usb/core/hub.c +@@ -44,6 +44,7 @@ struct usb_hub { + struct usb_hub_status hub; + struct usb_port_status port; + } *status; /* buffer for status reports */ ++ struct mutex status_mutex; /* for the status buffer */ + + int error; /* last reported error */ + int nerrors; /* track consecutive errors */ +@@ -538,6 +539,7 @@ static int hub_hub_status(struct usb_hub + { + int ret; + ++ mutex_lock(&hub->status_mutex); + ret = get_hub_status(hub->hdev, &hub->status->hub); + if (ret < 0) + dev_err (hub->intfdev, +@@ -547,6 +549,7 @@ static int hub_hub_status(struct usb_hub + *change = le16_to_cpu(hub->status->hub.wHubChange); + ret = 0; + } ++ mutex_unlock(&hub->status_mutex); + return ret; + } + +@@ -620,6 +623,7 @@ static int hub_configure(struct usb_hub + ret = -ENOMEM; + goto fail; + } ++ mutex_init(&hub->status_mutex); + + hub->descriptor = kmalloc(sizeof(*hub->descriptor), GFP_KERNEL); + if (!hub->descriptor) { +@@ -1418,6 +1422,7 @@ static int hub_port_status(struct usb_hu + { + int ret; + ++ mutex_lock(&hub->status_mutex); + ret = get_port_status(hub->hdev, port1, &hub->status->port); + if (ret < 4) { + dev_err (hub->intfdev, +@@ -1429,6 +1434,7 @@ static int hub_port_status(struct usb_hu + *change = le16_to_cpu(hub->status->port.wPortChange); + ret = 0; + } ++ mutex_unlock(&hub->status_mutex); + return ret; + } + + +-- + +From gregkh@mini.kroah.org Wed Mar 7 09:06:12 2007 +Message-Id: <20070307170612.262729971@mini.kroah.org> +References: <20070307170123.677686080@mini.kroah.org> +User-Agent: quilt/0.45-1 +Date: Wed, 07 Mar 2007 09:01:37 -0800 +From: Greg KH +To: linux-kernel@vger.kernel.org, + stable@kernel.org +Cc: Justin Forbes , + Zwane Mwaikambo , + Theodore Ts'o , + Randy Dunlap , + Dave Jones , + Chuck Wolber , + Chris Wedgwood , + Michael Krufky , + Chuck Ebbert , + torvalds@linux-foundation.org, + akpm@linux-foundation.org, + alan@lxorguk.ukuu.org.uk, + Gregor Jasny , + Takashi Iwai , + Jaroslav Kysela +Subject: [patch 014/101] USB audio fixes 1 +Content-Disposition: inline; filename=usb-audio-fixes-1.patch +Content-Length: 1467 +Lines: 47 + +From: Takashi Iwai + +[PATCH] usbaudio - Fix Oops with broken usb descriptors + +This is a patch for ALSA Bug #2724. Some webcams provide bogus +settings with no valid rates. With this patch those are skipped. + +Signed-off-by: Gregor Jasny +Signed-off-by: Takashi Iwai +Signed-off-by: Jaroslav Kysela +Signed-off-by: Greg Kroah-Hartman + +--- + sound/usb/usbaudio.c | 6 ++++++ + 1 file changed, 6 insertions(+) + +--- linux-2.6.20.1.orig/sound/usb/usbaudio.c ++++ linux-2.6.20.1/sound/usb/usbaudio.c +@@ -2456,6 +2456,7 @@ static int parse_audio_format_rates(stru + * build the rate table and bitmap flags + */ + int r, idx, c; ++ unsigned int nonzero_rates = 0; + /* this table corresponds to the SNDRV_PCM_RATE_XXX bit */ + static unsigned int conv_rates[] = { + 5512, 8000, 11025, 16000, 22050, 32000, 44100, 48000, +@@ -2478,6 +2479,7 @@ static int parse_audio_format_rates(stru + fp->altsetting == 5 && fp->maxpacksize == 392) + rate = 96000; + fp->rate_table[r] = rate; ++ nonzero_rates |= rate; + if (rate < fp->rate_min) + fp->rate_min = rate; + else if (rate > fp->rate_max) +@@ -2493,6 +2495,10 @@ static int parse_audio_format_rates(stru + if (!found) + fp->needs_knot = 1; + } ++ if (!nonzero_rates) { ++ hwc_debug("All rates were zero. Skipping format!\n"); ++ return -1; ++ } + if (fp->needs_knot) + fp->rates |= SNDRV_PCM_RATE_KNOT; + } else { + +-- + +From gregkh@mini.kroah.org Wed Mar 7 09:06:12 2007 +Message-Id: <20070307170612.374647516@mini.kroah.org> +References: <20070307170123.677686080@mini.kroah.org> +User-Agent: quilt/0.45-1 +Date: Wed, 07 Mar 2007 09:01:38 -0800 +From: Greg KH +To: linux-kernel@vger.kernel.org, + stable@kernel.org +Cc: Justin Forbes , + Zwane Mwaikambo , + Theodore Ts'o , + Randy Dunlap , + Dave Jones , + Chuck Wolber , + Chris Wedgwood , + Michael Krufky , + Chuck Ebbert , + torvalds@linux-foundation.org, + akpm@linux-foundation.org, + alan@lxorguk.ukuu.org.uk, + Takashi Iwai +Subject: [patch 015/101] USB audio fixes 2 +Content-Disposition: inline; filename=usb-audio-fixes-2.patch +Content-Length: 2519 +Lines: 87 + +From: Takashi Iwai + +[PATCH] usbaudio - Fix Oops with unconventional sample rates + +The patch fixes the memory corruption by the support of unconventional +sample rates. Also, it avoids the too restrictive constraints if +any of usb descriptions contain continuous rates. + +Signed-off-by: Takashi Iwai +Signed-off-by: Greg Kroah-Hartman + +--- + sound/usb/usbaudio.c | 43 +++++++++++++++++++++++++------------------ + 1 file changed, 25 insertions(+), 18 deletions(-) + +--- linux-2.6.20.1.orig/sound/usb/usbaudio.c ++++ linux-2.6.20.1/sound/usb/usbaudio.c +@@ -186,6 +186,7 @@ struct snd_usb_substream { + u64 formats; /* format bitmasks (all or'ed) */ + unsigned int num_formats; /* number of supported audio formats (list) */ + struct list_head fmt_list; /* format list */ ++ struct snd_pcm_hw_constraint_list rate_list; /* limited rates */ + spinlock_t lock; + + struct snd_urb_ops ops; /* callbacks (must be filled at init) */ +@@ -1810,28 +1811,33 @@ static int check_hw_params_convention(st + static int snd_usb_pcm_check_knot(struct snd_pcm_runtime *runtime, + struct snd_usb_substream *subs) + { +- struct list_head *p; +- struct snd_pcm_hw_constraint_list constraints_rates; ++ struct audioformat *fp; ++ int count = 0, needs_knot = 0; + int err; + +- list_for_each(p, &subs->fmt_list) { +- struct audioformat *fp; +- fp = list_entry(p, struct audioformat, list); +- +- if (!fp->needs_knot) +- continue; +- +- constraints_rates.count = fp->nr_rates; +- constraints_rates.list = fp->rate_table; +- constraints_rates.mask = 0; +- +- err = snd_pcm_hw_constraint_list(runtime, 0, +- SNDRV_PCM_HW_PARAM_RATE, +- &constraints_rates); ++ list_for_each_entry(fp, &subs->fmt_list, list) { ++ if (fp->rates & SNDRV_PCM_RATE_CONTINUOUS) ++ return 0; ++ count += fp->nr_rates; ++ if (fp->needs_knot) ++ needs_knot = 1; ++ } ++ if (!needs_knot) ++ return 0; + +- if (err < 0) +- return err; ++ subs->rate_list.count = count; ++ subs->rate_list.list = kmalloc(sizeof(int) * count, GFP_KERNEL); ++ subs->rate_list.mask = 0; ++ count = 0; ++ list_for_each_entry(fp, &subs->fmt_list, list) { ++ int i; ++ for (i = 0; i < fp->nr_rates; i++) ++ subs->rate_list.list[count++] = fp->rate_table[i]; + } ++ err = snd_pcm_hw_constraint_list(runtime, 0, SNDRV_PCM_HW_PARAM_RATE, ++ &subs->rate_list); ++ if (err < 0) ++ return err; + + return 0; + } +@@ -2231,6 +2237,7 @@ static void free_substream(struct snd_us + kfree(fp->rate_table); + kfree(fp); + } ++ kfree(subs->rate_list.list); + } + + + +-- + +From gregkh@mini.kroah.org Wed Mar 7 09:06:12 2007 +Message-Id: <20070307170612.498003382@mini.kroah.org> +References: <20070307170123.677686080@mini.kroah.org> +User-Agent: quilt/0.45-1 +Date: Wed, 07 Mar 2007 09:01:39 -0800 +From: Greg KH +To: linux-kernel@vger.kernel.org, + stable@kernel.org +Cc: Justin Forbes , + Zwane Mwaikambo , + Theodore Ts'o , + Randy Dunlap , + Dave Jones , + Chuck Wolber , + Chris Wedgwood , + Michael Krufky , + Chuck Ebbert , + torvalds@linux-foundation.org, + akpm@linux-foundation.org, + alan@lxorguk.ukuu.org.uk, + Takashi Iwai , + Jaroslav Kysela +Subject: [patch 016/101] hda-intel - Dont try to probe invalid codecs +Content-Disposition: inline; filename=hda-intel-don-t-try-to-probe-invalid-codecs.patch +Content-Length: 881 +Lines: 30 + +From: Takashi Iwai + +[ALSA] hda-intel - Don't try to probe invalid codecs + +Fix the max number of codecs detected by HD-intel (and compatible) +controllers to 3. Some hardware reports extra bits as if +connected, and the driver gets confused to probe unexisting codecs. + +Signed-off-by: Takashi Iwai +Signed-off-by: Jaroslav Kysela +Signed-off-by: Greg Kroah-Hartman + + +--- + sound/pci/hda/hda_intel.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- linux-2.6.20.1.orig/sound/pci/hda/hda_intel.c ++++ linux-2.6.20.1/sound/pci/hda/hda_intel.c +@@ -199,7 +199,7 @@ enum { SDI0, SDI1, SDI2, SDI3, SDO0, SDO + + /* STATESTS int mask: SD2,SD1,SD0 */ + #define STATESTS_INT_MASK 0x07 +-#define AZX_MAX_CODECS 4 ++#define AZX_MAX_CODECS 3 + + /* SD_CTL bits */ + #define SD_CTL_STREAM_RESET 0x01 /* stream reset bit */ + +-- + +From gregkh@mini.kroah.org Wed Mar 7 09:06:12 2007 +Message-Id: <20070307170612.646730623@mini.kroah.org> +References: <20070307170123.677686080@mini.kroah.org> +User-Agent: quilt/0.45-1 +Date: Wed, 07 Mar 2007 09:01:40 -0800 +From: Greg KH +To: linux-kernel@vger.kernel.org, + stable@kernel.org, + "Kai" , + Andrew Morton +Cc: Justin Forbes , + Zwane Mwaikambo , + Theodore Ts'o , + Randy Dunlap , + Dave Jones , + Chuck Wolber , + Chris Wedgwood , + Michael Krufky , + Chuck Ebbert , + torvalds@linux-foundation.org, + alan@lxorguk.ukuu.org.uk, + Jens Axboe , + Neil Brown +Subject: [patch 017/101] Fix various bugs with aligned reads in RAID5. +Content-Disposition: inline; filename=fix-various-bugs-with-aligned-reads-in-raid5.patch +Content-Length: 3276 +Lines: 110 + +From: Neil Brown + +Fix various bugs with aligned reads in RAID5. + +It is possible for raid5 to be sent a bio that is too big +for an underlying device. So if it is a READ that we +pass stright down to a device, it will fail and confuse +RAID5. + +So in 'chunk_aligned_read' we check that the bio fits within the +parameters for the target device and if it doesn't fit, fall back +on reading through the stripe cache and making lots of one-page +requests. + +Note that this is the earliest time we can check against the device +because earlier we don't have a lock on the device, so it could change +underneath us. + +Also, the code for handling a retry through the cache when a read +fails has not been tested and was badly broken. This patch fixes that +code. + +Signed-off-by: Neil Brown +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/md/raid5.c | 42 +++++++++++++++++++++++++++++++++++++++--- + 1 file changed, 39 insertions(+), 3 deletions(-) + +--- linux-2.6.20.1.orig/drivers/md/raid5.c ++++ linux-2.6.20.1/drivers/md/raid5.c +@@ -2620,7 +2620,7 @@ static struct bio *remove_bio_from_retry + } + bi = conf->retry_read_aligned_list; + if(bi) { +- conf->retry_read_aligned = bi->bi_next; ++ conf->retry_read_aligned_list = bi->bi_next; + bi->bi_next = NULL; + bi->bi_phys_segments = 1; /* biased count of active stripes */ + bi->bi_hw_segments = 0; /* count of processed stripes */ +@@ -2669,6 +2669,27 @@ static int raid5_align_endio(struct bio + return 0; + } + ++static int bio_fits_rdev(struct bio *bi) ++{ ++ request_queue_t *q = bdev_get_queue(bi->bi_bdev); ++ ++ if ((bi->bi_size>>9) > q->max_sectors) ++ return 0; ++ blk_recount_segments(q, bi); ++ if (bi->bi_phys_segments > q->max_phys_segments || ++ bi->bi_hw_segments > q->max_hw_segments) ++ return 0; ++ ++ if (q->merge_bvec_fn) ++ /* it's too hard to apply the merge_bvec_fn at this stage, ++ * just just give up ++ */ ++ return 0; ++ ++ return 1; ++} ++ ++ + static int chunk_aligned_read(request_queue_t *q, struct bio * raid_bio) + { + mddev_t *mddev = q->queuedata; +@@ -2715,6 +2736,13 @@ static int chunk_aligned_read(request_qu + align_bi->bi_flags &= ~(1 << BIO_SEG_VALID); + align_bi->bi_sector += rdev->data_offset; + ++ if (!bio_fits_rdev(align_bi)) { ++ /* too big in some way */ ++ bio_put(align_bi); ++ rdev_dec_pending(rdev, mddev); ++ return 0; ++ } ++ + spin_lock_irq(&conf->device_lock); + wait_event_lock_irq(conf->wait_for_stripe, + conf->quiesce == 0, +@@ -3107,7 +3135,9 @@ static int retry_aligned_read(raid5_con + last_sector = raid_bio->bi_sector + (raid_bio->bi_size>>9); + + for (; logical_sector < last_sector; +- logical_sector += STRIPE_SECTORS, scnt++) { ++ logical_sector += STRIPE_SECTORS, ++ sector += STRIPE_SECTORS, ++ scnt++) { + + if (scnt < raid_bio->bi_hw_segments) + /* already done this stripe */ +@@ -3123,7 +3153,13 @@ static int retry_aligned_read(raid5_con + } + + set_bit(R5_ReadError, &sh->dev[dd_idx].flags); +- add_stripe_bio(sh, raid_bio, dd_idx, 0); ++ if (!add_stripe_bio(sh, raid_bio, dd_idx, 0)) { ++ release_stripe(sh); ++ raid_bio->bi_hw_segments = scnt; ++ conf->retry_read_aligned = raid_bio; ++ return handled; ++ } ++ + handle_stripe(sh, NULL); + release_stripe(sh); + handled++; + +-- + +From gregkh@mini.kroah.org Wed Mar 7 09:06:12 2007 +Message-Id: <20070307170612.752732614@mini.kroah.org> +References: <20070307170123.677686080@mini.kroah.org> +User-Agent: quilt/0.45-1 +Date: Wed, 07 Mar 2007 09:01:41 -0800 +From: Greg KH +To: linux-kernel@vger.kernel.org, + stable@kernel.org +Cc: Justin Forbes , + Zwane Mwaikambo , + Theodore Ts'o , + Randy Dunlap , + Dave Jones , + Chuck Wolber , + Chris Wedgwood , + Michael Krufky , + Chuck Ebbert , + torvalds@linux-foundation.org, + akpm@linux-foundation.org, + alan@lxorguk.ukuu.org.uk, + bunk@stusta.de, + Daniel Walker , + "David S. Miller" +Subject: [patch 018/101] Fix ATM initcall ordering. +Content-Disposition: inline; filename=fix-atm-initcall-ordering.patch +Content-Length: 1057 +Lines: 40 + +From: Daniel Walker + +[ATM]: Fix for crash in adummy_init() + +This was reported by Ingo Molnar here, + +http://lkml.org/lkml/2006/12/18/119 + +The problem is that adummy_init() depends on atm_init() , but adummy_init() +is called first. + +So I put atm_init() into subsys_initcall which seems appropriate, and it +will still get module_init() if it becomes a module. + +Interesting to note that you could crash your system here if you just load +the modules in the wrong order. + +Signed-off-by: Daniel Walker +Signed-off-by: Andrew Morton +Signed-off-by: David S. Miller +Signed-off-by: Greg Kroah-Hartman + +--- + net/atm/common.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +--- linux-2.6.20.1.orig/net/atm/common.c ++++ linux-2.6.20.1/net/atm/common.c +@@ -816,7 +816,8 @@ static void __exit atm_exit(void) + proto_unregister(&vcc_proto); + } + +-module_init(atm_init); ++subsys_initcall(atm_init); ++ + module_exit(atm_exit); + + MODULE_LICENSE("GPL"); + +-- + +From gregkh@mini.kroah.org Wed Mar 7 09:06:13 2007 +Message-Id: <20070307170612.890693963@mini.kroah.org> +References: <20070307170123.677686080@mini.kroah.org> +User-Agent: quilt/0.45-1 +Date: Wed, 07 Mar 2007 09:01:42 -0800 +From: Greg KH +To: linux-kernel@vger.kernel.org, + stable@kernel.org +Cc: Justin Forbes , + Zwane Mwaikambo , + Theodore Ts'o , + Randy Dunlap , + Dave Jones , + Chuck Wolber , + Chris Wedgwood , + Michael Krufky , + Chuck Ebbert , + torvalds@linux-foundation.org, + akpm@linux-foundation.org, + alan@lxorguk.ukuu.org.uk, + bunk@stusta.de, + John Heffner , + "David S. Miller" +Subject: [patch 019/101] Fix TCP FIN handling +Content-Disposition: inline; filename=fix-tcp-fin-handling.patch +Content-Length: 886 +Lines: 29 + +From: John Heffner + +We can accidently spit out a huge burst of packets with TSO +when the FIN back is piggybacked onto the final packet. + +[TCP]: Don't apply FIN exception to full TSO segments. + +Signed-off-by: John Heffner +Signed-off-by: David S. Miller +Signed-off-by: Greg Kroah-Hartman + +--- + net/ipv4/tcp_output.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +--- linux-2.6.20.1.orig/net/ipv4/tcp_output.c ++++ linux-2.6.20.1/net/ipv4/tcp_output.c +@@ -965,7 +965,8 @@ static inline unsigned int tcp_cwnd_test + u32 in_flight, cwnd; + + /* Don't be strict about the congestion window for the final FIN. */ +- if (TCP_SKB_CB(skb)->flags & TCPCB_FLAG_FIN) ++ if ((TCP_SKB_CB(skb)->flags & TCPCB_FLAG_FIN) && ++ tcp_skb_pcount(skb) == 1) + return 1; + + in_flight = tcp_packets_in_flight(tp); + +-- + +From gregkh@mini.kroah.org Wed Mar 7 09:06:13 2007 +Message-Id: <20070307170613.018724166@mini.kroah.org> +References: <20070307170123.677686080@mini.kroah.org> +User-Agent: quilt/0.45-1 +Date: Wed, 07 Mar 2007 09:01:43 -0800 +From: Greg KH +To: linux-kernel@vger.kernel.org, + stable@kernel.org +Cc: Justin Forbes , + Zwane Mwaikambo , + Theodore Ts'o , + Randy Dunlap , + Dave Jones , + Chuck Wolber , + Chris Wedgwood , + Michael Krufky , + Chuck Ebbert , + torvalds@linux-foundation.org, + akpm@linux-foundation.org, + alan@lxorguk.ukuu.org.uk, + bunk@stusta.de, + Alexey Dobriyan , + "David S. Miller" +Subject: [patch 020/101] Fix allocation failure handling in multicast +Content-Disposition: inline; filename=fix-allocation-failure-handling-in-multicast.patch +Content-Length: 1154 +Lines: 40 + +From: Alexey Dobriyan + +[IPV4/IPV6] multicast: Check add_grhead() return value + +add_grhead() allocates memory with GFP_ATOMIC and in at least two places skb +from it passed to skb_put() without checking. + +Signed-off-by: Alexey Dobriyan +Signed-off-by: David S. Miller +Signed-off-by: Greg Kroah-Hartman + +--- + net/ipv4/igmp.c | 2 ++ + net/ipv6/mcast.c | 2 ++ + 2 files changed, 4 insertions(+) + +--- linux-2.6.20.1.orig/net/ipv4/igmp.c ++++ linux-2.6.20.1/net/ipv4/igmp.c +@@ -455,6 +455,8 @@ static struct sk_buff *add_grec(struct s + skb = add_grhead(skb, pmc, type, &pgr); + first = 0; + } ++ if (!skb) ++ return NULL; + psrc = (__be32 *)skb_put(skb, sizeof(__be32)); + *psrc = psf->sf_inaddr; + scount++; stotal++; +--- linux-2.6.20.1.orig/net/ipv6/mcast.c ++++ linux-2.6.20.1/net/ipv6/mcast.c +@@ -1582,6 +1582,8 @@ static struct sk_buff *add_grec(struct s + skb = add_grhead(skb, pmc, type, &pgr); + first = 0; + } ++ if (!skb) ++ return NULL; + psrc = (struct in6_addr *)skb_put(skb, sizeof(*psrc)); + *psrc = psf->sf_addr; + scount++; stotal++; + +-- + +From gregkh@mini.kroah.org Wed Mar 7 09:06:13 2007 +Message-Id: <20070307170613.142342637@mini.kroah.org> +References: <20070307170123.677686080@mini.kroah.org> +User-Agent: quilt/0.45-1 +Date: Wed, 07 Mar 2007 09:01:44 -0800 +From: Greg KH +To: linux-kernel@vger.kernel.org, + stable@kernel.org, + akpm@linux-foundation.org +Cc: Justin Forbes , + Zwane Mwaikambo , + Theodore Ts'o , + Randy Dunlap , + Dave Jones , + Chuck Wolber , + Chris Wedgwood , + Michael Krufky , + Chuck Ebbert , + torvalds@linux-foundation.org, + alan@lxorguk.ukuu.org.uk, + linux-raid@vger.kernel.org, + Neil Brown +Subject: [patch 021/101] md: Avoid possible BUG_ON in md bitmap handling. +Content-Disposition: inline; filename=md-avoid-possible-bug_on-in-md-bitmap-handling.patch +Content-Length: 2846 +Lines: 95 + +From: Neil Brown + +md/bitmap tracks how many active write requests are pending on blocks +associated with each bit in the bitmap, so that it knows when it can +clear the bit (when count hits zero). + +The counter has 14 bits of space, so if there are ever more than 16383, +we cannot cope. + +Currently the code just calles BUG_ON as "all" drivers have request queue +limits much smaller than this. + +However is seems that some don't. Apparently some multipath configurations +can allow more than 16383 concurrent write requests. + +So, in this unlikely situation, instead of calling BUG_ON we now wait +for the count to drop down a bit. This requires a new wait_queue_head, +some waiting code, and a wakeup call. + +Tested by limiting the counter to 20 instead of 16383 (writes go a lot slower +in that case...). + +Signed-off-by: Neil Brown +Signed-off-by: Greg Kroah-Hartman + +diff .prev/drivers/md/bitmap.c ./drivers/md/bitmap.c +--- + drivers/md/bitmap.c | 22 +++++++++++++++++++++- + include/linux/raid/bitmap.h | 1 + + 2 files changed, 22 insertions(+), 1 deletion(-) + +--- linux-2.6.20.1.orig/drivers/md/bitmap.c ++++ linux-2.6.20.1/drivers/md/bitmap.c +@@ -1160,6 +1160,22 @@ int bitmap_startwrite(struct bitmap *bit + return 0; + } + ++ if (unlikely((*bmc & COUNTER_MAX) == COUNTER_MAX)) { ++ DEFINE_WAIT(__wait); ++ /* note that it is safe to do the prepare_to_wait ++ * after the test as long as we do it before dropping ++ * the spinlock. ++ */ ++ prepare_to_wait(&bitmap->overflow_wait, &__wait, ++ TASK_UNINTERRUPTIBLE); ++ spin_unlock_irq(&bitmap->lock); ++ bitmap->mddev->queue ++ ->unplug_fn(bitmap->mddev->queue); ++ schedule(); ++ finish_wait(&bitmap->overflow_wait, &__wait); ++ continue; ++ } ++ + switch(*bmc) { + case 0: + bitmap_file_set_bit(bitmap, offset); +@@ -1169,7 +1185,7 @@ int bitmap_startwrite(struct bitmap *bit + case 1: + *bmc = 2; + } +- BUG_ON((*bmc & COUNTER_MAX) == COUNTER_MAX); ++ + (*bmc)++; + + spin_unlock_irq(&bitmap->lock); +@@ -1207,6 +1223,9 @@ void bitmap_endwrite(struct bitmap *bitm + if (!success && ! (*bmc & NEEDED_MASK)) + *bmc |= NEEDED_MASK; + ++ if ((*bmc & COUNTER_MAX) == COUNTER_MAX) ++ wake_up(&bitmap->overflow_wait); ++ + (*bmc)--; + if (*bmc <= 2) { + set_page_attr(bitmap, +@@ -1431,6 +1450,7 @@ int bitmap_create(mddev_t *mddev) + spin_lock_init(&bitmap->lock); + atomic_set(&bitmap->pending_writes, 0); + init_waitqueue_head(&bitmap->write_wait); ++ init_waitqueue_head(&bitmap->overflow_wait); + + bitmap->mddev = mddev; + +--- linux-2.6.20.1.orig/include/linux/raid/bitmap.h ++++ linux-2.6.20.1/include/linux/raid/bitmap.h +@@ -247,6 +247,7 @@ struct bitmap { + + atomic_t pending_writes; /* pending writes to the bitmap file */ + wait_queue_head_t write_wait; ++ wait_queue_head_t overflow_wait; + + }; + + +-- + +From gregkh@mini.kroah.org Wed Mar 7 09:06:13 2007 +Message-Id: <20070307170613.294748556@mini.kroah.org> +References: <20070307170123.677686080@mini.kroah.org> +User-Agent: quilt/0.45-1 +Date: Wed, 07 Mar 2007 09:01:45 -0800 +From: Greg KH +To: linux-kernel@vger.kernel.org, + stable@kernel.org +Cc: Justin Forbes , + Zwane Mwaikambo , + Theodore Ts'o , + Randy Dunlap , + Dave Jones , + Chuck Wolber , + Chris Wedgwood , + Michael Krufky , + Chuck Ebbert , + torvalds@linux-foundation.org, + akpm@linux-foundation.org, + alan@lxorguk.ukuu.org.uk, + imr@rtschenk.de, + linuxppc-embedded@ozlabs.org, + Kumar Gala +Subject: [patch 022/101] Fix compile error for e500 core based processors +Content-Disposition: inline; filename=fix-compile-error-for-e500-core-based-processors.patch +Content-Length: 1269 +Lines: 34 + +From: Rojhalat Ibrahim + +We get the following compiler error: + + CC arch/ppc/kernel/ppc_ksyms.o +arch/ppc/kernel/ppc_ksyms.c:275: error: '__mtdcr' undeclared here (not in a function) +arch/ppc/kernel/ppc_ksyms.c:275: warning: type defaults to 'int' in declaration of '__mtdcr' +arch/ppc/kernel/ppc_ksyms.c:276: error: '__mfdcr' undeclared here (not in a function) +arch/ppc/kernel/ppc_ksyms.c:276: warning: type defaults to 'int' in declaration of '__mfdcr' +make[1]: *** [arch/ppc/kernel/ppc_ksyms.o] Error 1 + +This is due to the EXPORT_SYMBOL for __mtdcr/__mfdcr not having the proper CONFIG protection + +Signed-off-by: Rojhalat Ibrahim +Signed-off-by: Kumar Gala +Signed-off-by: Greg Kroah-Hartman + +--- + arch/ppc/kernel/ppc_ksyms.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- linux-2.6.20.1.orig/arch/ppc/kernel/ppc_ksyms.c ++++ linux-2.6.20.1/arch/ppc/kernel/ppc_ksyms.c +@@ -270,7 +270,7 @@ EXPORT_SYMBOL(mmu_hash_lock); /* For MOL + extern long *intercept_table; + EXPORT_SYMBOL(intercept_table); + #endif /* CONFIG_PPC_STD_MMU */ +-#if defined(CONFIG_40x) || defined(CONFIG_BOOKE) ++#ifdef CONFIG_PPC_DCR_NATIVE + EXPORT_SYMBOL(__mtdcr); + EXPORT_SYMBOL(__mfdcr); + #endif + +-- + +From gregkh@mini.kroah.org Wed Mar 7 09:06:13 2007 +Message-Id: <20070307170613.395535918@mini.kroah.org> +References: <20070307170123.677686080@mini.kroah.org> +User-Agent: quilt/0.45-1 +Date: Wed, 07 Mar 2007 09:01:46 -0800 +From: Greg KH +To: linux-kernel@vger.kernel.org, + stable@kernel.org +Cc: Justin Forbes , + Zwane Mwaikambo , + Theodore Ts'o , + Randy Dunlap , + Dave Jones , + Chuck Wolber , + Chris Wedgwood , + Michael Krufky , + Chuck Ebbert , + torvalds@linux-foundation.org, + akpm@linux-foundation.org, + alan@lxorguk.ukuu.org.uk, + linux1394-devel@lists.sourceforge.net, + Stefan Richter , + David Moore +Subject: [patch 023/101] ieee1394: video1394: DMA fix +Content-Disposition: inline; filename=ieee1394-video1394-dma-fix.patch +Content-Length: 1633 +Lines: 48 + +From: David Moore + +This together with the phys_to_virt fix in lib/swiotlb.c::swiotlb_sync_sg +fixes video1394 DMA on machines with DMA bounce buffers, especially Intel +x86-64 machines with > 3GB RAM. + +Signed-off-by: Stefan Richter +Signed-off-by: David Moore +Tested-by: Nicolas Turro +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/ieee1394/video1394.c | 8 ++++++++ + 1 file changed, 8 insertions(+) + +--- linux-2.6.20.1.orig/drivers/ieee1394/video1394.c ++++ linux-2.6.20.1/drivers/ieee1394/video1394.c +@@ -489,6 +489,9 @@ static void wakeup_dma_ir_ctx(unsigned l + reset_ir_status(d, i); + d->buffer_status[d->buffer_prg_assignment[i]] = VIDEO1394_BUFFER_READY; + do_gettimeofday(&d->buffer_time[d->buffer_prg_assignment[i]]); ++ dma_region_sync_for_cpu(&d->dma, ++ d->buffer_prg_assignment[i] * d->buf_size, ++ d->buf_size); + } + } + +@@ -1096,6 +1099,8 @@ static long video1394_ioctl(struct file + DBGMSG(ohci->host->id, "Starting iso transmit DMA ctx=%d", + d->ctx); + put_timestamp(ohci, d, d->last_buffer); ++ dma_region_sync_for_device(&d->dma, ++ v.buffer * d->buf_size, d->buf_size); + + /* Tell the controller where the first program is */ + reg_write(ohci, d->cmdPtr, +@@ -1111,6 +1116,9 @@ static long video1394_ioctl(struct file + "Waking up iso transmit dma ctx=%d", + d->ctx); + put_timestamp(ohci, d, d->last_buffer); ++ dma_region_sync_for_device(&d->dma, ++ v.buffer * d->buf_size, d->buf_size); ++ + reg_write(ohci, d->ctrlSet, 0x1000); + } + } + +-- + +From gregkh@mini.kroah.org Wed Mar 7 09:06:13 2007 +Message-Id: <20070307170613.527416889@mini.kroah.org> +References: <20070307170123.677686080@mini.kroah.org> +User-Agent: quilt/0.45-1 +Date: Wed, 07 Mar 2007 09:01:47 -0800 +From: Greg KH +To: linux-kernel@vger.kernel.org, + stable@kernel.org +Cc: Justin Forbes , + Zwane Mwaikambo , + Theodore Ts'o , + Randy Dunlap , + Dave Jones , + Chuck Wolber , + Chris Wedgwood , + Michael Krufky , + Chuck Ebbert , + torvalds@linux-foundation.org, + akpm@linux-foundation.org, + alan@lxorguk.ukuu.org.uk, + linux1394-devel@lists.sourceforge.net, + Stefan Richter +Subject: [patch 024/101] ieee1394: fix host device registering when nodemgr disabled +Content-Disposition: inline; filename=ieee1394-fix-host-device-registering-when-nodemgr-disabled.patch +Content-Length: 1855 +Lines: 67 + +From: Stefan Richter + +Since my commit 8252bbb1363b7fe963a3eb6f8a36da619a6f5a65 in 2.6.20-rc1, +host devices have a dummy driver attached. Alas the driver was not +registered before use if ieee1394 was loaded with disable_nodemgr=1. + +This resulted in non-functional FireWire drivers or kernel lockup. +http://bugzilla.kernel.org/show_bug.cgi?id=7942 + +Signed-off-by: Stefan Richter +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/ieee1394/nodemgr.c | 24 ++++++++++++++++-------- + 1 file changed, 16 insertions(+), 8 deletions(-) + +--- linux-2.6.20.1.orig/drivers/ieee1394/nodemgr.c ++++ linux-2.6.20.1/drivers/ieee1394/nodemgr.c +@@ -274,7 +274,6 @@ static struct device_driver nodemgr_mid_ + struct device nodemgr_dev_template_host = { + .bus = &ieee1394_bus_type, + .release = nodemgr_release_host, +- .driver = &nodemgr_mid_layer_driver, + }; + + +@@ -1889,22 +1888,31 @@ int init_ieee1394_nodemgr(void) + + error = class_register(&nodemgr_ne_class); + if (error) +- return error; +- ++ goto fail_ne; + error = class_register(&nodemgr_ud_class); +- if (error) { +- class_unregister(&nodemgr_ne_class); +- return error; +- } ++ if (error) ++ goto fail_ud; + error = driver_register(&nodemgr_mid_layer_driver); ++ if (error) ++ goto fail_ml; ++ /* This driver is not used if nodemgr is off (disable_nodemgr=1). */ ++ nodemgr_dev_template_host.driver = &nodemgr_mid_layer_driver; ++ + hpsb_register_highlevel(&nodemgr_highlevel); + return 0; ++ ++fail_ml: ++ class_unregister(&nodemgr_ud_class); ++fail_ud: ++ class_unregister(&nodemgr_ne_class); ++fail_ne: ++ return error; + } + + void cleanup_ieee1394_nodemgr(void) + { + hpsb_unregister_highlevel(&nodemgr_highlevel); +- ++ driver_unregister(&nodemgr_mid_layer_driver); + class_unregister(&nodemgr_ud_class); + class_unregister(&nodemgr_ne_class); + } + +-- + +From gregkh@mini.kroah.org Wed Mar 7 09:06:13 2007 +Message-Id: <20070307170613.654016184@mini.kroah.org> +References: <20070307170123.677686080@mini.kroah.org> +User-Agent: quilt/0.45-1 +Date: Wed, 07 Mar 2007 09:01:48 -0800 +From: Greg KH +To: linux-kernel@vger.kernel.org, + stable@kernel.org +Cc: Justin Forbes , + Zwane Mwaikambo , + Theodore Ts'o , + Randy Dunlap , + Dave Jones , + Chuck Wolber , + Chris Wedgwood , + Michael Krufky , + Chuck Ebbert , + torvalds@linux-foundation.org, + akpm@linux-foundation.org, + alan@lxorguk.ukuu.org.uk, + len.brown@intel.com, + cappaberra@gmail.com, + Michael Hanselmann +Subject: [patch 025/101] Fix null pointer dereference in appledisplay driver +Content-Disposition: inline; filename=fix-null-pointer-dereference-in-appledisplay-driver.patch +Content-Length: 994 +Lines: 29 + +From: Michael Hanselmann + +Commit 40b20c257a13c5a526ac540bc5e43d0fdf29792a by Len Brown introduced +a null pointer dereference in the appledisplay driver. This patch fixes +it. + +Signed-off-by: Michael Hanselmann +Signed-off-by: Greg Kroah-Hartman + + +--- + drivers/usb/misc/appledisplay.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +--- linux-2.6.20.1.orig/drivers/usb/misc/appledisplay.c ++++ linux-2.6.20.1/drivers/usb/misc/appledisplay.c +@@ -281,8 +281,8 @@ static int appledisplay_probe(struct usb + /* Register backlight device */ + snprintf(bl_name, sizeof(bl_name), "appledisplay%d", + atomic_inc_return(&count_displays) - 1); +- pdata->bd = backlight_device_register(bl_name, NULL, NULL, +- &appledisplay_bl_data); ++ pdata->bd = backlight_device_register(bl_name, NULL, ++ pdata, &appledisplay_bl_data); + if (IS_ERR(pdata->bd)) { + err("appledisplay: Backlight registration failed"); + goto error; + +-- + +From gregkh@mini.kroah.org Wed Mar 7 09:06:13 2007 +Message-Id: <20070307170613.810740248@mini.kroah.org> +References: <20070307170123.677686080@mini.kroah.org> +User-Agent: quilt/0.45-1 +Date: Wed, 07 Mar 2007 09:01:49 -0800 +From: Greg KH +To: linux-kernel@vger.kernel.org, + stable@kernel.org +Cc: Justin Forbes , + Zwane Mwaikambo , + Theodore Ts'o , + Randy Dunlap , + Dave Jones , + Chuck Wolber , + Chris Wedgwood , + Michael Krufky , + Chuck Ebbert , + torvalds@linux-foundation.org, + akpm@linux-foundation.org, + alan@lxorguk.ukuu.org.uk, + Julien BLACHE , + Jiri Kosina +Subject: [patch 026/101] USB HID: Fix USB vendor and product IDs endianness for USB HID devices +Content-Disposition: inline; filename=usb-hid-fix-usb-vendor-and-product-ids-endianness-for-usb-hid-devices.patch +Content-Length: 1078 +Lines: 32 + +From: Julien BLACHE + +[PATCH] USB HID: Fix USB vendor and product IDs endianness for USB HID devices + +The USB vendor and product IDs are not byteswapped appropriately, and +thus come out in the wrong endianness when fetched through the evdev +using ioctl() on big endian platforms. + +Signed-off-by: Julien BLACHE +Signed-off-by: Jiri Kosina +Signed-off-by: Greg Kroah-Hartman + + +--- + drivers/usb/input/hid-core.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +--- linux-2.6.20.1.orig/drivers/usb/input/hid-core.c ++++ linux-2.6.20.1/drivers/usb/input/hid-core.c +@@ -1212,8 +1212,8 @@ static struct hid_device *usb_hid_config + le16_to_cpu(dev->descriptor.idProduct)); + + hid->bus = BUS_USB; +- hid->vendor = dev->descriptor.idVendor; +- hid->product = dev->descriptor.idProduct; ++ hid->vendor = le16_to_cpu(dev->descriptor.idVendor); ++ hid->product = le16_to_cpu(dev->descriptor.idProduct); + + usb_make_path(dev, hid->phys, sizeof(hid->phys)); + strlcat(hid->phys, "/input", sizeof(hid->phys)); + +-- + +From gregkh@mini.kroah.org Wed Mar 7 09:06:14 2007 +Message-Id: <20070307170613.912981985@mini.kroah.org> +References: <20070307170123.677686080@mini.kroah.org> +User-Agent: quilt/0.45-1 +Date: Wed, 07 Mar 2007 09:01:50 -0800 +From: Greg KH +To: linux-kernel@vger.kernel.org, + stable@kernel.org, + Andrew Morton +Cc: Justin Forbes , + Zwane Mwaikambo , + Theodore Ts'o , + Randy Dunlap , + Dave Jones , + Chuck Wolber , + Chris Wedgwood , + Michael Krufky , + Chuck Ebbert , + torvalds@linux-foundation.org, + akpm@linux-foundation.org, + alan@lxorguk.ukuu.org.uk, + Paolo Blaisorblade Giarrusso +Subject: [patch 027/101] Kconfig: FAULT_INJECTION can be selected only if LOCKDEP is enabled. +Content-Disposition: inline; filename=kconfig-fault_injection-can-be-selected-only-if-lockdep-is-enabled.patch +Content-Length: 789 +Lines: 26 + +From: "Paolo 'Blaisorblade' Giarrusso" + +There is no prompt for STACKTRACE, so it is enabled only when 'select'ed. +FAULT_INJECTION depends on it, while LOCKDEP selects it. So FAULT_INJECTION +becomes visible in Kconfig only when LOCKDEP is enabled. + +Signed-off-by: Paolo 'Blaisorblade' Giarrusso +Signed-off-by: Greg Kroah-Hartman + +--- + lib/Kconfig.debug | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- linux-2.6.20.1.orig/lib/Kconfig.debug ++++ linux-2.6.20.1/lib/Kconfig.debug +@@ -400,7 +400,7 @@ config LKDTM + config FAULT_INJECTION + bool "Fault-injection framework" + depends on DEBUG_KERNEL +- depends on STACKTRACE ++ select STACKTRACE + select FRAME_POINTER + help + Provide fault-injection framework. + +-- + +From gregkh@mini.kroah.org Wed Mar 7 09:06:14 2007 +Message-Id: <20070307170614.038888455@mini.kroah.org> +References: <20070307170123.677686080@mini.kroah.org> +User-Agent: quilt/0.45-1 +Date: Wed, 07 Mar 2007 09:01:51 -0800 +From: Greg KH +To: linux-kernel@vger.kernel.org, + stable@kernel.org +Cc: Justin Forbes , + Zwane Mwaikambo , + Theodore Ts'o , + Randy Dunlap , + Dave Jones , + Chuck Wolber , + Chris Wedgwood , + Michael Krufky , + Chuck Ebbert , + torvalds@linux-foundation.org, + akpm@linux-foundation.org, + alan@lxorguk.ukuu.org.uk, + Andrew Morton , + David Woodhouse , + Martin Michlmayr , + Yoshinori Sato , + Rod Whitby +Subject: [patch 028/101] MTD: Fatal regression in drivers/mtd/redboot.c in 2.6.20 +Content-Disposition: inline; filename=mtd-fatal-regression-in-drivers-mtd-redboot.c-in-2.6.20.patch +Content-Length: 2161 +Lines: 60 + +From: David Woodhouse + +[MTD] Fix regression in RedBoot partition scanning + +This fixes a regression introduced by the attempt to handle RedBoot FIS +tables which are smaller than an eraseblock, in commit +0b47d654089c5ce3f2ea26a4485db9bcead1e515 + +It moves the recalculation of the number of slots in the table to the +correct place, and improves the heuristic for when we think we need to +byte-swap what we read from the flash. + +Signed-off-by: David Woodhouse +Cc: Rod Whitby +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/mtd/redboot.c | 19 +++++++++++++++---- + 1 file changed, 15 insertions(+), 4 deletions(-) + +--- linux-2.6.20.1.orig/drivers/mtd/redboot.c ++++ linux-2.6.20.1/drivers/mtd/redboot.c +@@ -94,8 +94,19 @@ static int parse_redboot_partitions(stru + * (NOTE: this is 'size' not 'data_length'; size is + * the full size of the entry.) + */ +- if (swab32(buf[i].size) == master->erasesize) { ++ ++ /* RedBoot can combine the FIS directory and ++ config partitions into a single eraseblock; ++ we assume wrong-endian if either the swapped ++ 'size' matches the eraseblock size precisely, ++ or if the swapped size actually fits in an ++ eraseblock while the unswapped size doesn't. */ ++ if (swab32(buf[i].size) == master->erasesize || ++ (buf[i].size > master->erasesize ++ && swab32(buf[i].size) < master->erasesize)) { + int j; ++ /* Update numslots based on actual FIS directory size */ ++ numslots = swab32(buf[i].size) / sizeof (struct fis_image_desc); + for (j = 0; j < numslots; ++j) { + + /* A single 0xff denotes a deleted entry. +@@ -120,11 +131,11 @@ static int parse_redboot_partitions(stru + swab32s(&buf[j].desc_cksum); + swab32s(&buf[j].file_cksum); + } ++ } else if (buf[i].size < master->erasesize) { ++ /* Update numslots based on actual FIS directory size */ ++ numslots = buf[i].size / sizeof(struct fis_image_desc); + } + break; +- } else { +- /* re-calculate of real numslots */ +- numslots = buf[i].size / sizeof(struct fis_image_desc); + } + } + if (i == numslots) { + +-- + +From gregkh@mini.kroah.org Wed Mar 7 09:06:14 2007 +Message-Id: <20070307170614.168292296@mini.kroah.org> +References: <20070307170123.677686080@mini.kroah.org> +User-Agent: quilt/0.45-1 +Date: Wed, 07 Mar 2007 09:01:52 -0800 +From: Greg KH +To: linux-kernel@vger.kernel.org, + stable@kernel.org, + davem@davemloft.net +Cc: Justin Forbes , + Zwane Mwaikambo , + Theodore Ts'o , + Randy Dunlap , + Dave Jones , + Chuck Wolber , + Chris Wedgwood , + Michael Krufky , + Chuck Ebbert , + torvalds@linux-foundation.org, + akpm@linux-foundation.org, + alan@lxorguk.ukuu.org.uk, + yoshfuji@linux-ipv6.org, + netdev@vger.kernel.org, + handat@pm.nttdata.co.jp +Subject: [patch 029/101] IPV6: HASHTABLES: Use appropriate seed for caluculating ehash index. +Content-Disposition: inline; filename=ipv6-hashtables-use-appropriate-seed-for-caluculating-ehash-index.patch +Content-Length: 1212 +Lines: 30 + +From: YOSHIFUJI Hideaki + +Tetsuo Handa told me that connect(2) with TCPv6 +socket almost always took a few minutes to return when we did not have any +ports available in the range of net.ipv4.ip_local_port_range. + +The reason was that we used incorrect seed for calculating index of +hash when we check established sockets in __inet6_check_established(). + +Signed-off-by: YOSHIFUJI Hideaki +Signed-off-by: David S. Miller +Signed-off-by: Greg Kroah-Hartman + +--- + net/ipv6/inet6_hashtables.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- linux-2.6.20.1.orig/net/ipv6/inet6_hashtables.c ++++ linux-2.6.20.1/net/ipv6/inet6_hashtables.c +@@ -172,7 +172,7 @@ static int __inet6_check_established(str + const struct in6_addr *saddr = &np->daddr; + const int dif = sk->sk_bound_dev_if; + const __portpair ports = INET_COMBINED_PORTS(inet->dport, lport); +- const unsigned int hash = inet6_ehashfn(daddr, inet->num, saddr, ++ const unsigned int hash = inet6_ehashfn(daddr, lport, saddr, + inet->dport); + struct inet_ehash_bucket *head = inet_ehash_bucket(hinfo, hash); + struct sock *sk2; + +-- + +From gregkh@mini.kroah.org Wed Mar 7 09:06:14 2007 +Message-Id: <20070307170614.302656541@mini.kroah.org> +References: <20070307170123.677686080@mini.kroah.org> +User-Agent: quilt/0.45-1 +Date: Wed, 07 Mar 2007 09:01:53 -0800 +From: Greg KH +To: linux-kernel@vger.kernel.org, + stable@kernel.org +Cc: Justin Forbes , + Zwane Mwaikambo , + Theodore Ts'o , + Randy Dunlap , + Dave Jones , + Chuck Wolber , + Chris Wedgwood , + Michael Krufky , + Chuck Ebbert , + torvalds@linux-foundation.org, + akpm@linux-foundation.org, + alan@lxorguk.ukuu.org.uk, + Alan Stern +Subject: [patch 030/101] EHCI: turn off remote wakeup during shutdown +Content-Disposition: inline; filename=ehci-turn-off-remote-wakeup-during-shutdown.patch +Content-Length: 1709 +Lines: 51 + +From: Alan Stern + +This patch (as850b) disables remote wakeup (and everything else!) on +all EHCI ports when the shutdown() method is called. If remote wakeup +is left active then some systems will reboot instead of powering off. +This fixes Bugzilla #7828. + +Signed-off-by: Alan Stern +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/host/ehci-hcd.c | 16 ++++++++++++++++ + 1 file changed, 16 insertions(+) + +--- linux-2.6.20.1.orig/drivers/usb/host/ehci-hcd.c ++++ linux-2.6.20.1/drivers/usb/host/ehci-hcd.c +@@ -296,6 +296,18 @@ static void ehci_watchdog (unsigned long + spin_unlock_irqrestore (&ehci->lock, flags); + } + ++/* On some systems, leaving remote wakeup enabled prevents system shutdown. ++ * The firmware seems to think that powering off is a wakeup event! ++ * This routine turns off remote wakeup and everything else, on all ports. ++ */ ++static void ehci_turn_off_all_ports(struct ehci_hcd *ehci) ++{ ++ int port = HCS_N_PORTS(ehci->hcs_params); ++ ++ while (port--) ++ writel(PORT_RWC_BITS, &ehci->regs->port_status[port]); ++} ++ + /* ehci_shutdown kick in for silicon on any bus (not just pci, etc). + * This forcibly disables dma and IRQs, helping kexec and other cases + * where the next system software may expect clean state. +@@ -307,9 +319,13 @@ ehci_shutdown (struct usb_hcd *hcd) + + ehci = hcd_to_ehci (hcd); + (void) ehci_halt (ehci); ++ ehci_turn_off_all_ports(ehci); + + /* make BIOS/etc use companion controller during reboot */ + writel (0, &ehci->regs->configured_flag); ++ ++ /* unblock posted writes */ ++ readl(&ehci->regs->configured_flag); + } + + static void ehci_port_power (struct ehci_hcd *ehci, int is_on) + +-- + +From gregkh@mini.kroah.org Wed Mar 7 09:06:14 2007 +Message-Id: <20070307170614.426024980@mini.kroah.org> +References: <20070307170123.677686080@mini.kroah.org> +User-Agent: quilt/0.45-1 +Date: Wed, 07 Mar 2007 09:01:54 -0800 +From: Greg KH +To: linux-kernel@vger.kernel.org, + stable@kernel.org +Cc: Justin Forbes , + Zwane Mwaikambo , + Theodore Ts'o , + Randy Dunlap , + Dave Jones , + Chuck Wolber , + Chris Wedgwood , + Michael Krufky , + Chuck Ebbert , + torvalds@linux-foundation.org, + akpm@linux-foundation.org, + alan@lxorguk.ukuu.org.uk, + Neil Brown +Subject: [patch 031/101] Avoid using nfsd process pools on SMP machines. +Content-Disposition: inline; filename=avoid-using-nfsd-process-pools-on-smp-machines.patch +Content-Length: 1021 +Lines: 34 + +From: NeilBrown + + +process-pools have real benefits for NUMA, but on SMP +machines they only work if network interface interrupts +go to all CPUs (via round-robin or multiple nics). This is +not always the case, so disable the pools in this case until +a better solution is developped. + +Signed-off-by: Neil Brown +Signed-off-by: Greg Kroah-Hartman + +diff .prev/net/sunrpc/svc.c ./net/sunrpc/svc.c +--- + net/sunrpc/svc.c | 6 +++++- + 1 file changed, 5 insertions(+), 1 deletion(-) + +--- linux-2.6.20.1.orig/net/sunrpc/svc.c ++++ linux-2.6.20.1/net/sunrpc/svc.c +@@ -79,7 +79,11 @@ svc_pool_map_choose_mode(void) + * x86_64 kernel on Xeons. In this case we + * want to divide the pools on cpu boundaries. + */ +- return SVC_POOL_PERCPU; ++ /* actually, unless your IRQs round-robin nicely, ++ * this turns out to be really bad, so just ++ * go GLOBAL for now until a better fix can be developped ++ */ ++ return SVC_POOL_GLOBAL; + } + + /* default: one global pool */ + +-- + +From gregkh@mini.kroah.org Wed Mar 7 09:06:14 2007 +Message-Id: <20070307170614.574735180@mini.kroah.org> +References: <20070307170123.677686080@mini.kroah.org> +User-Agent: quilt/0.45-1 +Date: Wed, 07 Mar 2007 09:01:55 -0800 +From: Greg KH +To: linux-kernel@vger.kernel.org, + stable@kernel.org +Cc: Justin Forbes , + Zwane Mwaikambo , + Theodore Ts'o , + Randy Dunlap , + Dave Jones , + Chuck Wolber , + Chris Wedgwood , + Michael Krufky , + Chuck Ebbert , + torvalds@linux-foundation.org, + akpm@linux-foundation.org, + alan@lxorguk.ukuu.org.uk, + Neil Brown +Subject: [patch 032/101] Fix recently introduced problem with shutting down a busy NFS server. +Content-Disposition: inline; filename=fix-recently-introduced-problem-with-shutting-down-a-busy-nfs-server.patch +Content-Length: 3715 +Lines: 121 + +From: NeilBrown + + +When the last thread of nfsd exits, it shuts down all related sockets. +It currently uses svc_close_socket to do this, but that only is +immediately effective if the socket is not SK_BUSY. + +If the socket is busy - i.e. if a request has arrived that has not yet +been processes - svc_close_socket is not effective and the shutdown +process spins. + +So create a new svc_force_close_socket which removes the SK_BUSY flag +is set and then calls svc_close_socket. + +Also change some open-codes loops in svc_destroy to use +list_for_each_entry_safe. + +Signed-off-by: Neil Brown +Signed-off-by: Greg Kroah-Hartman + + +--- + include/linux/sunrpc/svcsock.h | 2 +- + net/sunrpc/svc.c | 23 ++++++++++------------- + net/sunrpc/svcsock.c | 16 +++++++++++++++- + 3 files changed, 26 insertions(+), 15 deletions(-) + +--- linux-2.6.20.1.orig/include/linux/sunrpc/svcsock.h ++++ linux-2.6.20.1/include/linux/sunrpc/svcsock.h +@@ -63,7 +63,7 @@ struct svc_sock { + * Function prototypes. + */ + int svc_makesock(struct svc_serv *, int, unsigned short); +-void svc_close_socket(struct svc_sock *); ++void svc_force_close_socket(struct svc_sock *); + int svc_recv(struct svc_rqst *, long); + int svc_send(struct svc_rqst *); + void svc_drop(struct svc_rqst *); +--- linux-2.6.20.1.orig/net/sunrpc/svc.c ++++ linux-2.6.20.1/net/sunrpc/svc.c +@@ -371,6 +371,7 @@ void + svc_destroy(struct svc_serv *serv) + { + struct svc_sock *svsk; ++ struct svc_sock *tmp; + + dprintk("RPC: svc_destroy(%s, %d)\n", + serv->sv_program->pg_name, +@@ -386,22 +387,18 @@ svc_destroy(struct svc_serv *serv) + + del_timer_sync(&serv->sv_temptimer); + +- while (!list_empty(&serv->sv_tempsocks)) { +- svsk = list_entry(serv->sv_tempsocks.next, +- struct svc_sock, +- sk_list); +- svc_close_socket(svsk); +- } ++ list_for_each_entry_safe(svsk, tmp, &serv->sv_tempsocks, sk_list) ++ svc_force_close_socket(svsk); ++ + if (serv->sv_shutdown) + serv->sv_shutdown(serv); + +- while (!list_empty(&serv->sv_permsocks)) { +- svsk = list_entry(serv->sv_permsocks.next, +- struct svc_sock, +- sk_list); +- svc_close_socket(svsk); +- } +- ++ list_for_each_entry_safe(svsk, tmp, &serv->sv_permsocks, sk_list) ++ svc_force_close_socket(svsk); ++ ++ BUG_ON(!list_empty(&serv->sv_permsocks)); ++ BUG_ON(!list_empty(&serv->sv_tempsocks)); ++ + cache_clean_deferred(serv); + + /* Unregister service with the portmapper */ +--- linux-2.6.20.1.orig/net/sunrpc/svcsock.c ++++ linux-2.6.20.1/net/sunrpc/svcsock.c +@@ -80,6 +80,7 @@ static void svc_delete_socket(struct sv + static void svc_udp_data_ready(struct sock *, int); + static int svc_udp_recvfrom(struct svc_rqst *); + static int svc_udp_sendto(struct svc_rqst *); ++static void svc_close_socket(struct svc_sock *svsk); + + static struct svc_deferred_req *svc_deferred_dequeue(struct svc_sock *svsk); + static int svc_deferred_recv(struct svc_rqst *rqstp); +@@ -1668,7 +1669,7 @@ svc_delete_socket(struct svc_sock *svsk) + spin_unlock_bh(&serv->sv_lock); + } + +-void svc_close_socket(struct svc_sock *svsk) ++static void svc_close_socket(struct svc_sock *svsk) + { + set_bit(SK_CLOSE, &svsk->sk_flags); + if (test_and_set_bit(SK_BUSY, &svsk->sk_flags)) +@@ -1681,6 +1682,19 @@ void svc_close_socket(struct svc_sock *s + svc_sock_put(svsk); + } + ++void svc_force_close_socket(struct svc_sock *svsk) ++{ ++ set_bit(SK_CLOSE, &svsk->sk_flags); ++ if (test_bit(SK_BUSY, &svsk->sk_flags)) { ++ /* Waiting to be processed, but no threads left, ++ * So just remove it from the waiting list ++ */ ++ list_del_init(&svsk->sk_ready); ++ clear_bit(SK_BUSY, &svsk->sk_flags); ++ } ++ svc_close_socket(svsk); ++} ++ + /* + * Make a socket for nfsd and lockd + */ + +-- + +From gregkh@mini.kroah.org Wed Mar 7 09:06:14 2007 +Message-Id: <20070307170614.683134122@mini.kroah.org> +References: <20070307170123.677686080@mini.kroah.org> +User-Agent: quilt/0.45-1 +Date: Wed, 07 Mar 2007 09:01:56 -0800 +From: Greg KH +To: linux-kernel@vger.kernel.org, + stable@kernel.org, + Greg KH +Cc: Justin Forbes , + Zwane Mwaikambo , + Theodore Ts'o , + Randy Dunlap , + Dave Jones , + Chuck Wolber , + Chris Wedgwood , + Michael Krufky , + Chuck Ebbert , + torvalds@linux-foundation.org, + akpm@linux-foundation.org, + alan@lxorguk.ukuu.org.uk, + Guilherme Salgado , + USB development list , + Alan Stern +Subject: [patch 033/101] UHCI: fix port resume problem +Content-Disposition: inline; filename=uhci-fix-port-resume-problem.patch +Content-Length: 2096 +Lines: 59 + +From: Alan Stern + +This patch (as863) fixes a problem encountered sometimes when resuming +a port on a UHCI controller. The hardware may turn off the +Resume-Detect bit before turning off the Suspend bit, leading usbcore +to think that the port is still suspended and the resume has failed. +The patch makes uhci_finish_suspend() wait until both bits are safely +off. + +Signed-off-by: Alan Stern +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/host/uhci-hub.c | 11 +++++++---- + 1 file changed, 7 insertions(+), 4 deletions(-) + +--- linux-2.6.20.1.orig/drivers/usb/host/uhci-hub.c ++++ linux-2.6.20.1/drivers/usb/host/uhci-hub.c +@@ -33,6 +33,9 @@ static __u8 root_hub_hub_des[] = + /* status change bits: nonzero writes will clear */ + #define RWC_BITS (USBPORTSC_OCC | USBPORTSC_PEC | USBPORTSC_CSC) + ++/* suspend/resume bits: port suspended or port resuming */ ++#define SUSPEND_BITS (USBPORTSC_SUSP | USBPORTSC_RD) ++ + /* A port that either is connected or has a changed-bit set will prevent + * us from AUTO_STOPPING. + */ +@@ -96,8 +99,8 @@ static void uhci_finish_suspend(struct u + int status; + int i; + +- if (inw(port_addr) & (USBPORTSC_SUSP | USBPORTSC_RD)) { +- CLR_RH_PORTSTAT(USBPORTSC_SUSP | USBPORTSC_RD); ++ if (inw(port_addr) & SUSPEND_BITS) { ++ CLR_RH_PORTSTAT(SUSPEND_BITS); + if (test_bit(port, &uhci->resuming_ports)) + set_bit(port, &uhci->port_c_suspend); + +@@ -107,7 +110,7 @@ static void uhci_finish_suspend(struct u + * Experiments show that some controllers take longer, so + * we'll poll for completion. */ + for (i = 0; i < 10; ++i) { +- if (!(inw(port_addr) & USBPORTSC_RD)) ++ if (!(inw(port_addr) & SUSPEND_BITS)) + break; + udelay(1); + } +@@ -289,7 +292,7 @@ static int uhci_hub_control(struct usb_h + wPortStatus |= USB_PORT_STAT_CONNECTION; + if (status & USBPORTSC_PE) { + wPortStatus |= USB_PORT_STAT_ENABLE; +- if (status & (USBPORTSC_SUSP | USBPORTSC_RD)) ++ if (status & SUSPEND_BITS) + wPortStatus |= USB_PORT_STAT_SUSPEND; + } + if (status & USBPORTSC_OC) + +-- + +From gregkh@mini.kroah.org Wed Mar 7 09:06:14 2007 +Message-Id: <20070307170614.809212680@mini.kroah.org> +References: <20070307170123.677686080@mini.kroah.org> +User-Agent: quilt/0.45-1 +Date: Wed, 07 Mar 2007 09:01:57 -0800 +From: Greg KH +To: linux-kernel@vger.kernel.org, + stable@kernel.org +Cc: Justin Forbes , + Zwane Mwaikambo , + Theodore Ts'o , + Randy Dunlap , + Dave Jones , + Chuck Wolber , + Chris Wedgwood , + Michael Krufky , + Chuck Ebbert , + torvalds@linux-foundation.org, + akpm@linux-foundation.org, + alan@lxorguk.ukuu.org.uk, + bunk@stusta.de, + "David S. Miller" +Subject: [patch 034/101] Fix atmarp.h for userspace +Content-Disposition: inline; filename=fix-atmarp.h-for-userspace.patch +Content-Length: 631 +Lines: 30 + + +From: David Miller + +[ATM]: atmarp.h needs to always include linux/types.h + +To provide the __be* types, even for userspace includes. + +Reported by Andrew Walrond. + +Signed-off-by: David S. Miller +Signed-off-by: Greg Kroah-Hartman + +--- + include/linux/atmarp.h | 2 -- + 1 file changed, 2 deletions(-) + +--- linux-2.6.20.1.orig/include/linux/atmarp.h ++++ linux-2.6.20.1/include/linux/atmarp.h +@@ -6,9 +6,7 @@ + #ifndef _LINUX_ATMARP_H + #define _LINUX_ATMARP_H + +-#ifdef __KERNEL__ + #include +-#endif + #include + #include + + +-- + +From gregkh@mini.kroah.org Wed Mar 7 09:06:15 2007 +Message-Id: <20070307170614.990847447@mini.kroah.org> +References: <20070307170123.677686080@mini.kroah.org> +User-Agent: quilt/0.45-1 +Date: Wed, 07 Mar 2007 09:01:58 -0800 +From: Greg KH +To: linux-kernel@vger.kernel.org, + stable@kernel.org +Cc: Justin Forbes , + Zwane Mwaikambo , + Theodore Ts'o , + Randy Dunlap , + Dave Jones , + Chuck Wolber , + Chris Wedgwood , + Michael Krufky , + Chuck Ebbert , + torvalds@linux-foundation.org, + akpm@linux-foundation.org, + alan@lxorguk.ukuu.org.uk, + bunk@stusta.de, + Herbert Xu , + "David S. Miller" +Subject: [patch 035/101] Clear TCP segmentation offload state in ipt_REJECT +Content-Disposition: inline; filename=clear-tcp-segmentation-offload-state-in-ipt_reject.patch +Content-Length: 950 +Lines: 33 + +From: Herbert Xu + +[NETFILTER]: Clear GSO bits for TCP reset packet + +The TCP reset packet is copied from the original. This +includes all the GSO bits which do not apply to the new +packet. So we should clear those bits. + +Spotted by Patrick McHardy. + +Signed-off-by: Herbert Xu +Signed-off-by: David S. Miller +Signed-off-by: Greg Kroah-Hartman + +--- + net/ipv4/netfilter/ipt_REJECT.c | 4 ++++ + 1 file changed, 4 insertions(+) + +--- linux-2.6.20.1.orig/net/ipv4/netfilter/ipt_REJECT.c ++++ linux-2.6.20.1/net/ipv4/netfilter/ipt_REJECT.c +@@ -79,6 +79,10 @@ static void send_reset(struct sk_buff *o + nskb->mark = 0; + skb_init_secmark(nskb); + ++ skb_shinfo(nskb)->gso_size = 0; ++ skb_shinfo(nskb)->gso_segs = 0; ++ skb_shinfo(nskb)->gso_type = 0; ++ + tcph = (struct tcphdr *)((u_int32_t*)nskb->nh.iph + nskb->nh.iph->ihl); + + /* Swap source and dest */ + +-- + +From gregkh@mini.kroah.org Wed Mar 7 09:06:15 2007 +Message-Id: <20070307170615.069330025@mini.kroah.org> +References: <20070307170123.677686080@mini.kroah.org> +User-Agent: quilt/0.45-1 +Date: Wed, 07 Mar 2007 09:01:59 -0800 +From: Greg KH +To: linux-kernel@vger.kernel.org, + stable@kernel.org +Cc: Justin Forbes , + Zwane Mwaikambo , + Theodore Ts'o , + Randy Dunlap , + Dave Jones , + Chuck Wolber , + Chris Wedgwood , + Michael Krufky , + Chuck Ebbert , + torvalds@linux-foundation.org, + akpm@linux-foundation.org, + alan@lxorguk.ukuu.org.uk, + bunk@stusta.de, + Jiri Bohac , + "David S. Miller" +Subject: [patch 036/101] Fix IPX module unload +Content-Disposition: inline; filename=fix-ipx-module-unload.patch +Content-Length: 1573 +Lines: 59 + +From: Jiri Bohac + +[IPX]: Fix NULL pointer dereference on ipx unload + +Fixes a null pointer dereference when unloading the ipx module. + +On initialization of the ipx module, registering certain packet +types can fail. When this happens, unloading the module later +dereferences NULL pointers. This patch fixes that. Please apply. + +Signed-off-by: Jiri Bohac +Signed-off-by: David S. Miller +Signed-off-by: Greg Kroah-Hartman + +--- + net/ipx/af_ipx.c | 26 +++++++++++++++++--------- + 1 file changed, 17 insertions(+), 9 deletions(-) + +--- linux-2.6.20.1.orig/net/ipx/af_ipx.c ++++ linux-2.6.20.1/net/ipx/af_ipx.c +@@ -2035,19 +2035,27 @@ static void __exit ipx_proto_finito(void + + ipxitf_cleanup(); + +- unregister_snap_client(pSNAP_datalink); +- pSNAP_datalink = NULL; +- +- unregister_8022_client(p8022_datalink); +- p8022_datalink = NULL; ++ if (pSNAP_datalink) { ++ unregister_snap_client(pSNAP_datalink); ++ pSNAP_datalink = NULL; ++ } ++ ++ if (p8022_datalink) { ++ unregister_8022_client(p8022_datalink); ++ p8022_datalink = NULL; ++ } + + dev_remove_pack(&ipx_8023_packet_type); +- destroy_8023_client(p8023_datalink); +- p8023_datalink = NULL; ++ if (p8023_datalink) { ++ destroy_8023_client(p8023_datalink); ++ p8023_datalink = NULL; ++ } + + dev_remove_pack(&ipx_dix_packet_type); +- destroy_EII_client(pEII_datalink); +- pEII_datalink = NULL; ++ if (pEII_datalink) { ++ destroy_EII_client(pEII_datalink); ++ pEII_datalink = NULL; ++ } + + proto_unregister(&ipx_proto); + sock_unregister(ipx_family_ops.family); + +-- + +From gregkh@mini.kroah.org Wed Mar 7 09:06:15 2007 +Message-Id: <20070307170615.204525102@mini.kroah.org> +References: <20070307170123.677686080@mini.kroah.org> +User-Agent: quilt/0.45-1 +Date: Wed, 07 Mar 2007 09:02:00 -0800 +From: Greg KH +To: linux-kernel@vger.kernel.org, + stable@kernel.org +Cc: Justin Forbes , + Zwane Mwaikambo , + Theodore Ts'o , + Randy Dunlap , + Dave Jones , + Chuck Wolber , + Chris Wedgwood , + Michael Krufky , + Chuck Ebbert , + torvalds@linux-foundation.org, + akpm@linux-foundation.org, + alan@lxorguk.ukuu.org.uk, + =?ISO-8859-15?q?Ilpo=20J=C3=A4rvinen?= , + "David S. Miller" +Subject: [patch 037/101] : Prevent pseudo garbage in SYNs advertized window +Content-Disposition: inline; filename=prevent-pseudo-garbage-in-syn-s-advertized-window.patch +Content-Length: 1996 +Lines: 54 + +From: Ilpo Järvinen + +TCP may advertize up to 16-bits window in SYN packets (no window +scaling allowed). At the same time, TCP may have rcv_wnd +(32-bits) that does not fit to 16-bits without window scaling +resulting in pseudo garbage into advertized window from the +low-order bits of rcv_wnd. This can happen at least when +mss <= (1< +Signed-off-by: David S. Miller +Signed-off-by: Greg Kroah-Hartman + +--- + net/ipv4/tcp_output.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +--- linux-2.6.20.1.orig/net/ipv4/tcp_output.c ++++ linux-2.6.20.1/net/ipv4/tcp_output.c +@@ -481,7 +481,7 @@ static int tcp_transmit_skb(struct sock + /* RFC1323: The window in SYN & SYN/ACK segments + * is never scaled. + */ +- th->window = htons(tp->rcv_wnd); ++ th->window = htons(min(tp->rcv_wnd, 65535U)); + } else { + th->window = htons(tcp_select_window(sk)); + } +@@ -2160,7 +2160,7 @@ struct sk_buff * tcp_make_synack(struct + } + + /* RFC1323: The window in SYN & SYN/ACK segments is never scaled. */ +- th->window = htons(req->rcv_wnd); ++ th->window = htons(min(req->rcv_wnd, 65535U)); + + TCP_SKB_CB(skb)->when = tcp_time_stamp; + tcp_syn_build_options((__be32 *)(th + 1), dst_metric(dst, RTAX_ADVMSS), ireq->tstamp_ok, + +-- + +From gregkh@mini.kroah.org Wed Mar 7 09:06:15 2007 +Message-Id: <20070307170615.335613514@mini.kroah.org> +References: <20070307170123.677686080@mini.kroah.org> +User-Agent: quilt/0.45-1 +Date: Wed, 07 Mar 2007 09:02:01 -0800 +From: Greg KH +To: linux-kernel@vger.kernel.org, + stable@kernel.org +Cc: Justin Forbes , + Zwane Mwaikambo , + Theodore Ts'o , + Randy Dunlap , + Dave Jones , + Chuck Wolber , + Chris Wedgwood , + Michael Krufky , + Chuck Ebbert , + torvalds@linux-foundation.org, + akpm@linux-foundation.org, + alan@lxorguk.ukuu.org.uk, + bunk@stusta.de, + "David S. Miller" +Subject: [patch 038/101] Fix oops in xfrm_audit_log() +Content-Disposition: inline; filename=fix-oops-in-xfrm_audit_log.patch +Content-Length: 2661 +Lines: 92 + +From: David Miller + +[XFRM]: Fix OOPSes in xfrm_audit_log(). + +Make sure that this function is called correctly, and +add BUG() checking to ensure the arguments are sane. + +Based upon a patch by Joy Latten. + +Signed-off-by: David S. Miller +Signed-off-by: Greg Kroah-Hartman + +--- + net/key/af_key.c | 11 ++++++----- + net/xfrm/xfrm_policy.c | 7 ++++++- + net/xfrm/xfrm_user.c | 12 +++++++----- + 3 files changed, 19 insertions(+), 11 deletions(-) + +--- linux-2.6.20.1.orig/net/key/af_key.c ++++ linux-2.6.20.1/net/key/af_key.c +@@ -2297,16 +2297,17 @@ static int pfkey_spddelete(struct sock * + &sel, tmp.security, 1); + security_xfrm_policy_free(&tmp); + +- xfrm_audit_log(audit_get_loginuid(current->audit_context), 0, +- AUDIT_MAC_IPSEC_DELSPD, (xp) ? 1 : 0, xp, NULL); +- + if (xp == NULL) + return -ENOENT; + +- err = 0; ++ err = security_xfrm_policy_delete(xp); + +- if ((err = security_xfrm_policy_delete(xp))) ++ xfrm_audit_log(audit_get_loginuid(current->audit_context), 0, ++ AUDIT_MAC_IPSEC_DELSPD, err ? 0 : 1, xp, NULL); ++ ++ if (err) + goto out; ++ + c.seq = hdr->sadb_msg_seq; + c.pid = hdr->sadb_msg_pid; + c.event = XFRM_MSG_DELPOLICY; +--- linux-2.6.20.1.orig/net/xfrm/xfrm_policy.c ++++ linux-2.6.20.1/net/xfrm/xfrm_policy.c +@@ -1997,9 +1997,14 @@ void xfrm_audit_log(uid_t auid, u32 sid, + if (audit_enabled == 0) + return; + ++ BUG_ON((type == AUDIT_MAC_IPSEC_ADDSA || ++ type == AUDIT_MAC_IPSEC_DELSA) && !x); ++ BUG_ON((type == AUDIT_MAC_IPSEC_ADDSPD || ++ type == AUDIT_MAC_IPSEC_DELSPD) && !xp); ++ + audit_buf = audit_log_start(current->audit_context, GFP_ATOMIC, type); + if (audit_buf == NULL) +- return; ++ return; + + switch(type) { + case AUDIT_MAC_IPSEC_ADDSA: +--- linux-2.6.20.1.orig/net/xfrm/xfrm_user.c ++++ linux-2.6.20.1/net/xfrm/xfrm_user.c +@@ -1273,10 +1273,6 @@ static int xfrm_get_policy(struct sk_buf + xp = xfrm_policy_bysel_ctx(type, p->dir, &p->sel, tmp.security, delete); + security_xfrm_policy_free(&tmp); + } +- if (delete) +- xfrm_audit_log(NETLINK_CB(skb).loginuid, NETLINK_CB(skb).sid, +- AUDIT_MAC_IPSEC_DELSPD, (xp) ? 1 : 0, xp, NULL); +- + if (xp == NULL) + return -ENOENT; + +@@ -1292,8 +1288,14 @@ static int xfrm_get_policy(struct sk_buf + MSG_DONTWAIT); + } + } else { +- if ((err = security_xfrm_policy_delete(xp)) != 0) ++ err = security_xfrm_policy_delete(xp); ++ ++ xfrm_audit_log(NETLINK_CB(skb).loginuid, NETLINK_CB(skb).sid, ++ AUDIT_MAC_IPSEC_DELSPD, err ? 0 : 1, xp, NULL); ++ ++ if (err != 0) + goto out; ++ + c.data.byid = p->index; + c.event = nlh->nlmsg_type; + c.seq = nlh->nlmsg_seq; + +-- + +From gregkh@mini.kroah.org Wed Mar 7 09:06:15 2007 +Message-Id: <20070307170615.465996809@mini.kroah.org> +References: <20070307170123.677686080@mini.kroah.org> +User-Agent: quilt/0.45-1 +Date: Wed, 07 Mar 2007 09:02:02 -0800 +From: Greg KH +To: linux-kernel@vger.kernel.org, + stable@kernel.org +Cc: Justin Forbes , + Zwane Mwaikambo , + Theodore Ts'o , + Randy Dunlap , + Dave Jones , + Chuck Wolber , + Chris Wedgwood , + Michael Krufky , + Chuck Ebbert , + torvalds@linux-foundation.org, + akpm@linux-foundation.org, + alan@lxorguk.ukuu.org.uk, + Stephen Hemminger +Subject: [patch 039/101] sky2: dont flush good pause frames +Content-Disposition: inline; filename=sky2-pause-flush.patch +Content-Length: 781 +Lines: 26 + +From: Stephen Hemminger + +Don't mark pause frames as errors. This problem caused transmitter not +to pause and would effectively take out a gigabit switch because the +it can't handle overrun. + +Signed-off-by: Stephen Hemminger +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/net/sky2.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- linux-2.6.20.1.orig/drivers/net/sky2.h ++++ linux-2.6.20.1/drivers/net/sky2.h +@@ -1579,7 +1579,7 @@ enum { + + GMR_FS_ANY_ERR = GMR_FS_RX_FF_OV | GMR_FS_CRC_ERR | + GMR_FS_FRAGMENT | GMR_FS_LONG_ERR | +- GMR_FS_MII_ERR | GMR_FS_GOOD_FC | GMR_FS_BAD_FC | ++ GMR_FS_MII_ERR | GMR_FS_BAD_FC | + GMR_FS_UN_SIZE | GMR_FS_JABBER, + }; + + +-- + +From gregkh@mini.kroah.org Wed Mar 7 09:06:15 2007 +Message-Id: <20070307170615.591501552@mini.kroah.org> +References: <20070307170123.677686080@mini.kroah.org> +User-Agent: quilt/0.45-1 +Date: Wed, 07 Mar 2007 09:02:03 -0800 +From: Greg KH +To: linux-kernel@vger.kernel.org, + stable@kernel.org +Cc: Justin Forbes , + Zwane Mwaikambo , + Theodore Ts'o , + Randy Dunlap , + Dave Jones , + Chuck Wolber , + Chris Wedgwood , + Michael Krufky , + Chuck Ebbert , + torvalds@linux-foundation.org, + akpm@linux-foundation.org, + alan@lxorguk.ukuu.org.uk, + Stephen Hemminger +Subject: [patch 040/101] sky2: transmit timeout deadlock +Content-Disposition: inline; filename=sky2-tx-timeout-deadlock.patch +Content-Length: 1309 +Lines: 43 + +From: Stephen Hemminger + +The code in transmit timeout incorrectly assumed that netif_tx_lock +was not set. + +Signed-off-by: Stephen Hemminger +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/net/sky2.c | 6 ++---- + 1 file changed, 2 insertions(+), 4 deletions(-) + +--- linux-2.6.20.1.orig/drivers/net/sky2.c ++++ linux-2.6.20.1/drivers/net/sky2.c +@@ -1796,6 +1796,7 @@ out: + + /* Transmit timeout is only called if we are running, carries is up + * and tx queue is full (stopped). ++ * Called with netif_tx_lock held. + */ + static void sky2_tx_timeout(struct net_device *dev) + { +@@ -1821,17 +1822,14 @@ static void sky2_tx_timeout(struct net_d + sky2_write8(hw, STAT_TX_TIMER_CTRL, TIM_START); + } else if (report != sky2->tx_cons) { + printk(KERN_INFO PFX "status report lost?\n"); +- +- netif_tx_lock_bh(dev); + sky2_tx_complete(sky2, report); +- netif_tx_unlock_bh(dev); + } else { + printk(KERN_INFO PFX "hardware hung? flushing\n"); + + sky2_write32(hw, Q_ADDR(txq, Q_CSR), BMU_STOP); + sky2_write32(hw, Y2_QADDR(txq, PREF_UNIT_CTRL), PREF_UNIT_RST_SET); + +- sky2_tx_clean(dev); ++ sky2_tx_complete(sky2, sky2->tx_prod); + + sky2_qset(hw, txq); + sky2_prefetch_init(hw, txq, sky2->tx_le_map, TX_RING_SIZE - 1); + +-- + +From gregkh@mini.kroah.org Wed Mar 7 09:06:15 2007 +Message-Id: <20070307170615.725538381@mini.kroah.org> +References: <20070307170123.677686080@mini.kroah.org> +User-Agent: quilt/0.45-1 +Date: Wed, 07 Mar 2007 09:02:04 -0800 +From: Greg KH +To: linux-kernel@vger.kernel.org, + stable@kernel.org +Cc: Justin Forbes , + Zwane Mwaikambo , + Theodore Ts'o , + Randy Dunlap , + Dave Jones , + Chuck Wolber , + Chris Wedgwood , + Michael Krufky , + Chuck Ebbert , + torvalds@linux-foundation.org, + akpm@linux-foundation.org, + alan@lxorguk.ukuu.org.uk, + Andi Kleen +Subject: [patch 041/101] x86_64: Fix wrong gcc check in bitops.h +Content-Disposition: inline; filename=x86_64-fix-wrong-gcc-check-in-bitops.h.patch +Content-Length: 622 +Lines: 25 + + + +gcc 5.0 will likely not have the constraint problem + +Signed-off-by: Andi Kleen +Signed-off-by: Greg Kroah-Hartman + + +--- + include/asm-x86_64/bitops.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- linux-2.6.20.1.orig/include/asm-x86_64/bitops.h ++++ linux-2.6.20.1/include/asm-x86_64/bitops.h +@@ -7,7 +7,7 @@ + + #include + +-#if __GNUC__ < 4 || __GNUC_MINOR__ < 1 ++#if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 1) + /* Technically wrong, but this avoids compilation errors on some gcc + versions. */ + #define ADDR "=m" (*(volatile long *) addr) + +-- + +From gregkh@mini.kroah.org Wed Mar 7 09:06:15 2007 +Message-Id: <20070307170615.854330133@mini.kroah.org> +References: <20070307170123.677686080@mini.kroah.org> +User-Agent: quilt/0.45-1 +Date: Wed, 07 Mar 2007 09:02:05 -0800 +From: Greg KH +To: linux-kernel@vger.kernel.org, + stable@kernel.org +Cc: Justin Forbes , + Zwane Mwaikambo , + Theodore Ts'o , + Randy Dunlap , + Dave Jones , + Chuck Wolber , + Chris Wedgwood , + Michael Krufky , + Chuck Ebbert , + torvalds@linux-foundation.org, + akpm@linux-foundation.org, + alan@lxorguk.ukuu.org.uk, + Andi Kleen +Subject: [patch 042/101] x86: Dont require the vDSO for handling a.out signals +Content-Disposition: inline; filename=x86-don-t-require-the-vdso-for-handling-a.out-signals.patch +Content-Length: 2693 +Lines: 87 + +From: Andi Kleen + +x86: Don't require the vDSO for handling a.out signals + +and in other strange binfmts. vDSO is not necessarily mapped there. + +This fixes signals in a.out programs + +Signed-off-by: Andi Kleen +Signed-off-by: Greg Kroah-Hartman + +--- + arch/i386/kernel/signal.c | 6 +++++- + arch/x86_64/ia32/ia32_signal.c | 7 ++++++- + fs/binfmt_elf.c | 3 ++- + include/linux/binfmts.h | 1 + + 4 files changed, 14 insertions(+), 3 deletions(-) + +--- linux-2.6.20.1.orig/arch/i386/kernel/signal.c ++++ linux-2.6.20.1/arch/i386/kernel/signal.c +@@ -21,6 +21,7 @@ + #include + #include + #include ++#include + #include + #include + #include +@@ -349,7 +350,10 @@ static int setup_frame(int sig, struct k + goto give_sigsegv; + } + +- restorer = (void *)VDSO_SYM(&__kernel_sigreturn); ++ if (current->binfmt->hasvdso) ++ restorer = (void *)VDSO_SYM(&__kernel_sigreturn); ++ else ++ restorer = (void *)&frame->retcode; + if (ka->sa.sa_flags & SA_RESTORER) + restorer = ka->sa.sa_restorer; + +--- linux-2.6.20.1.orig/arch/x86_64/ia32/ia32_signal.c ++++ linux-2.6.20.1/arch/x86_64/ia32/ia32_signal.c +@@ -21,6 +21,7 @@ + #include + #include + #include ++#include + #include + #include + #include +@@ -449,7 +450,11 @@ int ia32_setup_frame(int sig, struct k_s + + /* Return stub is in 32bit vsyscall page */ + { +- void __user *restorer = VSYSCALL32_SIGRETURN; ++ void __user *restorer; ++ if (current->binfmt->hasvdso) ++ restorer = VSYSCALL32_SIGRETURN; ++ else ++ restorer = (void *)&frame->retcode; + if (ka->sa.sa_flags & SA_RESTORER) + restorer = ka->sa.sa_restorer; + err |= __put_user(ptr_to_compat(restorer), &frame->pretcode); +--- linux-2.6.20.1.orig/fs/binfmt_elf.c ++++ linux-2.6.20.1/fs/binfmt_elf.c +@@ -76,7 +76,8 @@ static struct linux_binfmt elf_format = + .load_binary = load_elf_binary, + .load_shlib = load_elf_library, + .core_dump = elf_core_dump, +- .min_coredump = ELF_EXEC_PAGESIZE ++ .min_coredump = ELF_EXEC_PAGESIZE, ++ .hasvdso = 1 + }; + + #define BAD_ADDR(x) ((unsigned long)(x) >= TASK_SIZE) +--- linux-2.6.20.1.orig/include/linux/binfmts.h ++++ linux-2.6.20.1/include/linux/binfmts.h +@@ -59,6 +59,7 @@ struct linux_binfmt { + int (*load_shlib)(struct file *); + int (*core_dump)(long signr, struct pt_regs * regs, struct file * file); + unsigned long min_coredump; /* minimal dump size */ ++ int hasvdso; + }; + + extern int register_binfmt(struct linux_binfmt *); + +-- + +From gregkh@mini.kroah.org Wed Mar 7 09:06:16 2007 +Message-Id: <20070307170616.036012112@mini.kroah.org> +References: <20070307170123.677686080@mini.kroah.org> +User-Agent: quilt/0.45-1 +Date: Wed, 07 Mar 2007 09:02:06 -0800 +From: Greg KH +To: linux-kernel@vger.kernel.org, + stable@kernel.org +Cc: Justin Forbes , + Zwane Mwaikambo , + Theodore Ts'o , + Randy Dunlap , + Dave Jones , + Chuck Wolber , + Chris Wedgwood , + Michael Krufky , + Chuck Ebbert , + torvalds@linux-foundation.org, + akpm@linux-foundation.org, + alan@lxorguk.ukuu.org.uk, + Jan Beulich , + Andi Kleen +Subject: [patch 043/101] i386: Fix broken CONFIG_COMPAT_VDSO on i386 +Content-Disposition: inline; filename=i386-fix-broken-config_compat_vdso-on-i386.patch +Content-Length: 1367 +Lines: 37 + +From: "Jan Beulich" + +After updating several machines to 2.6.20, I can't boot anymore the single +one of them that supports the NX bit and is configured as a 32-bit system. + +My understanding is that the VDSO changes in 2.6.20-rc7 were not fully +cooked, in that with that config option enabled VDSO_SYM(x) now equals +x, meaning that an address in the fixmap area is now being passed to +apps via AT_SYSINFO. However, the page is mapped with PAGE_READONLY +rather than PAGE_READONLY_EXEC. + +I'm not certain whether having app code go through the fixmap area is +intended, but in case it is here is the simple patch that makes things work +again. + +Cc: Theodore Tso +Signed-off-by: Jan Beulich +Signed-off-by: Andi Kleen +Signed-off-by: Greg Kroah-Hartman + +--- + arch/i386/kernel/sysenter.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- linux-2.6.20.1.orig/arch/i386/kernel/sysenter.c ++++ linux-2.6.20.1/arch/i386/kernel/sysenter.c +@@ -77,7 +77,7 @@ int __init sysenter_setup(void) + syscall_page = (void *)get_zeroed_page(GFP_ATOMIC); + + #ifdef CONFIG_COMPAT_VDSO +- __set_fixmap(FIX_VDSO, __pa(syscall_page), PAGE_READONLY); ++ __set_fixmap(FIX_VDSO, __pa(syscall_page), PAGE_READONLY_EXEC); + printk("Compat vDSO mapped to %08lx.\n", __fix_to_virt(FIX_VDSO)); + #endif + + +-- + +From gregkh@mini.kroah.org Wed Mar 7 09:06:16 2007 +Message-Id: <20070307170616.110605929@mini.kroah.org> +References: <20070307170123.677686080@mini.kroah.org> +User-Agent: quilt/0.45-1 +Date: Wed, 07 Mar 2007 09:02:07 -0800 +From: Greg KH +To: linux-kernel@vger.kernel.org, + stable@kernel.org +Cc: Justin Forbes , + Zwane Mwaikambo , + Theodore Ts'o , + Randy Dunlap , + Dave Jones , + Chuck Wolber , + Chris Wedgwood , + Michael Krufky , + Chuck Ebbert , + torvalds@linux-foundation.org, + akpm@linux-foundation.org, + alan@lxorguk.ukuu.org.uk, + John Linville , + Stefano Brivio , + Larry Finger , + Michael Buesch +Subject: [patch 044/101] bcm43xx: fix for 4309 +Content-Disposition: inline; filename=bcm43xx-fix-for-4309.patch +Content-Length: 1071 +Lines: 30 + +From: Stefano Brivio + +BCM4309 devices aren't working properly as A PHYs aren't supported yet, but +we probe 802.11a cores anyway. This fixes it, while still allowing for A PHY code +to be developed in the future. + +Signed-off-by: Stefano Brivio +Cc: Michael Buesch +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/net/wireless/bcm43xx/bcm43xx_main.c | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +--- linux-2.6.20.1.orig/drivers/net/wireless/bcm43xx/bcm43xx_main.c ++++ linux-2.6.20.1/drivers/net/wireless/bcm43xx/bcm43xx_main.c +@@ -2736,8 +2736,9 @@ static int bcm43xx_probe_cores(struct bc + * dangling pins on the second core. Be careful + * and ignore these cores here. + */ +- if (bcm->pci_dev->device != 0x4324) { +- dprintk(KERN_INFO PFX "Ignoring additional 802.11 core.\n"); ++ if (1 /*bcm->pci_dev->device != 0x4324*/ ) { ++ /* TODO: A PHY */ ++ dprintk(KERN_INFO PFX "Ignoring additional 802.11a core.\n"); + continue; + } + } + +-- + +From gregkh@mini.kroah.org Wed Mar 7 09:06:16 2007 +Message-Id: <20070307170616.237061071@mini.kroah.org> +References: <20070307170123.677686080@mini.kroah.org> +User-Agent: quilt/0.45-1 +Date: Wed, 07 Mar 2007 09:02:08 -0800 +From: Greg KH +To: linux-kernel@vger.kernel.org, + stable@kernel.org, + Andrew Morton +Cc: Justin Forbes , + Zwane Mwaikambo , + Theodore Ts'o , + Randy Dunlap , + Dave Jones , + Chuck Wolber , + Chris Wedgwood , + Michael Krufky , + Chuck Ebbert , + torvalds@linux-foundation.org, + alan@lxorguk.ukuu.org.uk, + linux-raid@vger.kernel.org, + Neil Brown +Subject: [patch 045/101] md: Fix raid10 recovery problem. +Content-Disposition: inline; filename=md-fix-raid10-recovery-problem.patch +Content-Length: 3576 +Lines: 111 + +From: NeilBrown + +There are two errors that can lead to recovery problems with raid10 +when used in 'far' more (not the default). + +Due to a '>' instead of '>=' the wrong block is located which would +result in garbage being written to some random location, quite +possible outside the range of the device, causing the newly +reconstructed device to fail. + +The device size calculation had some rounding errors (it didn't round +when it should) and so recovery would go a few blocks too far which +would again cause a write to a random block address and probably +a device error. + +The code for working with device sizes was fairly confused and spread +out, so this has been tided up a bit. + +Signed-off-by: Neil Brown +Signed-off-by: Greg Kroah-Hartman + + +--- + drivers/md/raid10.c | 38 ++++++++++++++++++++------------------ + 1 file changed, 20 insertions(+), 18 deletions(-) + +--- linux-2.6.20.1.orig/drivers/md/raid10.c ++++ linux-2.6.20.1/drivers/md/raid10.c +@@ -429,7 +429,7 @@ static sector_t raid10_find_virt(conf_t + if (dev < 0) + dev += conf->raid_disks; + } else { +- while (sector > conf->stride) { ++ while (sector >= conf->stride) { + sector -= conf->stride; + if (dev < conf->near_copies) + dev += conf->raid_disks - conf->near_copies; +@@ -1801,6 +1801,7 @@ static sector_t sync_request(mddev_t *md + for (k=0; kcopies; k++) + if (r10_bio->devs[k].devnum == i) + break; ++ BUG_ON(k == conf->copies); + bio = r10_bio->devs[1].bio; + bio->bi_next = biolist; + biolist = bio; +@@ -2021,19 +2022,30 @@ static int run(mddev_t *mddev) + if (!conf->tmppage) + goto out_free_conf; + ++ conf->mddev = mddev; ++ conf->raid_disks = mddev->raid_disks; + conf->near_copies = nc; + conf->far_copies = fc; + conf->copies = nc*fc; + conf->far_offset = fo; + conf->chunk_mask = (sector_t)(mddev->chunk_size>>9)-1; + conf->chunk_shift = ffz(~mddev->chunk_size) - 9; ++ size = mddev->size >> (conf->chunk_shift-1); ++ sector_div(size, fc); ++ size = size * conf->raid_disks; ++ sector_div(size, nc); ++ /* 'size' is now the number of chunks in the array */ ++ /* calculate "used chunks per device" in 'stride' */ ++ stride = size * conf->copies; ++ sector_div(stride, conf->raid_disks); ++ mddev->size = stride << (conf->chunk_shift-1); ++ + if (fo) +- conf->stride = 1 << conf->chunk_shift; +- else { +- stride = mddev->size >> (conf->chunk_shift-1); ++ stride = 1; ++ else + sector_div(stride, fc); +- conf->stride = stride << conf->chunk_shift; +- } ++ conf->stride = stride << conf->chunk_shift; ++ + conf->r10bio_pool = mempool_create(NR_RAID10_BIOS, r10bio_pool_alloc, + r10bio_pool_free, conf); + if (!conf->r10bio_pool) { +@@ -2063,8 +2075,6 @@ static int run(mddev_t *mddev) + + disk->head_position = 0; + } +- conf->raid_disks = mddev->raid_disks; +- conf->mddev = mddev; + spin_lock_init(&conf->device_lock); + INIT_LIST_HEAD(&conf->retry_list); + +@@ -2106,16 +2116,8 @@ static int run(mddev_t *mddev) + /* + * Ok, everything is just fine now + */ +- if (conf->far_offset) { +- size = mddev->size >> (conf->chunk_shift-1); +- size *= conf->raid_disks; +- size <<= conf->chunk_shift; +- sector_div(size, conf->far_copies); +- } else +- size = conf->stride * conf->raid_disks; +- sector_div(size, conf->near_copies); +- mddev->array_size = size/2; +- mddev->resync_max_sectors = size; ++ mddev->array_size = size << (conf->chunk_shift-1); ++ mddev->resync_max_sectors = size << conf->chunk_shift; + + mddev->queue->unplug_fn = raid10_unplug; + mddev->queue->issue_flush_fn = raid10_issue_flush; + +-- + +From gregkh@mini.kroah.org Wed Mar 7 09:06:16 2007 +Message-Id: <20070307170616.365407516@mini.kroah.org> +References: <20070307170123.677686080@mini.kroah.org> +User-Agent: quilt/0.45-1 +Date: Wed, 07 Mar 2007 09:02:09 -0800 +From: Greg KH +To: linux-kernel@vger.kernel.org, + stable@kernel.org +Cc: Justin Forbes , + Zwane Mwaikambo , + Theodore Ts'o , + Randy Dunlap , + Dave Jones , + Chuck Wolber , + Chris Wedgwood , + Michael Krufky , + Chuck Ebbert , + torvalds@linux-foundation.org, + akpm@linux-foundation.org, + alan@lxorguk.ukuu.org.uk, + v4l-dvb maintainer list , + Marcel Siegert , + Mauro Carvalho Chehab +Subject: [patch 046/101] dvbdev: fix illegal re-usage of fileoperations struct +Content-Disposition: inline; filename=dvbdev-fix-illegal-re-usage-of-fileoperations-struct.patch +Content-Length: 1922 +Lines: 66 + +From: Marcel Siegert + +Arjan van de Ven reported an illegal re-usage of +the fileoperations struct if more than one dvb device (e.g. frontend) is +present. + +This patch fixes this issue. + +It allocates a new fileoperations struct each time a device is +registered and copies the default template fileops. + +(backported from commit b61901024776b25ce7b8edc31bb1757c7382a88e) + +Signed-off-by: Marcel Siegert +Signed-off-by: Mauro Carvalho Chehab +Signed-off-by: Michael Krufky +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/media/dvb/dvb-core/dvbdev.c | 13 +++++++++++++ + 1 file changed, 13 insertions(+) + +--- linux-2.6.20.1.orig/drivers/media/dvb/dvb-core/dvbdev.c ++++ linux-2.6.20.1/drivers/media/dvb/dvb-core/dvbdev.c +@@ -200,6 +200,8 @@ int dvb_register_device(struct dvb_adapt + const struct dvb_device *template, void *priv, int type) + { + struct dvb_device *dvbdev; ++ struct file_operations *dvbdevfops; ++ + int id; + + if (mutex_lock_interruptible(&dvbdev_register_lock)) +@@ -219,12 +221,22 @@ int dvb_register_device(struct dvb_adapt + return -ENOMEM; + } + ++ dvbdevfops = kzalloc(sizeof(struct file_operations), GFP_KERNEL); ++ ++ if (!dvbdevfops) { ++ kfree (dvbdev); ++ mutex_unlock(&dvbdev_register_lock); ++ return -ENOMEM; ++ } ++ + memcpy(dvbdev, template, sizeof(struct dvb_device)); + dvbdev->type = type; + dvbdev->id = id; + dvbdev->adapter = adap; + dvbdev->priv = priv; ++ dvbdev->fops = dvbdevfops; + ++ memcpy(dvbdev->fops, template->fops, sizeof(struct file_operations)); + dvbdev->fops->owner = adap->module; + + list_add_tail (&dvbdev->list_head, &adap->device_list); +@@ -252,6 +264,7 @@ void dvb_unregister_device(struct dvb_de + dvbdev->type, dvbdev->id))); + + list_del (&dvbdev->list_head); ++ kfree (dvbdev->fops); + kfree (dvbdev); + } + EXPORT_SYMBOL(dvb_unregister_device); + +-- + +From gregkh@mini.kroah.org Wed Mar 7 09:06:16 2007 +Message-Id: <20070307170616.547905240@mini.kroah.org> +References: <20070307170123.677686080@mini.kroah.org> +User-Agent: quilt/0.45-1 +Date: Wed, 07 Mar 2007 09:02:10 -0800 +From: Greg KH +To: linux-kernel@vger.kernel.org, + stable@kernel.org +Cc: Justin Forbes , + Zwane Mwaikambo , + Theodore Ts'o , + Randy Dunlap , + Dave Jones , + Chuck Wolber , + Chris Wedgwood , + Michael Krufky , + Chuck Ebbert , + torvalds@linux-foundation.org, + akpm@linux-foundation.org, + alan@lxorguk.ukuu.org.uk, + v4l-dvb maintainer list , + Mike Isely +Subject: [patch 047/101] V4L: pvrusb2: Fix video corruption on stream start +Content-Disposition: inline; filename=v4l-pvrusb2-fix-video-corruption-on-stream-start.patch +Content-Length: 2643 +Lines: 79 + +From: Mike Isely + +This introduces some extra cx23416 commands when streaming is +started. The addition of these commands fix random sporadic video +corruption that can take place when the video stream is temporarily +disrupted through loss of signal (e.g. changing the channel in the RF +tuner). + +This fix is already in the upstream driver source and has proven +itself there; this is a backport for the 2.6.20.y kernel series. + +(backported from commit 6fe7d2c4660174110c6872cacc4fc2acb6e00acf) + +Signed-off-by: Mike Isely +Signed-off-by: Michael Krufky +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/media/video/pvrusb2/pvrusb2-encoder.c | 40 ++++++++++++++++++++++++++ + 1 file changed, 40 insertions(+) + +--- linux-2.6.20.1.orig/drivers/media/video/pvrusb2/pvrusb2-encoder.c ++++ linux-2.6.20.1/drivers/media/video/pvrusb2/pvrusb2-encoder.c +@@ -288,6 +288,44 @@ static int pvr2_encoder_vcmd(struct pvr2 + return pvr2_encoder_cmd(hdw,cmd,args,0,data); + } + ++ ++/* This implements some extra setup for the encoder that seems to be ++ specific to the PVR USB2 hardware. */ ++int pvr2_encoder_prep_config(struct pvr2_hdw *hdw) ++{ ++ int ret = 0; ++ int encMisc3Arg = 0; ++ ++ /* Mike Isely 22-Feb-2007 The windows driver ++ sends the following list of ENC_MISC commands (for both ++ 24xxx and 29xxx devices). Meanings are not entirely clear, ++ however without the ENC_MISC(3,encMisc3Arg) command then we risk ++ random perpetual video corruption whenever the video input ++ breaks up for a moment (like when switching channels). */ ++ ++ ++ /* This ENC_MISC(3,encMisc3Arg) command is critical - without ++ it there will eventually be video corruption. Also, the ++ 29xxx case is strange - the Windows driver is passing 1 ++ regardless of device type but if we have 1 for 29xxx device ++ the video turns sluggish. */ ++ switch (hdw->hdw_type) { ++ case PVR2_HDW_TYPE_24XXX: encMisc3Arg = 1; break; ++ case PVR2_HDW_TYPE_29XXX: encMisc3Arg = 0; break; ++ default: break; ++ } ++ ret |= pvr2_encoder_vcmd(hdw, CX2341X_ENC_MISC,4, 3, ++ encMisc3Arg,0,0); ++ ++ ret |= pvr2_encoder_vcmd(hdw, CX2341X_ENC_MISC,4, 8,0,0,0); ++ ++ ret |= pvr2_encoder_vcmd(hdw, CX2341X_ENC_MISC,4, 0,3,0,0); ++ ret |= pvr2_encoder_vcmd(hdw, CX2341X_ENC_MISC,4,15,0,0,0); ++ ++ return ret; ++} ++ ++ + int pvr2_encoder_configure(struct pvr2_hdw *hdw) + { + int ret; +@@ -302,6 +340,8 @@ int pvr2_encoder_configure(struct pvr2_h + + ret = 0; + ++ ret |= pvr2_encoder_prep_config(hdw); ++ + if (!ret) ret = pvr2_encoder_vcmd( + hdw,CX2341X_ENC_SET_NUM_VSYNC_LINES, 2, + 0xf0, 0xf0); + +-- + +From gregkh@mini.kroah.org Wed Mar 7 09:06:16 2007 +Message-Id: <20070307170616.625139336@mini.kroah.org> +References: <20070307170123.677686080@mini.kroah.org> +User-Agent: quilt/0.45-1 +Date: Wed, 07 Mar 2007 09:02:11 -0800 +From: Greg KH +To: linux-kernel@vger.kernel.org, + stable@kernel.org +Cc: Justin Forbes , + Zwane Mwaikambo , + Theodore Ts'o , + Randy Dunlap , + Dave Jones , + Chuck Wolber , + Chris Wedgwood , + Michael Krufky , + Chuck Ebbert , + torvalds@linux-foundation.org, + akpm@linux-foundation.org, + alan@lxorguk.ukuu.org.uk, + v4l-dvb maintainer list , + Mike Isely +Subject: [patch 048/101] V4L: pvrusb2: Handle larger cx2341x firmware images +Content-Disposition: inline; filename=v4l-pvrusb2-handle-larger-cx2341x-firmware-images.patch +Content-Length: 2856 +Lines: 82 + +From: Mike Isely + +Rework the cx23416 firmware loader so that it longer requires the +firmware size to be a multiple of 8KB. Until recently all cx2341x +firmware images were exactly 256KB, but newer firmware is larger than +that and also appears to have arbitrary size. We still must check +against a multiple of 4 bytes (because the cx23416 itself uses a 32 +bit word size). + +This fix is already in the upstream driver source and has proven +itself there; this is a backport for the 2.6.20.y kernel series. + +(backported from commit 90060d32ca0a941b158994f78e60d0381871c84b) + +Signed-off-by: Mike Isely +Signed-off-by: Michael Krufky +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/media/video/pvrusb2/pvrusb2-hdw.c | 31 ++++++++++++++++-------------- + 1 file changed, 17 insertions(+), 14 deletions(-) + +--- linux-2.6.20.1.orig/drivers/media/video/pvrusb2/pvrusb2-hdw.c ++++ linux-2.6.20.1/drivers/media/video/pvrusb2/pvrusb2-hdw.c +@@ -1041,7 +1041,7 @@ int pvr2_upload_firmware2(struct pvr2_hd + { + const struct firmware *fw_entry = NULL; + void *fw_ptr; +- unsigned int pipe, fw_len, fw_done; ++ unsigned int pipe, fw_len, fw_done, bcnt, icnt; + int actual_length; + int ret = 0; + int fwidx; +@@ -1093,11 +1093,11 @@ int pvr2_upload_firmware2(struct pvr2_hd + + fw_len = fw_entry->size; + +- if (fw_len % FIRMWARE_CHUNK_SIZE) { ++ if (fw_len % sizeof(u32)) { + pvr2_trace(PVR2_TRACE_ERROR_LEGS, + "size of %s firmware" +- " must be a multiple of 8192B", +- fw_files[fwidx]); ++ " must be a multiple of %zu bytes", ++ fw_files[fwidx],sizeof(u32)); + release_firmware(fw_entry); + return -1; + } +@@ -1112,18 +1112,21 @@ int pvr2_upload_firmware2(struct pvr2_hd + + pipe = usb_sndbulkpipe(hdw->usb_dev, PVR2_FIRMWARE_ENDPOINT); + +- for (fw_done = 0 ; (fw_done < fw_len) && !ret ; +- fw_done += FIRMWARE_CHUNK_SIZE ) { +- int i; +- memcpy(fw_ptr, fw_entry->data + fw_done, FIRMWARE_CHUNK_SIZE); +- /* Usbsnoop log shows that we must swap bytes... */ +- for (i = 0; i < FIRMWARE_CHUNK_SIZE/4 ; i++) +- ((u32 *)fw_ptr)[i] = ___swab32(((u32 *)fw_ptr)[i]); ++ fw_done = 0; ++ for (fw_done = 0; fw_done < fw_len;) { ++ bcnt = fw_len - fw_done; ++ if (bcnt > FIRMWARE_CHUNK_SIZE) bcnt = FIRMWARE_CHUNK_SIZE; ++ memcpy(fw_ptr, fw_entry->data + fw_done, bcnt); ++ /* Usbsnoop log shows that we must swap bytes... */ ++ for (icnt = 0; icnt < bcnt/4 ; icnt++) ++ ((u32 *)fw_ptr)[icnt] = ++ ___swab32(((u32 *)fw_ptr)[icnt]); + +- ret |= usb_bulk_msg(hdw->usb_dev, pipe, fw_ptr, +- FIRMWARE_CHUNK_SIZE, ++ ret |= usb_bulk_msg(hdw->usb_dev, pipe, fw_ptr,bcnt, + &actual_length, HZ); +- ret |= (actual_length != FIRMWARE_CHUNK_SIZE); ++ ret |= (actual_length != bcnt); ++ if (ret) break; ++ fw_done += bcnt; + } + + trace_firmware("upload of %s : %i / %i ", + +-- + +From gregkh@mini.kroah.org Wed Mar 7 09:06:16 2007 +Message-Id: <20070307170616.758873614@mini.kroah.org> +References: <20070307170123.677686080@mini.kroah.org> +User-Agent: quilt/0.45-1 +Date: Wed, 07 Mar 2007 09:02:12 -0800 +From: Greg KH +To: linux-kernel@vger.kernel.org, + stable@kernel.org +Cc: Justin Forbes , + Zwane Mwaikambo , + Theodore Ts'o , + Randy Dunlap , + Dave Jones , + Chuck Wolber , + Chris Wedgwood , + Michael Krufky , + Chuck Ebbert , + torvalds@linux-foundation.org, + akpm@linux-foundation.org, + alan@lxorguk.ukuu.org.uk, + v4l-dvb maintainer list , + Jin-Bong lee , + Mauro Carvalho Chehab +Subject: [patch 049/101] DVB: cxusb: fix firmware patch for big endian systems +Content-Disposition: inline; filename=dvb-cxusb-fix-firmware-patch-for-big-endian-systems.patch +Content-Length: 1102 +Lines: 33 + + +From: Jin-Bong lee + +Without this patch, the device will not be detected after firmware download +on big endian systems. + +(cherry picked from commit 1d1370a48ca285ebe197ecd3197a8d5f161bc291) + +Signed-off-by: Jin-Bong lee +Signed-off-by: Michael Krufky +Signed-off-by: Mauro Carvalho Chehab +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/media/dvb/dvb-usb/cxusb.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +--- linux-2.6.20.1.orig/drivers/media/dvb/dvb-usb/cxusb.c ++++ linux-2.6.20.1/drivers/media/dvb/dvb-usb/cxusb.c +@@ -469,9 +469,9 @@ static int bluebird_patch_dvico_firmware + fw->data[BLUEBIRD_01_ID_OFFSET + 1] == USB_VID_DVICO >> 8) { + + fw->data[BLUEBIRD_01_ID_OFFSET + 2] = +- udev->descriptor.idProduct + 1; ++ le16_to_cpu(udev->descriptor.idProduct) + 1; + fw->data[BLUEBIRD_01_ID_OFFSET + 3] = +- udev->descriptor.idProduct >> 8; ++ le16_to_cpu(udev->descriptor.idProduct) >> 8; + + return usb_cypress_load_firmware(udev, fw, CYPRESS_FX2); + } + +-- + +From gregkh@mini.kroah.org Wed Mar 7 09:06:17 2007 +Message-Id: <20070307170616.890408171@mini.kroah.org> +References: <20070307170123.677686080@mini.kroah.org> +User-Agent: quilt/0.45-1 +Date: Wed, 07 Mar 2007 09:02:13 -0800 +From: Greg KH +To: linux-kernel@vger.kernel.org, + stable@kernel.org +Cc: Justin Forbes , + Zwane Mwaikambo , + Theodore Ts'o , + Randy Dunlap , + Dave Jones , + Chuck Wolber , + Chris Wedgwood , + Michael Krufky , + Chuck Ebbert , + torvalds@linux-foundation.org, + akpm@linux-foundation.org, + alan@lxorguk.ukuu.org.uk, + v4l-dvb maintainer list , + Mauro Carvalho Chehab +Subject: [patch 050/101] DVB: digitv: open nxt6000 i2c_gate for TDED4 tuner handling +Content-Disposition: inline; filename=dvb-digitv-open-nxt6000-i2c_gate-for-tded4-tuner-handling.patch +Content-Length: 1054 +Lines: 30 + +From: Michael Krufky + +dvb-pll normally opens the i2c gate before attempting to communicate with +the pll, but the code for this device is not using dvb-pll. This should +be cleaned up in the future, but for now, just open the i2c gate at the +appropriate place in order to fix this driver bug. + +(cherry picked from commit 2fe22dcdc79b8dd34e61a3f1231caffd6180a626) + +Signed-off-by: Michael Krufky +Signed-off-by: Mauro Carvalho Chehab +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/media/dvb/dvb-usb/digitv.c | 2 ++ + 1 file changed, 2 insertions(+) + +--- linux-2.6.20.1.orig/drivers/media/dvb/dvb-usb/digitv.c ++++ linux-2.6.20.1/drivers/media/dvb/dvb-usb/digitv.c +@@ -119,6 +119,8 @@ static int digitv_nxt6000_tuner_set_para + struct dvb_usb_adapter *adap = fe->dvb->priv; + u8 b[5]; + dvb_usb_tuner_calc_regs(fe,fep,b, 5); ++ if (fe->ops.i2c_gate_ctrl) ++ fe->ops.i2c_gate_ctrl(fe, 1); + return digitv_ctrl_msg(adap->dev, USB_WRITE_TUNER, 0, &b[1], 4, NULL, 0); + } + + +-- + +From gregkh@mini.kroah.org Wed Mar 7 09:06:17 2007 +Message-Id: <20070307170617.018552355@mini.kroah.org> +References: <20070307170123.677686080@mini.kroah.org> +User-Agent: quilt/0.45-1 +Date: Wed, 07 Mar 2007 09:02:14 -0800 +From: Greg KH +To: linux-kernel@vger.kernel.org, + stable@kernel.org +Cc: Justin Forbes , + Zwane Mwaikambo , + Theodore Ts'o , + Randy Dunlap , + Dave Jones , + Chuck Wolber , + Chris Wedgwood , + Michael Krufky , + Chuck Ebbert , + torvalds@linux-foundation.org, + akpm@linux-foundation.org, + alan@lxorguk.ukuu.org.uk, + v4l-dvb maintainer list , + Hans Verkuil , + Mike Isely , + Mauro Carvalho Chehab +Subject: [patch 051/101] V4L: fix cx25840 firmware loading +Content-Disposition: inline; filename=v4l-fix-cx25840-firmware-loading.patch +Content-Length: 1589 +Lines: 54 + + +From: Hans Verkuil +Date: Thu, 15 Feb 2007 03:40:34 -0300 +Subject: [patch 051/101] [PATCH] V4L: fix cx25840 firmware loading + +Due to changes in the i2c handling in 2.6.20 this cx25840 bug surfaced, +causing the firmware load to fail for the ivtv driver. The correct +sequence is to first attach the i2c client, then use the client's +device to load the firmware. + +(cherry picked from commit d55c7aec666658495e5b57a6b194c8c2a1ac255f) + +Signed-off-by: Hans Verkuil +Acked-by: Mike Isely +Signed-off-by: Mauro Carvalho Chehab +Signed-off-by: Michael Krufky +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/media/video/cx25840/cx25840-core.c | 4 ++-- + drivers/media/video/cx25840/cx25840-firmware.c | 2 +- + 2 files changed, 3 insertions(+), 3 deletions(-) + +--- linux-2.6.20.1.orig/drivers/media/video/cx25840/cx25840-core.c ++++ linux-2.6.20.1/drivers/media/video/cx25840/cx25840-core.c +@@ -907,13 +907,13 @@ static int cx25840_detect_client(struct + state->vbi_line_offset = 8; + state->id = id; + ++ i2c_attach_client(client); ++ + if (state->is_cx25836) + cx25836_initialize(client); + else + cx25840_initialize(client, 1); + +- i2c_attach_client(client); +- + return 0; + } + +--- linux-2.6.20.1.orig/drivers/media/video/cx25840/cx25840-firmware.c ++++ linux-2.6.20.1/drivers/media/video/cx25840/cx25840-firmware.c +@@ -37,7 +37,7 @@ + */ + #define FWSEND 48 + +-#define FWDEV(x) &((x)->adapter->dev) ++#define FWDEV(x) &((x)->dev) + + static char *firmware = FWFILE; + + +-- + +From gregkh@mini.kroah.org Wed Mar 7 09:06:17 2007 +Message-Id: <20070307170617.148880056@mini.kroah.org> +References: <20070307170123.677686080@mini.kroah.org> +User-Agent: quilt/0.45-1 +Date: Wed, 07 Mar 2007 09:02:15 -0800 +From: Greg KH +To: linux-kernel@vger.kernel.org, + stable@kernel.org +Cc: Justin Forbes , + Zwane Mwaikambo , + Theodore Ts'o , + Randy Dunlap , + Dave Jones , + Chuck Wolber , + Chris Wedgwood , + Michael Krufky , + Chuck Ebbert , + torvalds@linux-foundation.org, + akpm@linux-foundation.org, + alan@lxorguk.ukuu.org.uk, + v4l-dvb maintainer list , + Mauro Carvalho Chehab +Subject: [patch 052/101] V4L: cx88-blackbird: allow usage of 376836 and 262144 sized firmware images +Content-Disposition: inline; filename=v4l-cx88-blackbird-allow-usage-of-376836-and-262144-sized-firmware-images.patch +Content-Length: 2529 +Lines: 71 + + +From: Michael Krufky + +This updates the cx88-blackbird driver to be able to use the new cx23416 +firmware image released by Hauppauge Computer Works, while retaining +compatibility with the older firmware images. +cx2341x firmware can be downloaded at: http://dl.ivtvdriver.org/ivtv/firmware/ + +(cherry picked from commit af70dbd3346999570db73b3bc3d4f7b7c004f2ea) + +Signed-off-by: Michael Krufky +Signed-off-by: Mauro Carvalho Chehab +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/media/video/cx88/cx88-blackbird.c | 14 +++++++++----- + drivers/media/video/cx88/cx88.h | 1 + + 2 files changed, 10 insertions(+), 5 deletions(-) + +--- linux-2.6.20.1.orig/drivers/media/video/cx88/cx88-blackbird.c ++++ linux-2.6.20.1/drivers/media/video/cx88/cx88-blackbird.c +@@ -53,7 +53,8 @@ MODULE_PARM_DESC(debug,"enable debug mes + + /* ------------------------------------------------------------------ */ + +-#define BLACKBIRD_FIRM_IMAGE_SIZE 256*1024 ++#define OLD_BLACKBIRD_FIRM_IMAGE_SIZE 262144 ++#define BLACKBIRD_FIRM_IMAGE_SIZE 376836 + + /* defines below are from ivtv-driver.h */ + +@@ -401,7 +402,7 @@ static int blackbird_find_mailbox(struct + u32 value; + int i; + +- for (i = 0; i < BLACKBIRD_FIRM_IMAGE_SIZE; i++) { ++ for (i = 0; i < dev->fw_size; i++) { + memory_read(dev->core, i, &value); + if (value == signature[signaturecnt]) + signaturecnt++; +@@ -449,12 +450,15 @@ static int blackbird_load_firmware(struc + return -1; + } + +- if (firmware->size != BLACKBIRD_FIRM_IMAGE_SIZE) { +- dprintk(0, "ERROR: Firmware size mismatch (have %zd, expected %d)\n", +- firmware->size, BLACKBIRD_FIRM_IMAGE_SIZE); ++ if ((firmware->size != BLACKBIRD_FIRM_IMAGE_SIZE) && ++ (firmware->size != OLD_BLACKBIRD_FIRM_IMAGE_SIZE)) { ++ dprintk(0, "ERROR: Firmware size mismatch (have %zd, expected %d or %d)\n", ++ firmware->size, BLACKBIRD_FIRM_IMAGE_SIZE, ++ OLD_BLACKBIRD_FIRM_IMAGE_SIZE); + release_firmware(firmware); + return -1; + } ++ dev->fw_size = firmware->size; + + if (0 != memcmp(firmware->data, magic, 8)) { + dprintk(0, "ERROR: Firmware magic mismatch, wrong file?\n"); +--- linux-2.6.20.1.orig/drivers/media/video/cx88/cx88.h ++++ linux-2.6.20.1/drivers/media/video/cx88/cx88.h +@@ -459,6 +459,7 @@ struct cx8802_dev { + u32 mailbox; + int width; + int height; ++ int fw_size; + + /* for dvb only */ + struct videobuf_dvb dvb; + +-- + +From gregkh@mini.kroah.org Wed Mar 7 09:06:17 2007 +Message-Id: <20070307170617.306770749@mini.kroah.org> +References: <20070307170123.677686080@mini.kroah.org> +User-Agent: quilt/0.45-1 +Date: Wed, 07 Mar 2007 09:02:16 -0800 +From: Greg KH +To: linux-kernel@vger.kernel.org, + stable@kernel.org, + Andrew Morton +Cc: Justin Forbes , + Zwane Mwaikambo , + Theodore Ts'o , + Randy Dunlap , + Dave Jones , + Chuck Wolber , + Chris Wedgwood , + Michael Krufky , + Chuck Ebbert , + torvalds@linux-foundation.org, + alan@lxorguk.ukuu.org.uk, + Ingo Molnar , + john stultz , + Roman Zippel , + Mike Galbraith , + Ken Chen , + balducci@units.it, + Greg KH , + Thomas Gleixner +Subject: [patch 053/101] Fix posix-cpu-timer breakage caused by stale p->last_ran value +Content-Disposition: inline; filename=fix-posix-cpu-timer-breakage-caused-by-stale-p-last_ran-value.patch +Content-Length: 1047 +Lines: 35 + +From: Thomas Gleixner + +Problem description at: +http://bugzilla.kernel.org/show_bug.cgi?id=8048 + +Commit b18ec80396834497933d77b81ec0918519f4e2a7 + [PATCH] sched: improve migration accuracy +optimized the scheduler time calculations, but broke posix-cpu-timers. + +The problem is that the p->last_ran value is not updated after a context +switch. So a subsequent call to current_sched_time() calculates with a +stale p->last_ran value, i.e. accounts the full time, which the task was +scheduled away. + +Signed-off-by: Thomas Gleixner +Acked-by: Ingo Molnar +Signed-off-by: Greg Kroah-Hartman + +--- + kernel/sched.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- linux-2.6.20.1.orig/kernel/sched.c ++++ linux-2.6.20.1/kernel/sched.c +@@ -3547,7 +3547,7 @@ switch_tasks: + + sched_info_switch(prev, next); + if (likely(prev != next)) { +- next->timestamp = now; ++ next->timestamp = next->last_ran = now; + rq->nr_switches++; + rq->curr = next; + ++*switch_count; + +-- + +From gregkh@mini.kroah.org Wed Mar 7 09:06:17 2007 +Message-Id: <20070307170617.410426352@mini.kroah.org> +References: <20070307170123.677686080@mini.kroah.org> +User-Agent: quilt/0.45-1 +Date: Wed, 07 Mar 2007 09:02:17 -0800 +From: Greg KH +To: linux-kernel@vger.kernel.org, + stable@kernel.org +Cc: Justin Forbes , + Zwane Mwaikambo , + Theodore Ts'o , + Randy Dunlap , + Dave Jones , + Chuck Wolber , + Chris Wedgwood , + Michael Krufky , + Chuck Ebbert , + torvalds@linux-foundation.org, + akpm@linux-foundation.org, + alan@lxorguk.ukuu.org.uk, + Stefan Seyfried , + Pavel Machek , + "Rafael J. Wysocki" +Subject: [patch 054/101] swsusp: Fix possible oops in userland interface +Content-Disposition: inline; filename=swsusp-fix-possible-oops-in-userland-interface.patch +Content-Length: 1684 +Lines: 68 + +From: Stefan Seyfried + +Fix the Oops occuring when SNAPSHOT_PMOPS or SNAPSHOT_S2RAM ioctl is called on +a system without pm_ops defined (eg. a non-ACPI kernel on x86 PC). + +Signed-off-by: Stefan Seyfried +Signed-off-by: Rafael J. Wysocki +Acked-by: Pavel Machek +Signed-off-by: Greg Kroah-Hartman + + +--- + kernel/power/user.c | 19 ++++++++++++------- + 1 file changed, 12 insertions(+), 7 deletions(-) + +--- linux-2.6.20.1.orig/kernel/power/user.c ++++ linux-2.6.20.1/kernel/power/user.c +@@ -292,7 +292,7 @@ static int snapshot_ioctl(struct inode * + break; + } + +- if (pm_ops->prepare) { ++ if (pm_ops && pm_ops->prepare) { + error = pm_ops->prepare(PM_SUSPEND_MEM); + if (error) + goto OutS3; +@@ -311,7 +311,7 @@ static int snapshot_ioctl(struct inode * + device_resume(); + } + resume_console(); +- if (pm_ops->finish) ++ if (pm_ops && pm_ops->finish) + pm_ops->finish(PM_SUSPEND_MEM); + + OutS3: +@@ -322,20 +322,25 @@ static int snapshot_ioctl(struct inode * + switch (arg) { + + case PMOPS_PREPARE: +- if (pm_ops->prepare) { ++ if (pm_ops && pm_ops->prepare) + error = pm_ops->prepare(PM_SUSPEND_DISK); +- } ++ else ++ error = -ENOSYS; + break; + + case PMOPS_ENTER: + kernel_shutdown_prepare(SYSTEM_SUSPEND_DISK); +- error = pm_ops->enter(PM_SUSPEND_DISK); ++ if (pm_ops && pm_ops->enter) ++ error = pm_ops->enter(PM_SUSPEND_DISK); ++ else ++ error = -ENOSYS; + break; + + case PMOPS_FINISH: +- if (pm_ops && pm_ops->finish) { ++ if (pm_ops && pm_ops->finish) + pm_ops->finish(PM_SUSPEND_DISK); +- } ++ else ++ error = -ENOSYS; + break; + + default: + +-- + +From gregkh@mini.kroah.org Wed Mar 7 09:06:17 2007 +Message-Id: <20070307170617.546647259@mini.kroah.org> +References: <20070307170123.677686080@mini.kroah.org> +User-Agent: quilt/0.45-1 +Date: Wed, 07 Mar 2007 09:02:18 -0800 +From: Greg KH +To: linux-kernel@vger.kernel.org, + stable@kernel.org, + Jeff Garzik , + +Cc: Justin Forbes , + Zwane Mwaikambo , + Theodore Ts'o , + Randy Dunlap , + Dave Jones , + Chuck Wolber , + Chris Wedgwood , + Michael Krufky , + Chuck Ebbert , + torvalds@linux-foundation.org, + akpm@linux-foundation.org, + alan@lxorguk.ukuu.org.uk, + Tejun Heo +Subject: [patch 055/101] sata_sil: ignore and clear spurious IRQs while executing commands by polling +Content-Disposition: inline; filename=sata_sil-ignore-and-clear-spurious-irqs-while-executing-commands-by-polling.patch +Content-Length: 1157 +Lines: 39 + + +sata_sil used to trigger HSM error if IRQ occurs during polling +command. This didn't matter because polling wasn't used in sata_sil. +However, as of 2.6.20, all IDENTIFYs are performed by polling and +device detection sometimes fails due to spurious IRQ. This patch +makes sata_sil ignore and clear spurious IRQ while executing commands +by polling. + +This fixes bug#7996 and IMHO should also be included in -stable. + +Signed-off-by: Tejun Heo +Cc: Jeff Garzik +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/ata/sata_sil.c | 8 +++++++- + 1 file changed, 7 insertions(+), 1 deletion(-) + +--- linux-2.6.20.1.orig/drivers/ata/sata_sil.c ++++ linux-2.6.20.1/drivers/ata/sata_sil.c +@@ -383,9 +383,15 @@ static void sil_host_intr(struct ata_por + goto freeze; + } + +- if (unlikely(!qc || qc->tf.ctl & ATA_NIEN)) ++ if (unlikely(!qc)) + goto freeze; + ++ if (unlikely(qc->tf.flags & ATA_TFLAG_POLLING)) { ++ /* this sometimes happens, just clear IRQ */ ++ ata_chk_status(ap); ++ return; ++ } ++ + /* Check whether we are expecting interrupt in this state */ + switch (ap->hsm_task_state) { + case HSM_ST_FIRST: + +-- + +From gregkh@mini.kroah.org Wed Mar 7 09:06:17 2007 +Message-Id: <20070307170617.670702935@mini.kroah.org> +References: <20070307170123.677686080@mini.kroah.org> +User-Agent: quilt/0.45-1 +Date: Wed, 07 Mar 2007 09:02:19 -0800 +From: Greg KH +To: linux-kernel@vger.kernel.org, + stable@kernel.org, + Greg KH +Cc: Justin Forbes , + Zwane Mwaikambo , + Theodore Ts'o , + Randy Dunlap , + Dave Jones , + Chuck Wolber , + Chris Wedgwood , + Michael Krufky , + Chuck Ebbert , + torvalds@linux-foundation.org, + akpm@linux-foundation.org, + alan@lxorguk.ukuu.org.uk, + Chris Wright , + Tigran Aivazian , + Andreas Gruenbacher , + Hugh Dickins +Subject: [patch 056/101] fix umask when noACL kernel meets extN tuned for ACLs +Content-Disposition: inline; filename=fix-umask-when-noacl-kernel-meets-extn-tuned-for-acls.patch +Content-Length: 3339 +Lines: 84 + +From: Hugh Dickins + +Fix insecure default behaviour reported by Tigran Aivazian: if an ext2 +or ext3 or ext4 filesystem is tuned to mount with "acl", but mounted by +a kernel built without ACL support, then umask was ignored when creating +inodes - though root or user has umask 022, touch creates files as 0666, +and mkdir creates directories as 0777. + +This appears to have worked right until 2.6.11, when a fix to the default +mode on symlinks (always 0777) assumed VFS applies umask: which it does, +unless the mount is marked for ACLs; but ext[234] set MS_POSIXACL in +s_flags according to s_mount_opt set according to def_mount_opts. + +We could revert to the 2.6.10 ext[234]_init_acl (adding an S_ISLNK test); +but other filesystems only set MS_POSIXACL when ACLs are configured. We +could fix this at another level; but it seems most robust to avoid setting +the s_mount_opt flag in the first place (at the expense of more ifdefs). + +Likewise don't set the XATTR_USER flag when built without XATTR support. + +Signed-off-by: Hugh Dickins +Acked-by: Andreas Gruenbacher +Cc: Tigran Aivazian +Signed-off-by: Greg Kroah-Hartman + +--- + fs/ext2/super.c | 4 ++++ + fs/ext3/super.c | 4 ++++ + fs/ext4/super.c | 4 ++++ + 3 files changed, 12 insertions(+) + +--- linux-2.6.20.1.orig/fs/ext2/super.c ++++ linux-2.6.20.1/fs/ext2/super.c +@@ -708,10 +708,14 @@ static int ext2_fill_super(struct super_ + set_opt(sbi->s_mount_opt, GRPID); + if (def_mount_opts & EXT2_DEFM_UID16) + set_opt(sbi->s_mount_opt, NO_UID32); ++#ifdef CONFIG_EXT2_FS_XATTR + if (def_mount_opts & EXT2_DEFM_XATTR_USER) + set_opt(sbi->s_mount_opt, XATTR_USER); ++#endif ++#ifdef CONFIG_EXT2_FS_POSIX_ACL + if (def_mount_opts & EXT2_DEFM_ACL) + set_opt(sbi->s_mount_opt, POSIX_ACL); ++#endif + + if (le16_to_cpu(sbi->s_es->s_errors) == EXT2_ERRORS_PANIC) + set_opt(sbi->s_mount_opt, ERRORS_PANIC); +--- linux-2.6.20.1.orig/fs/ext3/super.c ++++ linux-2.6.20.1/fs/ext3/super.c +@@ -1459,10 +1459,14 @@ static int ext3_fill_super (struct super + set_opt(sbi->s_mount_opt, GRPID); + if (def_mount_opts & EXT3_DEFM_UID16) + set_opt(sbi->s_mount_opt, NO_UID32); ++#ifdef CONFIG_EXT3_FS_XATTR + if (def_mount_opts & EXT3_DEFM_XATTR_USER) + set_opt(sbi->s_mount_opt, XATTR_USER); ++#endif ++#ifdef CONFIG_EXT3_FS_POSIX_ACL + if (def_mount_opts & EXT3_DEFM_ACL) + set_opt(sbi->s_mount_opt, POSIX_ACL); ++#endif + if ((def_mount_opts & EXT3_DEFM_JMODE) == EXT3_DEFM_JMODE_DATA) + sbi->s_mount_opt |= EXT3_MOUNT_JOURNAL_DATA; + else if ((def_mount_opts & EXT3_DEFM_JMODE) == EXT3_DEFM_JMODE_ORDERED) +--- linux-2.6.20.1.orig/fs/ext4/super.c ++++ linux-2.6.20.1/fs/ext4/super.c +@@ -1518,10 +1518,14 @@ static int ext4_fill_super (struct super + set_opt(sbi->s_mount_opt, GRPID); + if (def_mount_opts & EXT4_DEFM_UID16) + set_opt(sbi->s_mount_opt, NO_UID32); ++#ifdef CONFIG_EXT4DEV_FS_XATTR + if (def_mount_opts & EXT4_DEFM_XATTR_USER) + set_opt(sbi->s_mount_opt, XATTR_USER); ++#endif ++#ifdef CONFIG_EXT4DEV_FS_POSIX_ACL + if (def_mount_opts & EXT4_DEFM_ACL) + set_opt(sbi->s_mount_opt, POSIX_ACL); ++#endif + if ((def_mount_opts & EXT4_DEFM_JMODE) == EXT4_DEFM_JMODE_DATA) + sbi->s_mount_opt |= EXT4_MOUNT_JOURNAL_DATA; + else if ((def_mount_opts & EXT4_DEFM_JMODE) == EXT4_DEFM_JMODE_ORDERED) + +-- + +From gregkh@mini.kroah.org Wed Mar 7 09:06:17 2007 +Message-Id: <20070307170617.796260198@mini.kroah.org> +References: <20070307170123.677686080@mini.kroah.org> +User-Agent: quilt/0.45-1 +Date: Wed, 07 Mar 2007 09:02:20 -0800 +From: Greg KH +To: linux-kernel@vger.kernel.org, + stable@kernel.org +Cc: Justin Forbes , + Zwane Mwaikambo , + Theodore Ts'o , + Randy Dunlap , + Dave Jones , + Chuck Wolber , + Chris Wedgwood , + Michael Krufky , + Chuck Ebbert , + torvalds@linux-foundation.org, + akpm@linux-foundation.org, + alan@lxorguk.ukuu.org.uk, + Blaisorblade , + user-mode-linux-devel@lists.sourceforge.net, + Jeff Dike +Subject: [patch 057/101] UML - Fix 2.6.20 hang +Content-Disposition: inline; filename=uml-fix-2.6.20-hang.patch +Content-Length: 3370 +Lines: 112 + +From: Jeff Dike + +A previous cleanup misused need_poll, which had a fairly broken +interface. It implemented a growable array, changing the used +elements count itself, but leaving it up to the caller to fill in the +actual elements, including the entire array if the array had to be +reallocated. This worked because the previous users were switching +between two such structures, and the elements were copied from the +inactive array to the active array after making sure the active array +had enough room. + +maybe_sigio_broken was made to use need_poll, but it was operating on +a single array, so when the buffer was reallocated, the previous +contents were lost. + +This patch makes need_poll implement more sane semantics. It merely +assures that the array is of the proper size and that the contents are +preserved. It is up to the caller to adjust the used elements count +and to ensure that the proper elements are resent. + +This manifested itself as a hang in 2.6.20 as the uninitialized buffer +convinced UML that one of its own file descriptors didn't support +SIGIO and needed to be watched by poll in a separate thread. The +result was an interrupt flood as control traffic over this descriptor +sparked interrupts, which resulted in more control traffic, ad nauseum. + +Signed-off-by: Jeff Dike +Signed-off-by: Greg Kroah-Hartman + +--- + arch/um/os-Linux/sigio.c | 38 ++++++++++++++++++++------------------ + 1 file changed, 20 insertions(+), 18 deletions(-) + +--- linux-2.6.20.1.orig/arch/um/os-Linux/sigio.c ++++ linux-2.6.20.1/arch/um/os-Linux/sigio.c +@@ -97,20 +97,22 @@ static int write_sigio_thread(void *unus + + static int need_poll(struct pollfds *polls, int n) + { +- if(n <= polls->size){ +- polls->used = n; ++ struct pollfd *new; ++ ++ if(n <= polls->size) + return 0; +- } +- kfree(polls->poll); +- polls->poll = um_kmalloc_atomic(n * sizeof(struct pollfd)); +- if(polls->poll == NULL){ ++ ++ new = um_kmalloc_atomic(n * sizeof(struct pollfd)); ++ if(new == NULL){ + printk("need_poll : failed to allocate new pollfds\n"); +- polls->size = 0; +- polls->used = 0; + return -ENOMEM; + } ++ ++ memcpy(new, polls->poll, polls->used * sizeof(struct pollfd)); ++ kfree(polls->poll); ++ ++ polls->poll = new; + polls->size = n; +- polls->used = n; + return 0; + } + +@@ -171,15 +173,15 @@ int add_sigio_fd(int fd) + goto out; + } + +- n = current_poll.used + 1; +- err = need_poll(&next_poll, n); ++ n = current_poll.used; ++ err = need_poll(&next_poll, n + 1); + if(err) + goto out; + +- for(i = 0; i < current_poll.used; i++) +- next_poll.poll[i] = current_poll.poll[i]; +- +- next_poll.poll[n - 1] = *p; ++ memcpy(next_poll.poll, current_poll.poll, ++ current_poll.used * sizeof(struct pollfd)); ++ next_poll.poll[n] = *p; ++ next_poll.used = n + 1; + update_thread(); + out: + sigio_unlock(); +@@ -214,6 +216,7 @@ int ignore_sigio_fd(int fd) + if(p->fd != fd) + next_poll.poll[n++] = *p; + } ++ next_poll.used = current_poll.used - 1; + + update_thread(); + out: +@@ -331,10 +334,9 @@ void maybe_sigio_broken(int fd, int read + + sigio_lock(); + err = need_poll(&all_sigio_fds, all_sigio_fds.used + 1); +- if(err){ +- printk("maybe_sigio_broken - failed to add pollfd\n"); ++ if(err) + goto out; +- } ++ + all_sigio_fds.poll[all_sigio_fds.used++] = + ((struct pollfd) { .fd = fd, + .events = read ? POLLIN : POLLOUT, + +-- + +From gregkh@mini.kroah.org Wed Mar 7 09:06:18 2007 +Message-Id: <20070307170617.925538604@mini.kroah.org> +References: <20070307170123.677686080@mini.kroah.org> +User-Agent: quilt/0.45-1 +Date: Wed, 07 Mar 2007 09:02:21 -0800 +From: Greg KH +To: linux-kernel@vger.kernel.org, + stable@kernel.org +Cc: Justin Forbes , + Zwane Mwaikambo , + Theodore Ts'o , + Randy Dunlap , + Dave Jones , + Chuck Wolber , + Chris Wedgwood , + Michael Krufky , + Chuck Ebbert , + torvalds@linux-foundation.org, + akpm@linux-foundation.org, + alan@lxorguk.ukuu.org.uk, + Darren Salt , + Pierre Ossman +Subject: [patch 058/101] mmc: Power quirk for ENE controllers +Content-Disposition: inline; filename=mmc-power-quirk-for-ene-controllers.patch +Content-Length: 2802 +Lines: 83 + +From: Darren Salt + +mmc: Power quirk for ENE controllers + +Support for these devices was broken for 2.6.18-rc1 and later by commit +146ad66eac836c0b976c98f428d73e1f6a75270d, which added voltage level support. + +This restores the previous behaviour for these devices by ensuring that when +the voltage is changed, only one write to set the voltage is performed. + +It may be that both writes are needed if the voltage is being changed between +two non-zero values or that it's safe to ensure that only one write is done +if the hardware only supports one voltage; I don't know whether either is the +case nor can I test since I have only the one SD reader (1524:0550), and it +supports just the one voltage. + +Signed-off-by: Darren Salt +Signed-off-by: Pierre Ossman +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/mmc/sdhci.c | 22 +++++++++++++++++++--- + include/linux/pci_ids.h | 1 + + 2 files changed, 20 insertions(+), 3 deletions(-) + +--- linux-2.6.20.1.orig/drivers/mmc/sdhci.c ++++ linux-2.6.20.1/drivers/mmc/sdhci.c +@@ -37,6 +37,7 @@ static unsigned int debug_quirks = 0; + #define SDHCI_QUIRK_FORCE_DMA (1<<1) + /* Controller doesn't like some resets when there is no card inserted. */ + #define SDHCI_QUIRK_NO_CARD_NO_RESET (1<<2) ++#define SDHCI_QUIRK_SINGLE_POWER_WRITE (1<<3) + + static const struct pci_device_id pci_ids[] __devinitdata = { + { +@@ -65,6 +66,14 @@ static const struct pci_device_id pci_id + .driver_data = SDHCI_QUIRK_FORCE_DMA, + }, + ++ { ++ .vendor = PCI_VENDOR_ID_ENE, ++ .device = PCI_DEVICE_ID_ENE_CB712_SD, ++ .subvendor = PCI_ANY_ID, ++ .subdevice = PCI_ANY_ID, ++ .driver_data = SDHCI_QUIRK_SINGLE_POWER_WRITE, ++ }, ++ + { /* Generic SD host controller */ + PCI_DEVICE_CLASS((PCI_CLASS_SYSTEM_SDHCI << 8), 0xFFFF00) + }, +@@ -674,10 +683,17 @@ static void sdhci_set_power(struct sdhci + if (host->power == power) + return; + +- writeb(0, host->ioaddr + SDHCI_POWER_CONTROL); +- +- if (power == (unsigned short)-1) ++ if (power == (unsigned short)-1) { ++ writeb(0, host->ioaddr + SDHCI_POWER_CONTROL); + goto out; ++ } ++ ++ /* ++ * Spec says that we should clear the power reg before setting ++ * a new value. Some controllers don't seem to like this though. ++ */ ++ if (!(host->chip->quirks & SDHCI_QUIRK_SINGLE_POWER_WRITE)) ++ writeb(0, host->ioaddr + SDHCI_POWER_CONTROL); + + pwr = SDHCI_POWER_ON; + +--- linux-2.6.20.1.orig/include/linux/pci_ids.h ++++ linux-2.6.20.1/include/linux/pci_ids.h +@@ -1971,6 +1971,7 @@ + #define PCI_DEVICE_ID_TOPIC_TP560 0x0000 + + #define PCI_VENDOR_ID_ENE 0x1524 ++#define PCI_DEVICE_ID_ENE_CB712_SD 0x0550 + #define PCI_DEVICE_ID_ENE_1211 0x1211 + #define PCI_DEVICE_ID_ENE_1225 0x1225 + #define PCI_DEVICE_ID_ENE_1410 0x1410 + +-- + +From gregkh@mini.kroah.org Wed Mar 7 09:06:18 2007 +Message-Id: <20070307170618.054231181@mini.kroah.org> +References: <20070307170123.677686080@mini.kroah.org> +User-Agent: quilt/0.45-1 +Date: Wed, 07 Mar 2007 09:02:22 -0800 +From: Greg KH +To: linux-kernel@vger.kernel.org, + stable@kernel.org +Cc: Justin Forbes , + Zwane Mwaikambo , + Theodore Ts'o , + Randy Dunlap , + Dave Jones , + Chuck Wolber , + Chris Wedgwood , + Michael Krufky , + Chuck Ebbert , + torvalds@linux-foundation.org, + akpm@linux-foundation.org, + alan@lxorguk.ukuu.org.uk, + linux-wireless@vger.kernel.org, + Bcm43xx-dev@lists.berlios.de, + Michael Buesch , + Pavel Roskin , + Larry Finger +Subject: [patch 059/101] bcm43xx: Fix assertion failures in interrupt handler +Content-Disposition: inline; filename=bcm43xx-fix-assertion-failures-in-interrupt-handler.patch +Content-Length: 1282 +Lines: 38 + + +From: Pavel Roskin + +In the bcm43xx interrupt handler, sanity checks are wrongly done before the +verification that the interrupt is for the bcm43xx. + +Signed-off-by: Pavel Roskin +Signed-off-by: Larry Finger +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/net/wireless/bcm43xx/bcm43xx_main.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +--- linux-2.6.20.1.orig/drivers/net/wireless/bcm43xx/bcm43xx_main.c ++++ linux-2.6.20.1/drivers/net/wireless/bcm43xx/bcm43xx_main.c +@@ -1864,9 +1864,6 @@ static irqreturn_t bcm43xx_interrupt_han + + spin_lock(&bcm->irq_lock); + +- assert(bcm43xx_status(bcm) == BCM43xx_STAT_INITIALIZED); +- assert(bcm->current_core->id == BCM43xx_COREID_80211); +- + reason = bcm43xx_read32(bcm, BCM43xx_MMIO_GEN_IRQ_REASON); + if (reason == 0xffffffff) { + /* irq not for us (shared irq) */ +@@ -1877,6 +1874,9 @@ static irqreturn_t bcm43xx_interrupt_han + if (!reason) + goto out; + ++ assert(bcm43xx_status(bcm) == BCM43xx_STAT_INITIALIZED); ++ assert(bcm->current_core->id == BCM43xx_COREID_80211); ++ + bcm->dma_reason[0] = bcm43xx_read32(bcm, BCM43xx_MMIO_DMA0_REASON) + & 0x0001DC00; + bcm->dma_reason[1] = bcm43xx_read32(bcm, BCM43xx_MMIO_DMA1_REASON) + +-- + +From gregkh@mini.kroah.org Wed Mar 7 09:06:18 2007 +Message-Id: <20070307170618.186348774@mini.kroah.org> +References: <20070307170123.677686080@mini.kroah.org> +User-Agent: quilt/0.45-1 +Date: Wed, 07 Mar 2007 09:02:23 -0800 +From: Greg KH +To: linux-kernel@vger.kernel.org, + stable@kernel.org, + Guennadi Liakhovetski +Cc: Justin Forbes , + Zwane Mwaikambo , + Theodore Ts'o , + Randy Dunlap , + Dave Jones , + Chuck Wolber , + Chris Wedgwood , + Michael Krufky , + Chuck Ebbert , + torvalds@linux-foundation.org, + akpm@linux-foundation.org, + alan@lxorguk.ukuu.org.uk, + , + Tejun Heo +Subject: [patch 060/101] libata: add missing PM callbacks +Content-Disposition: inline; filename=libata-add-missing-pm-callbacks.patch +Content-Length: 1254 +Lines: 41 + +From: Tejun Heo + +Some LLDs were missing scsi device PM callbacks while having host/port +suspend support. Add missing ones. + +Signed-off-by: Tejun Heo +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/ata/pata_jmicron.c | 4 ++++ + drivers/ata/pata_sil680.c | 4 ++++ + 2 files changed, 8 insertions(+) + +--- linux-2.6.20.1.orig/drivers/ata/pata_jmicron.c ++++ linux-2.6.20.1/drivers/ata/pata_jmicron.c +@@ -137,6 +137,10 @@ static struct scsi_host_template jmicron + .slave_destroy = ata_scsi_slave_destroy, + /* Use standard CHS mapping rules */ + .bios_param = ata_std_bios_param, ++#ifdef CONFIG_PM ++ .suspend = ata_scsi_device_suspend, ++ .resume = ata_scsi_device_resume, ++#endif + }; + + static const struct ata_port_operations jmicron_ops = { +--- linux-2.6.20.1.orig/drivers/ata/pata_sil680.c ++++ linux-2.6.20.1/drivers/ata/pata_sil680.c +@@ -226,6 +226,10 @@ static struct scsi_host_template sil680_ + .slave_configure = ata_scsi_slave_config, + .slave_destroy = ata_scsi_slave_destroy, + .bios_param = ata_std_bios_param, ++#ifdef CONFIG_PM ++ .suspend = ata_scsi_device_suspend, ++ .resume = ata_scsi_device_resume, ++#endif + }; + + static struct ata_port_operations sil680_port_ops = { + +-- + +From gregkh@mini.kroah.org Wed Mar 7 09:06:18 2007 +Message-Id: <20070307170618.321127597@mini.kroah.org> +References: <20070307170123.677686080@mini.kroah.org> +User-Agent: quilt/0.45-1 +Date: Wed, 07 Mar 2007 09:02:24 -0800 +From: Greg KH +To: linux-kernel@vger.kernel.org, + stable@kernel.org, + Guennadi Liakhovetski +Cc: Justin Forbes , + Zwane Mwaikambo , + Theodore Ts'o , + Randy Dunlap , + Dave Jones , + Chuck Wolber , + Chris Wedgwood , + Michael Krufky , + Chuck Ebbert , + torvalds@linux-foundation.org, + akpm@linux-foundation.org, + alan@lxorguk.ukuu.org.uk, + , + Tejun Heo +Subject: [patch 061/101] libata: add missing CONFIG_PM in LLDs +Content-Disposition: inline; filename=libata-add-missing-config_pm-in-llds.patch +Content-Length: 33126 +Lines: 1088 + +From: Tejun Heo + +Add missing #ifdef CONFIG_PM conditionals around all PM related parts +in libata LLDs. + +Signed-off-by: Tejun Heo +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/ata/ahci.c | 14 ++++++++++++++ + drivers/ata/ata_generic.c | 4 ++++ + drivers/ata/ata_piix.c | 4 ++++ + drivers/ata/pata_ali.c | 6 ++++++ + drivers/ata/pata_amd.c | 6 ++++++ + drivers/ata/pata_atiixp.c | 4 ++++ + drivers/ata/pata_cmd64x.c | 6 ++++++ + drivers/ata/pata_cs5520.c | 7 +++++++ + drivers/ata/pata_cs5530.c | 6 ++++++ + drivers/ata/pata_cs5535.c | 4 ++++ + drivers/ata/pata_cypress.c | 4 ++++ + drivers/ata/pata_efar.c | 4 ++++ + drivers/ata/pata_hpt366.c | 7 ++++++- + drivers/ata/pata_hpt3x3.c | 6 ++++++ + drivers/ata/pata_it821x.c | 6 ++++++ + drivers/ata/pata_jmicron.c | 4 ++++ + drivers/ata/pata_marvell.c | 4 ++++ + drivers/ata/pata_mpiix.c | 4 ++++ + drivers/ata/pata_netcell.c | 4 ++++ + drivers/ata/pata_ns87410.c | 4 ++++ + drivers/ata/pata_oldpiix.c | 4 ++++ + drivers/ata/pata_opti.c | 4 ++++ + drivers/ata/pata_optidma.c | 4 ++++ + drivers/ata/pata_pdc202xx_old.c | 4 ++++ + drivers/ata/pata_radisys.c | 4 ++++ + drivers/ata/pata_rz1000.c | 6 ++++++ + drivers/ata/pata_sc1200.c | 4 ++++ + drivers/ata/pata_serverworks.c | 6 ++++++ + drivers/ata/pata_sil680.c | 4 ++++ + drivers/ata/pata_sis.c | 4 ++++ + drivers/ata/pata_triflex.c | 4 ++++ + drivers/ata/pata_via.c | 6 ++++++ + drivers/ata/sata_sil.c | 2 ++ + drivers/ata/sata_sil24.c | 2 ++ + 34 files changed, 165 insertions(+), 1 deletion(-) + +--- linux-2.6.20.1.orig/drivers/ata/ahci.c ++++ linux-2.6.20.1/drivers/ata/ahci.c +@@ -225,10 +225,12 @@ static void ahci_thaw(struct ata_port *a + static void ahci_error_handler(struct ata_port *ap); + static void ahci_vt8251_error_handler(struct ata_port *ap); + static void ahci_post_internal_cmd(struct ata_queued_cmd *qc); ++#ifdef CONFIG_PM + static int ahci_port_suspend(struct ata_port *ap, pm_message_t mesg); + static int ahci_port_resume(struct ata_port *ap); + static int ahci_pci_device_suspend(struct pci_dev *pdev, pm_message_t mesg); + static int ahci_pci_device_resume(struct pci_dev *pdev); ++#endif + static void ahci_remove_one (struct pci_dev *pdev); + + static struct scsi_host_template ahci_sht = { +@@ -248,8 +250,10 @@ static struct scsi_host_template ahci_sh + .slave_configure = ata_scsi_slave_config, + .slave_destroy = ata_scsi_slave_destroy, + .bios_param = ata_std_bios_param, ++#ifdef CONFIG_PM + .suspend = ata_scsi_device_suspend, + .resume = ata_scsi_device_resume, ++#endif + }; + + static const struct ata_port_operations ahci_ops = { +@@ -276,8 +280,10 @@ static const struct ata_port_operations + .error_handler = ahci_error_handler, + .post_internal_cmd = ahci_post_internal_cmd, + ++#ifdef CONFIG_PM + .port_suspend = ahci_port_suspend, + .port_resume = ahci_port_resume, ++#endif + + .port_start = ahci_port_start, + .port_stop = ahci_port_stop, +@@ -307,8 +313,10 @@ static const struct ata_port_operations + .error_handler = ahci_vt8251_error_handler, + .post_internal_cmd = ahci_post_internal_cmd, + ++#ifdef CONFIG_PM + .port_suspend = ahci_port_suspend, + .port_resume = ahci_port_resume, ++#endif + + .port_start = ahci_port_start, + .port_stop = ahci_port_stop, +@@ -441,8 +449,10 @@ static struct pci_driver ahci_pci_driver + .name = DRV_NAME, + .id_table = ahci_pci_tbl, + .probe = ahci_init_one, ++#ifdef CONFIG_PM + .suspend = ahci_pci_device_suspend, + .resume = ahci_pci_device_resume, ++#endif + .remove = ahci_remove_one, + }; + +@@ -587,6 +597,7 @@ static void ahci_power_up(void __iomem * + writel(cmd | PORT_CMD_ICC_ACTIVE, port_mmio + PORT_CMD); + } + ++#ifdef CONFIG_PM + static void ahci_power_down(void __iomem *port_mmio, u32 cap) + { + u32 cmd, scontrol; +@@ -604,6 +615,7 @@ static void ahci_power_down(void __iomem + cmd &= ~PORT_CMD_SPIN_UP; + writel(cmd, port_mmio + PORT_CMD); + } ++#endif + + static void ahci_init_port(void __iomem *port_mmio, u32 cap, + dma_addr_t cmd_slot_dma, dma_addr_t rx_fis_dma) +@@ -1336,6 +1348,7 @@ static void ahci_post_internal_cmd(struc + } + } + ++#ifdef CONFIG_PM + static int ahci_port_suspend(struct ata_port *ap, pm_message_t mesg) + { + struct ahci_host_priv *hpriv = ap->host->private_data; +@@ -1412,6 +1425,7 @@ static int ahci_pci_device_resume(struct + + return 0; + } ++#endif + + static int ahci_port_start(struct ata_port *ap) + { +--- linux-2.6.20.1.orig/drivers/ata/ata_generic.c ++++ linux-2.6.20.1/drivers/ata/ata_generic.c +@@ -119,8 +119,10 @@ static struct scsi_host_template generic + .slave_configure = ata_scsi_slave_config, + .slave_destroy = ata_scsi_slave_destroy, + .bios_param = ata_std_bios_param, ++#ifdef CONFIG_PM + .resume = ata_scsi_device_resume, + .suspend = ata_scsi_device_suspend, ++#endif + }; + + static struct ata_port_operations generic_port_ops = { +@@ -230,8 +232,10 @@ static struct pci_driver ata_generic_pci + .id_table = ata_generic, + .probe = ata_generic_init_one, + .remove = ata_pci_remove_one, ++#ifdef CONFIG_PM + .suspend = ata_pci_device_suspend, + .resume = ata_pci_device_resume, ++#endif + }; + + static int __init ata_generic_init(void) +--- linux-2.6.20.1.orig/drivers/ata/ata_piix.c ++++ linux-2.6.20.1/drivers/ata/ata_piix.c +@@ -255,8 +255,10 @@ static struct pci_driver piix_pci_driver + .id_table = piix_pci_tbl, + .probe = piix_init_one, + .remove = ata_pci_remove_one, ++#ifdef CONFIG_PM + .suspend = ata_pci_device_suspend, + .resume = ata_pci_device_resume, ++#endif + }; + + static struct scsi_host_template piix_sht = { +@@ -275,8 +277,10 @@ static struct scsi_host_template piix_sh + .slave_configure = ata_scsi_slave_config, + .slave_destroy = ata_scsi_slave_destroy, + .bios_param = ata_std_bios_param, ++#ifdef CONFIG_PM + .resume = ata_scsi_device_resume, + .suspend = ata_scsi_device_suspend, ++#endif + }; + + static const struct ata_port_operations piix_pata_ops = { +--- linux-2.6.20.1.orig/drivers/ata/pata_ali.c ++++ linux-2.6.20.1/drivers/ata/pata_ali.c +@@ -345,8 +345,10 @@ static struct scsi_host_template ali_sht + .slave_configure = ata_scsi_slave_config, + .slave_destroy = ata_scsi_slave_destroy, + .bios_param = ata_std_bios_param, ++#ifdef CONFIG_PM + .resume = ata_scsi_device_resume, + .suspend = ata_scsi_device_suspend, ++#endif + }; + + /* +@@ -667,11 +669,13 @@ static int ali_init_one(struct pci_dev * + return ata_pci_init_one(pdev, port_info, 2); + } + ++#ifdef CONFIG_PM + static int ali_reinit_one(struct pci_dev *pdev) + { + ali_init_chipset(pdev); + return ata_pci_device_resume(pdev); + } ++#endif + + static const struct pci_device_id ali[] = { + { PCI_VDEVICE(AL, PCI_DEVICE_ID_AL_M5228), }, +@@ -685,8 +689,10 @@ static struct pci_driver ali_pci_driver + .id_table = ali, + .probe = ali_init_one, + .remove = ata_pci_remove_one, ++#ifdef CONFIG_PM + .suspend = ata_pci_device_suspend, + .resume = ali_reinit_one, ++#endif + }; + + static int __init ali_init(void) +--- linux-2.6.20.1.orig/drivers/ata/pata_amd.c ++++ linux-2.6.20.1/drivers/ata/pata_amd.c +@@ -334,8 +334,10 @@ static struct scsi_host_template amd_sht + .slave_configure = ata_scsi_slave_config, + .slave_destroy = ata_scsi_slave_destroy, + .bios_param = ata_std_bios_param, ++#ifdef CONFIG_PM + .resume = ata_scsi_device_resume, + .suspend = ata_scsi_device_suspend, ++#endif + }; + + static struct ata_port_operations amd33_port_ops = { +@@ -663,6 +665,7 @@ static int amd_init_one(struct pci_dev * + return ata_pci_init_one(pdev, port_info, 2); + } + ++#ifdef CONFIG_PM + static int amd_reinit_one(struct pci_dev *pdev) + { + if (pdev->vendor == PCI_VENDOR_ID_AMD) { +@@ -679,6 +682,7 @@ static int amd_reinit_one(struct pci_dev + } + return ata_pci_device_resume(pdev); + } ++#endif + + static const struct pci_device_id amd[] = { + { PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_COBRA_7401), 0 }, +@@ -708,8 +712,10 @@ static struct pci_driver amd_pci_driver + .id_table = amd, + .probe = amd_init_one, + .remove = ata_pci_remove_one, ++#ifdef CONFIG_PM + .suspend = ata_pci_device_suspend, + .resume = amd_reinit_one, ++#endif + }; + + static int __init amd_init(void) +--- linux-2.6.20.1.orig/drivers/ata/pata_atiixp.c ++++ linux-2.6.20.1/drivers/ata/pata_atiixp.c +@@ -224,8 +224,10 @@ static struct scsi_host_template atiixp_ + .slave_configure = ata_scsi_slave_config, + .slave_destroy = ata_scsi_slave_destroy, + .bios_param = ata_std_bios_param, ++#ifdef CONFIG_PM + .resume = ata_scsi_device_resume, + .suspend = ata_scsi_device_suspend, ++#endif + }; + + static struct ata_port_operations atiixp_port_ops = { +@@ -290,8 +292,10 @@ static struct pci_driver atiixp_pci_driv + .id_table = atiixp, + .probe = atiixp_init_one, + .remove = ata_pci_remove_one, ++#ifdef CONFIG_PM + .resume = ata_pci_device_resume, + .suspend = ata_pci_device_suspend, ++#endif + }; + + static int __init atiixp_init(void) +--- linux-2.6.20.1.orig/drivers/ata/pata_cmd64x.c ++++ linux-2.6.20.1/drivers/ata/pata_cmd64x.c +@@ -285,8 +285,10 @@ static struct scsi_host_template cmd64x_ + .slave_configure = ata_scsi_slave_config, + .slave_destroy = ata_scsi_slave_destroy, + .bios_param = ata_std_bios_param, ++#ifdef CONFIG_PM + .resume = ata_scsi_device_resume, + .suspend = ata_scsi_device_suspend, ++#endif + }; + + static struct ata_port_operations cmd64x_port_ops = { +@@ -479,6 +481,7 @@ static int cmd64x_init_one(struct pci_de + return ata_pci_init_one(pdev, port_info, 2); + } + ++#ifdef CONFIG_PM + static int cmd64x_reinit_one(struct pci_dev *pdev) + { + u8 mrdmode; +@@ -492,6 +495,7 @@ static int cmd64x_reinit_one(struct pci_ + #endif + return ata_pci_device_resume(pdev); + } ++#endif + + static const struct pci_device_id cmd64x[] = { + { PCI_VDEVICE(CMD, PCI_DEVICE_ID_CMD_643), 0 }, +@@ -507,8 +511,10 @@ static struct pci_driver cmd64x_pci_driv + .id_table = cmd64x, + .probe = cmd64x_init_one, + .remove = ata_pci_remove_one, ++#ifdef CONFIG_PM + .suspend = ata_pci_device_suspend, + .resume = cmd64x_reinit_one, ++#endif + }; + + static int __init cmd64x_init(void) +--- linux-2.6.20.1.orig/drivers/ata/pata_cs5520.c ++++ linux-2.6.20.1/drivers/ata/pata_cs5520.c +@@ -167,8 +167,10 @@ static struct scsi_host_template cs5520_ + .slave_configure = ata_scsi_slave_config, + .slave_destroy = ata_scsi_slave_destroy, + .bios_param = ata_std_bios_param, ++#ifdef CONFIG_PM + .resume = ata_scsi_device_resume, + .suspend = ata_scsi_device_suspend, ++#endif + }; + + static struct ata_port_operations cs5520_port_ops = { +@@ -298,6 +300,7 @@ static void __devexit cs5520_remove_one( + dev_set_drvdata(dev, NULL); + } + ++#ifdef CONFIG_PM + /** + * cs5520_reinit_one - device resume + * @pdev: PCI device +@@ -314,6 +317,8 @@ static int cs5520_reinit_one(struct pci_ + pci_write_config_byte(pdev, 0x60, pcicfg | 0x40); + return ata_pci_device_resume(pdev); + } ++#endif ++ + /* For now keep DMA off. We can set it for all but A rev CS5510 once the + core ATA code can handle it */ + +@@ -329,8 +334,10 @@ static struct pci_driver cs5520_pci_driv + .id_table = pata_cs5520, + .probe = cs5520_init_one, + .remove = cs5520_remove_one, ++#ifdef CONFIG_PM + .suspend = ata_pci_device_suspend, + .resume = cs5520_reinit_one, ++#endif + }; + + static int __init cs5520_init(void) +--- linux-2.6.20.1.orig/drivers/ata/pata_cs5530.c ++++ linux-2.6.20.1/drivers/ata/pata_cs5530.c +@@ -181,8 +181,10 @@ static struct scsi_host_template cs5530_ + .slave_configure = ata_scsi_slave_config, + .slave_destroy = ata_scsi_slave_destroy, + .bios_param = ata_std_bios_param, ++#ifdef CONFIG_PM + .resume = ata_scsi_device_resume, + .suspend = ata_scsi_device_suspend, ++#endif + }; + + static struct ata_port_operations cs5530_port_ops = { +@@ -369,6 +371,7 @@ static int cs5530_init_one(struct pci_de + return ata_pci_init_one(pdev, port_info, 2); + } + ++#ifdef CONFIG_PM + static int cs5530_reinit_one(struct pci_dev *pdev) + { + /* If we fail on resume we are doomed */ +@@ -376,6 +379,7 @@ static int cs5530_reinit_one(struct pci_ + BUG(); + return ata_pci_device_resume(pdev); + } ++#endif + + static const struct pci_device_id cs5530[] = { + { PCI_VDEVICE(CYRIX, PCI_DEVICE_ID_CYRIX_5530_IDE), }, +@@ -388,8 +392,10 @@ static struct pci_driver cs5530_pci_driv + .id_table = cs5530, + .probe = cs5530_init_one, + .remove = ata_pci_remove_one, ++#ifdef CONFIG_PM + .suspend = ata_pci_device_suspend, + .resume = cs5530_reinit_one, ++#endif + }; + + static int __init cs5530_init(void) +--- linux-2.6.20.1.orig/drivers/ata/pata_cs5535.c ++++ linux-2.6.20.1/drivers/ata/pata_cs5535.c +@@ -185,8 +185,10 @@ static struct scsi_host_template cs5535_ + .slave_configure = ata_scsi_slave_config, + .slave_destroy = ata_scsi_slave_destroy, + .bios_param = ata_std_bios_param, ++#ifdef CONFIG_PM + .resume = ata_scsi_device_resume, + .suspend = ata_scsi_device_suspend, ++#endif + }; + + static struct ata_port_operations cs5535_port_ops = { +@@ -270,8 +272,10 @@ static struct pci_driver cs5535_pci_driv + .id_table = cs5535, + .probe = cs5535_init_one, + .remove = ata_pci_remove_one, ++#ifdef CONFIG_PM + .suspend = ata_pci_device_suspend, + .resume = ata_pci_device_resume, ++#endif + }; + + static int __init cs5535_init(void) +--- linux-2.6.20.1.orig/drivers/ata/pata_cypress.c ++++ linux-2.6.20.1/drivers/ata/pata_cypress.c +@@ -136,8 +136,10 @@ static struct scsi_host_template cy82c69 + .slave_configure = ata_scsi_slave_config, + .slave_destroy = ata_scsi_slave_destroy, + .bios_param = ata_std_bios_param, ++#ifdef CONFIG_PM + .resume = ata_scsi_device_resume, + .suspend = ata_scsi_device_suspend, ++#endif + }; + + static struct ata_port_operations cy82c693_port_ops = { +@@ -206,8 +208,10 @@ static struct pci_driver cy82c693_pci_dr + .id_table = cy82c693, + .probe = cy82c693_init_one, + .remove = ata_pci_remove_one, ++#ifdef CONFIG_PM + .suspend = ata_pci_device_suspend, + .resume = ata_pci_device_resume, ++#endif + }; + + static int __init cy82c693_init(void) +--- linux-2.6.20.1.orig/drivers/ata/pata_efar.c ++++ linux-2.6.20.1/drivers/ata/pata_efar.c +@@ -234,8 +234,10 @@ static struct scsi_host_template efar_sh + .slave_configure = ata_scsi_slave_config, + .slave_destroy = ata_scsi_slave_destroy, + .bios_param = ata_std_bios_param, ++#ifdef CONFIG_PM + .resume = ata_scsi_device_resume, + .suspend = ata_scsi_device_suspend, ++#endif + }; + + static const struct ata_port_operations efar_ops = { +@@ -317,8 +319,10 @@ static struct pci_driver efar_pci_driver + .id_table = efar_pci_tbl, + .probe = efar_init_one, + .remove = ata_pci_remove_one, ++#ifdef CONFIG_PM + .suspend = ata_pci_device_suspend, + .resume = ata_pci_device_resume, ++#endif + }; + + static int __init efar_init(void) +--- linux-2.6.20.1.orig/drivers/ata/pata_hpt366.c ++++ linux-2.6.20.1/drivers/ata/pata_hpt366.c +@@ -338,8 +338,10 @@ static struct scsi_host_template hpt36x_ + .slave_configure = ata_scsi_slave_config, + .slave_destroy = ata_scsi_slave_destroy, + .bios_param = ata_std_bios_param, ++#ifdef CONFIG_PM + .resume = ata_scsi_device_resume, + .suspend = ata_scsi_device_suspend, ++#endif + }; + + /* +@@ -467,12 +469,13 @@ static int hpt36x_init_one(struct pci_de + return ata_pci_init_one(dev, port_info, 2); + } + ++#ifdef CONFIG_PM + static int hpt36x_reinit_one(struct pci_dev *dev) + { + hpt36x_init_chipset(dev); + return ata_pci_device_resume(dev); + } +- ++#endif + + static const struct pci_device_id hpt36x[] = { + { PCI_VDEVICE(TTI, PCI_DEVICE_ID_TTI_HPT366), }, +@@ -484,8 +487,10 @@ static struct pci_driver hpt36x_pci_driv + .id_table = hpt36x, + .probe = hpt36x_init_one, + .remove = ata_pci_remove_one, ++#ifdef CONFIG_PM + .suspend = ata_pci_device_suspend, + .resume = hpt36x_reinit_one, ++#endif + }; + + static int __init hpt36x_init(void) +--- linux-2.6.20.1.orig/drivers/ata/pata_hpt3x3.c ++++ linux-2.6.20.1/drivers/ata/pata_hpt3x3.c +@@ -119,8 +119,10 @@ static struct scsi_host_template hpt3x3_ + .slave_configure = ata_scsi_slave_config, + .slave_destroy = ata_scsi_slave_destroy, + .bios_param = ata_std_bios_param, ++#ifdef CONFIG_PM + .resume = ata_scsi_device_resume, + .suspend = ata_scsi_device_suspend, ++#endif + }; + + static struct ata_port_operations hpt3x3_port_ops = { +@@ -206,11 +208,13 @@ static int hpt3x3_init_one(struct pci_de + return ata_pci_init_one(dev, port_info, 2); + } + ++#ifdef CONFIG_PM + static int hpt3x3_reinit_one(struct pci_dev *dev) + { + hpt3x3_init_chipset(dev); + return ata_pci_device_resume(dev); + } ++#endif + + static const struct pci_device_id hpt3x3[] = { + { PCI_VDEVICE(TTI, PCI_DEVICE_ID_TTI_HPT343), }, +@@ -223,8 +227,10 @@ static struct pci_driver hpt3x3_pci_driv + .id_table = hpt3x3, + .probe = hpt3x3_init_one, + .remove = ata_pci_remove_one, ++#ifdef CONFIG_PM + .suspend = ata_pci_device_suspend, + .resume = hpt3x3_reinit_one, ++#endif + }; + + static int __init hpt3x3_init(void) +--- linux-2.6.20.1.orig/drivers/ata/pata_it821x.c ++++ linux-2.6.20.1/drivers/ata/pata_it821x.c +@@ -676,8 +676,10 @@ static struct scsi_host_template it821x_ + .slave_configure = ata_scsi_slave_config, + .slave_destroy = ata_scsi_slave_destroy, + .bios_param = ata_std_bios_param, ++#ifdef CONFIG_PM + .resume = ata_scsi_device_resume, + .suspend = ata_scsi_device_suspend, ++#endif + }; + + static struct ata_port_operations it821x_smart_port_ops = { +@@ -810,6 +812,7 @@ static int it821x_init_one(struct pci_de + return ata_pci_init_one(pdev, port_info, 2); + } + ++#ifdef CONFIG_PM + static int it821x_reinit_one(struct pci_dev *pdev) + { + /* Resume - turn raid back off if need be */ +@@ -817,6 +820,7 @@ static int it821x_reinit_one(struct pci_ + it821x_disable_raid(pdev); + return ata_pci_device_resume(pdev); + } ++#endif + + static const struct pci_device_id it821x[] = { + { PCI_VDEVICE(ITE, PCI_DEVICE_ID_ITE_8211), }, +@@ -830,8 +834,10 @@ static struct pci_driver it821x_pci_driv + .id_table = it821x, + .probe = it821x_init_one, + .remove = ata_pci_remove_one, ++#ifdef CONFIG_PM + .suspend = ata_pci_device_suspend, + .resume = it821x_reinit_one, ++#endif + }; + + static int __init it821x_init(void) +--- linux-2.6.20.1.orig/drivers/ata/pata_jmicron.c ++++ linux-2.6.20.1/drivers/ata/pata_jmicron.c +@@ -222,6 +222,7 @@ static int jmicron_init_one (struct pci_ + return ata_pci_init_one(pdev, port_info, 2); + } + ++#ifdef CONFIG_PM + static int jmicron_reinit_one(struct pci_dev *pdev) + { + u32 reg; +@@ -242,6 +243,7 @@ static int jmicron_reinit_one(struct pci + } + return ata_pci_device_resume(pdev); + } ++#endif + + static const struct pci_device_id jmicron_pci_tbl[] = { + { PCI_VDEVICE(JMICRON, PCI_DEVICE_ID_JMICRON_JMB361), 361}, +@@ -258,8 +260,10 @@ static struct pci_driver jmicron_pci_dri + .id_table = jmicron_pci_tbl, + .probe = jmicron_init_one, + .remove = ata_pci_remove_one, ++#ifdef CONFIG_PM + .suspend = ata_pci_device_suspend, + .resume = jmicron_reinit_one, ++#endif + }; + + static int __init jmicron_init(void) +--- linux-2.6.20.1.orig/drivers/ata/pata_marvell.c ++++ linux-2.6.20.1/drivers/ata/pata_marvell.c +@@ -103,8 +103,10 @@ static struct scsi_host_template marvell + .slave_destroy = ata_scsi_slave_destroy, + /* Use standard CHS mapping rules */ + .bios_param = ata_std_bios_param, ++#ifdef CONFIG_PM + .resume = ata_scsi_device_resume, + .suspend = ata_scsi_device_suspend, ++#endif + }; + + static const struct ata_port_operations marvell_ops = { +@@ -199,8 +201,10 @@ static struct pci_driver marvell_pci_dri + .id_table = marvell_pci_tbl, + .probe = marvell_init_one, + .remove = ata_pci_remove_one, ++#ifdef CONFIG_PM + .suspend = ata_pci_device_suspend, + .resume = ata_pci_device_resume, ++#endif + }; + + static int __init marvell_init(void) +--- linux-2.6.20.1.orig/drivers/ata/pata_mpiix.c ++++ linux-2.6.20.1/drivers/ata/pata_mpiix.c +@@ -167,8 +167,10 @@ static struct scsi_host_template mpiix_s + .slave_configure = ata_scsi_slave_config, + .slave_destroy = ata_scsi_slave_destroy, + .bios_param = ata_std_bios_param, ++#ifdef CONFIG_PM + .resume = ata_scsi_device_resume, + .suspend = ata_scsi_device_suspend, ++#endif + }; + + static struct ata_port_operations mpiix_port_ops = { +@@ -287,8 +289,10 @@ static struct pci_driver mpiix_pci_drive + .id_table = mpiix, + .probe = mpiix_init_one, + .remove = mpiix_remove_one, ++#ifdef CONFIG_PM + .suspend = ata_pci_device_suspend, + .resume = ata_pci_device_resume, ++#endif + }; + + static int __init mpiix_init(void) +--- linux-2.6.20.1.orig/drivers/ata/pata_netcell.c ++++ linux-2.6.20.1/drivers/ata/pata_netcell.c +@@ -63,8 +63,10 @@ static struct scsi_host_template netcell + .slave_destroy = ata_scsi_slave_destroy, + /* Use standard CHS mapping rules */ + .bios_param = ata_std_bios_param, ++#ifdef CONFIG_PM + .resume = ata_scsi_device_resume, + .suspend = ata_scsi_device_suspend, ++#endif + }; + + static const struct ata_port_operations netcell_ops = { +@@ -153,8 +155,10 @@ static struct pci_driver netcell_pci_dri + .id_table = netcell_pci_tbl, + .probe = netcell_init_one, + .remove = ata_pci_remove_one, ++#ifdef CONFIG_PM + .suspend = ata_pci_device_suspend, + .resume = ata_pci_device_resume, ++#endif + }; + + static int __init netcell_init(void) +--- linux-2.6.20.1.orig/drivers/ata/pata_ns87410.c ++++ linux-2.6.20.1/drivers/ata/pata_ns87410.c +@@ -157,8 +157,10 @@ static struct scsi_host_template ns87410 + .slave_configure = ata_scsi_slave_config, + .slave_destroy = ata_scsi_slave_destroy, + .bios_param = ata_std_bios_param, ++#ifdef CONFIG_PM + .resume = ata_scsi_device_resume, + .suspend = ata_scsi_device_suspend, ++#endif + }; + + static struct ata_port_operations ns87410_port_ops = { +@@ -212,8 +214,10 @@ static struct pci_driver ns87410_pci_dri + .id_table = ns87410, + .probe = ns87410_init_one, + .remove = ata_pci_remove_one, ++#ifdef CONFIG_PM + .suspend = ata_pci_device_suspend, + .resume = ata_pci_device_resume, ++#endif + }; + + static int __init ns87410_init(void) +--- linux-2.6.20.1.orig/drivers/ata/pata_oldpiix.c ++++ linux-2.6.20.1/drivers/ata/pata_oldpiix.c +@@ -232,8 +232,10 @@ static struct scsi_host_template oldpiix + .slave_configure = ata_scsi_slave_config, + .slave_destroy = ata_scsi_slave_destroy, + .bios_param = ata_std_bios_param, ++#ifdef CONFIG_PM + .resume = ata_scsi_device_resume, + .suspend = ata_scsi_device_suspend, ++#endif + }; + + static const struct ata_port_operations oldpiix_pata_ops = { +@@ -315,8 +317,10 @@ static struct pci_driver oldpiix_pci_dri + .id_table = oldpiix_pci_tbl, + .probe = oldpiix_init_one, + .remove = ata_pci_remove_one, ++#ifdef CONFIG_PM + .suspend = ata_pci_device_suspend, + .resume = ata_pci_device_resume, ++#endif + }; + + static int __init oldpiix_init(void) +--- linux-2.6.20.1.orig/drivers/ata/pata_opti.c ++++ linux-2.6.20.1/drivers/ata/pata_opti.c +@@ -179,8 +179,10 @@ static struct scsi_host_template opti_sh + .slave_configure = ata_scsi_slave_config, + .slave_destroy = ata_scsi_slave_destroy, + .bios_param = ata_std_bios_param, ++#ifdef CONFIG_PM + .resume = ata_scsi_device_resume, + .suspend = ata_scsi_device_suspend, ++#endif + }; + + static struct ata_port_operations opti_port_ops = { +@@ -244,8 +246,10 @@ static struct pci_driver opti_pci_driver + .id_table = opti, + .probe = opti_init_one, + .remove = ata_pci_remove_one, ++#ifdef CONFIG_PM + .suspend = ata_pci_device_suspend, + .resume = ata_pci_device_resume, ++#endif + }; + + static int __init opti_init(void) +--- linux-2.6.20.1.orig/drivers/ata/pata_optidma.c ++++ linux-2.6.20.1/drivers/ata/pata_optidma.c +@@ -360,8 +360,10 @@ static struct scsi_host_template optidma + .slave_configure = ata_scsi_slave_config, + .slave_destroy = ata_scsi_slave_destroy, + .bios_param = ata_std_bios_param, ++#ifdef CONFIG_PM + .resume = ata_scsi_device_resume, + .suspend = ata_scsi_device_suspend, ++#endif + }; + + static struct ata_port_operations optidma_port_ops = { +@@ -524,8 +526,10 @@ static struct pci_driver optidma_pci_dri + .id_table = optidma, + .probe = optidma_init_one, + .remove = ata_pci_remove_one, ++#ifdef CONFIG_PM + .suspend = ata_pci_device_suspend, + .resume = ata_pci_device_resume, ++#endif + }; + + static int __init optidma_init(void) +--- linux-2.6.20.1.orig/drivers/ata/pata_pdc202xx_old.c ++++ linux-2.6.20.1/drivers/ata/pata_pdc202xx_old.c +@@ -270,8 +270,10 @@ static struct scsi_host_template pdc202x + .slave_configure = ata_scsi_slave_config, + .slave_destroy = ata_scsi_slave_destroy, + .bios_param = ata_std_bios_param, ++#ifdef CONFIG_PM + .resume = ata_scsi_device_resume, + .suspend = ata_scsi_device_suspend, ++#endif + }; + + static struct ata_port_operations pdc2024x_port_ops = { +@@ -402,8 +404,10 @@ static struct pci_driver pdc202xx_pci_dr + .id_table = pdc202xx, + .probe = pdc202xx_init_one, + .remove = ata_pci_remove_one, ++#ifdef CONFIG_PM + .suspend = ata_pci_device_suspend, + .resume = ata_pci_device_resume, ++#endif + }; + + static int __init pdc202xx_init(void) +--- linux-2.6.20.1.orig/drivers/ata/pata_radisys.c ++++ linux-2.6.20.1/drivers/ata/pata_radisys.c +@@ -228,8 +228,10 @@ static struct scsi_host_template radisys + .slave_configure = ata_scsi_slave_config, + .slave_destroy = ata_scsi_slave_destroy, + .bios_param = ata_std_bios_param, ++#ifdef CONFIG_PM + .resume = ata_scsi_device_resume, + .suspend = ata_scsi_device_suspend, ++#endif + }; + + static const struct ata_port_operations radisys_pata_ops = { +@@ -312,8 +314,10 @@ static struct pci_driver radisys_pci_dri + .id_table = radisys_pci_tbl, + .probe = radisys_init_one, + .remove = ata_pci_remove_one, ++#ifdef CONFIG_PM + .suspend = ata_pci_device_suspend, + .resume = ata_pci_device_resume, ++#endif + }; + + static int __init radisys_init(void) +--- linux-2.6.20.1.orig/drivers/ata/pata_rz1000.c ++++ linux-2.6.20.1/drivers/ata/pata_rz1000.c +@@ -93,8 +93,10 @@ static struct scsi_host_template rz1000_ + .slave_configure = ata_scsi_slave_config, + .slave_destroy = ata_scsi_slave_destroy, + .bios_param = ata_std_bios_param, ++#ifdef CONFIG_PM + .resume = ata_scsi_device_resume, + .suspend = ata_scsi_device_suspend, ++#endif + }; + + static struct ata_port_operations rz1000_port_ops = { +@@ -177,6 +179,7 @@ static int rz1000_init_one (struct pci_d + return -ENODEV; + } + ++#ifdef CONFIG_PM + static int rz1000_reinit_one(struct pci_dev *pdev) + { + /* If this fails on resume (which is a "cant happen" case), we +@@ -185,6 +188,7 @@ static int rz1000_reinit_one(struct pci_ + panic("rz1000 fifo"); + return ata_pci_device_resume(pdev); + } ++#endif + + static const struct pci_device_id pata_rz1000[] = { + { PCI_VDEVICE(PCTECH, PCI_DEVICE_ID_PCTECH_RZ1000), }, +@@ -198,8 +202,10 @@ static struct pci_driver rz1000_pci_driv + .id_table = pata_rz1000, + .probe = rz1000_init_one, + .remove = ata_pci_remove_one, ++#ifdef CONFIG_PM + .suspend = ata_pci_device_suspend, + .resume = rz1000_reinit_one, ++#endif + }; + + static int __init rz1000_init(void) +--- linux-2.6.20.1.orig/drivers/ata/pata_sc1200.c ++++ linux-2.6.20.1/drivers/ata/pata_sc1200.c +@@ -194,8 +194,10 @@ static struct scsi_host_template sc1200_ + .slave_configure = ata_scsi_slave_config, + .slave_destroy = ata_scsi_slave_destroy, + .bios_param = ata_std_bios_param, ++#ifdef CONFIG_PM + .resume = ata_scsi_device_resume, + .suspend = ata_scsi_device_suspend, ++#endif + }; + + static struct ata_port_operations sc1200_port_ops = { +@@ -266,8 +268,10 @@ static struct pci_driver sc1200_pci_driv + .id_table = sc1200, + .probe = sc1200_init_one, + .remove = ata_pci_remove_one, ++#ifdef CONFIG_PM + .suspend = ata_pci_device_suspend, + .resume = ata_pci_device_resume, ++#endif + }; + + static int __init sc1200_init(void) +--- linux-2.6.20.1.orig/drivers/ata/pata_serverworks.c ++++ linux-2.6.20.1/drivers/ata/pata_serverworks.c +@@ -326,8 +326,10 @@ static struct scsi_host_template serverw + .slave_configure = ata_scsi_slave_config, + .slave_destroy = ata_scsi_slave_destroy, + .bios_param = ata_std_bios_param, ++#ifdef CONFIG_PM + .resume = ata_scsi_device_resume, + .suspend = ata_scsi_device_suspend, ++#endif + }; + + static struct ata_port_operations serverworks_osb4_port_ops = { +@@ -555,6 +557,7 @@ static int serverworks_init_one(struct p + return ata_pci_init_one(pdev, port_info, ports); + } + ++#ifdef CONFIG_PM + static int serverworks_reinit_one(struct pci_dev *pdev) + { + /* Force master latency timer to 64 PCI clocks */ +@@ -578,6 +581,7 @@ static int serverworks_reinit_one(struct + } + return ata_pci_device_resume(pdev); + } ++#endif + + static const struct pci_device_id serverworks[] = { + { PCI_VDEVICE(SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_OSB4IDE), 0}, +@@ -594,8 +598,10 @@ static struct pci_driver serverworks_pci + .id_table = serverworks, + .probe = serverworks_init_one, + .remove = ata_pci_remove_one, ++#ifdef CONFIG_PM + .suspend = ata_pci_device_suspend, + .resume = serverworks_reinit_one, ++#endif + }; + + static int __init serverworks_init(void) +--- linux-2.6.20.1.orig/drivers/ata/pata_sil680.c ++++ linux-2.6.20.1/drivers/ata/pata_sil680.c +@@ -371,11 +371,13 @@ static int sil680_init_one(struct pci_de + return ata_pci_init_one(pdev, port_info, 2); + } + ++#ifdef CONFIG_PM + static int sil680_reinit_one(struct pci_dev *pdev) + { + sil680_init_chip(pdev); + return ata_pci_device_resume(pdev); + } ++#endif + + static const struct pci_device_id sil680[] = { + { PCI_VDEVICE(CMD, PCI_DEVICE_ID_SII_680), }, +@@ -388,8 +390,10 @@ static struct pci_driver sil680_pci_driv + .id_table = sil680, + .probe = sil680_init_one, + .remove = ata_pci_remove_one, ++#ifdef CONFIG_PM + .suspend = ata_pci_device_suspend, + .resume = sil680_reinit_one, ++#endif + }; + + static int __init sil680_init(void) +--- linux-2.6.20.1.orig/drivers/ata/pata_sis.c ++++ linux-2.6.20.1/drivers/ata/pata_sis.c +@@ -546,8 +546,10 @@ static struct scsi_host_template sis_sht + .slave_configure = ata_scsi_slave_config, + .slave_destroy = ata_scsi_slave_destroy, + .bios_param = ata_std_bios_param, ++#ifdef CONFIG_PM + .resume = ata_scsi_device_resume, + .suspend = ata_scsi_device_suspend, ++#endif + }; + + static const struct ata_port_operations sis_133_ops = { +@@ -1001,8 +1003,10 @@ static struct pci_driver sis_pci_driver + .id_table = sis_pci_tbl, + .probe = sis_init_one, + .remove = ata_pci_remove_one, ++#ifdef CONFIG_PM + .suspend = ata_pci_device_suspend, + .resume = ata_pci_device_resume, ++#endif + }; + + static int __init sis_init(void) +--- linux-2.6.20.1.orig/drivers/ata/pata_triflex.c ++++ linux-2.6.20.1/drivers/ata/pata_triflex.c +@@ -193,8 +193,10 @@ static struct scsi_host_template triflex + .slave_configure = ata_scsi_slave_config, + .slave_destroy = ata_scsi_slave_destroy, + .bios_param = ata_std_bios_param, ++#ifdef CONFIG_PM + .resume = ata_scsi_device_resume, + .suspend = ata_scsi_device_suspend, ++#endif + }; + + static struct ata_port_operations triflex_port_ops = { +@@ -260,8 +262,10 @@ static struct pci_driver triflex_pci_dri + .id_table = triflex, + .probe = triflex_init_one, + .remove = ata_pci_remove_one, ++#ifdef CONFIG_PM + .suspend = ata_pci_device_suspend, + .resume = ata_pci_device_resume, ++#endif + }; + + static int __init triflex_init(void) +--- linux-2.6.20.1.orig/drivers/ata/pata_via.c ++++ linux-2.6.20.1/drivers/ata/pata_via.c +@@ -305,8 +305,10 @@ static struct scsi_host_template via_sht + .slave_configure = ata_scsi_slave_config, + .slave_destroy = ata_scsi_slave_destroy, + .bios_param = ata_std_bios_param, ++#ifdef CONFIG_PM + .resume = ata_scsi_device_resume, + .suspend = ata_scsi_device_suspend, ++#endif + }; + + static struct ata_port_operations via_port_ops = { +@@ -560,6 +562,7 @@ static int via_init_one(struct pci_dev * + return ata_pci_init_one(pdev, port_info, 2); + } + ++#ifdef CONFIG_PM + /** + * via_reinit_one - reinit after resume + * @pdev; PCI device +@@ -592,6 +595,7 @@ static int via_reinit_one(struct pci_dev + } + return ata_pci_device_resume(pdev); + } ++#endif + + static const struct pci_device_id via[] = { + { PCI_VDEVICE(VIA, PCI_DEVICE_ID_VIA_82C576_1), }, +@@ -607,8 +611,10 @@ static struct pci_driver via_pci_driver + .id_table = via, + .probe = via_init_one, + .remove = ata_pci_remove_one, ++#ifdef CONFIG_PM + .suspend = ata_pci_device_suspend, + .resume = via_reinit_one, ++#endif + }; + + static int __init via_init(void) +--- linux-2.6.20.1.orig/drivers/ata/sata_sil.c ++++ linux-2.6.20.1/drivers/ata/sata_sil.c +@@ -181,8 +181,10 @@ static struct scsi_host_template sil_sht + .slave_configure = ata_scsi_slave_config, + .slave_destroy = ata_scsi_slave_destroy, + .bios_param = ata_std_bios_param, ++#ifdef CONFIG_PM + .suspend = ata_scsi_device_suspend, + .resume = ata_scsi_device_resume, ++#endif + }; + + static const struct ata_port_operations sil_ops = { +--- linux-2.6.20.1.orig/drivers/ata/sata_sil24.c ++++ linux-2.6.20.1/drivers/ata/sata_sil24.c +@@ -386,8 +386,10 @@ static struct scsi_host_template sil24_s + .slave_configure = ata_scsi_slave_config, + .slave_destroy = ata_scsi_slave_destroy, + .bios_param = ata_std_bios_param, ++#ifdef CONFIG_PM + .suspend = ata_scsi_device_suspend, + .resume = ata_scsi_device_resume, ++#endif + }; + + static const struct ata_port_operations sil24_ops = { + +-- + +From gregkh@mini.kroah.org Wed Mar 7 09:06:18 2007 +Message-Id: <20070307170618.451785228@mini.kroah.org> +References: <20070307170123.677686080@mini.kroah.org> +User-Agent: quilt/0.45-1 +Date: Wed, 07 Mar 2007 09:02:25 -0800 +From: Greg KH +To: linux-kernel@vger.kernel.org, + stable@kernel.org +Cc: Justin Forbes , + Zwane Mwaikambo , + Theodore Ts'o , + Randy Dunlap , + Dave Jones , + Chuck Wolber , + Chris Wedgwood , + Michael Krufky , + Chuck Ebbert , + torvalds@linux-foundation.org, + akpm@linux-foundation.org, + alan@lxorguk.ukuu.org.uk, + Paul Mackerras +Subject: [patch 062/101] POWERPC: Fix performance monitor exception +Content-Disposition: inline; filename=powerpc-fix-performance-monitor-exception.patch +Content-Length: 2515 +Lines: 56 + + +From: Livio Soares + +To the issue: some point during 2.6.20 development, Paul Mackerras +introduced the "lazy IRQ disabling" patch (very cool work, BTW). +In that patch, the performance monitor unit exception was marked as +"maskable", in the sense that if interrupts were soft-disabled, that +exception could be ignored. This broke my PowerPC profiling code. +The symptom that I see is that a varying number of interrupts +(from 0 to $n$, typically closer to 0) get delivered, when, in +reality, it should always be very close to $n$. + +The issue stems from the way masking is being done. Masking in +this fashion seems to work well with the decrementer and external +interrupts, because they are raised again until "really" handled. +For the PMU, however, this does not apply (at least on my Xserver +machine with a 970FX processor). If the PMU exception is not handled, +it will _not_ be re-raised (at least on my machine). The documentation +states that the PMXE bit in MMCR0 is set to 0 when the PMU exception +is raised. However, software must re-set the bit to re-enable PMU +exceptions. If the exception is ignored (as currently) not only is +that interrupt lost, but because software does not re-set PMXE, the +PMU registers are "frozen" forever. + +[This patch means that performance monitor exceptions are taken and +handled even if irqs are off, as long as some other interrupt hasn't +come along and caused interrupts to be hard-disabled. In this sense +the PMU exception becomes like an NMI. The oprofile code for most +powerpc processors does nothing that is unsafe in an NMI context, but +the Cell oprofile code does a spin_lock_irqsave. However, that turns +out to be OK because Cell doesn't actually use the performance +monitor exception; performance monitor interrupts come in as a +regular interrupt on Cell, so will be disabled when irqs are off. + -- paulus.] + +From: Livio Soares +Signed-off-by: Paul Mackerras +Signed-off-by: Greg Kroah-Hartman + +--- + arch/powerpc/kernel/head_64.S | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- linux-2.6.20.1.orig/arch/powerpc/kernel/head_64.S ++++ linux-2.6.20.1/arch/powerpc/kernel/head_64.S +@@ -613,7 +613,7 @@ system_call_pSeries: + /*** pSeries interrupt support ***/ + + /* moved from 0xf00 */ +- MASKABLE_EXCEPTION_PSERIES(., performance_monitor) ++ STD_EXCEPTION_PSERIES(., performance_monitor) + + /* + * An interrupt came in while soft-disabled; clear EE in SRR1, + +-- + +From gregkh@mini.kroah.org Wed Mar 7 09:06:18 2007 +Message-Id: <20070307170618.580162123@mini.kroah.org> +References: <20070307170123.677686080@mini.kroah.org> +User-Agent: quilt/0.45-1 +Date: Wed, 07 Mar 2007 09:02:26 -0800 +From: Greg KH +To: linux-kernel@vger.kernel.org, + stable@kernel.org +Cc: Justin Forbes , + Zwane Mwaikambo , + Theodore Ts'o , + Randy Dunlap , + Dave Jones , + Chuck Wolber , + Chris Wedgwood , + Michael Krufky , + Chuck Ebbert , + torvalds@linux-foundation.org, + akpm@linux-foundation.org, + alan@lxorguk.ukuu.org.uk, + Jiri Kosina +Subject: [patch 063/101] HID: fix possible double-free on error path in hid parser +Content-Disposition: inline; filename=hid-fix-possible-double-free-on-error-path-in-hid-parser.patch +Content-Length: 1935 +Lines: 61 + + +From: Jiri Kosina + +HID: fix possible double-free on error path in hid parser + +Freeing of device->collection is properly done in hid_free_device() (as +this function is supposed to free all the device resources and could be +called from transport specific code, e.g. usb_hid_configure()). + +Remove all kfree() calls preceeding the hid_free_device() call. + +Signed-off-by: Jiri Kosina +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/hid/hid-core.c | 5 ----- + 1 file changed, 5 deletions(-) + +--- linux-2.6.20.1.orig/drivers/hid/hid-core.c ++++ linux-2.6.20.1/drivers/hid/hid-core.c +@@ -670,7 +670,6 @@ struct hid_device *hid_parse_report(__u8 + + if (item.format != HID_ITEM_FORMAT_SHORT) { + dbg("unexpected long global item"); +- kfree(device->collection); + hid_free_device(device); + kfree(parser); + return NULL; +@@ -679,7 +678,6 @@ struct hid_device *hid_parse_report(__u8 + if (dispatch_type[item.type](parser, &item)) { + dbg("item %u %u %u %u parsing failed\n", + item.format, (unsigned)item.size, (unsigned)item.type, (unsigned)item.tag); +- kfree(device->collection); + hid_free_device(device); + kfree(parser); + return NULL; +@@ -688,14 +686,12 @@ struct hid_device *hid_parse_report(__u8 + if (start == end) { + if (parser->collection_stack_ptr) { + dbg("unbalanced collection at end of report description"); +- kfree(device->collection); + hid_free_device(device); + kfree(parser); + return NULL; + } + if (parser->local.delimiter_depth) { + dbg("unbalanced delimiter at end of report description"); +- kfree(device->collection); + hid_free_device(device); + kfree(parser); + return NULL; +@@ -706,7 +702,6 @@ struct hid_device *hid_parse_report(__u8 + } + + dbg("item fetching failed at offset %d\n", (int)(end - start)); +- kfree(device->collection); + hid_free_device(device); + kfree(parser); + return NULL; + +-- + +From gregkh@mini.kroah.org Wed Mar 7 09:06:18 2007 +Message-Id: <20070307170618.770824570@mini.kroah.org> +References: <20070307170123.677686080@mini.kroah.org> +User-Agent: quilt/0.45-1 +Date: Wed, 07 Mar 2007 09:02:27 -0800 +From: Greg KH +To: linux-kernel@vger.kernel.org, + stable@kernel.org +Cc: Justin Forbes , + Zwane Mwaikambo , + Theodore Ts'o , + Randy Dunlap , + Dave Jones , + Chuck Wolber , + Chris Wedgwood , + Michael Krufky , + Chuck Ebbert , + torvalds@linux-foundation.org, + akpm@linux-foundation.org, + alan@lxorguk.ukuu.org.uk, + fabbione@ubuntu.com, + bunk@stusta.de, + "David S. Miller" +Subject: [patch 064/101] Fix interrupt probing on E450 sparc64 systems +Content-Disposition: inline; filename=fix-interrupt-probing-on-e450-sparc64-systems.patch +Content-Length: 2330 +Lines: 79 + +From: David Miller + +[SPARC64]: Fix PCI interrupts on E450 et al. + +When the PCI controller OBP node lacks an interrupt-map +and interrupt-map-mask property, we need to form the +INO by hand. The PCI swizzle logic was not doing that +properly. + +This was a regression added by the of_device code. + +Signed-off-by: David S. Miller +Signed-off-by: Greg Kroah-Hartman + +--- + arch/sparc64/kernel/of_device.c | 40 ++++++++++++++++++++++++++++++++++++++-- + 1 file changed, 38 insertions(+), 2 deletions(-) + +--- linux-2.6.20.1.orig/arch/sparc64/kernel/of_device.c ++++ linux-2.6.20.1/arch/sparc64/kernel/of_device.c +@@ -708,7 +708,7 @@ static unsigned int __init pci_irq_swizz + unsigned int irq) + { + struct linux_prom_pci_registers *regs; +- unsigned int devfn, slot, ret; ++ unsigned int bus, devfn, slot, ret; + + if (irq < 1 || irq > 4) + return irq; +@@ -717,10 +717,46 @@ static unsigned int __init pci_irq_swizz + if (!regs) + return irq; + ++ bus = (regs->phys_hi >> 16) & 0xff; + devfn = (regs->phys_hi >> 8) & 0xff; + slot = (devfn >> 3) & 0x1f; + +- ret = ((irq - 1 + (slot & 3)) & 3) + 1; ++ if (pp->irq_trans) { ++ /* Derived from Table 8-3, U2P User's Manual. This branch ++ * is handling a PCI controller that lacks a proper set of ++ * interrupt-map and interrupt-map-mask properties. The ++ * Ultra-E450 is one example. ++ * ++ * The bit layout is BSSLL, where: ++ * B: 0 on bus A, 1 on bus B ++ * D: 2-bit slot number, derived from PCI device number as ++ * (dev - 1) for bus A, or (dev - 2) for bus B ++ * L: 2-bit line number ++ * ++ * Actually, more "portable" way to calculate the funky ++ * slot number is to subtract pbm->pci_first_slot from the ++ * device number, and that's exactly what the pre-OF ++ * sparc64 code did, but we're building this stuff generically ++ * using the OBP tree, not in the PCI controller layer. ++ */ ++ if (bus & 0x80) { ++ /* PBM-A */ ++ bus = 0x00; ++ slot = (slot - 1) << 2; ++ } else { ++ /* PBM-B */ ++ bus = 0x10; ++ slot = (slot - 2) << 2; ++ } ++ irq -= 1; ++ ++ ret = (bus | slot | irq); ++ } else { ++ /* Going through a PCI-PCI bridge that lacks a set of ++ * interrupt-map and interrupt-map-mask properties. ++ */ ++ ret = ((irq - 1 + (slot & 3)) & 3) + 1; ++ } + + return ret; + } + +-- + +From gregkh@mini.kroah.org Wed Mar 7 09:06:18 2007 +Message-Id: <20070307170618.846350628@mini.kroah.org> +References: <20070307170123.677686080@mini.kroah.org> +User-Agent: quilt/0.45-1 +Date: Wed, 07 Mar 2007 09:02:28 -0800 +From: Greg KH +To: linux-kernel@vger.kernel.org, + stable@kernel.org +Cc: Justin Forbes , + Zwane Mwaikambo , + Theodore Ts'o , + Randy Dunlap , + Dave Jones , + Chuck Wolber , + Chris Wedgwood , + Michael Krufky , + Chuck Ebbert , + torvalds@linux-foundation.org, + akpm@linux-foundation.org, + alan@lxorguk.ukuu.org.uk, + bunk@stusta.de, + "David S. Miller" +Subject: [patch 065/101] Fix xfrm_add_sa_expire() return value +Content-Disposition: inline; filename=fix-xfrm_add_sa_expire-return-value.patch +Content-Length: 1154 +Lines: 43 + +From: David Miller + +[XFRM] xfrm_user: Fix return values of xfrm_add_sa_expire. + +As noted by Kent Yoder, this function will always return an +error. Make sure it returns zero on success. + +Signed-off-by: David S. Miller +Signed-off-by: Greg Kroah-Hartman + +--- + net/xfrm/xfrm_user.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +--- linux-2.6.20.1.orig/net/xfrm/xfrm_user.c ++++ linux-2.6.20.1/net/xfrm/xfrm_user.c +@@ -1557,14 +1557,13 @@ static int xfrm_add_sa_expire(struct sk_ + struct xfrm_usersa_info *p = &ue->state; + + x = xfrm_state_lookup(&p->id.daddr, p->id.spi, p->id.proto, p->family); +- err = -ENOENT; + ++ err = -ENOENT; + if (x == NULL) + return err; + +- err = -EINVAL; +- + spin_lock_bh(&x->lock); ++ err = -EINVAL; + if (x->km.state != XFRM_STATE_VALID) + goto out; + km_state_expired(x, ue->hard, current->pid); +@@ -1574,6 +1573,7 @@ static int xfrm_add_sa_expire(struct sk_ + xfrm_audit_log(NETLINK_CB(skb).loginuid, NETLINK_CB(skb).sid, + AUDIT_MAC_IPSEC_DELSA, 1, NULL, x); + } ++ err = 0; + out: + spin_unlock_bh(&x->lock); + xfrm_state_put(x); + +-- + +From gregkh@mini.kroah.org Wed Mar 7 09:06:19 2007 +Message-Id: <20070307170618.981055421@mini.kroah.org> +References: <20070307170123.677686080@mini.kroah.org> +User-Agent: quilt/0.45-1 +Date: Wed, 07 Mar 2007 09:02:29 -0800 +From: Greg KH +To: linux-kernel@vger.kernel.org, + stable@kernel.org +Cc: Justin Forbes , + Zwane Mwaikambo , + Theodore Ts'o , + Randy Dunlap , + Dave Jones , + Chuck Wolber , + Chris Wedgwood , + Michael Krufky , + Chuck Ebbert , + torvalds@linux-foundation.org, + akpm@linux-foundation.org, + alan@lxorguk.ukuu.org.uk, + bunk@stusta.de, + Arnaldo Carvalho de Melo , + "David S. Miller" +Subject: [patch 066/101] Fix skb data reallocation handling in IPSEC +Content-Disposition: inline; filename=fix-skb-data-reallocation-handling-in-ipsec.patch +Content-Length: 919 +Lines: 28 + +From: Arnaldo Carvalho de Melo + +[XFRM_TUNNEL]: Reload header pointer after pskb_may_pull/pskb_expand_head + +Please consider applying, this was found on your latest +net-2.6 tree while playing around with that ip_hdr() + turn +skb->nh/h/mac pointers as offsets on 64 bits idea :-) + +Signed-off-by: Arnaldo Carvalho de Melo +Signed-off-by: David S. Miller +Signed-off-by: Greg Kroah-Hartman + +--- + net/ipv4/xfrm4_mode_tunnel.c | 1 + + 1 file changed, 1 insertion(+) + +--- linux-2.6.20.1.orig/net/ipv4/xfrm4_mode_tunnel.c ++++ linux-2.6.20.1/net/ipv4/xfrm4_mode_tunnel.c +@@ -84,6 +84,7 @@ static int xfrm4_tunnel_input(struct xfr + (err = pskb_expand_head(skb, 0, 0, GFP_ATOMIC))) + goto out; + ++ iph = skb->nh.iph; + if (x->props.flags & XFRM_STATE_DECAP_DSCP) + ipv4_copy_dscp(iph, skb->h.ipiph); + if (!(x->props.flags & XFRM_STATE_NOECN)) + +-- + +From gregkh@mini.kroah.org Wed Mar 7 09:06:19 2007 +Message-Id: <20070307170619.115652657@mini.kroah.org> +References: <20070307170123.677686080@mini.kroah.org> +User-Agent: quilt/0.45-1 +Date: Wed, 07 Mar 2007 09:02:30 -0800 +From: Greg KH +To: linux-kernel@vger.kernel.org, + stable@kernel.org +Cc: Justin Forbes , + Zwane Mwaikambo , + Theodore Ts'o , + Randy Dunlap , + Dave Jones , + Chuck Wolber , + Chris Wedgwood , + Michael Krufky , + Chuck Ebbert , + torvalds@linux-foundation.org, + akpm@linux-foundation.org, + alan@lxorguk.ukuu.org.uk, + bunk@stusta.de, + "David S. Miller" +Subject: [patch 067/101] Fix %100 cpu spinning on sparc64 +Content-Disposition: inline; filename=fix-100-cpu-spinning-on-sparc64.patch +Content-Length: 1298 +Lines: 52 + +From: David Miller + +[SPARC64] bbc_i2c: Fix kenvctrld eating %100 cpu. + +Based almost entirely upon a patch by Joerg Friedrich + +Signed-off-by: David S. Miller + +--- + drivers/sbus/char/bbc_i2c.c | 15 ++++++++------- + 1 file changed, 8 insertions(+), 7 deletions(-) + +--- linux-2.6.20.1.orig/drivers/sbus/char/bbc_i2c.c ++++ linux-2.6.20.1/drivers/sbus/char/bbc_i2c.c +@@ -187,19 +187,20 @@ static int wait_for_pin(struct bbc_i2c_b + bp->waiting = 1; + add_wait_queue(&bp->wq, &wait); + while (limit-- > 0) { +- u8 val; ++ unsigned long val; + +- set_current_state(TASK_INTERRUPTIBLE); +- *status = val = readb(bp->i2c_control_regs + 0); +- if ((val & I2C_PCF_PIN) == 0) { ++ val = wait_event_interruptible_timeout( ++ bp->wq, ++ (((*status = readb(bp->i2c_control_regs + 0)) ++ & I2C_PCF_PIN) == 0), ++ msecs_to_jiffies(250)); ++ if (val > 0) { + ret = 0; + break; + } +- msleep_interruptible(250); + } + remove_wait_queue(&bp->wq, &wait); + bp->waiting = 0; +- current->state = TASK_RUNNING; + + return ret; + } +@@ -340,7 +341,7 @@ static irqreturn_t bbc_i2c_interrupt(int + */ + if (bp->waiting && + !(readb(bp->i2c_control_regs + 0x0) & I2C_PCF_PIN)) +- wake_up(&bp->wq); ++ wake_up_interruptible(&bp->wq); + + return IRQ_HANDLED; + } + +-- + +From gregkh@mini.kroah.org Wed Mar 7 09:06:19 2007 +Message-Id: <20070307170619.241029171@mini.kroah.org> +References: <20070307170123.677686080@mini.kroah.org> +User-Agent: quilt/0.45-1 +Date: Wed, 07 Mar 2007 09:02:31 -0800 +From: Greg KH +To: linux-kernel@vger.kernel.org, + stable@kernel.org +Cc: Justin Forbes , + Zwane Mwaikambo , + Theodore Ts'o , + Randy Dunlap , + Dave Jones , + Chuck Wolber , + Chris Wedgwood , + Michael Krufky , + Chuck Ebbert , + torvalds@linux-foundation.org, + akpm@linux-foundation.org, + alan@lxorguk.ukuu.org.uk, + bunk@stusta.de, + "David S. Miller" +Subject: [patch 068/101] Fix TCP MD5 locking. +Content-Disposition: inline; filename=fix-tcp-md5-locking.patch +Content-Length: 2630 +Lines: 94 + +From: David Miller + +[TCP]: Fix MD5 signature pool locking. + +The locking calls assumed that these code paths were only +invoked in software interrupt context, but that isn't true. + +Therefore we need to use spin_{lock,unlock}_bh() throughout. + +Signed-off-by: David S. Miller +Signed-off-by: Greg Kroah-Hartman + +--- + net/ipv4/tcp.c | 24 ++++++++++++------------ + 1 file changed, 12 insertions(+), 12 deletions(-) + +--- linux-2.6.20.1.orig/net/ipv4/tcp.c ++++ linux-2.6.20.1/net/ipv4/tcp.c +@@ -2266,12 +2266,12 @@ void tcp_free_md5sig_pool(void) + { + struct tcp_md5sig_pool **pool = NULL; + +- spin_lock(&tcp_md5sig_pool_lock); ++ spin_lock_bh(&tcp_md5sig_pool_lock); + if (--tcp_md5sig_users == 0) { + pool = tcp_md5sig_pool; + tcp_md5sig_pool = NULL; + } +- spin_unlock(&tcp_md5sig_pool_lock); ++ spin_unlock_bh(&tcp_md5sig_pool_lock); + if (pool) + __tcp_free_md5sig_pool(pool); + } +@@ -2314,36 +2314,36 @@ struct tcp_md5sig_pool **tcp_alloc_md5si + int alloc = 0; + + retry: +- spin_lock(&tcp_md5sig_pool_lock); ++ spin_lock_bh(&tcp_md5sig_pool_lock); + pool = tcp_md5sig_pool; + if (tcp_md5sig_users++ == 0) { + alloc = 1; +- spin_unlock(&tcp_md5sig_pool_lock); ++ spin_unlock_bh(&tcp_md5sig_pool_lock); + } else if (!pool) { + tcp_md5sig_users--; +- spin_unlock(&tcp_md5sig_pool_lock); ++ spin_unlock_bh(&tcp_md5sig_pool_lock); + cpu_relax(); + goto retry; + } else +- spin_unlock(&tcp_md5sig_pool_lock); ++ spin_unlock_bh(&tcp_md5sig_pool_lock); + + if (alloc) { + /* we cannot hold spinlock here because this may sleep. */ + struct tcp_md5sig_pool **p = __tcp_alloc_md5sig_pool(); +- spin_lock(&tcp_md5sig_pool_lock); ++ spin_lock_bh(&tcp_md5sig_pool_lock); + if (!p) { + tcp_md5sig_users--; +- spin_unlock(&tcp_md5sig_pool_lock); ++ spin_unlock_bh(&tcp_md5sig_pool_lock); + return NULL; + } + pool = tcp_md5sig_pool; + if (pool) { + /* oops, it has already been assigned. */ +- spin_unlock(&tcp_md5sig_pool_lock); ++ spin_unlock_bh(&tcp_md5sig_pool_lock); + __tcp_free_md5sig_pool(p); + } else { + tcp_md5sig_pool = pool = p; +- spin_unlock(&tcp_md5sig_pool_lock); ++ spin_unlock_bh(&tcp_md5sig_pool_lock); + } + } + return pool; +@@ -2354,11 +2354,11 @@ EXPORT_SYMBOL(tcp_alloc_md5sig_pool); + struct tcp_md5sig_pool *__tcp_get_md5sig_pool(int cpu) + { + struct tcp_md5sig_pool **p; +- spin_lock(&tcp_md5sig_pool_lock); ++ spin_lock_bh(&tcp_md5sig_pool_lock); + p = tcp_md5sig_pool; + if (p) + tcp_md5sig_users++; +- spin_unlock(&tcp_md5sig_pool_lock); ++ spin_unlock_bh(&tcp_md5sig_pool_lock); + return (p ? *per_cpu_ptr(p, cpu) : NULL); + } + + +-- + +From gregkh@mini.kroah.org Wed Mar 7 09:06:19 2007 +Message-Id: <20070307170619.369558320@mini.kroah.org> +References: <20070307170123.677686080@mini.kroah.org> +User-Agent: quilt/0.45-1 +Date: Wed, 07 Mar 2007 09:02:32 -0800 +From: Greg KH +To: linux-kernel@vger.kernel.org, + stable@kernel.org +Cc: Justin Forbes , + Zwane Mwaikambo , + Theodore Ts'o , + Randy Dunlap , + Dave Jones , + Chuck Wolber , + Chris Wedgwood , + Michael Krufky , + Chuck Ebbert , + torvalds@linux-foundation.org, + akpm@linux-foundation.org, + alan@lxorguk.ukuu.org.uk, + bunk@stusta.de, + Michal Wrobel , + "David S. Miller" +Subject: [patch 069/101] Dont add anycast reference to device multiple times +Content-Disposition: inline; filename=don-t-add-anycast-reference-to-device-multiple-times.patch +Content-Length: 893 +Lines: 30 + +From: Michal Wrobel + +[IPV6]: anycast refcnt fix + +This patch fixes a bug in Linux IPv6 stack which caused anycast address +to be added to a device prior DAD has been completed. This led to +incorrect reference count which resulted in infinite wait for +unregister_netdevice completion on interface removal. + +Signed-off-by: Michal Wrobel +Signed-off-by: David S. Miller +Signed-off-by: Greg Kroah-Hartman + +--- + net/ipv6/addrconf.c | 2 ++ + 1 file changed, 2 insertions(+) + +--- linux-2.6.20.1.orig/net/ipv6/addrconf.c ++++ linux-2.6.20.1/net/ipv6/addrconf.c +@@ -469,6 +469,8 @@ static void dev_forward_change(struct in + ipv6_dev_mc_dec(dev, &addr); + } + for (ifa=idev->addr_list; ifa; ifa=ifa->if_next) { ++ if (ifa->flags&IFA_F_TENTATIVE) ++ continue; + if (idev->cnf.forwarding) + addrconf_join_anycast(ifa); + else + +-- + +From gregkh@mini.kroah.org Wed Mar 7 09:06:19 2007 +Message-Id: <20070307170619.497047671@mini.kroah.org> +References: <20070307170123.677686080@mini.kroah.org> +User-Agent: quilt/0.45-1 +Date: Wed, 07 Mar 2007 09:02:33 -0800 +From: Greg KH +To: linux-kernel@vger.kernel.org, + stable@kernel.org +Cc: Justin Forbes , + Zwane Mwaikambo , + Theodore Ts'o , + Randy Dunlap , + Dave Jones , + Chuck Wolber , + Chris Wedgwood , + Michael Krufky , + Chuck Ebbert , + torvalds@linux-foundation.org, + akpm@linux-foundation.org, + alan@lxorguk.ukuu.org.uk, + bunk@stusta.de, + "David S. Miller" +Subject: [patch 070/101] Fix anycast procfs device leak +Content-Disposition: inline; filename=fix-anycast-procfs-device-leak.patch +Content-Length: 790 +Lines: 30 + +From: David Stevens + +[IPV6]: /proc/net/anycast6 unbalanced inet6_dev refcnt + +From: David Stevens + +Reading /proc/net/anycast6 when there is no anycast address +on an interface results in an ever-increasing inet6_dev reference +count, as well as a reference to the netdevice you can't get rid of. + +From: David Stevens +Signed-off-by: David S. Miller +Signed-off-by: Greg Kroah-Hartman + +--- + net/ipv6/anycast.c | 1 + + 1 file changed, 1 insertion(+) + +--- linux-2.6.20.1.orig/net/ipv6/anycast.c ++++ linux-2.6.20.1/net/ipv6/anycast.c +@@ -462,6 +462,7 @@ static inline struct ifacaddr6 *ac6_get_ + break; + } + read_unlock_bh(&idev->lock); ++ in6_dev_put(idev); + } + return im; + } + +-- + +From gregkh@mini.kroah.org Wed Mar 7 09:06:19 2007 +Message-Id: <20070307170619.624623906@mini.kroah.org> +References: <20070307170123.677686080@mini.kroah.org> +User-Agent: quilt/0.45-1 +Date: Wed, 07 Mar 2007 09:02:34 -0800 +From: Greg KH +To: linux-kernel@vger.kernel.org, + stable@kernel.org +Cc: Justin Forbes , + Zwane Mwaikambo , + Theodore Ts'o , + Randy Dunlap , + Dave Jones , + Chuck Wolber , + Chris Wedgwood , + Michael Krufky , + Chuck Ebbert , + torvalds@linux-foundation.org, + akpm@linux-foundation.org, + alan@lxorguk.ukuu.org.uk, + =?ISO-8859-15?q?Micha=C5=82=20Miros=C5=82aw?= +Subject: [patch 071/101] Fix reference counting (memory leak) problem in __nfulnl_send() and callers related to packet queueing. +Content-Disposition: inline; filename=nfnetlink_log_refcounting_fix.patch.patch +Content-Length: 1545 +Lines: 54 + +Signed-off-by: Michał Mirosław +Signed-off-by: Greg Kroah-Hartman + +--- + net/netfilter/nfnetlink_log.c | 15 ++++++++++++--- + 1 file changed, 12 insertions(+), 3 deletions(-) + +--- linux-2.6.20.1.orig/net/netfilter/nfnetlink_log.c ++++ linux-2.6.20.1/net/netfilter/nfnetlink_log.c +@@ -217,6 +217,11 @@ _instance_destroy2(struct nfulnl_instanc + + spin_lock_bh(&inst->lock); + if (inst->skb) { ++ /* timer "holds" one reference (we have one more) */ ++ if (timer_pending(&inst->timer)) { ++ del_timer(&inst->timer); ++ instance_put(inst); ++ } + if (inst->qlen) + __nfulnl_send(inst); + if (inst->skb) { +@@ -363,9 +368,6 @@ __nfulnl_send(struct nfulnl_instance *in + { + int status; + +- if (timer_pending(&inst->timer)) +- del_timer(&inst->timer); +- + if (!inst->skb) + return 0; + +@@ -392,6 +394,8 @@ static void nfulnl_timer(unsigned long d + UDEBUG("timer function called, flushing buffer\n"); + + spin_lock_bh(&inst->lock); ++ if (timer_pending(&inst->timer)) /* is it always true or false here? */ ++ del_timer(&inst->timer); + __nfulnl_send(inst); + instance_put(inst); + spin_unlock_bh(&inst->lock); +@@ -689,6 +693,11 @@ nfulnl_log_packet(unsigned int pf, + * enough room in the skb left. flush to userspace. */ + UDEBUG("flushing old skb\n"); + ++ /* timer "holds" one reference (we have another one) */ ++ if (timer_pending(&inst->timer)) { ++ del_timer(&inst->timer); ++ instance_put(inst); ++ } + __nfulnl_send(inst); + + if (!(inst->skb = nfulnl_alloc_skb(nlbufsiz, size))) { + +-- + +From gregkh@mini.kroah.org Wed Mar 7 09:06:19 2007 +Message-Id: <20070307170619.802814659@mini.kroah.org> +References: <20070307170123.677686080@mini.kroah.org> +User-Agent: quilt/0.45-1 +Date: Wed, 07 Mar 2007 09:02:35 -0800 +From: Greg KH +To: linux-kernel@vger.kernel.org, + stable@kernel.org +Cc: Justin Forbes , + Zwane Mwaikambo , + Theodore Ts'o , + Randy Dunlap , + Dave Jones , + Chuck Wolber , + Chris Wedgwood , + Michael Krufky , + Chuck Ebbert , + torvalds@linux-foundation.org, + akpm@linux-foundation.org, + alan@lxorguk.ukuu.org.uk, + Neil Brown +Subject: [patch 072/101] export blk_recount_segments +Content-Disposition: inline; filename=md_md5_6_bio_too_big_fix_fix.patch +Content-Length: 894 +Lines: 31 + +On Monday February 12, marcm@liquid-nexus.net wrote: +> > +> > Thanks for the quick response Neil unfortunately the kernel doesn't build with +> > this patch due to a missing symbol: +> > +> > WARNING: "blk_recount_segments" [drivers/md/raid456.ko] undefined! +> > +> > Is that in another file that needs patching or within raid5.c? + +Yes. I keep forgetting about that bit. Sorry. + +Signed-off-by: Neil Brown +Signed-off-by: Greg Kroah-Hartman + +--- + block/ll_rw_blk.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- linux-2.6.20.1.orig/block/ll_rw_blk.c ++++ linux-2.6.20.1/block/ll_rw_blk.c +@@ -1264,7 +1264,7 @@ new_hw_segment: + bio->bi_hw_segments = nr_hw_segs; + bio->bi_flags |= (1 << BIO_SEG_VALID); + } +- ++EXPORT_SYMBOL(blk_recount_segments); + + static int blk_phys_contig_segment(request_queue_t *q, struct bio *bio, + struct bio *nxt) + +-- + +From gregkh@mini.kroah.org Wed Mar 7 09:06:19 2007 +Message-Id: <20070307170619.877060109@mini.kroah.org> +References: <20070307170123.677686080@mini.kroah.org> +User-Agent: quilt/0.45-1 +Date: Wed, 07 Mar 2007 09:02:36 -0800 +From: Greg KH +To: linux-kernel@vger.kernel.org, + stable@kernel.org +Cc: Justin Forbes , + Zwane Mwaikambo , + Theodore Ts'o , + Randy Dunlap , + Dave Jones , + Chuck Wolber , + Chris Wedgwood , + Michael Krufky , + Chuck Ebbert , + torvalds@linux-foundation.org, + akpm@linux-foundation.org, + alan@lxorguk.ukuu.org.uk, + Ayaz Abdulla , + Jeff Garzik +Subject: [patch 073/101] forcedeth: disable msix +Content-Disposition: inline; filename=forcedeth-disable-msix.patch +Content-Length: 749 +Lines: 29 + +From: Ayaz Abdulla + +forcedeth: disable msix + +There seems to be an issue when both MSI-X is enabled and NAPI is +configured. This patch disables MSI-X until the issue is root caused. + +Signed-off-by: Ayaz Abdulla +Signed-off-by: Jeff Garzik +Cc: Chuck Ebbert +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/net/forcedeth.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- linux-2.6.20.1.orig/drivers/net/forcedeth.c ++++ linux-2.6.20.1/drivers/net/forcedeth.c +@@ -825,7 +825,7 @@ enum { + NV_MSIX_INT_DISABLED, + NV_MSIX_INT_ENABLED + }; +-static int msix = NV_MSIX_INT_ENABLED; ++static int msix = NV_MSIX_INT_DISABLED; + + /* + * DMA 64bit + +-- + +From gregkh@mini.kroah.org Wed Mar 7 09:06:20 2007 +Message-Id: <20070307170620.004428216@mini.kroah.org> +References: <20070307170123.677686080@mini.kroah.org> +User-Agent: quilt/0.45-1 +Date: Wed, 07 Mar 2007 09:02:37 -0800 +From: Greg KH +To: linux-kernel@vger.kernel.org, + stable@kernel.org +Cc: Justin Forbes , + Zwane Mwaikambo , + Theodore Ts'o , + Randy Dunlap , + Dave Jones , + Chuck Wolber , + Chris Wedgwood , + Michael Krufky , + Chuck Ebbert , + torvalds@linux-foundation.org, + akpm@linux-foundation.org, + alan@lxorguk.ukuu.org.uk, + Aristeu Sergio Rozanski Filho , + "H. Peter Anvin" +Subject: [patch 074/101] tty_io: fix race in master pty close/slave pty close path +Content-Disposition: inline; filename=tty_io-fix-race-in-master-pty-close-slave-pty-close-path.patch +Content-Length: 5658 +Lines: 146 + +From: Aristeu Sergio Rozanski Filho + +[PATCH] tty_io: fix race in master pty close/slave pty close path + +This patch fixes a possible race that leads to double freeing an idr index. + When the master begin to close, release_dev() is called and then +pty_close() is called: + + if (tty->driver->close) + tty->driver->close(tty, filp); + +This is done without helding any locks other than BKL. Inside pty_close(), +being a master close, the devpts entry will be removed: + +#ifdef CONFIG_UNIX98_PTYS + if (tty->driver == ptm_driver) + devpts_pty_kill(tty->index); +#endif + +But devpts_pty_kill() will call get_node() that may sleep while waiting for +&devpts_root->d_inode->i_sem. When this happens and the slave is being +opened, tty_open() just found the driver and index: + + driver = get_tty_driver(device, &index); + if (!driver) { + mutex_unlock(&tty_mutex); + return -ENODEV; + } + +This part of the code is already protected under tty_mute. The problem is +that the slave close already got an index. Then init_dev() is called and +blocks waiting for the same &devpts_root->d_inode->i_sem. + +When the master close resumes, it removes the devpts entry, and the +relation between idr index and the tty is gone. The master then sleeps +waiting for the tty_mutex on release_dev(). + +Slave open resumes and found no tty for that index. As result, a NULL tty +is returned and init_dev() doesn't flow to fast_track: + + /* check whether we're reopening an existing tty */ + if (driver->flags & TTY_DRIVER_DEVPTS_MEM) { + tty = devpts_get_tty(idx); + if (tty && driver->subtype == PTY_TYPE_MASTER) + tty = tty->link; + } else { + tty = driver->ttys[idx]; + } + if (tty) goto fast_track; + +The result of this, is that a new tty will be created and init_dev() returns +sucessfull. After returning, tty_mutex is dropped and master close may resume. + +Master close finds it's the only use and both sides are closing, then releases +the tty and the index. At this point, the idr index is free, but slave still +has it. + +Slave open then calls pty_open() and finds that tty->link->count is 0, +because there's no master and returns error. Then tty_open() calls +release_dev() which executes without any warning, as it was a case of last +slave close when the master is already closed (master->count == 0, +slave->count == 1). The tty is then released with the already released idr +index. + +This normally would only issue a warning on idr_remove() but in case of a +customer's critical application, it's never too simple: + +thread1: opens master, gets index X +thread1: begin closing master +thread2: begin opening slave with index X +thread1: finishes closing master, index X released +thread3: opens master, gets index X, just released +thread2: fails opening slave, releases index X <---- +thread4: opens master, gets index X, init_dev() then find an already in use + and healthy tty and fails + +If no more indexes are released, ptmx_open() will keep failing, as the +first free index available is X, and it will make init_dev() fail because +you're trying to "reopen a master" which isn't valid. + +The patch notices when this race happens and make init_dev() fail +imediately. The init_dev() function is called with tty_mutex held, so it's +safe to continue with tty till the end of function because release_dev() +won't make any further changes without grabbing the tty_mutex. + +Without the patch, on some machines it's possible get easily idr warnings +like this one: + +idr_remove called for id=15 which is not allocated. + [] idr_remove+0x139/0x170 + [] release_mem+0x182/0x230 + [] release_dev+0x4b7/0x700 + [] tty_ldisc_enable+0x27/0x30 + [] init_dev+0x254/0x580 + [] check_tty_count+0x14/0xb0 + [] tty_open+0x1c5/0x340 + [] tty_open+0x0/0x340 + [] chrdev_open+0xaf/0x180 + [] open_namei+0x8c/0x760 + [] chrdev_open+0x0/0x180 + [] __dentry_open+0xc9/0x210 + [] do_filp_open+0x5c/0x70 + [] get_unused_fd+0x61/0xd0 + [] do_sys_open+0x53/0x100 + [] sys_open+0x27/0x30 + [] syscall_call+0x7/0xb + +using this test application available on: + http://www.ruivo.org/~aris/pty_sodomizer.c + +Signed-off-by: Aristeu Sergio Rozanski Filho +Cc: "H. Peter Anvin" +Cc: Chuck Ebbert +Signed-off-by: Andrew Morton +Signed-off-by: Linus Torvalds +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/char/tty_io.c | 14 ++++++++++++++ + 1 file changed, 14 insertions(+) + +--- linux-2.6.20.1.orig/drivers/char/tty_io.c ++++ linux-2.6.20.1/drivers/char/tty_io.c +@@ -1891,6 +1891,20 @@ static int init_dev(struct tty_driver *d + /* check whether we're reopening an existing tty */ + if (driver->flags & TTY_DRIVER_DEVPTS_MEM) { + tty = devpts_get_tty(idx); ++ /* ++ * If we don't have a tty here on a slave open, it's because ++ * the master already started the close process and there's ++ * no relation between devpts file and tty anymore. ++ */ ++ if (!tty && driver->subtype == PTY_TYPE_SLAVE) { ++ retval = -EIO; ++ goto end_init; ++ } ++ /* ++ * It's safe from now on because init_dev() is called with ++ * tty_mutex held and release_dev() won't change tty->count ++ * or tty->flags without having to grab tty_mutex ++ */ + if (tty && driver->subtype == PTY_TYPE_MASTER) + tty = tty->link; + } else { + +-- + +From gregkh@mini.kroah.org Wed Mar 7 09:06:20 2007 +Message-Id: <20070307170620.142747433@mini.kroah.org> +References: <20070307170123.677686080@mini.kroah.org> +User-Agent: quilt/0.45-1 +Date: Wed, 07 Mar 2007 09:02:38 -0800 +From: Greg KH +To: linux-kernel@vger.kernel.org, + stable@kernel.org +Cc: Justin Forbes , + Zwane Mwaikambo , + Theodore Ts'o , + Randy Dunlap , + Dave Jones , + Chuck Wolber , + Chris Wedgwood , + Michael Krufky , + Chuck Ebbert , + torvalds@linux-foundation.org, + akpm@linux-foundation.org, + alan@lxorguk.ukuu.org.uk, + Ingo Molnar , + Michal Piotrowski , + Nick Piggin , + Thomas Gleixner +Subject: [patch 075/101] sched: fix SMT scheduler bug +Content-Disposition: inline; filename=sched-fix-smt-scheduler-bug.patch +Content-Length: 1341 +Lines: 40 + +From: Ingo Molnar + +[PATCH] sched: fix SMT scheduler bug + +The SMT scheduler incorrectly skips kernel threads even if they are +runnable (but they are preempted by a higher-prio user-space task which got +SMT-delayed by an even higher-priority task running on a sibling CPU). + +Fix this for now by only doing the SMT-nice optimization if the +to-be-delayed task is the only runnable task. (This should cover most of +the real-life cases anyway.) + +This bug has been in the SMT scheduler since 2.6.17 or so, but has only +been noticed now by the active check in the dynticks code. + +Signed-off-by: Ingo Molnar +Cc: Michal Piotrowski +Cc: Nick Piggin +Cc: Thomas Gleixner +Cc: Chuck Ebbert +Signed-off-by: Andrew Morton +Signed-off-by: Linus Torvalds + +--- + kernel/sched.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- linux-2.6.20.1.orig/kernel/sched.c ++++ linux-2.6.20.1/kernel/sched.c +@@ -3528,7 +3528,7 @@ need_resched_nonpreemptible: + } + } + next->sleep_type = SLEEP_NORMAL; +- if (dependent_sleeper(cpu, rq, next)) ++ if (rq->nr_running == 1 && dependent_sleeper(cpu, rq, next)) + next = rq->idle; + switch_tasks: + if (next == rq->idle) + +-- + +From gregkh@mini.kroah.org Wed Mar 7 09:06:20 2007 +Message-Id: <20070307170620.326687240@mini.kroah.org> +References: <20070307170123.677686080@mini.kroah.org> +User-Agent: quilt/0.45-1 +Date: Wed, 07 Mar 2007 09:02:39 -0800 +From: Greg KH +To: linux-kernel@vger.kernel.org, + stable@kernel.org, + Greg KH +Cc: Justin Forbes , + Zwane Mwaikambo , + Theodore Ts'o , + Randy Dunlap , + Dave Jones , + Chuck Wolber , + Chris Wedgwood , + Michael Krufky , + Chuck Ebbert , + torvalds@linux-foundation.org, + akpm@linux-foundation.org, + alan@lxorguk.ukuu.org.uk, + David Brownell +Subject: [patch 076/101] USB: usbnet driver bugfix +Content-Disposition: inline; filename=usb-usbnet-driver-bugfix.patch +Content-Length: 1242 +Lines: 43 + +From: David Brownell + +The attached fixes an oops in the usbnet driver. The same patch is +in 2.6.21-rc1, but that one has many whitespace changes. This is much +smaller. + + +Signed-off-by: David Brownell +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/net/usbnet.c | 7 +++++-- + 1 file changed, 5 insertions(+), 2 deletions(-) + +--- linux-2.6.20.1.orig/drivers/usb/net/usbnet.c ++++ linux-2.6.20.1/drivers/usb/net/usbnet.c +@@ -1182,6 +1182,9 @@ usbnet_probe (struct usb_interface *udev + // NOTE net->name still not usable ... + if (info->bind) { + status = info->bind (dev, udev); ++ if (status < 0) ++ goto out1; ++ + // heuristic: "usb%d" for links we know are two-host, + // else "eth%d" when there's reasonable doubt. userspace + // can rename the link if it knows better. +@@ -1208,12 +1211,12 @@ usbnet_probe (struct usb_interface *udev + if (status == 0 && dev->status) + status = init_status (dev, udev); + if (status < 0) +- goto out1; ++ goto out3; + + if (!dev->rx_urb_size) + dev->rx_urb_size = dev->hard_mtu; + dev->maxpacket = usb_maxpacket (dev->udev, dev->out, 1); +- ++ + SET_NETDEV_DEV(net, &udev->dev); + status = register_netdev (net); + if (status) + +-- + +From gregkh@mini.kroah.org Wed Mar 7 09:06:20 2007 +Message-Id: <20070307170620.403121793@mini.kroah.org> +References: <20070307170123.677686080@mini.kroah.org> +User-Agent: quilt/0.45-1 +Date: Wed, 07 Mar 2007 09:02:40 -0800 +From: Greg KH +To: linux-kernel@vger.kernel.org, + stable@kernel.org +Cc: Justin Forbes , + Zwane Mwaikambo , + Theodore Ts'o , + Randy Dunlap , + Dave Jones , + Chuck Wolber , + Chris Wedgwood , + Michael Krufky , + Chuck Ebbert , + torvalds@linux-foundation.org, + akpm@linux-foundation.org, + alan@lxorguk.ukuu.org.uk, + Dmitry Torokhov , + Dmitry Torokhov , + Thomas Renninger +Subject: [patch 077/101] Backport of psmouse suspend/shutdown cleanups +Content-Disposition: inline; filename=backport-of-psmouse-suspend-shutdown-cleanups.patch +Content-Length: 2562 +Lines: 86 + +From: Thomas Renninger + +This patch works back to 2.6.17 (earlier kernels seem to +need up/down operations on mutex/semaphore). + +psmouse - properly reset mouse on shutdown/suspend + +Some people report that they need psmouse module unloaded +for suspend to ram/disk to work properly. Let's make port +cleanup behave the same way as driver unload. + +This fixes "bad state" problem on various HP laptops, such +as nx7400. + + +Signed-off-by: Dmitry Torokhov +Signed-off-by: Thomas Renninger +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/input/mouse/psmouse-base.c | 28 ++++++++++++++++++++++++++++ + drivers/input/mouse/psmouse.h | 1 + + drivers/input/mouse/synaptics.c | 1 + + 3 files changed, 30 insertions(+) + +--- linux-2.6.20.1.orig/drivers/input/mouse/psmouse-base.c ++++ linux-2.6.20.1/drivers/input/mouse/psmouse-base.c +@@ -987,8 +987,36 @@ static void psmouse_resync(struct work_s + static void psmouse_cleanup(struct serio *serio) + { + struct psmouse *psmouse = serio_get_drvdata(serio); ++ struct psmouse *parent = NULL; ++ ++ mutex_lock(&psmouse_mutex); ++ ++ if (serio->parent && serio->id.type == SERIO_PS_PSTHRU) { ++ parent = serio_get_drvdata(serio->parent); ++ psmouse_deactivate(parent); ++ } ++ ++ psmouse_deactivate(psmouse); ++ ++ if (psmouse->cleanup) ++ psmouse->cleanup(psmouse); + + psmouse_reset(psmouse); ++ ++/* ++ * Some boxes, such as HP nx7400, get terribly confused if mouse ++ * is not fully enabled before suspending/shutting down. ++ */ ++ ps2_command(&psmouse->ps2dev, NULL, PSMOUSE_CMD_ENABLE); ++ ++ if (parent) { ++ if (parent->pt_deactivate) ++ parent->pt_deactivate(parent); ++ ++ psmouse_activate(parent); ++ } ++ ++ mutex_unlock(&psmouse_mutex); + } + + /* +--- linux-2.6.20.1.orig/drivers/input/mouse/psmouse.h ++++ linux-2.6.20.1/drivers/input/mouse/psmouse.h +@@ -68,6 +68,7 @@ struct psmouse { + + int (*reconnect)(struct psmouse *psmouse); + void (*disconnect)(struct psmouse *psmouse); ++ void (*cleanup)(struct psmouse *psmouse); + int (*poll)(struct psmouse *psmouse); + + void (*pt_activate)(struct psmouse *psmouse); +--- linux-2.6.20.1.orig/drivers/input/mouse/synaptics.c ++++ linux-2.6.20.1/drivers/input/mouse/synaptics.c +@@ -652,6 +652,7 @@ int synaptics_init(struct psmouse *psmou + psmouse->set_rate = synaptics_set_rate; + psmouse->disconnect = synaptics_disconnect; + psmouse->reconnect = synaptics_reconnect; ++ psmouse->cleanup = synaptics_reset; + psmouse->pktsize = 6; + /* Synaptics can usually stay in sync without extra help */ + psmouse->resync_time = 0; + +-- + +From gregkh@mini.kroah.org Wed Mar 7 09:06:20 2007 +Message-Id: <20070307170620.534161596@mini.kroah.org> +References: <20070307170123.677686080@mini.kroah.org> +User-Agent: quilt/0.45-1 +Date: Wed, 07 Mar 2007 09:02:41 -0800 +From: Greg KH +To: linux-kernel@vger.kernel.org, + stable@kernel.org +Cc: Justin Forbes , + Zwane Mwaikambo , + Theodore Ts'o , + Randy Dunlap , + Dave Jones , + Chuck Wolber , + Chris Wedgwood , + Michael Krufky , + Chuck Ebbert , + torvalds@linux-foundation.org, + akpm@linux-foundation.org, + alan@lxorguk.ukuu.org.uk, + David Howells , + Benjamin Herrenschmidt , + Paul Mackerras , + Andrew Morton , + David Woodhouse +Subject: [patch 078/101] Revert "LOG2: Alter get_order() so that it can make use of ilog2() on a constant" +Content-Disposition: inline; filename=revert-log2-alter-get_order-so-that-it-can-make-use-of-ilog2-on-a-constant.patch +Content-Length: 2945 +Lines: 91 + +From: Linus Torvalds + +Revert "[PATCH] LOG2: Alter get_order() so that it can make use of ilog2() on a constant" + +This reverts commit 39d61db0edb34d60b83c5e0d62d0e906578cc707. + +The commit was buggy in multiple ways: + - the conversion to ilog2() was incorrect to begin with + - it tested the wrong #defines, so on all architectures but FRV you'd + never see the bug except for constant arguments. + - the new "get_order()" macro used its arguments multiple times, and + didn't even parenthesize them properly + - despite the comments, it was not true that you could use it for + constant initializers, since not all architectures even use the + generic page.h header file. + +All of the problems are individually fixable, but it all boils down to: +better just revert it, and re-do it from scratch. + +Cc: David Howells +Cc: Benjamin Herrenschmidt +Cc: Paul Mackerras +Cc: Andrew Morton +Cc: David Woodhouse +Signed-off-by: Linus Torvalds +Signed-off-by: Greg Kroah-Hartman + +--- + include/asm-generic/page.h | 38 ++++---------------------------------- + 1 file changed, 4 insertions(+), 34 deletions(-) + +--- linux-2.6.20.1.orig/include/asm-generic/page.h ++++ linux-2.6.20.1/include/asm-generic/page.h +@@ -4,51 +4,21 @@ + #ifdef __KERNEL__ + #ifndef __ASSEMBLY__ + +-#include ++#include + +-/* +- * non-const pure 2^n version of get_order +- * - the arch may override these in asm/bitops.h if they can be implemented +- * more efficiently than using the arch log2 routines +- * - we use the non-const log2() instead if the arch has defined one suitable +- */ +-#ifndef ARCH_HAS_GET_ORDER +-static inline __attribute__((const)) +-int __get_order(unsigned long size, int page_shift) ++/* Pure 2^n version of get_order */ ++static __inline__ __attribute_const__ int get_order(unsigned long size) + { +-#if BITS_PER_LONG == 32 && defined(ARCH_HAS_ILOG2_U32) +- int order = __ilog2_u32(size) - page_shift; +- return order >= 0 ? order : 0; +-#elif BITS_PER_LONG == 64 && defined(ARCH_HAS_ILOG2_U64) +- int order = __ilog2_u64(size) - page_shift; +- return order >= 0 ? order : 0; +-#else + int order; + +- size = (size - 1) >> (page_shift - 1); ++ size = (size - 1) >> (PAGE_SHIFT - 1); + order = -1; + do { + size >>= 1; + order++; + } while (size); + return order; +-#endif + } +-#endif +- +-/** +- * get_order - calculate log2(pages) to hold a block of the specified size +- * @n - size +- * +- * calculate allocation order based on the current page size +- * - this can be used to initialise global variables from constant data +- */ +-#define get_order(n) \ +-( \ +- __builtin_constant_p(n) ? \ +- ((n < (1UL << PAGE_SHIFT)) ? 0 : ilog2(n) - PAGE_SHIFT) : \ +- __get_order(n, PAGE_SHIFT) \ +- ) + + #endif /* __ASSEMBLY__ */ + #endif /* __KERNEL__ */ + +-- + +From gregkh@mini.kroah.org Wed Mar 7 09:06:20 2007 +Message-Id: <20070307170620.661548421@mini.kroah.org> +References: <20070307170123.677686080@mini.kroah.org> +User-Agent: quilt/0.45-1 +Date: Wed, 07 Mar 2007 09:02:42 -0800 +From: Greg KH +To: linux-kernel@vger.kernel.org, + stable@kernel.org +Cc: Justin Forbes , + Zwane Mwaikambo , + Theodore Ts'o , + Randy Dunlap , + Dave Jones , + Chuck Wolber , + Chris Wedgwood , + Michael Krufky , + Chuck Ebbert , + torvalds@linux-foundation.org, + akpm@linux-foundation.org, + alan@lxorguk.ukuu.org.uk, + neilb@suse.de, + kas@fi.muni.cz, + Trond.Myklebust@netapp.com +Subject: [patch 079/101] RPM: fix double free in portmapper code +Content-Disposition: inline; filename=rpm-fix-double-free-in-portmapper-code.patch +Content-Length: 1267 +Lines: 49 + + +From: Trond Myklebust + +rpc_run_task is guaranteed to always call ->rpc_release. + +Signed-off-by: Trond Myklebust +Cc: Neil Brown +Cc: Jan "Yenya" Kasprzak +Signed-off-by: Andrew Morton +Signed-off-by: Greg Kroah-Hartman + + +--- + net/sunrpc/pmap_clnt.c | 8 +++++--- + 1 file changed, 5 insertions(+), 3 deletions(-) + +--- linux-2.6.20.1.orig/net/sunrpc/pmap_clnt.c ++++ linux-2.6.20.1/net/sunrpc/pmap_clnt.c +@@ -62,7 +62,10 @@ static inline void pmap_map_free(struct + + static void pmap_map_release(void *data) + { +- pmap_map_free(data); ++ struct portmap_args *map = data; ++ ++ xprt_put(map->pm_xprt); ++ pmap_map_free(map); + } + + static const struct rpc_call_ops pmap_getport_ops = { +@@ -133,7 +136,7 @@ void rpc_getport(struct rpc_task *task) + status = -EIO; + child = rpc_run_task(pmap_clnt, RPC_TASK_ASYNC, &pmap_getport_ops, map); + if (IS_ERR(child)) +- goto bailout; ++ goto bailout_nofree; + rpc_put_task(child); + + task->tk_xprt->stat.bind_count++; +@@ -222,7 +225,6 @@ static void pmap_getport_done(struct rpc + child->tk_pid, status, map->pm_port); + + pmap_wake_portmap_waiters(xprt, status); +- xprt_put(xprt); + } + + /** + +-- + +From gregkh@mini.kroah.org Wed Mar 7 09:06:20 2007 +Message-Id: <20070307170620.790452477@mini.kroah.org> +References: <20070307170123.677686080@mini.kroah.org> +User-Agent: quilt/0.45-1 +Date: Wed, 07 Mar 2007 09:02:43 -0800 +From: Greg KH +To: linux-kernel@vger.kernel.org, + stable@kernel.org +Cc: Justin Forbes , + Zwane Mwaikambo , + Theodore Ts'o , + Randy Dunlap , + Dave Jones , + Chuck Wolber , + Chris Wedgwood , + Michael Krufky , + Chuck Ebbert , + torvalds@linux-foundation.org, + akpm@linux-foundation.org, + alan@lxorguk.ukuu.org.uk, + neilb@suse.de, + kas@fi.muni.cz, + Trond.Myklebust@netapp.com, + Andrew Morton +Subject: [patch 080/101] NLM: Fix double free in __nlm_async_call +Content-Disposition: inline; filename=nlm-fix-double-free-in-__nlm_async_call.patch +Content-Length: 1813 +Lines: 60 + + +From: Trond Myklebust + +rpc_call_async() will always call rpc_release_calldata(), so it is an +error for __nlm_async_call() to do so as well. + +Addresses http://bugzilla.kernel.org/show_bug.cgi?id=7923 + +Signed-off-by: Trond Myklebust +Cc: Jan "Yenya" Kasprzak +Cc: Neil Brown +Signed-off-by: Andrew Morton +Signed-off-by: Greg Kroah-Hartman + +--- + fs/lockd/clntproc.c | 9 +++------ + fs/lockd/svclock.c | 4 +--- + 2 files changed, 4 insertions(+), 9 deletions(-) + +--- linux-2.6.20.1.orig/fs/lockd/clntproc.c ++++ linux-2.6.20.1/fs/lockd/clntproc.c +@@ -361,7 +361,6 @@ static int __nlm_async_call(struct nlm_r + { + struct nlm_host *host = req->a_host; + struct rpc_clnt *clnt; +- int status = -ENOLCK; + + dprintk("lockd: call procedure %d on %s (async)\n", + (int)proc, host->h_name); +@@ -373,12 +372,10 @@ static int __nlm_async_call(struct nlm_r + msg->rpc_proc = &clnt->cl_procinfo[proc]; + + /* bootstrap and kick off the async RPC call */ +- status = rpc_call_async(clnt, msg, RPC_TASK_ASYNC, tk_ops, req); +- if (status == 0) +- return 0; ++ return rpc_call_async(clnt, msg, RPC_TASK_ASYNC, tk_ops, req); + out_err: +- nlm_release_call(req); +- return status; ++ tk_ops->rpc_release(req); ++ return -ENOLCK; + } + + int nlm_async_call(struct nlm_rqst *req, u32 proc, const struct rpc_call_ops *tk_ops) +--- linux-2.6.20.1.orig/fs/lockd/svclock.c ++++ linux-2.6.20.1/fs/lockd/svclock.c +@@ -593,9 +593,7 @@ callback: + + /* Call the client */ + kref_get(&block->b_count); +- if (nlm_async_call(block->b_call, NLMPROC_GRANTED_MSG, +- &nlmsvc_grant_ops) < 0) +- nlmsvc_release_block(block); ++ nlm_async_call(block->b_call, NLMPROC_GRANTED_MSG, &nlmsvc_grant_ops); + } + + /* + +-- + +From gregkh@mini.kroah.org Wed Mar 7 09:06:21 2007 +Message-Id: <20070307170620.923082146@mini.kroah.org> +References: <20070307170123.677686080@mini.kroah.org> +User-Agent: quilt/0.45-1 +Date: Wed, 07 Mar 2007 09:02:44 -0800 +From: Greg KH +To: linux-kernel@vger.kernel.org, + stable@kernel.org, + tony.luck@intel.com +Cc: Justin Forbes , + Zwane Mwaikambo , + Theodore Ts'o , + Randy Dunlap , + Dave Jones , + Chuck Wolber , + Chris Wedgwood , + Michael Krufky , + Chuck Ebbert , + torvalds@linux-foundation.org, + akpm@linux-foundation.org, + alan@lxorguk.ukuu.org.uk, + linux-ia64@vger.kernel.org, + jlan@sgi.com, + magnus@valinux.co.jp, + horms@verge.net.au +Subject: [patch 081/101] kexec: Fix CONFIG_SMP=n compilation V2 (ia64) +Content-Disposition: inline; filename=kexec-fix-config_smp-n-compilation-v2.patch +Content-Length: 2544 +Lines: 87 + + +From: Magnus Damm + +Kexec support for 2.6.20 on ia64 does not build properly using a config +made up by CONFIG_SMP=n and CONFIG_HOTPLUG_CPU=n: + + CC arch/ia64/kernel/machine_kexec.o +arch/ia64/kernel/machine_kexec.c: In function `machine_shutdown': +arch/ia64/kernel/machine_kexec.c:77: warning: implicit declaration of function `cpu_down' + AS arch/ia64/kernel/relocate_kernel.o + CC arch/ia64/kernel/crash.o +arch/ia64/kernel/crash.c: In function `kdump_cpu_freeze': +arch/ia64/kernel/crash.c:139: warning: implicit declaration of function `ia64_jump_to_sal' +arch/ia64/kernel/crash.c:139: error: `sal_boot_rendez_state' undeclared (first use in this function) +arch/ia64/kernel/crash.c:139: error: (Each undeclared identifier is reported only once +arch/ia64/kernel/crash.c:139: error: for each function it appears in.) +arch/ia64/kernel/crash.c: At top level: +arch/ia64/kernel/crash.c:84: warning: 'kdump_wait_cpu_freeze' defined but not used +make[1]: *** [arch/ia64/kernel/crash.o] Error 1 +make: *** [arch/ia64/kernel] Error 2 + +Signed-off-by: Magnus Damm +Acked-by: Simon Horman +Acked-by: Jay Lan +Cc: Tony Luck +Signed-off-by: Andrew Morton +Signed-off-by: Greg Kroah-Hartman + +--- + arch/ia64/kernel/crash.c | 11 +++++++---- + arch/ia64/kernel/machine_kexec.c | 2 ++ + 2 files changed, 9 insertions(+), 4 deletions(-) + +--- linux-2.6.20.1.orig/arch/ia64/kernel/crash.c ++++ linux-2.6.20.1/arch/ia64/kernel/crash.c +@@ -79,6 +79,7 @@ crash_save_this_cpu() + final_note(buf); + } + ++#ifdef CONFIG_SMP + static int + kdump_wait_cpu_freeze(void) + { +@@ -91,6 +92,7 @@ kdump_wait_cpu_freeze(void) + } + return 1; + } ++#endif + + void + machine_crash_shutdown(struct pt_regs *pt) +@@ -132,11 +134,12 @@ kdump_cpu_freeze(struct unw_frame_info * + atomic_inc(&kdump_cpu_freezed); + kdump_status[cpuid] = 1; + mb(); +- if (cpuid == 0) { +- for (;;) +- cpu_relax(); +- } else ++#ifdef CONFIG_HOTPLUG_CPU ++ if (cpuid != 0) + ia64_jump_to_sal(&sal_boot_rendez_state[cpuid]); ++#endif ++ for (;;) ++ cpu_relax(); + } + + static int +--- linux-2.6.20.1.orig/arch/ia64/kernel/machine_kexec.c ++++ linux-2.6.20.1/arch/ia64/kernel/machine_kexec.c +@@ -70,12 +70,14 @@ void machine_kexec_cleanup(struct kimage + + void machine_shutdown(void) + { ++#ifdef CONFIG_HOTPLUG_CPU + int cpu; + + for_each_online_cpu(cpu) { + if (cpu != smp_processor_id()) + cpu_down(cpu); + } ++#endif + kexec_disable_iosapic(); + } + + +-- + +From gregkh@mini.kroah.org Wed Mar 7 09:06:21 2007 +Message-Id: <20070307170621.054565300@mini.kroah.org> +References: <20070307170123.677686080@mini.kroah.org> +User-Agent: quilt/0.45-1 +Date: Wed, 07 Mar 2007 09:02:45 -0800 +From: Greg KH +To: linux-kernel@vger.kernel.org, + stable@kernel.org, + ak@suse.de +Cc: Justin Forbes , + Zwane Mwaikambo , + Theodore Ts'o , + Randy Dunlap , + Dave Jones , + Chuck Wolber , + Chris Wedgwood , + Michael Krufky , + Chuck Ebbert , + torvalds@linux-foundation.org, + akpm@linux-foundation.org, + alan@lxorguk.ukuu.org.uk, + zwane@infradead.org +Subject: [patch 082/101] Fix MTRR compat ioctl +Content-Disposition: inline; filename=fix-mtrr-compat-ioctl.patch +Content-Length: 3099 +Lines: 98 + + +From: Zwane Mwaikambo + +The MTRR compat code wasn't calling the lowlevel MTRR setup due to a switch +block not handling the compat case. + +Before: +(WW) I810(0): Failed to set up write-combining range (0xd0000000,0x10000000) + +After: +reg00: base=0x00000000 ( 0MB), size=1024MB: write-back, count=1 +reg01: base=0x40000000 (1024MB), size= 512MB: write-back, count=1 +reg02: base=0x5f700000 (1527MB), size= 1MB: uncachable, count=1 +reg03: base=0x5f800000 (1528MB), size= 8MB: uncachable, count=1 +reg04: base=0xd0000000 (3328MB), size= 256MB: write-combining, count=1 + +Signed-off-by: Zwane Mwaikambo +Cc: Andi Kleen +Signed-off-by: Andrew Morton +Signed-off-by: Greg Kroah-Hartman + +--- + arch/i386/kernel/cpu/mtrr/if.c | 33 +++++++++++++++++++++------------ + 1 file changed, 21 insertions(+), 12 deletions(-) + +--- linux-2.6.20.1.orig/arch/i386/kernel/cpu/mtrr/if.c ++++ linux-2.6.20.1/arch/i386/kernel/cpu/mtrr/if.c +@@ -158,8 +158,9 @@ mtrr_ioctl(struct file *file, unsigned i + struct mtrr_sentry sentry; + struct mtrr_gentry gentry; + void __user *arg = (void __user *) __arg; ++ unsigned int compat_cmd = cmd; + +- switch (cmd) { ++ switch (compat_cmd) { + case MTRRIOC_ADD_ENTRY: + case MTRRIOC_SET_ENTRY: + case MTRRIOC_DEL_ENTRY: +@@ -177,14 +178,20 @@ mtrr_ioctl(struct file *file, unsigned i + return -EFAULT; + break; + #ifdef CONFIG_COMPAT +- case MTRRIOC32_ADD_ENTRY: +- case MTRRIOC32_SET_ENTRY: +- case MTRRIOC32_DEL_ENTRY: +- case MTRRIOC32_KILL_ENTRY: +- case MTRRIOC32_ADD_PAGE_ENTRY: +- case MTRRIOC32_SET_PAGE_ENTRY: +- case MTRRIOC32_DEL_PAGE_ENTRY: +- case MTRRIOC32_KILL_PAGE_ENTRY: { ++#define MTRR_COMPAT_OP(op, type)\ ++ case MTRRIOC32_##op: \ ++ cmd = MTRRIOC_##op; \ ++ goto compat_get_##type ++ ++ MTRR_COMPAT_OP(ADD_ENTRY, sentry); ++ MTRR_COMPAT_OP(SET_ENTRY, sentry); ++ MTRR_COMPAT_OP(DEL_ENTRY, sentry); ++ MTRR_COMPAT_OP(KILL_ENTRY, sentry); ++ MTRR_COMPAT_OP(ADD_PAGE_ENTRY, sentry); ++ MTRR_COMPAT_OP(SET_PAGE_ENTRY, sentry); ++ MTRR_COMPAT_OP(DEL_PAGE_ENTRY, sentry); ++ MTRR_COMPAT_OP(KILL_PAGE_ENTRY, sentry); ++compat_get_sentry: { + struct mtrr_sentry32 __user *s32 = (struct mtrr_sentry32 __user *)__arg; + err = get_user(sentry.base, &s32->base); + err |= get_user(sentry.size, &s32->size); +@@ -193,8 +200,9 @@ mtrr_ioctl(struct file *file, unsigned i + return err; + break; + } +- case MTRRIOC32_GET_ENTRY: +- case MTRRIOC32_GET_PAGE_ENTRY: { ++ MTRR_COMPAT_OP(GET_ENTRY, gentry); ++ MTRR_COMPAT_OP(GET_PAGE_ENTRY, gentry); ++compat_get_gentry: { + struct mtrr_gentry32 __user *g32 = (struct mtrr_gentry32 __user *)__arg; + err = get_user(gentry.regnum, &g32->regnum); + err |= get_user(gentry.base, &g32->base); +@@ -204,6 +212,7 @@ mtrr_ioctl(struct file *file, unsigned i + return err; + break; + } ++#undef MTRR_COMPAT_OP + #endif + } + +@@ -287,7 +296,7 @@ mtrr_ioctl(struct file *file, unsigned i + if (err) + return err; + +- switch(cmd) { ++ switch(compat_cmd) { + case MTRRIOC_GET_ENTRY: + case MTRRIOC_GET_PAGE_ENTRY: + if (copy_to_user(arg, &gentry, sizeof gentry)) + +-- + +From gregkh@mini.kroah.org Wed Mar 7 09:06:21 2007 +Message-Id: <20070307170621.183753192@mini.kroah.org> +References: <20070307170123.677686080@mini.kroah.org> +User-Agent: quilt/0.45-1 +Date: Wed, 07 Mar 2007 09:02:46 -0800 +From: Greg KH +To: linux-kernel@vger.kernel.org, + stable@kernel.org, + torvalds@linux-foundation.org +Cc: Justin Forbes , + Zwane Mwaikambo , + Theodore Ts'o , + Randy Dunlap , + Dave Jones , + Chuck Wolber , + Chris Wedgwood , + Michael Krufky , + Chuck Ebbert , + akpm@linux-foundation.org, + alan@lxorguk.ukuu.org.uk, + dushistov@mail.ru +Subject: [patch 083/101] ufs: restore back support of openstep +Content-Disposition: inline; filename=ufs-restore-back-support-of-openstep.patch +Content-Length: 6248 +Lines: 170 + + +From: Evgeniy Dushistov + +This is a fix of regression, which triggered by ~2.6.16. + +Patch with name ufs-directory-and-page-cache-from-blocks-to-pages.patch: in +additional to conversation from block to page cache mechanism added new +checks of directory integrity, one of them that directory entry do not +across directory chunks. + +But some kinds of UFS: OpenStep UFS and Apple UFS (looks like these are the +same filesystems) have different directory chunk size, then common +UFSes(BSD and Solaris UFS). + +So this patch adds ability to works with variable size of directory chunks, +and set it for ufstype=openstep to right size. + +Tested on darwin ufs. + +Signed-off-by: Evgeniy Dushistov +Signed-off-by: Andrew Morton +Signed-off-by: Greg Kroah-Hartman + +--- + fs/ufs/dir.c | 21 ++++++++++++--------- + fs/ufs/super.c | 5 ++++- + include/linux/ufs_fs.h | 1 + + 3 files changed, 17 insertions(+), 10 deletions(-) + +--- linux-2.6.20.1.orig/fs/ufs/dir.c ++++ linux-2.6.20.1/fs/ufs/dir.c +@@ -106,12 +106,13 @@ static void ufs_check_page(struct page * + char *kaddr = page_address(page); + unsigned offs, rec_len; + unsigned limit = PAGE_CACHE_SIZE; ++ const unsigned chunk_mask = UFS_SB(sb)->s_uspi->s_dirblksize - 1; + struct ufs_dir_entry *p; + char *error; + + if ((dir->i_size >> PAGE_CACHE_SHIFT) == page->index) { + limit = dir->i_size & ~PAGE_CACHE_MASK; +- if (limit & (UFS_SECTOR_SIZE - 1)) ++ if (limit & chunk_mask) + goto Ebadsize; + if (!limit) + goto out; +@@ -126,7 +127,7 @@ static void ufs_check_page(struct page * + goto Ealign; + if (rec_len < UFS_DIR_REC_LEN(ufs_get_de_namlen(sb, p))) + goto Enamelen; +- if (((offs + rec_len - 1) ^ offs) & ~(UFS_SECTOR_SIZE-1)) ++ if (((offs + rec_len - 1) ^ offs) & ~chunk_mask) + goto Espan; + if (fs32_to_cpu(sb, p->d_ino) > (UFS_SB(sb)->s_uspi->s_ipg * + UFS_SB(sb)->s_uspi->s_ncg)) +@@ -310,6 +311,7 @@ int ufs_add_link(struct dentry *dentry, + int namelen = dentry->d_name.len; + struct super_block *sb = dir->i_sb; + unsigned reclen = UFS_DIR_REC_LEN(namelen); ++ const unsigned int chunk_size = UFS_SB(sb)->s_uspi->s_dirblksize; + unsigned short rec_len, name_len; + struct page *page = NULL; + struct ufs_dir_entry *de; +@@ -342,8 +344,8 @@ int ufs_add_link(struct dentry *dentry, + if ((char *)de == dir_end) { + /* We hit i_size */ + name_len = 0; +- rec_len = UFS_SECTOR_SIZE; +- de->d_reclen = cpu_to_fs16(sb, UFS_SECTOR_SIZE); ++ rec_len = chunk_size; ++ de->d_reclen = cpu_to_fs16(sb, chunk_size); + de->d_ino = 0; + goto got_it; + } +@@ -431,7 +433,7 @@ ufs_readdir(struct file *filp, void *dir + unsigned int offset = pos & ~PAGE_CACHE_MASK; + unsigned long n = pos >> PAGE_CACHE_SHIFT; + unsigned long npages = ufs_dir_pages(inode); +- unsigned chunk_mask = ~(UFS_SECTOR_SIZE - 1); ++ unsigned chunk_mask = ~(UFS_SB(sb)->s_uspi->s_dirblksize - 1); + int need_revalidate = filp->f_version != inode->i_version; + unsigned flags = UFS_SB(sb)->s_flags; + +@@ -511,7 +513,7 @@ int ufs_delete_entry(struct inode *inode + struct super_block *sb = inode->i_sb; + struct address_space *mapping = page->mapping; + char *kaddr = page_address(page); +- unsigned from = ((char*)dir - kaddr) & ~(UFS_SECTOR_SIZE - 1); ++ unsigned from = ((char*)dir - kaddr) & ~(UFS_SB(sb)->s_uspi->s_dirblksize - 1); + unsigned to = ((char*)dir - kaddr) + fs16_to_cpu(sb, dir->d_reclen); + struct ufs_dir_entry *pde = NULL; + struct ufs_dir_entry *de = (struct ufs_dir_entry *) (kaddr + from); +@@ -556,6 +558,7 @@ int ufs_make_empty(struct inode * inode, + struct super_block * sb = dir->i_sb; + struct address_space *mapping = inode->i_mapping; + struct page *page = grab_cache_page(mapping, 0); ++ const unsigned int chunk_size = UFS_SB(sb)->s_uspi->s_dirblksize; + struct ufs_dir_entry * de; + char *base; + int err; +@@ -563,7 +566,7 @@ int ufs_make_empty(struct inode * inode, + if (!page) + return -ENOMEM; + kmap(page); +- err = mapping->a_ops->prepare_write(NULL, page, 0, UFS_SECTOR_SIZE); ++ err = mapping->a_ops->prepare_write(NULL, page, 0, chunk_size); + if (err) { + unlock_page(page); + goto fail; +@@ -584,11 +587,11 @@ int ufs_make_empty(struct inode * inode, + ((char *)de + fs16_to_cpu(sb, de->d_reclen)); + de->d_ino = cpu_to_fs32(sb, dir->i_ino); + ufs_set_de_type(sb, de, dir->i_mode); +- de->d_reclen = cpu_to_fs16(sb, UFS_SECTOR_SIZE - UFS_DIR_REC_LEN(1)); ++ de->d_reclen = cpu_to_fs16(sb, chunk_size - UFS_DIR_REC_LEN(1)); + ufs_set_de_namlen(sb, de, 2); + strcpy (de->d_name, ".."); + +- err = ufs_commit_chunk(page, 0, UFS_SECTOR_SIZE); ++ err = ufs_commit_chunk(page, 0, chunk_size); + fail: + kunmap(page); + page_cache_release(page); +--- linux-2.6.20.1.orig/fs/ufs/super.c ++++ linux-2.6.20.1/fs/ufs/super.c +@@ -649,7 +649,7 @@ static int ufs_fill_super(struct super_b + kmalloc (sizeof(struct ufs_sb_private_info), GFP_KERNEL); + if (!uspi) + goto failed; +- ++ uspi->s_dirblksize = UFS_SECTOR_SIZE; + super_block_offset=UFS_SBLOCK; + + /* Keep 2Gig file limit. Some UFS variants need to override +@@ -718,6 +718,7 @@ static int ufs_fill_super(struct super_b + break; + + case UFS_MOUNT_UFSTYPE_NEXTSTEP: ++ /*TODO: check may be we need set special dir block size?*/ + UFSD("ufstype=nextstep\n"); + uspi->s_fsize = block_size = 1024; + uspi->s_fmask = ~(1024 - 1); +@@ -733,6 +734,7 @@ static int ufs_fill_super(struct super_b + break; + + case UFS_MOUNT_UFSTYPE_NEXTSTEP_CD: ++ /*TODO: check may be we need set special dir block size?*/ + UFSD("ufstype=nextstep-cd\n"); + uspi->s_fsize = block_size = 2048; + uspi->s_fmask = ~(2048 - 1); +@@ -754,6 +756,7 @@ static int ufs_fill_super(struct super_b + uspi->s_fshift = 10; + uspi->s_sbsize = super_block_size = 2048; + uspi->s_sbbase = 0; ++ uspi->s_dirblksize = 1024; + flags |= UFS_DE_44BSD | UFS_UID_44BSD | UFS_ST_44BSD | UFS_CG_44BSD; + if (!(sb->s_flags & MS_RDONLY)) { + if (!silent) +--- linux-2.6.20.1.orig/include/linux/ufs_fs.h ++++ linux-2.6.20.1/include/linux/ufs_fs.h +@@ -789,6 +789,7 @@ struct ufs_sb_private_info { + + __u32 s_maxsymlinklen;/* upper limit on fast symlinks' size */ + __s32 fs_magic; /* filesystem magic */ ++ unsigned int s_dirblksize; + }; + + /* + +-- + +From gregkh@mini.kroah.org Wed Mar 7 09:06:21 2007 +Message-Id: <20070307170621.310911775@mini.kroah.org> +References: <20070307170123.677686080@mini.kroah.org> +User-Agent: quilt/0.45-1 +Date: Wed, 07 Mar 2007 09:02:47 -0800 +From: Greg KH +To: linux-kernel@vger.kernel.org, + stable@kernel.org, + torvalds@linux-foundation.org +Cc: Justin Forbes , + Zwane Mwaikambo , + Theodore Ts'o , + Randy Dunlap , + Dave Jones , + Chuck Wolber , + Chris Wedgwood , + Michael Krufky , + Chuck Ebbert , + akpm@linux-foundation.org, + alan@lxorguk.ukuu.org.uk, + ericvh@gmail.com, + bunk@stusta.de +Subject: [patch 084/101] v9fs_vfs_mkdir(): fix a double free +Content-Disposition: inline; filename=v9fs_vfs_mkdir-fix-a-double-free.patch +Content-Length: 925 +Lines: 40 + + +From: Adrian Bunk + +Fix a double free of "dfid" introduced by commit +da977b2c7eb4d6312f063a7b486f2aad99809710 and spotted by the Coverity +checker. + +Signed-off-by: Adrian Bunk +Cc: Eric Van Hensbergen +Signed-off-by: Andrew Morton +Signed-off-by: Greg Kroah-Hartman +--- + + fs/9p/vfs_inode.c | 7 ++----- + 1 file changed, 2 insertions(+), 5 deletions(-) + +--- linux-2.6.20.1.orig/fs/9p/vfs_inode.c ++++ linux-2.6.20.1/fs/9p/vfs_inode.c +@@ -585,17 +585,14 @@ static int v9fs_vfs_mkdir(struct inode * + if (IS_ERR(inode)) { + err = PTR_ERR(inode); + inode = NULL; +- goto clean_up_fids; ++ v9fs_fid_destroy(vfid); ++ goto error; + } + + dentry->d_op = &v9fs_dentry_operations; + d_instantiate(dentry, inode); + return 0; + +-clean_up_fids: +- if (vfid) +- v9fs_fid_destroy(vfid); +- + clean_up_dfid: + v9fs_fid_clunk(v9ses, dfid); + + +-- + +From gregkh@mini.kroah.org Wed Mar 7 09:06:21 2007 +Message-Id: <20070307170621.437614156@mini.kroah.org> +References: <20070307170123.677686080@mini.kroah.org> +User-Agent: quilt/0.45-1 +Date: Wed, 07 Mar 2007 09:02:48 -0800 +From: Greg KH +To: linux-kernel@vger.kernel.org, + stable@kernel.org, + torvalds@linux-foundation.org +Cc: Justin Forbes , + Zwane Mwaikambo , + Theodore Ts'o , + Randy Dunlap , + Dave Jones , + Chuck Wolber , + Chris Wedgwood , + Michael Krufky , + Chuck Ebbert , + akpm@linux-foundation.org, + alan@lxorguk.ukuu.org.uk, + kernel@nn7.de, + benh@kernel.crashing.org, + paulus@samba.org, + dtor@mail.ru +Subject: [patch 085/101] enable mouse button 2+3 emulation for x86 macs +Content-Disposition: inline; filename=enable-mouse-button-2-3-emulation-for-x86-macs.patch +Content-Length: 1359 +Lines: 43 + + +From: Soeren Sonnenburg + +As macbook/macbook pro's also have to live with a single mouse button the +following patch just enables the Macintosh device drivers menu in Kconfig + +adds the macintosh dir to the obj-* to make macbook* users happy (who use +exactly that since months.... + +Signed-off-by: Soeren Sonnenburg +Cc: Benjamin Herrenschmidt +Cc: Paul Mackerras +Cc: Dmitry Torokhov +Signed-off-by: Andrew Morton +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/Makefile | 2 +- + drivers/macintosh/Kconfig | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +--- linux-2.6.20.1.orig/drivers/Makefile ++++ linux-2.6.20.1/drivers/Makefile +@@ -30,7 +30,7 @@ obj-$(CONFIG_PARPORT) += parport/ + obj-y += base/ block/ misc/ mfd/ net/ media/ + obj-$(CONFIG_NUBUS) += nubus/ + obj-$(CONFIG_ATM) += atm/ +-obj-$(CONFIG_PPC_PMAC) += macintosh/ ++obj-y += macintosh/ + obj-$(CONFIG_IDE) += ide/ + obj-$(CONFIG_FC4) += fc4/ + obj-$(CONFIG_SCSI) += scsi/ +--- linux-2.6.20.1.orig/drivers/macintosh/Kconfig ++++ linux-2.6.20.1/drivers/macintosh/Kconfig +@@ -1,6 +1,6 @@ + + menu "Macintosh device drivers" +- depends on PPC || MAC ++ depends on PPC || MAC || X86 + + config ADB + bool "Apple Desktop Bus (ADB) support" + +-- + +From gregkh@mini.kroah.org Wed Mar 7 09:06:21 2007 +Message-Id: <20070307170621.566654263@mini.kroah.org> +References: <20070307170123.677686080@mini.kroah.org> +User-Agent: quilt/0.45-1 +Date: Wed, 07 Mar 2007 09:02:49 -0800 +From: Greg KH +To: linux-kernel@vger.kernel.org, + stable@kernel.org, + torvalds@linux-foundation.org +Cc: Justin Forbes , + Zwane Mwaikambo , + Theodore Ts'o , + Randy Dunlap , + Dave Jones , + Chuck Wolber , + Chris Wedgwood , + Michael Krufky , + Chuck Ebbert , + akpm@linux-foundation.org, + alan@lxorguk.ukuu.org.uk, + nish.aravamudan@gmail.com, + wli@holomorphy.com, + kenchen@google.com, + agl@us.ibm.com, + hugh@veritas.com, + david@gibson.dropbear.id.au, + William Irwin +Subject: [patch 086/101] hugetlb: preserve hugetlb pte dirty state +Content-Disposition: inline; filename=hugetlb-preserve-hugetlb-pte-dirty-state.patch +Content-Length: 1964 +Lines: 62 + + +From: "Ken Chen" + +__unmap_hugepage_range() is buggy that it does not preserve dirty state of +huge_pte when unmapping hugepage range. It causes data corruption in the +event of dop_caches being used by sys admin. For example, an application +creates a hugetlb file, modify pages, then unmap it. While leaving the +hugetlb file alive, comes along sys admin doing a "echo 3 > +/proc/sys/vm/drop_caches". + +drop_pagecache_sb() will happily free all pages that aren't marked dirty if +there are no active mapping. Later when application remaps the hugetlb +file back and all data are gone, triggering catastrophic flip over on +application. + +Not only that, the internal resv_huge_pages count will also get all messed +up. Fix it up by marking page dirty appropriately. + +Signed-off-by: Ken Chen +Cc: "Nish Aravamudan" +Cc: Adam Litke +Cc: David Gibson +Acked-by: William Irwin +Cc: Hugh Dickins +Signed-off-by: Andrew Morton +Signed-off-by: Greg Kroah-Hartman + +--- + fs/hugetlbfs/inode.c | 5 ++++- + mm/hugetlb.c | 2 ++ + 2 files changed, 6 insertions(+), 1 deletion(-) + +--- linux-2.6.20.1.orig/fs/hugetlbfs/inode.c ++++ linux-2.6.20.1/fs/hugetlbfs/inode.c +@@ -449,10 +449,13 @@ static int hugetlbfs_symlink(struct inod + } + + /* +- * For direct-IO reads into hugetlb pages ++ * mark the head page dirty + */ + static int hugetlbfs_set_page_dirty(struct page *page) + { ++ struct page *head = (struct page *)page_private(page); ++ ++ SetPageDirty(head); + return 0; + } + +--- linux-2.6.20.1.orig/mm/hugetlb.c ++++ linux-2.6.20.1/mm/hugetlb.c +@@ -389,6 +389,8 @@ void __unmap_hugepage_range(struct vm_ar + continue; + + page = pte_page(pte); ++ if (pte_dirty(pte)) ++ set_page_dirty(page); + list_add(&page->lru, &page_list); + } + spin_unlock(&mm->page_table_lock); + +-- + +From gregkh@mini.kroah.org Wed Mar 7 09:06:21 2007 +Message-Id: <20070307170621.695130332@mini.kroah.org> +References: <20070307170123.677686080@mini.kroah.org> +User-Agent: quilt/0.45-1 +Date: Wed, 07 Mar 2007 09:02:50 -0800 +From: Greg KH +To: linux-kernel@vger.kernel.org, + stable@kernel.org, + torvalds@linux-foundation.org +Cc: Justin Forbes , + Zwane Mwaikambo , + Theodore Ts'o , + Randy Dunlap , + Dave Jones , + Chuck Wolber , + Chris Wedgwood , + Michael Krufky , + Chuck Ebbert , + akpm@linux-foundation.org, + alan@lxorguk.ukuu.org.uk, + takata@linux-m32r.org +Subject: [patch 087/101] m32r: build fix for processors without ISA_DSP_LEVEL2 +Content-Disposition: inline; filename=m32r-build-fix-for-processors-without-isa_dsp_level2.patch +Content-Length: 2057 +Lines: 74 + + +From: Hirokazu Takata + +Additional fixes for processors without ISA_DSP_LEVEL2. sigcontext_t does not +have dummy_acc1h, dummy_acc1l members any longer. + +Signed-off-by: Hirokazu Takata +Signed-off-by: Andrew Morton +Signed-off-by: Greg Kroah-Hartman + +--- + arch/m32r/kernel/process.c | 2 +- + arch/m32r/kernel/signal.c | 26 ++++---------------------- + 2 files changed, 5 insertions(+), 23 deletions(-) + +--- linux-2.6.20.1.orig/arch/m32r/kernel/process.c ++++ linux-2.6.20.1/arch/m32r/kernel/process.c +@@ -174,7 +174,7 @@ void show_regs(struct pt_regs * regs) + regs->acc1h, regs->acc1l); + #elif defined(CONFIG_ISA_M32R2) || defined(CONFIG_ISA_M32R) + printk("ACCH[%08lx]:ACCL[%08lx]\n", \ +- regs->acch, regs->accl); ++ regs->acc0h, regs->acc0l); + #else + #error unknown isa configuration + #endif +--- linux-2.6.20.1.orig/arch/m32r/kernel/signal.c ++++ linux-2.6.20.1/arch/m32r/kernel/signal.c +@@ -109,19 +109,10 @@ restore_sigcontext(struct pt_regs *regs, + COPY(r10); + COPY(r11); + COPY(r12); +-#if defined(CONFIG_ISA_M32R2) && defined(CONFIG_ISA_DSP_LEVEL2) + COPY(acc0h); + COPY(acc0l); +- COPY(acc1h); +- COPY(acc1l); +-#elif defined(CONFIG_ISA_M32R2) || defined(CONFIG_ISA_M32R) +- COPY(acch); +- COPY(accl); +- COPY(dummy_acc1h); +- COPY(dummy_acc1l); +-#else +-#error unknown isa configuration +-#endif ++ COPY(acc1h); /* ISA_DSP_LEVEL2 only */ ++ COPY(acc1l); /* ISA_DSP_LEVEL2 only */ + COPY(psw); + COPY(bpc); + COPY(bbpsw); +@@ -196,19 +187,10 @@ setup_sigcontext(struct sigcontext __use + COPY(r10); + COPY(r11); + COPY(r12); +-#if defined(CONFIG_ISA_M32R2) && defined(CONFIG_ISA_DSP_LEVEL2) + COPY(acc0h); + COPY(acc0l); +- COPY(acc1h); +- COPY(acc1l); +-#elif defined(CONFIG_ISA_M32R2) || defined(CONFIG_ISA_M32R) +- COPY(acch); +- COPY(accl); +- COPY(dummy_acc1h); +- COPY(dummy_acc1l); +-#else +-#error unknown isa configuration +-#endif ++ COPY(acc1h); /* ISA_DSP_LEVEL2 only */ ++ COPY(acc1l); /* ISA_DSP_LEVEL2 only */ + COPY(psw); + COPY(bpc); + COPY(bbpsw); + +-- + +From gregkh@mini.kroah.org Wed Mar 7 09:06:21 2007 +Message-Id: <20070307170621.823076167@mini.kroah.org> +References: <20070307170123.677686080@mini.kroah.org> +User-Agent: quilt/0.45-1 +Date: Wed, 07 Mar 2007 09:02:51 -0800 +From: Greg KH +To: linux-kernel@vger.kernel.org, + stable@kernel.org, + torvalds@linux-foundation.org +Cc: Justin Forbes , + Zwane Mwaikambo , + Theodore Ts'o , + Randy Dunlap , + Dave Jones , + Chuck Wolber , + Chris Wedgwood , + Michael Krufky , + Chuck Ebbert , + akpm@linux-foundation.org, + alan@lxorguk.ukuu.org.uk, + mathieu.desnoyers@polymtl.ca, + zippel@linux-m68k.org, + tglx@linutronix.de, + mingo@elte.hu +Subject: [patch 088/101] kernel/time/clocksource.c needs struct task_struct on m68k +Content-Disposition: inline; filename=kernel-time-clocksource.c-needs-struct-task_struct-on-m68k.patch +Content-Length: 1265 +Lines: 35 + + +From: Mathieu Desnoyers + +kernel/time/clocksource.c needs struct task_struct on m68k. + +Because it uses spin_unlock_irq(), which, on m68k, uses hardirq_count(), which +uses preempt_count(), which needs to dereference struct task_struct, we +have to include sched.h. Because it would cause a loop inclusion, we +cannot include sched.h in any other of asm-m68k/system.h, +linux/thread_info.h, linux/hardirq.h, which leaves this ugly include in +a C file as the only simple solution. + +Signed-off-by: Mathieu Desnoyers +Cc: Ingo Molnar +Cc: Roman Zippel +Cc: Thomas Gleixner +Signed-off-by: Andrew Morton +Signed-off-by: Greg Kroah-Hartman + +--- + kernel/time/clocksource.c | 1 + + 1 file changed, 1 insertion(+) + +--- linux-2.6.20.1.orig/kernel/time/clocksource.c ++++ linux-2.6.20.1/kernel/time/clocksource.c +@@ -28,6 +28,7 @@ + #include + #include + #include ++#include /* for spin_unlock_irq() using preempt_count() m68k */ + + /* XXX - Would like a better way for initializing curr_clocksource */ + extern struct clocksource clocksource_jiffies; + +-- + +From gregkh@mini.kroah.org Wed Mar 7 09:06:22 2007 +Message-Id: <20070307170621.954689785@mini.kroah.org> +References: <20070307170123.677686080@mini.kroah.org> +User-Agent: quilt/0.45-1 +Date: Wed, 07 Mar 2007 09:02:52 -0800 +From: Greg KH +To: linux-kernel@vger.kernel.org, + stable@kernel.org, + torvalds@linux-foundation.org +Cc: Justin Forbes , + Zwane Mwaikambo , + Theodore Ts'o , + Randy Dunlap , + Dave Jones , + Chuck Wolber , + Chris Wedgwood , + Michael Krufky , + Chuck Ebbert , + akpm@linux-foundation.org, + alan@lxorguk.ukuu.org.uk, + npiggin@suse.de, + cmm@us.ibm.com +Subject: [patch 089/101] buffer: memorder fix +Content-Disposition: inline; filename=buffer-memorder-fix.patch +Content-Length: 2273 +Lines: 61 + + +From: Nick Piggin + +unlock_buffer(), like unlock_page(), must not clear the lock without +ensuring that the critical section is closed. + + +Mingming later sent the same patch, saying: + +We are running SDET benchmark and saw double free issue for ext3 extended +attributes block, which complains the same xattr block already being freed (in +ext3_xattr_release_block()). The problem could also been triggered by +multiple threads loop untar/rm a kernel tree. + +The race is caused by missing a memory barrier at unlock_buffer() before the +lock bit being cleared, resulting in possible concurrent h_refcounter update. +That causes a reference counter leak, then later leads to the double free that +we have seen. + +Inside unlock_buffer(), there is a memory barrier is placed *after* the lock +bit is being cleared, however, there is no memory barrier *before* the bit is +cleared. On some arch the h_refcount update instruction and the clear bit +instruction could be reordered, thus leave the critical section re-entered. + +The race is like this: For example, if the h_refcount is initialized as 1, + +cpu 0: cpu1 +-------------------------------------- ----------------------------------- +lock_buffer() /* test_and_set_bit */ +clear_buffer_locked(bh); + lock_buffer() /* test_and_set_bit */ +h_refcount = h_refcount+1; /* = 2*/ h_refcount = h_refcount + 1; /*= 2 */ + clear_buffer_locked(bh); +.... ...... + + +We lost a h_refcount here. We need a memory barrier before the buffer head +lock bit being cleared to force the order of the two writes. Please apply. + + +Signed-off-by: Nick Piggin +Cc: Mingming Cao +Signed-off-by: Andrew Morton +Signed-off-by: Greg Kroah-Hartman + +--- + fs/buffer.c | 1 + + 1 file changed, 1 insertion(+) + +--- linux-2.6.20.1.orig/fs/buffer.c ++++ linux-2.6.20.1/fs/buffer.c +@@ -78,6 +78,7 @@ EXPORT_SYMBOL(__lock_buffer); + + void fastcall unlock_buffer(struct buffer_head *bh) + { ++ smp_mb__before_clear_bit(); + clear_buffer_locked(bh); + smp_mb__after_clear_bit(); + wake_up_bit(&bh->b_state, BH_Lock); + +-- + +From gregkh@mini.kroah.org Wed Mar 7 09:06:22 2007 +Message-Id: <20070307170622.080652128@mini.kroah.org> +References: <20070307170123.677686080@mini.kroah.org> +User-Agent: quilt/0.45-1 +Date: Wed, 07 Mar 2007 09:02:53 -0800 +From: Greg KH +To: linux-kernel@vger.kernel.org, + stable@kernel.org, + torvalds@linux-foundation.org +Cc: Justin Forbes , + Zwane Mwaikambo , + Theodore Ts'o , + Randy Dunlap , + Dave Jones , + Chuck Wolber , + Chris Wedgwood , + Michael Krufky , + Chuck Ebbert , + akpm@linux-foundation.org, + alan@lxorguk.ukuu.org.uk, + jirislaby@gmail.com +Subject: [patch 090/101] Char: specialix, isr have 2 params +Content-Disposition: inline; filename=char-specialix-isr-have-2-params.patch +Content-Length: 833 +Lines: 29 + + +From: Jiri Slaby + +specialix, isr have 2 params + +pt_regs are no longer the third parameter of isr, call sx_interrupt without +it. + +Signed-off-by: Jiri Slaby +Signed-off-by: Andrew Morton +Signed-off-by: Greg Kroah-Hartman +--- + + drivers/char/specialix.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- linux-2.6.20.1.orig/drivers/char/specialix.c ++++ linux-2.6.20.1/drivers/char/specialix.c +@@ -459,7 +459,7 @@ void missed_irq (unsigned long data) + if (irq) { + printk (KERN_INFO "Missed interrupt... Calling int from timer. \n"); + sx_interrupt (((struct specialix_board *)data)->irq, +- (void*)data, NULL); ++ (void*)data); + } + missed_irq_timer.expires = jiffies + sx_poll; + add_timer (&missed_irq_timer); + +-- + +From gregkh@mini.kroah.org Wed Mar 7 09:06:22 2007 +Message-Id: <20070307170622.234811901@mini.kroah.org> +References: <20070307170123.677686080@mini.kroah.org> +User-Agent: quilt/0.45-1 +Date: Wed, 07 Mar 2007 09:02:54 -0800 +From: Greg KH +To: linux-kernel@vger.kernel.org, + stable@kernel.org, + torvalds@linux-foundation.org +Cc: Justin Forbes , + Zwane Mwaikambo , + Theodore Ts'o , + Randy Dunlap , + Dave Jones , + Chuck Wolber , + Chris Wedgwood , + Michael Krufky , + Chuck Ebbert , + akpm@linux-foundation.org, + alan@lxorguk.ukuu.org.uk, + schwidefsky@de.ibm.com, + heiko.carstens@de.ibm.com, + mingo@elte.hu +Subject: [patch 091/101] lockdep: forward declare struct task_struct +Content-Disposition: inline; filename=lockdep-forward-declare-struct-task_struct.patch +Content-Length: 947 +Lines: 35 + + +From: Heiko Carstens + +3117df0453828bd045c16244e6f50e5714667a8a causes this: + +In file included from arch/s390/kernel/early.c:13: +include/linux/lockdep.h:300: warning: + "struct task_struct" declared inside parameter list +include/linux/lockdep.h:300: + warning: its scope is only this definition or + declaration, which is probably not what you want + +Acked-by: Ingo Molnar +Cc: Martin Schwidefsky +Signed-off-by: Heiko Carstens +Signed-off-by: Andrew Morton +Signed-off-by: Greg Kroah-Hartman + +--- + include/linux/lockdep.h | 2 ++ + 1 file changed, 2 insertions(+) + +--- linux-2.6.20.1.orig/include/linux/lockdep.h ++++ linux-2.6.20.1/include/linux/lockdep.h +@@ -8,6 +8,8 @@ + #ifndef __LINUX_LOCKDEP_H + #define __LINUX_LOCKDEP_H + ++struct task_struct; ++ + #ifdef CONFIG_LOCKDEP + + #include + +-- + +From gregkh@mini.kroah.org Wed Mar 7 09:06:22 2007 +Message-Id: <20070307170622.345002132@mini.kroah.org> +References: <20070307170123.677686080@mini.kroah.org> +User-Agent: quilt/0.45-1 +Date: Wed, 07 Mar 2007 09:02:55 -0800 +From: Greg KH +To: linux-kernel@vger.kernel.org, + stable@kernel.org, + torvalds@linux-foundation.org +Cc: Justin Forbes , + Zwane Mwaikambo , + Theodore Ts'o , + Randy Dunlap , + Dave Jones , + Chuck Wolber , + Chris Wedgwood , + Michael Krufky , + Chuck Ebbert , + akpm@linux-foundation.org, + alan@lxorguk.ukuu.org.uk, + caglar@pardus.org.tr, + mingo@elte.hu, + avi@qumranet.com +Subject: [patch 092/101] kvm: Fix asm constraint for lldt instruction +Content-Disposition: inline; filename=kvm-fix-asm-constraint-for-lldt-instruction.patch +Content-Length: 700 +Lines: 28 + + +From: S.Caglar Onur + +lldt does not accept immediate operands, which "g" allows. + +Signed-off-by: S.Caglar Onur +Signed-off-by: Avi Kivity +Cc: Ingo Molnar +Signed-off-by: Andrew Morton +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/kvm/kvm.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- linux-2.6.20.1.orig/drivers/kvm/kvm.h ++++ linux-2.6.20.1/drivers/kvm/kvm.h +@@ -558,7 +558,7 @@ static inline void load_gs(u16 sel) + #ifndef load_ldt + static inline void load_ldt(u16 sel) + { +- asm ("lldt %0" : : "g"(sel)); ++ asm ("lldt %0" : : "rm"(sel)); + } + #endif + + +-- + +From gregkh@mini.kroah.org Wed Mar 7 09:06:22 2007 +Message-Id: <20070307170622.476161502@mini.kroah.org> +References: <20070307170123.677686080@mini.kroah.org> +User-Agent: quilt/0.45-1 +Date: Wed, 07 Mar 2007 09:02:56 -0800 +From: Greg KH +To: linux-kernel@vger.kernel.org, + stable@kernel.org, + greg@kroah.com +Cc: Justin Forbes , + Zwane Mwaikambo , + Theodore Ts'o , + Randy Dunlap , + Dave Jones , + Chuck Wolber , + Chris Wedgwood , + Michael Krufky , + Chuck Ebbert , + torvalds@linux-foundation.org, + akpm@linux-foundation.org, + alan@lxorguk.ukuu.org.uk, + randy.dunlap@oracle.com +Subject: [patch 093/101] ueagle-atm.c needs sched.h +Content-Disposition: inline; filename=ueagle-atm.c-needs-sched.h.patch +Content-Length: 668 +Lines: 26 + + +From: Randy Dunlap + +Driver needs sched.h for try_to_freeze(). + +Signed-off-by: Randy Dunlap +Cc: Greg KH +Signed-off-by: Andrew Morton +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/atm/ueagle-atm.c | 1 + + 1 file changed, 1 insertion(+) + +--- linux-2.6.20.1.orig/drivers/usb/atm/ueagle-atm.c ++++ linux-2.6.20.1/drivers/usb/atm/ueagle-atm.c +@@ -61,6 +61,7 @@ + #include + #include + #include ++#include + #include + #include + #include + +-- + +From gregkh@mini.kroah.org Wed Mar 7 09:06:22 2007 +Message-Id: <20070307170622.606035793@mini.kroah.org> +References: <20070307170123.677686080@mini.kroah.org> +User-Agent: quilt/0.45-1 +Date: Wed, 07 Mar 2007 09:02:57 -0800 +From: Greg KH +To: linux-kernel@vger.kernel.org, + stable@kernel.org, + torvalds@linux-foundation.org +Cc: Justin Forbes , + Zwane Mwaikambo , + Theodore Ts'o , + Randy Dunlap , + Dave Jones , + Chuck Wolber , + Chris Wedgwood , + Michael Krufky , + Chuck Ebbert , + akpm@linux-foundation.org, + alan@lxorguk.ukuu.org.uk, + sam@ravnborg.org, + mingo@elte.hu +Subject: [patch 094/101] fix section mismatch warning in lockdep +Content-Disposition: inline; filename=fix-section-mismatch-warning-in-lockdep.patch +Content-Length: 1334 +Lines: 38 + + +From: Sam Ravnborg + +lockdep_init() is marked __init but used in several places +outside __init code. This causes following warnings: +$ scripts/mod/modpost kernel/lockdep.o +WARNING: kernel/built-in.o - Section mismatch: reference to .init.text:lockdep_init from .text.lockdep_init_map after 'lockdep_init_map' (at offset 0x105) +WARNING: kernel/built-in.o - Section mismatch: reference to .init.text:lockdep_init from .text.lockdep_reset_lock after 'lockdep_reset_lock' (at offset 0x35) +WARNING: kernel/built-in.o - Section mismatch: reference to .init.text:lockdep_init from .text.__lock_acquire after '__lock_acquire' (at offset 0xb2) + +The warnings are less obviously due to heavy inlining by gcc - this is not +altered. + +Fix the section mismatch warnings by removing the __init marking, which +seems obviously wrong. + +Signed-off-by: Sam Ravnborg +Acked-by: Ingo Molnar +Signed-off-by: Andrew Morton +Signed-off-by: Greg Kroah-Hartman + +--- + kernel/lockdep.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- linux-2.6.20.1.orig/kernel/lockdep.c ++++ linux-2.6.20.1/kernel/lockdep.c +@@ -2577,7 +2577,7 @@ out_restore: + raw_local_irq_restore(flags); + } + +-void __init lockdep_init(void) ++void lockdep_init(void) + { + int i; + + +-- + +From gregkh@mini.kroah.org Wed Mar 7 09:06:22 2007 +Message-Id: <20070307170622.734014034@mini.kroah.org> +References: <20070307170123.677686080@mini.kroah.org> +User-Agent: quilt/0.45-1 +Date: Wed, 07 Mar 2007 09:02:58 -0800 +From: Greg KH +To: linux-kernel@vger.kernel.org, + stable@kernel.org, + torvalds@linux-foundation.org +Cc: Justin Forbes , + Zwane Mwaikambo , + Theodore Ts'o , + Randy Dunlap , + Dave Jones , + Chuck Wolber , + Chris Wedgwood , + Michael Krufky , + Chuck Ebbert , + akpm@linux-foundation.org, + alan@lxorguk.ukuu.org.uk, + nickpiggin@yahoo.com.au, + galak@kernel.crashing.org, + zaitcev@redhat.com, + hirofumi@mail.parknet.co.jp +Subject: [patch 095/101] throttle_vm_writeout(): dont loop on GFP_NOFS and GFP_NOIO allocations +Content-Disposition: inline; filename=throttle_vm_writeout-don-t-loop-on-gfp_nofs-and-gfp_noio-allocations.patch +Content-Length: 2393 +Lines: 79 + + +From: Andrew Morton + +throttle_vm_writeout() is designed to wait for the dirty levels to subside. +But if the caller holds IO or FS locks, we might be holding up that writeout. + +So change it to take a single nap to give other devices a chance to clean some +memory, then return. + +Cc: Nick Piggin +Cc: OGAWA Hirofumi +Cc: Kumar Gala +Cc: Pete Zaitcev +Signed-off-by: Andrew Morton +Signed-off-by: Greg Kroah-Hartman + +--- + include/linux/writeback.h | 2 +- + mm/page-writeback.c | 13 +++++++++++-- + mm/vmscan.c | 2 +- + 3 files changed, 13 insertions(+), 4 deletions(-) + +--- linux-2.6.20.1.orig/include/linux/writeback.h ++++ linux-2.6.20.1/include/linux/writeback.h +@@ -84,7 +84,7 @@ static inline void wait_on_inode(struct + int wakeup_pdflush(long nr_pages); + void laptop_io_completion(void); + void laptop_sync_completion(void); +-void throttle_vm_writeout(void); ++void throttle_vm_writeout(gfp_t gfp_mask); + + /* These are exported to sysctl. */ + extern int dirty_background_ratio; +--- linux-2.6.20.1.orig/mm/page-writeback.c ++++ linux-2.6.20.1/mm/page-writeback.c +@@ -296,11 +296,21 @@ void balance_dirty_pages_ratelimited_nr( + } + EXPORT_SYMBOL(balance_dirty_pages_ratelimited_nr); + +-void throttle_vm_writeout(void) ++void throttle_vm_writeout(gfp_t gfp_mask) + { + long background_thresh; + long dirty_thresh; + ++ if ((gfp_mask & (__GFP_FS|__GFP_IO)) != (__GFP_FS|__GFP_IO)) { ++ /* ++ * The caller might hold locks which can prevent IO completion ++ * or progress in the filesystem. So we cannot just sit here ++ * waiting for IO to complete. ++ */ ++ congestion_wait(WRITE, HZ/10); ++ return; ++ } ++ + for ( ; ; ) { + get_dirty_limits(&background_thresh, &dirty_thresh, NULL); + +@@ -317,7 +327,6 @@ void throttle_vm_writeout(void) + } + } + +- + /* + * writeback at least _min_pages, and keep writing until the amount of dirty + * memory is less than the background threshold, or until we're all clean. +--- linux-2.6.20.1.orig/mm/vmscan.c ++++ linux-2.6.20.1/mm/vmscan.c +@@ -949,7 +949,7 @@ static unsigned long shrink_zone(int pri + } + } + +- throttle_vm_writeout(); ++ throttle_vm_writeout(sc->gfp_mask); + + atomic_dec(&zone->reclaim_in_progress); + return nr_reclaimed; + +-- + +From gregkh@mini.kroah.org Wed Mar 7 09:06:22 2007 +Message-Id: <20070307170622.863825748@mini.kroah.org> +References: <20070307170123.677686080@mini.kroah.org> +User-Agent: quilt/0.45-1 +Date: Wed, 07 Mar 2007 09:02:59 -0800 +From: Greg KH +To: linux-kernel@vger.kernel.org, + stable@kernel.org, + James.Bottomley@steeleye.com +Cc: Justin Forbes , + Zwane Mwaikambo , + Theodore Ts'o , + Randy Dunlap , + Dave Jones , + Chuck Wolber , + Chris Wedgwood , + Michael Krufky , + Chuck Ebbert , + torvalds@linux-foundation.org, + akpm@linux-foundation.org, + alan@lxorguk.ukuu.org.uk, + Achim_Leubner@adaptec.com, + joerg@dorchain.net, + linux-scsi@vger.kernel.org +Subject: [patch 096/101] bug in gdth.c crashing machine +Content-Disposition: inline; filename=bug-in-gdth.c-crashing-machine.patch +Content-Length: 1185 +Lines: 35 + + +From: Joerg Dorchain + +Undocumented... + +Signed-off-by: Joerg Dorchain +Acked-by: Achim Leubner +Cc: James Bottomley +Signed-off-by: Andrew Morton +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/scsi/gdth.c | 2 ++ + 1 file changed, 2 insertions(+) + +--- linux-2.6.20.1.orig/drivers/scsi/gdth.c ++++ linux-2.6.20.1/drivers/scsi/gdth.c +@@ -3092,6 +3092,7 @@ static int gdth_fill_raw_cmd(int hanum,S + cmdp->u.raw64.direction = + gdth_direction_tab[scp->cmnd[0]]==DOU ? GDTH_DATA_OUT:GDTH_DATA_IN; + memcpy(cmdp->u.raw64.cmd,scp->cmnd,16); ++ cmdp->u.raw64.sg_ranz = 0; + } else { + cmdp->u.raw.reserved = 0; + cmdp->u.raw.mdisc_time = 0; +@@ -3108,6 +3109,7 @@ static int gdth_fill_raw_cmd(int hanum,S + cmdp->u.raw.direction = + gdth_direction_tab[scp->cmnd[0]]==DOU ? GDTH_DATA_OUT:GDTH_DATA_IN; + memcpy(cmdp->u.raw.cmd,scp->cmnd,12); ++ cmdp->u.raw.sg_ranz = 0; + } + + if (scp->use_sg) { + +-- + +From gregkh@mini.kroah.org Wed Mar 7 09:06:23 2007 +Message-Id: <20070307170622.998828901@mini.kroah.org> +References: <20070307170123.677686080@mini.kroah.org> +User-Agent: quilt/0.45-1 +Date: Wed, 07 Mar 2007 09:03:00 -0800 +From: Greg KH +To: linux-kernel@vger.kernel.org, + stable@kernel.org, + jeff@garzik.org +Cc: Justin Forbes , + Zwane Mwaikambo , + Theodore Ts'o , + Randy Dunlap , + Dave Jones , + Chuck Wolber , + Chris Wedgwood , + Michael Krufky , + Chuck Ebbert , + torvalds@linux-foundation.org, + akpm@linux-foundation.org, + alan@lxorguk.ukuu.org.uk, + netdev@vger.kernel.org, + thomas@archlinux.org, + val_henson@linux.intel.com, + samuel.thibault@ens-lyon.org +Subject: [patch 097/101] revert "drivers/net/tulip/dmfe: support basic carrier detection" +Content-Disposition: inline; filename=revert-drivers-net-tulip-dmfe-support-basic-carrier-detection.patch +Content-Length: 2644 +Lines: 78 + + +From: Andrew Morton + +Revert 7628b0a8c01a02966d2228bdf741ddedb128e8f8. Thomas Bachler +reports: + + Commit 7628b0a8c01a02966d2228bdf741ddedb128e8f8 (drivers/net/tulip/dmfe: + support basic carrier detection) breaks networking on my Davicom DM9009. + ethtool always reports there is no link. tcpdump shows incoming packets, + but TX is disabled. Reverting the above patch fixes the problem. + + +Cc: Samuel Thibault +Cc: Jeff Garzik +Cc: Valerie Henson +Cc: Thomas Bachler +Signed-off-by: Andrew Morton +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/net/tulip/dmfe.c | 9 +-------- + 1 file changed, 1 insertion(+), 8 deletions(-) + +--- linux-2.6.20.1.orig/drivers/net/tulip/dmfe.c ++++ linux-2.6.20.1/drivers/net/tulip/dmfe.c +@@ -187,7 +187,7 @@ struct rx_desc { + struct dmfe_board_info { + u32 chip_id; /* Chip vendor/Device ID */ + u32 chip_revision; /* Chip revision */ +- struct DEVICE *dev; /* net device */ ++ struct DEVICE *next_dev; /* next device */ + struct pci_dev *pdev; /* PCI device */ + spinlock_t lock; + +@@ -399,8 +399,6 @@ static int __devinit dmfe_init_one (stru + /* Init system & device */ + db = netdev_priv(dev); + +- db->dev = dev; +- + /* Allocate Tx/Rx descriptor memory */ + db->desc_pool_ptr = pci_alloc_consistent(pdev, sizeof(struct tx_desc) * DESC_ALL_CNT + 0x20, &db->desc_pool_dma_ptr); + db->buf_pool_ptr = pci_alloc_consistent(pdev, TX_BUF_ALLOC * TX_DESC_CNT + 4, &db->buf_pool_dma_ptr); +@@ -428,7 +426,6 @@ static int __devinit dmfe_init_one (stru + dev->poll_controller = &poll_dmfe; + #endif + dev->ethtool_ops = &netdev_ethtool_ops; +- netif_carrier_off(db->dev); + spin_lock_init(&db->lock); + + pci_read_config_dword(pdev, 0x50, &pci_pmr); +@@ -1053,7 +1050,6 @@ static void netdev_get_drvinfo(struct ne + + static const struct ethtool_ops netdev_ethtool_ops = { + .get_drvinfo = netdev_get_drvinfo, +- .get_link = ethtool_op_get_link, + }; + + /* +@@ -1148,7 +1144,6 @@ static void dmfe_timer(unsigned long dat + /* Link Failed */ + DMFE_DBUG(0, "Link Failed", tmp_cr12); + db->link_failed = 1; +- netif_carrier_off(db->dev); + + /* For Force 10/100M Half/Full mode: Enable Auto-Nego mode */ + /* AUTO or force 1M Homerun/Longrun don't need */ +@@ -1171,8 +1166,6 @@ static void dmfe_timer(unsigned long dat + if ( (db->media_mode & DMFE_AUTO) && + dmfe_sense_speed(db) ) + db->link_failed = 1; +- else +- netif_carrier_on(db->dev); + dmfe_process_mode(db); + /* SHOW_MEDIA_TYPE(db->op_mode); */ + } + +-- + +From gregkh@mini.kroah.org Wed Mar 7 09:06:23 2007 +Message-Id: <20070307170623.134026493@mini.kroah.org> +References: <20070307170123.677686080@mini.kroah.org> +User-Agent: quilt/0.45-1 +Date: Wed, 07 Mar 2007 09:03:01 -0800 +From: Greg KH +To: linux-kernel@vger.kernel.org, + stable@kernel.org +Cc: Justin Forbes , + Zwane Mwaikambo , + Theodore Ts'o , + Randy Dunlap , + Dave Jones , + Chuck Wolber , + Chris Wedgwood , + Michael Krufky , + Chuck Ebbert , + torvalds@linux-foundation.org, + akpm@linux-foundation.org, + alan@lxorguk.ukuu.org.uk, + "Antonino A. Daplas" , + "David S. Miller" +Subject: [patch 098/101] video/aty/mach64_ct.c: fix bogus delay loop +Content-Disposition: inline; filename=video-aty-mach64_ct.c-fix-bogus-delay-loop.patch +Content-Length: 1467 +Lines: 45 + +From: David Miller + +[PATCH] video/aty/mach64_ct.c: fix bogus delay loop + +CT based mach64 cards were reported to hang on sparc64 boxes when +compiled with gcc-4.1.x and later. + +Looking at this piece of code, it's no surprise. A critical +delay was implemented as an empty for() loop, and gcc 4.0.x +and previous did not optimize it away, so we did get a delay. + +But gcc-4.1.x and later can optimize it away, and we get crashes. + +Use a real udelay() to fix this. Fix verified on SunBlade100. + +Signed-off-by: David S. Miller +Cc: Andrew Morton +Cc: "Antonino A. Daplas" +Signed-off-by: Linus Torvalds + +--- + drivers/video/aty/mach64_ct.c | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +--- linux-2.6.20.1.orig/drivers/video/aty/mach64_ct.c ++++ linux-2.6.20.1/drivers/video/aty/mach64_ct.c +@@ -598,7 +598,6 @@ static void aty_resume_pll_ct(const stru + struct atyfb_par *par = info->par; + + if (par->mclk_per != par->xclk_per) { +- int i; + /* + * This disables the sclk, crashes the computer as reported: + * aty_st_pll_ct(SPLL_CNTL2, 3, info); +@@ -614,7 +613,7 @@ static void aty_resume_pll_ct(const stru + * helps for Rage Mobilities that sometimes crash when + * we switch to sclk. (Daniel Mantione, 13-05-2003) + */ +- for (i=0;i<=0x1ffff;i++); ++ udelay(500); + } + + aty_st_pll_ct(PLL_REF_DIV, pll->ct.pll_ref_div, par); + +-- + +From gregkh@mini.kroah.org Wed Mar 7 09:06:23 2007 +Message-Id: <20070307170623.259758640@mini.kroah.org> +References: <20070307170123.677686080@mini.kroah.org> +User-Agent: quilt/0.45-1 +Date: Wed, 07 Mar 2007 09:03:02 -0800 +From: Greg KH +To: linux-kernel@vger.kernel.org, + stable@kernel.org, + mm-commits@vger.kernel.org +Cc: Justin Forbes , + Zwane Mwaikambo , + Theodore Ts'o , + Randy Dunlap , + Dave Jones , + Chuck Wolber , + Chris Wedgwood , + Michael Krufky , + Chuck Ebbert , + torvalds@linux-foundation.org, + akpm@linux-foundation.org, + alan@lxorguk.ukuu.org.uk, + petero2@telia.com, + gd@spherenet.de +Subject: [patch 099/101] pktcdvd: Correctly set cmd_len field in pkt_generic_packet +Content-Disposition: inline; filename=pktcdvd-correctly-set-cmd_len-field-in-pkt_generic_packet.patch +Content-Length: 872 +Lines: 28 + + +From: Gerhard Dirschl + +Fixes http://bugzilla.kernel.org/show_bug.cgi?id=7810 - a silly +copy-paste bug introduced by the latest change. + +Signed-off-by: Gerhard Dirschl +Cc: Peter Osterlund +Signed-off-by: Andrew Morton +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/block/pktcdvd.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- linux-2.6.20.1.orig/drivers/block/pktcdvd.c ++++ linux-2.6.20.1/drivers/block/pktcdvd.c +@@ -777,7 +777,7 @@ static int pkt_generic_packet(struct pkt + goto out; + } + +- rq->cmd_len = COMMAND_SIZE(rq->cmd[0]); ++ rq->cmd_len = COMMAND_SIZE(cgc->cmd[0]); + memcpy(rq->cmd, cgc->cmd, CDROM_PACKET_SIZE); + if (sizeof(rq->cmd) > CDROM_PACKET_SIZE) + memset(rq->cmd + CDROM_PACKET_SIZE, 0, sizeof(rq->cmd) - CDROM_PACKET_SIZE); + +-- + +From gregkh@mini.kroah.org Wed Mar 7 09:06:23 2007 +Message-Id: <20070307170623.391803596@mini.kroah.org> +References: <20070307170123.677686080@mini.kroah.org> +User-Agent: quilt/0.45-1 +Date: Wed, 07 Mar 2007 09:03:03 -0800 +From: Greg KH +To: linux-kernel@vger.kernel.org, + stable@kernel.org, + mm-commits@vger.kernel.org +Cc: Justin Forbes , + Zwane Mwaikambo , + Theodore Ts'o , + Randy Dunlap , + Dave Jones , + Chuck Wolber , + Chris Wedgwood , + Michael Krufky , + Chuck Ebbert , + torvalds@linux-foundation.org, + akpm@linux-foundation.org, + alan@lxorguk.ukuu.org.uk, + yanmin.zhang@intel.com, + yanmin_zhang@linux.intel.com, + tony.luck@intel.com, + jeff@garzik.org +Subject: [patch 100/101] ATA: convert GSI to irq on ia64 +Content-Disposition: inline; filename=ata-convert-gsi-to-irq-on-ia64.patch +Content-Length: 1279 +Lines: 45 + + +From: "Zhang, Yanmin" + +If an ATA drive uses legacy mode, ata driver will choose 14 and 15 as the +fixed irq number. On ia64 platform, such numbers are GSI and should be +converted to irq vector. + +Signed-off-by: Zhang Yanmin +Cc: Jeff Garzik +Cc: Tony Luck +Signed-off-by: Andrew Morton +Signed-off-by: Greg Kroah-Hartman + +--- + arch/ia64/Kconfig | 1 + + include/asm-ia64/libata-portmap.h | 12 ++++++++++++ + 2 files changed, 13 insertions(+) + +--- linux-2.6.20.1.orig/arch/ia64/Kconfig ++++ linux-2.6.20.1/arch/ia64/Kconfig +@@ -11,6 +11,7 @@ menu "Processor type and features" + + config IA64 + bool ++ select ATA_NONSTANDARD if ATA + default y + help + The Itanium Processor Family is Intel's 64-bit successor to +--- /dev/null ++++ linux-2.6.20.1/include/asm-ia64/libata-portmap.h +@@ -0,0 +1,12 @@ ++#ifndef __ASM_IA64_LIBATA_PORTMAP_H ++#define __ASM_IA64_LIBATA_PORTMAP_H ++ ++#define ATA_PRIMARY_CMD 0x1F0 ++#define ATA_PRIMARY_CTL 0x3F6 ++#define ATA_PRIMARY_IRQ(dev) isa_irq_to_vector(14) ++ ++#define ATA_SECONDARY_CMD 0x170 ++#define ATA_SECONDARY_CTL 0x376 ++#define ATA_SECONDARY_IRQ(dev) isa_irq_to_vector(15) ++ ++#endif + +-- + +From gregkh@mini.kroah.org Wed Mar 7 09:06:23 2007 +Message-Id: <20070307170623.528746382@mini.kroah.org> +References: <20070307170123.677686080@mini.kroah.org> +User-Agent: quilt/0.45-1 +Date: Wed, 07 Mar 2007 09:03:04 -0800 +From: Greg KH +To: linux-kernel@vger.kernel.org, + stable@kernel.org, + mm-commits@vger.kernel.org +Cc: Justin Forbes , + Zwane Mwaikambo , + Theodore Ts'o , + Randy Dunlap , + Dave Jones , + Chuck Wolber , + Chris Wedgwood , + Michael Krufky , + Chuck Ebbert , + torvalds@linux-foundation.org, + akpm@linux-foundation.org, + alan@lxorguk.ukuu.org.uk, + jwhiter@redhat.com, + swhiteho@redhat.com +Subject: [patch 101/101] gfs2: fix locking mistake +Content-Disposition: inline; filename=gfs2-fix-locking-mistake.patch +Content-Length: 741 +Lines: 27 + +From: Josef Whiter + +Fix a locking mistake in the quota code, we do a mutex_lock instead of a +mutex_unlock. + +Signed-off-by: Josef Whiter +Cc: Steven Whitehouse +Signed-off-by: Andrew Morton +Signed-off-by: Greg Kroah-Hartman + +--- + fs/gfs2/quota.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- linux-2.6.20.1.orig/fs/gfs2/quota.c ++++ linux-2.6.20.1/fs/gfs2/quota.c +@@ -279,7 +279,7 @@ static int bh_get(struct gfs2_quota_data + (bh->b_data + sizeof(struct gfs2_meta_header) + + offset * sizeof(struct gfs2_quota_change)); + +- mutex_lock(&sdp->sd_quota_mutex); ++ mutex_unlock(&sdp->sd_quota_mutex); + + return 0; + + +-- +