From: Greg Kroah-Hartman Date: Tue, 7 Aug 2007 18:54:58 +0000 (-0700) Subject: more 2.6.22 patches X-Git-Tag: v2.6.22.2~4 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=cfe9caec5fd62c33f0d4cd38854c39d5de42e41d;p=thirdparty%2Fkernel%2Fstable-queue.git more 2.6.22 patches --- diff --git a/queue-2.6.22/series b/queue-2.6.22/series index d8a94c5d8e7..b61d23bb860 100644 --- a/queue-2.6.22/series +++ b/queue-2.6.22/series @@ -79,3 +79,6 @@ nf_conntrack-don-t-track-locally-generated-special-icmp-error.patch proc-net-anycast6-unbalanced-inet6_dev-refcnt.patch sysfs-release-mutex-when-kmalloc-failed-in-sysfs_open_file.patch netfilter-fix-logging-regression.patch +usb-fix-for-ftdi_sio-quirk-handling.patch +sx-switch-subven-and-subid-values.patch +uml-exports-for-hostfs.patch diff --git a/queue-2.6.22/sx-switch-subven-and-subid-values.patch b/queue-2.6.22/sx-switch-subven-and-subid-values.patch new file mode 100644 index 00000000000..ffb8577a96f --- /dev/null +++ b/queue-2.6.22/sx-switch-subven-and-subid-values.patch @@ -0,0 +1,36 @@ +From stable-bounces@linux.kernel.org Tue Jul 10 17:23:28 2007 +From: Jiri Slaby +Date: Tue, 10 Jul 2007 17:22:25 -0700 +Subject: sx: switch subven and subid values +To: torvalds@linux-foundation.org +Cc: akpm@linux-foundation.org, gmurray@webwayone.co.uk, jirislaby@gmail.com, stable@kernel.org +Message-ID: <200707110022.l6B0MPrX009869@imap1.linux-foundation.org> + + +From: Jiri Slaby + +sx.c is failing to locate Graham's card. + +Signed-off-by: Jiri Slaby +Cc: Graham Murray +Signed-off-by: Andrew Morton +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/char/sx.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +--- a/drivers/char/sx.c ++++ b/drivers/char/sx.c +@@ -2721,9 +2721,9 @@ static void __devexit sx_pci_remove(stru + its because the standard requires it. So check for SUBVENDOR_ID. */ + static struct pci_device_id sx_pci_tbl[] = { + { PCI_VENDOR_ID_SPECIALIX, PCI_DEVICE_ID_SPECIALIX_SX_XIO_IO8, +- .subvendor = 0x0200,.subdevice = PCI_ANY_ID }, ++ .subvendor = PCI_ANY_ID, .subdevice = 0x0200 }, + { PCI_VENDOR_ID_SPECIALIX, PCI_DEVICE_ID_SPECIALIX_SX_XIO_IO8, +- .subvendor = 0x0300,.subdevice = PCI_ANY_ID }, ++ .subvendor = PCI_ANY_ID, .subdevice = 0x0300 }, + { 0 } + }; + diff --git a/queue-2.6.22/uml-exports-for-hostfs.patch b/queue-2.6.22/uml-exports-for-hostfs.patch new file mode 100644 index 00000000000..9f372372142 --- /dev/null +++ b/queue-2.6.22/uml-exports-for-hostfs.patch @@ -0,0 +1,67 @@ +From stable-bounces@linux.kernel.org Tue Jul 10 17:33:49 2007 +From: Jeff Dike +Date: Tue, 10 Jul 2007 12:49:04 -0400 +Subject: UML: exports for hostfs +To: stable@kernel.org +Cc: uml-devel +Message-ID: <20070710164904.GA7825@c2.user-mode-linux.org> + + +Add some exports for hostfs that are required after Alberto Bertogli's +fixes for accessing unlinked host files. + +Also did some style cleanups while I was here. + +Signed-off-by: Jeff Dike +Signed-off-by: Greg Kroah-Hartman + +--- + arch/um/os-Linux/user_syms.c | 20 ++++++++------------ + 1 file changed, 8 insertions(+), 12 deletions(-) + +--- a/arch/um/os-Linux/user_syms.c ++++ b/arch/um/os-Linux/user_syms.c +@@ -5,7 +5,8 @@ + * so I *must* declare good prototypes for them and then EXPORT them. + * The kernel code uses the macro defined by include/linux/string.h, + * so I undef macros; the userspace code does not include that and I +- * add an EXPORT for the glibc one.*/ ++ * add an EXPORT for the glibc one. ++ */ + + #undef strlen + #undef strstr +@@ -61,12 +62,18 @@ EXPORT_SYMBOL_PROTO(dup2); + EXPORT_SYMBOL_PROTO(__xstat); + EXPORT_SYMBOL_PROTO(__lxstat); + EXPORT_SYMBOL_PROTO(__lxstat64); ++EXPORT_SYMBOL_PROTO(__fxstat64); + EXPORT_SYMBOL_PROTO(lseek); + EXPORT_SYMBOL_PROTO(lseek64); + EXPORT_SYMBOL_PROTO(chown); ++EXPORT_SYMBOL_PROTO(fchown); + EXPORT_SYMBOL_PROTO(truncate); ++EXPORT_SYMBOL_PROTO(ftruncate64); + EXPORT_SYMBOL_PROTO(utime); ++EXPORT_SYMBOL_PROTO(utimes); ++EXPORT_SYMBOL_PROTO(futimes); + EXPORT_SYMBOL_PROTO(chmod); ++EXPORT_SYMBOL_PROTO(fchmod); + EXPORT_SYMBOL_PROTO(rename); + EXPORT_SYMBOL_PROTO(__xmknod); + +@@ -102,14 +109,3 @@ EXPORT_SYMBOL(__stack_smash_handler); + + extern long __guard __attribute__((weak)); + EXPORT_SYMBOL(__guard); +- +-/* +- * Overrides for Emacs so that we follow Linus's tabbing style. +- * Emacs will notice this stuff at the end of the file and automatically +- * adjust the settings for this buffer only. This must remain at the end +- * of the file. +- * --------------------------------------------------------------------------- +- * Local variables: +- * c-file-style: "linux" +- * End: +- */ diff --git a/queue-2.6.22/usb-fix-for-ftdi_sio-quirk-handling.patch b/queue-2.6.22/usb-fix-for-ftdi_sio-quirk-handling.patch new file mode 100644 index 00000000000..24907127004 --- /dev/null +++ b/queue-2.6.22/usb-fix-for-ftdi_sio-quirk-handling.patch @@ -0,0 +1,205 @@ +From oliver@neukum.org Mon Jul 2 07:20:32 2007 +From: Oliver Neukum +Date: Mon, 2 Jul 2007 16:20:25 +0200 +Subject: USB: fix for ftdi_sio quirk handling +To: gregkh@suse.de, linux-usb-devel@lists.sourceforge.net +Message-ID: <200707021620.25672.oliver@neukum.org> +Content-Disposition: inline + + +this one fixes an oops with quirky ftdi_sio devices. As it fixes a +regression, I propose that it be included in 2.6.22 + +Signed-off-by: Oliver Neukum +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/serial/ftdi_sio.c | 104 +++++++++++++++++------------------------- + 1 file changed, 44 insertions(+), 60 deletions(-) + +--- a/drivers/usb/serial/ftdi_sio.c ++++ b/drivers/usb/serial/ftdi_sio.c +@@ -271,26 +271,58 @@ static int debug; + static __u16 vendor = FTDI_VID; + static __u16 product; + ++struct ftdi_private { ++ ftdi_chip_type_t chip_type; ++ /* type of the device, either SIO or FT8U232AM */ ++ int baud_base; /* baud base clock for divisor setting */ ++ int custom_divisor; /* custom_divisor kludge, this is for baud_base (different from what goes to the chip!) */ ++ __u16 last_set_data_urb_value ; ++ /* the last data state set - needed for doing a break */ ++ int write_offset; /* This is the offset in the usb data block to write the serial data - ++ * it is different between devices ++ */ ++ int flags; /* some ASYNC_xxxx flags are supported */ ++ unsigned long last_dtr_rts; /* saved modem control outputs */ ++ wait_queue_head_t delta_msr_wait; /* Used for TIOCMIWAIT */ ++ char prev_status, diff_status; /* Used for TIOCMIWAIT */ ++ __u8 rx_flags; /* receive state flags (throttling) */ ++ spinlock_t rx_lock; /* spinlock for receive state */ ++ struct delayed_work rx_work; ++ struct usb_serial_port *port; ++ int rx_processed; ++ unsigned long rx_bytes; ++ ++ __u16 interface; /* FT2232C port interface (0 for FT232/245) */ ++ ++ int force_baud; /* if non-zero, force the baud rate to this value */ ++ int force_rtscts; /* if non-zero, force RTS-CTS to always be enabled */ ++ ++ spinlock_t tx_lock; /* spinlock for transmit state */ ++ unsigned long tx_bytes; ++ unsigned long tx_outstanding_bytes; ++ unsigned long tx_outstanding_urbs; ++}; ++ + /* struct ftdi_sio_quirk is used by devices requiring special attention. */ + struct ftdi_sio_quirk { + int (*probe)(struct usb_serial *); +- void (*setup)(struct usb_serial *); /* Special settings during startup. */ ++ void (*port_probe)(struct ftdi_private *); /* Special settings for probed ports. */ + }; + + static int ftdi_olimex_probe (struct usb_serial *serial); +-static void ftdi_USB_UIRT_setup (struct usb_serial *serial); +-static void ftdi_HE_TIRA1_setup (struct usb_serial *serial); ++static void ftdi_USB_UIRT_setup (struct ftdi_private *priv); ++static void ftdi_HE_TIRA1_setup (struct ftdi_private *priv); + + static struct ftdi_sio_quirk ftdi_olimex_quirk = { + .probe = ftdi_olimex_probe, + }; + + static struct ftdi_sio_quirk ftdi_USB_UIRT_quirk = { +- .setup = ftdi_USB_UIRT_setup, ++ .port_probe = ftdi_USB_UIRT_setup, + }; + + static struct ftdi_sio_quirk ftdi_HE_TIRA1_quirk = { +- .setup = ftdi_HE_TIRA1_setup, ++ .port_probe = ftdi_HE_TIRA1_setup, + }; + + /* +@@ -567,38 +599,6 @@ static const char *ftdi_chip_name[] = { + #define THROTTLED 0x01 + #define ACTUALLY_THROTTLED 0x02 + +-struct ftdi_private { +- ftdi_chip_type_t chip_type; +- /* type of the device, either SIO or FT8U232AM */ +- int baud_base; /* baud base clock for divisor setting */ +- int custom_divisor; /* custom_divisor kludge, this is for baud_base (different from what goes to the chip!) */ +- __u16 last_set_data_urb_value ; +- /* the last data state set - needed for doing a break */ +- int write_offset; /* This is the offset in the usb data block to write the serial data - +- * it is different between devices +- */ +- int flags; /* some ASYNC_xxxx flags are supported */ +- unsigned long last_dtr_rts; /* saved modem control outputs */ +- wait_queue_head_t delta_msr_wait; /* Used for TIOCMIWAIT */ +- char prev_status, diff_status; /* Used for TIOCMIWAIT */ +- __u8 rx_flags; /* receive state flags (throttling) */ +- spinlock_t rx_lock; /* spinlock for receive state */ +- struct delayed_work rx_work; +- struct usb_serial_port *port; +- int rx_processed; +- unsigned long rx_bytes; +- +- __u16 interface; /* FT2232C port interface (0 for FT232/245) */ +- +- int force_baud; /* if non-zero, force the baud rate to this value */ +- int force_rtscts; /* if non-zero, force RTS-CTS to always be enabled */ +- +- spinlock_t tx_lock; /* spinlock for transmit state */ +- unsigned long tx_bytes; +- unsigned long tx_outstanding_bytes; +- unsigned long tx_outstanding_urbs; +-}; +- + /* Used for TIOCMIWAIT */ + #define FTDI_STATUS_B0_MASK (FTDI_RS0_CTS | FTDI_RS0_DSR | FTDI_RS0_RI | FTDI_RS0_RLSD) + #define FTDI_STATUS_B1_MASK (FTDI_RS_BI) +@@ -609,7 +609,6 @@ struct ftdi_private { + + /* function prototypes for a FTDI serial converter */ + static int ftdi_sio_probe (struct usb_serial *serial, const struct usb_device_id *id); +-static int ftdi_sio_attach (struct usb_serial *serial); + static void ftdi_shutdown (struct usb_serial *serial); + static int ftdi_sio_port_probe (struct usb_serial_port *port); + static int ftdi_sio_port_remove (struct usb_serial_port *port); +@@ -663,7 +662,6 @@ static struct usb_serial_driver ftdi_sio + .ioctl = ftdi_ioctl, + .set_termios = ftdi_set_termios, + .break_ctl = ftdi_break_ctl, +- .attach = ftdi_sio_attach, + .shutdown = ftdi_shutdown, + }; + +@@ -1198,6 +1196,8 @@ static int ftdi_sio_probe (struct usb_se + static int ftdi_sio_port_probe(struct usb_serial_port *port) + { + struct ftdi_private *priv; ++ struct ftdi_sio_quirk *quirk = usb_get_serial_data(port->serial); ++ + + dbg("%s",__FUNCTION__); + +@@ -1214,6 +1214,9 @@ static int ftdi_sio_port_probe(struct us + than queue a task to deliver them */ + priv->flags = ASYNC_LOW_LATENCY; + ++ if (quirk && quirk->port_probe) ++ quirk->port_probe(priv); ++ + /* Increase the size of read buffers */ + kfree(port->bulk_in_buffer); + port->bulk_in_buffer = kmalloc (BUFSZ, GFP_KERNEL); +@@ -1244,29 +1247,13 @@ static int ftdi_sio_port_probe(struct us + return 0; + } + +-/* attach subroutine */ +-static int ftdi_sio_attach (struct usb_serial *serial) +-{ +- /* Check for device requiring special set up. */ +- struct ftdi_sio_quirk *quirk = usb_get_serial_data(serial); +- +- if (quirk && quirk->setup) +- quirk->setup(serial); +- +- return 0; +-} /* ftdi_sio_attach */ +- +- + /* Setup for the USB-UIRT device, which requires hardwired + * baudrate (38400 gets mapped to 312500) */ + /* Called from usbserial:serial_probe */ +-static void ftdi_USB_UIRT_setup (struct usb_serial *serial) ++static void ftdi_USB_UIRT_setup (struct ftdi_private *priv) + { +- struct ftdi_private *priv; +- + dbg("%s",__FUNCTION__); + +- priv = usb_get_serial_port_data(serial->port[0]); + priv->flags |= ASYNC_SPD_CUST; + priv->custom_divisor = 77; + priv->force_baud = B38400; +@@ -1274,13 +1261,10 @@ static void ftdi_USB_UIRT_setup (struct + + /* Setup for the HE-TIRA1 device, which requires hardwired + * baudrate (38400 gets mapped to 100000) and RTS-CTS enabled. */ +-static void ftdi_HE_TIRA1_setup (struct usb_serial *serial) ++static void ftdi_HE_TIRA1_setup (struct ftdi_private *priv) + { +- struct ftdi_private *priv; +- + dbg("%s",__FUNCTION__); + +- priv = usb_get_serial_port_data(serial->port[0]); + priv->flags |= ASYNC_SPD_CUST; + priv->custom_divisor = 240; + priv->force_baud = B38400;