summaryrefslogtreecommitdiffstats
path: root/drivers
Commit message (Collapse)AuthorAgeFilesLines
* usb: cdc-acm: drain writes on closeDavid Brownell2008-08-132-5/+35
| | | | | | | | | | | | | | | | | | | Add a mechanism to let the write queue drain naturally before closing the TTY, rather than always losing that data. There is a timeout, so it can't wait too long. Provide missing locking inside acm_wb_is_avail(); it matters more now. Note, this presumes an earlier patch was applied, removing a call to this routine where the lock was held. Slightly improved diagnostics on write URB completion, so we can tell when a write URB gets killed and, if so, how much data it wrote first ... and so that I/O path is normally silent (and can't much change timings). Signed-off-by: David Brownell <dbrownell@users.sourceforge.net> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
* usb: cdc-acm: stop dropping tx buffersDavid Brownell2008-08-132-31/+3
| | | | | | | | | | | | | | | | | | | | The "increase cdc-acm write throughput" patch left in place two now-obsolete mechanisms, either of which can make the cdc-acm driver drop TX data (nasty!). This patch removes them: - The write_ready flag ... if an URB and buffer were found, they can (and should!) always be used. - TX path acm_wb_is_used() ... used when the buffer was just allocated, so that check is pointless. Also fix a won't-yet-matter leak of a write buffer on a disconnect path. Signed-off-by: David Brownell <dbrownell@users.sourceforge.net> Cc: David Engraf <david.engraf@netcom.eu> Acked-by: Oliver Neukum <oneukum@suse.de> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
* usb: cdc-acm: bugfix release()David Brownell2008-08-131-6/+9
| | | | | | | | | | | | | | | | | | | Bugfixes to the usb_driver_release_interface() usage; (a) make sure releasing *either* interface first will release the other, instead of insisting it be the control interface; (b) remove the recently-added self-deadlock. (The "fix disconnect bug in cdc-acm" patch was incomplete and incorrect.) Plus a small "sparse" fix: rename a local variable so it doesn't shadow a function parameter. Signed-off-by: David Brownell <dbrownell@users.sourceforge.net> Acked-by: Oliver Neukum <oneukum@suse.de> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
* usb gadget: issue notifications from ACM functionDavid Brownell2008-08-133-27/+235
| | | | | | | | | | | | | | | | | Update the CDC-ACM gadget code to support the peripheral-to-host notifications when the tty is opened or closed, or issues a BREAK. The serial framework code calls new generic hooks; right now only CDC-ACM uses those hooks. This resolves several REVISIT comments in the code. (Based on a patch from Felipe Balbi.) Note that this doesn't expose USB_CDC_CAP_BRK to the host, since this code still rejects USB_CDC_REQ_SEND_BREAK control requests for host-to-peripheral BREAK signaling (received via /dev/ttyGS*). Signed-off-by: David Brownell <dbrownell@users.sourceforge.net> Cc: Felipe Balbi <felipe.balbi@nokia.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
* usb gadget: remove needless struct membersDavid Brownell2008-08-135-10/+0
| | | | | | | | This removes some unused members from the various USB functions. Signed-off-by: David Brownell <dbrownell@users.sourceforge.net> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
* USB: sh: r8a66597-hcd: fix disconnect regressionYoshihiro Shimoda2008-08-131-23/+26
| | | | | | | | | | fix the regression in commit 29fab0cd897519be9009ba8c898410ab83b378e9 that this driver executed reconnection processing when disconnected some devices. Signed-off-by: Yoshihiro Shimoda <shimoda.yoshihiro@renesas.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
* USB: isp1301: fix compilationDmitry Baryshkov2008-08-131-1/+1
| | | | | | | Signed-off-by: Dmitry Baryshkov <dbaryshkov@gmail.com> Acked-by: David Brownell <dbrownell@users.sourceforge.net> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
* USB: fix compiler warning fixAlan Stern2008-08-131-2/+2
| | | | | | | | | | | | This patch (as1123b) fixes a compiler warning: do_unbind_rebind() is defined but not used if CONFIG_PM=n. Problem originally found and initial patch submitted by Alexander Beregalov <a.beregalov@gmail.com>. Signed-off-by: Alan Stern <stern@rowland.harvard.edu> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
* usb-storage: unusual_devs entry for Nokia 5300Alan Stern2008-08-131-0/+7
| | | | | | | | | | | This patch (as1120) adds an unusual_devs entry for the Nokia 5300. Maybe once Nokia releases the Symbian code we'll be able to fix all the problems it has with the USB mass-storage protocol. Signed-off-by: Alan Stern <stern@rowland.harvard.edu> Tested-by: Cedric Godin <cedric@belbone.be> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
* USB: cdc-acm.c: Fix compile warningsTakashi Iwai2008-08-131-1/+1
| | | | | | | | | | | | | The irq flags should be unsigned long. CC [M] drivers/usb/class/cdc-acm.o drivers/usb/class/cdc-acm.c: In function 'acm_waker': drivers/usb/class/cdc-acm.c:527: warning: comparison of distinct pointer types lacks a cast drivers/usb/class/cdc-acm.c:529: warning: comparison of distinct pointer types lacks a cast Signed-off-by: Takashi Iwai <tiwai@suse.de> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
* USB: BandRich BandLuxe C150/C250 HSPA Data Card DriverLeon Leong2008-08-131-0/+32
| | | | | | | | | | | | This patch adds the Product ID for the BandLuxe C150/C250 3.5G data card series from BandRich Inc. After detection, the data card works fine. It was patched against kernel 2.6.27-rc1 with -mm patch Signed-off-by: Leon Leong <upleong@bandrich.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
* USB: ftdi_sio: add support for PHI Fisco data cable (FT232BM based, VID/PID ↵Lex Ross2008-08-132-0/+2
| | | | | | | | | | | | | | 0403:e40b) Support for PHI Fisco USB to Serial data cable (FTDI FT232BM based). PHI Fisco cable is supplied for connecting Philips Xenium 9@9++ mobile phones. PIDs were missing. Tested successfully with PHI Fisco Data Cable (VID/PID 0403:e40b) Signed-off-by: Lex V. Ross <lross@mail.ru> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
* usb: isp1760: don't be noisy about short packets.Sebastian Siewior2008-08-132-3/+6
| | | | | | | | | | | | | | According to Alan Stern, short packets are quite normal under certain circumstances. This printk was triggered by usb to serial converters on every packet and some usb sticks triggered a few of those while plugging the stick. This printks are now hidden unless USB debug mode is activated. Cc: Alan Stern <stern@rowland.harvard.edu> Signed-off-by: Sebastian Siewior <sebastian@breakpoint.cc> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
* usb: ISP1760: improve pre-fetch timingEnrico Scholz2008-08-132-13/+33
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ISP1760 requires a delay of 90ns between programming the address and reading the data. Current driver solves this by a mdelay(1) which is very heavy weighted and slow. This patch applies the workaround from the ISP1760 FAQ by using two different banks for PTD and payload data and using a common wait for them. This wait is done by an additional ISP1760 access (whose timing constraints guarantee the 90ns delay). This improves speed when reading from an USB stick from: $ time dd if=/dev/sda of=/dev/zero bs=65536 count=1638 real 1m 15.43s user 0m 0.44s sys 0m 39.46s to $ time dd if=/dev/sda of=/dev/zero bs=65536 count=1638 real 0m 18.53s user 0m 0.16s sys 0m 12.97s [bigeasy@linutronix.de: fixed comment formating, moved define into header file, obey 80 char rule] Signed-off-by: Enrico Scholz <enrico.scholz@sigma-chemnitz.de> Signed-off-by: Sebastian Siewior <bigeasy@linutronix.de> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
* usb: return error code instead of 0 in the enqueue function.Sebastian Siewior2008-08-131-2/+1
| | | | | | | | | | if the enqueue function returns -ESHUTDOWN or -ENOMEM then we return 0 instead of an error. This leads to a timeout and then to a dequeue request of an not enqueued urb. Signed-off-by: Sebastian Siewior <sebastian@breakpoint.cc> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
* USB: serial gadget: rx path data loss fixesDavid Brownell2008-08-131-90/+146
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | Update RX path handling in new serial gadget code to cope better with RX blockage: queue every RX packet until its contents can safely be passed up to the ldisc. Most of the RX path work is now done in the RX tasklet, instead of just the final "push to ldisc" step. This addresses some cases of data loss: - A longstanding serial gadget bug: when tty_insert_flip_string() didn't copy the entire buffer, the rest of the characters were dropped! Now that packet stays queued until the rest of its data is pushed to the ldisc. - Another longstanding issue: in the unlikely case that an RX transfer returns data and also reports a fault, that data is no longer discarded. - In the recently added RX throttling logic: it needs to stop pushing data into the TTY layer, instead of just not submitting new USB read requests. When the TTY is throttled long enough, backpressure will eventually make the OUT endpoint NAK. Also: an #ifdef is removed (no longer necessary); and start switching to a better convention for debug messages (prefix them with tty name). Signed-off-by: David Brownell <dbrownell@users.sourceforge.net> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
* USB: Hook start_hnp into ohci structDmitry Baryshkov2008-08-133-3/+3
| | | | | | | | Signed-off-by: Dmitry Baryshkov <dbaryshkov@gmail.com> Acked-by: David Brownell <dbrownell@users.sourceforge.net> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
* USB: ohci: make distrust_firmware a quirkDmitry Baryshkov2008-08-133-2/+7
| | | | | | | | Signed-off-by: Dmitry Baryshkov <dbaryshkov@gmail.com> Acked-by: David Brownell <dbrownell@users.sourceforge.net> Cc: Alan Stern <stern@rowland.harvard.edu> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
* USB: cxacru: Fix printk format flag in error messageSimon Arlott2008-08-131-1/+1
| | | | | | | | "#%x" should have been "%#x" Signed-off-by: Simon Arlott <simon@fire.lp0.eu> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
* USB: usb-storage Motorola Phone Razr v3xx US_FL_FIX_CAPACITY patchJost Diederichs2008-08-131-0/+9
| | | | | | | | | | | | | | | | | | | | | | | | | add razr v3xx US_FL_FIX_CAPACITY flag to unusual_devs.h in usb-storage This is another Motorola phone that incorrectly reports the sector count (off by one). Problem Description: io errors when mounting phone's sd-card via the phones usb port Steps to reproduce: mount Motorola Razr v3xx phones sd-card on Linux Desktop via usb cable. Phones USB port must be in memory card mode. DEBUG output: Jul 9 19:32:41 micky kernel: Buffer I/O error on device sdd, logical block 3970048 Jul 9 19:32:41 micky kernel: sd 11:0:0:0: [sdd] Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE,SUGGEST_OK Jul 9 19:32:41 micky kernel: sd 11:0:0:0: [sdd] Sense Key : Medium Error [current] Jul 9 19:32:41 micky kernel: sd 11:0:0:0: [sdd] Add. Sense: No additional sense information Jul 9 19:32:41 micky kernel: end_request: I/O error, dev sdd, sector 3970048 From: Jost Diederichs <jost@qdusa.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
* USB Storage Sierra: TRU-Install feature updateKevin Lloyd2008-08-136-2/+231
| | | | | | | | | | | | | | | | | | | | | This patch upgrades the support for the Sierra Wireless TRU-Install feature (i.e. zeroCD) to allow for future support of Linux enabled TRU-Install devices. By default all devices that do not have a Linux enabled TRU-Install device (i.e. the device does not have a Linux package on the virtual CD partition) will be switched into "modem mode." Devices that do contain a Linux package in the TRU-Install virtual CD will be allowed to enumerate as a CD-Rom so that either (a) a user can install the packaged software or (b) a user-space application (e.g. udev) can switch it to modem mode. This patch does allow for manual override by adding a usb-storage module parameter 'swi_tru_install' which can force the modem into either mode regardless of what packages it contains. Signed-off-by: Kevin Lloyd <klloyd@sierrawireless.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
* USB Serial Sierra: TRU-Install feature updateKevin Lloyd2008-08-132-35/+7
| | | | | | | | | Moves responsbility of TRU-Install (i.e. ZeroCD) to the usb-storage driver. See patch 04/04 of this set. Signed-off-by: Kevin Lloyd <klloyd@sierrawireless.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
* USB Serial Sierra: Dynamic interface detectionKevin Lloyd2008-08-131-31/+52
| | | | | | | | | | This patch changes the method by which the number of ports per interface is assigned so that it is more dynamic and calculated on the fly (as opposed to hard coding it). This will allow for faster and easier addition of products. Signed-off-by: Kevin Lloyd <klloyd@sierrawireless.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
* USB Serial Sierra: clean-upKevin Lloyd2008-08-131-29/+27
| | | | | | | | | | | Very minor changes to clean up sierra code. Adds a prefix to debug messages so that Sierra messages are easily recognized. Removes extraneous code. This targets kernel 2.6.26-rc9 Signed-off-by: Kevin Lloyd <klloyd@sierrawireless.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
* USB: pl2023: Remove USB id (4348:5523) handled by ch341Tollef Fog Heen2008-08-132-5/+0
| | | | | | | | | | | | USB ID 4348:5523 is handled by the ch341 driver. Remove it from the pl2023 driver. Reverts 002e8f2c80c6be76bb312940bc278fc10b2b2487. Signed-off-by: Tollef Fog Heen <tfheen@err.no> Cc: stable <stable@kernel.org> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
* usb-storage: unusual_devs entries for iRiver T10 and Datafab CF+SM readerAlan Stern2008-08-131-0/+14
| | | | | | | | | | | | | | | This patch (as1115) adds unusual_devs entries with the IGNORE_RESIDE flag for the iRiver T10 and the Simple Tech/Datafab CF+SM card reader. Apparently these devices provide reasonable residue values for READ and WRITE operations, but not for others like INQUIRY or READ CAPACITY. This fixes the iRiver T10 problem reported in Bugzilla #11125. Signed-off-by: Alan Stern <stern@rowland.harvard.edu> Cc: stable <stable@kernel.org> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
* USB: Move usb/mon/ up to misc options in KconfigSimon Arlott2008-08-131-2/+2
| | | | | | | | | | This makes "USB Monitor" appear under "Miscellaneous USB options" section instead of in the middle of device specific drivers in the "USB Imaging devices" section. Signed-off-by: Simon Arlott <simon@fire.lp0.eu> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
* usb-storage: automatically recognize bad residuesAlan Stern2008-08-131-2/+15
| | | | | | | | | | | | | | | | This patch (as1119) will help to reduce the clutter of usb-storage's unusual_devs file by automatically detecting some devices that need the IGNORE_RESIDUE flag. The idea is that devices should never return a non-zero residue for an INQUIRY or a READ CAPACITY command unless they failed to transfer all the requested data. So if one of these commands transfers a standard amount of data but there is a positive residue, we know that the residue is bogus and we can set the flag. This fixes the problems reported in Bugzilla #11125. Signed-off-by: Alan Stern <stern@rowland.harvard.edu> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
* USB: fix interface unregistration logicAlan Stern2008-08-131-1/+1
| | | | | | | | | | | | This patch (as1122) fixes a bug: When an interface is unregistered, its children (sysfs files and endpoint devices) are unregistered after it instead of before. Signed-off-by: Alan Stern <stern@rowland.harvard.edu> Tested-by: Kay Sievers <kay.sievers@vrfy.org> Cc: stable <stable@kernel.org> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
* usb-serial: don't release unregistered minorsAlan Stern2008-08-131-4/+3
| | | | | | | | | | | | | | | This patch (as1121) fixes a bug in the USB serial core. When a device is unregistered, the core will give back its minors -- even if the device hasn't been assigned any! The patch reserves the highest minor value (255) to mean that no minor was assigned. It also removes some dead code and does a small style fixup. Signed-off-by: Alan Stern <stern@rowland.harvard.edu> Cc: stable <stable@kernel.org> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
* usb: gadget: protect gadget_chips.h from been included twiceFelipe Balbi2008-08-131-0/+6
| | | | | | | | | | | | Without it, we might have trouble when trying to write some composite gadget drivers. Cc: David Brownell <dbrownell@users.sourceforge.net> Cc: Greg KH <greg@kroah.com> Signed-off-by: Felipe Balbi <felipe.balbi@nokia.com> Acked-by: David Brownell <dbrownell@users.sourceforge.net> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
* USB: usb-storage: quirk around v1.11 firmware on Nikon D4Dave Jones2008-08-131-2/+2
| | | | | | | | | | | | | | | | | | usb-storage: quirk around v1.11 firmware on Nikon D40 https://bugzilla.redhat.com/show_bug.cgi?id=454028 Just as in earlier firmware versions, we need to perform this quirk for the latest version too. Speculatively do the entry for the D80 too, as they seem to have the same firmware problems historically. Signed-off-by: Dave Jones <davej@redhat.com> Cc: Johannes Berg <johannes@sipsolutions.net> Cc: Alan Stern <stern@rowland.harvard.edu> Cc: stable <stable@kernel.org> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
* USB: OHCI: fix system hang caused by earlier patchAlan Stern2008-08-131-0/+7
| | | | | | | | | | | | | | | | | | | This patch (as1114) fixes a problem that was revealed by an earlier patch (as1069b). Some broken controllers seem never to turn off their RHCS interrupt status bit, even when told to do so. As a result they generate an interrupt storm and hang the system. The patch avoids enabling RHSC interrupt requests when the RHCS status bit is already set. This should have no adverse affects on normal controllers, since they won't set the status bit until a root-hub status change actually occurs, in which case we wouldn't enable RHSC interrupt requests anyway -- we would wait until the status change had been processed and cleared. Signed-off-by: Alan Stern <stern@rowland.harvard.edu> Tested by: Andrey Borzenkov <arvidjaar@mail.ru> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
* usb/core/driver: fix warningAlexander Beregalov2008-08-131-2/+1
| | | | | | | | | | usb/core/driver: fix warning: drivers/usb/core/driver.c:834: warning: 'do_unbind_rebind' defined but not used Signed-off-by: Alexander Beregalov <a.beregalov@gmail.com> Acked-by: Alan Stern <stern@rowland.harvard.edu> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
* USB: ftdi_sio: add support for Luminance Stellaris Evaluation/Development KitsFrederik Kriewitz2008-08-132-0/+9
| | | | | | | | | | | | | The Patch adds support for Luminance Stellaris Evaluation/Development Kits (FTDI 2232C based). The PIDs were missing. Successfully tested with a Stellaris LM3S8962 Evaluation kit. Signed-off-by: Frederik Kriewitz <frederik@kriewitz.eu> Cc: stable <stable@kernel.org> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
* USB: ftdi_sio: Add USB Product Id for ELV HS485André Schenk2008-08-132-0/+2
| | | | | | | | | | USB product id registration for the ELV HS485 USB adapter (www.elv.de) to their home automation bus system. Applies to 2.6.26. Signed-off-by: Andre Schenk <andre@melior.s.bawue.de> Cc: stable <stable@kernel.org> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
* USB: fix USB boot crash, ecm_do_notify(), list_add corruption. prev->next ↵David Brownell2008-08-131-2/+3
| | | | | | | | | | | | | | | | should be next (ffff88003b8f82f8) This fixes a BUG() turned up by Ingo via randconfig testing, where CONFIG_LIST_DEBUG turned up list corruption. The corruption was caused by the dummy_hcd (single-machine test harness for gadget and HCD code) trashing the request queue when driven by the new CDC composite gadget an I/O pattern that was previously uncommon. Fix suggested by Alan Stern. Signed-off-by: David Brownell <dbrownell@users.sourceforge.net> Tested-by: Ingo Molnar <mingo@elte.hu> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
* usb: auerswald: remove driver (obsolete)Wolfgang Mües2008-08-133-2163/+0
| | | | | | | | | | | | | | | | | | | | | | | This patch removes the auerswald USB driver from the linux kernel 2.6.26. This driver was included into the kernel mainly to connect to the ISDN framework. This was done in linux 2.4.x. For 2.6.x, due to the fragile and moving ISDN support, this connection was never realized, and the only use of this driver was for device configuration. In the age of DSL, the demand of ISDN support is getting very low. Meanwhile, with the advent of libusb, an userspace driver was done for the device configuration which works fine for linux and mac. (Thanks to the libusb developers!). The userspace driver is downloadable from the auerswald web site. So this driver is obsolete now and has to be removed. Many thanks to all developers which helped me to bring this driver up and working. Signed-off-by: Wolfgang Muees <wolfgang@iksw-muees.de> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
* crypto: padlock - fix VIA PadLock instruction usage with irq_ts_save/restore()Suresh Siddha2008-08-133-1/+44
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Wolfgang Walter reported this oops on his via C3 using padlock for AES-encryption: ################################################################## BUG: unable to handle kernel NULL pointer dereference at 000001f0 IP: [<c01028c5>] __switch_to+0x30/0x117 *pde = 00000000 Oops: 0002 [#1] PREEMPT Modules linked in: Pid: 2071, comm: sleep Not tainted (2.6.26 #11) EIP: 0060:[<c01028c5>] EFLAGS: 00010002 CPU: 0 EIP is at __switch_to+0x30/0x117 EAX: 00000000 EBX: c0493300 ECX: dc48dd00 EDX: c0493300 ESI: dc48dd00 EDI: c0493530 EBP: c04cff8c ESP: c04cff7c DS: 007b ES: 007b FS: 0000 GS: 0033 SS: 0068 Process sleep (pid: 2071, ti=c04ce000 task=dc48dd00 task.ti=d2fe6000) Stack: dc48df30 c0493300 00000000 00000000 d2fe7f44 c03b5b43 c04cffc8 00000046 c0131856 0000005a dc472d3c c0493300 c0493470 d983ae00 00002696 00000000 c0239f54 00000000 c04c4000 c04cffd8 c01025fe c04f3740 00049800 c04cffe0 Call Trace: [<c03b5b43>] ? schedule+0x285/0x2ff [<c0131856>] ? pm_qos_requirement+0x3c/0x53 [<c0239f54>] ? acpi_processor_idle+0x0/0x434 [<c01025fe>] ? cpu_idle+0x73/0x7f [<c03a4dcd>] ? rest_init+0x61/0x63 ======================= Wolfgang also found out that adding kernel_fpu_begin() and kernel_fpu_end() around the padlock instructions fix the oops. Suresh wrote: These padlock instructions though don't use/touch SSE registers, but it behaves similar to other SSE instructions. For example, it might cause DNA faults when cr0.ts is set. While this is a spurious DNA trap, it might cause oops with the recent fpu code changes. This is the code sequence that is probably causing this problem: a) new app is getting exec'd and it is somewhere in between start_thread() and flush_old_exec() in the load_xyz_binary() b) At pont "a", task's fpu state (like TS_USEDFPU, used_math() etc) is cleared. c) Now we get an interrupt/softirq which starts using these encrypt/decrypt routines in the network stack. This generates a math fault (as cr0.ts is '1') which sets TS_USEDFPU and restores the math that is in the task's xstate. d) Return to exec code path, which does start_thread() which does free_thread_xstate() and sets xstate pointer to NULL while the TS_USEDFPU is still set. e) At the next context switch from the new exec'd task to another task, we have a scenarios where TS_USEDFPU is set but xstate pointer is null. This can cause an oops during unlazy_fpu() in __switch_to() Now: 1) This should happen with or with out pre-emption. Viro also encountered similar problem with out CONFIG_PREEMPT. 2) kernel_fpu_begin() and kernel_fpu_end() will fix this problem, because kernel_fpu_begin() will manually do a clts() and won't run in to the situation of setting TS_USEDFPU in step "c" above. 3) This was working before the fpu changes, because its a spurious math fault which doesn't corrupt any fpu/sse registers and the task's math state was always in an allocated state. With out the recent lazy fpu allocation changes, while we don't see oops, there is a possible race still present in older kernels(for example, while kernel is using kernel_fpu_begin() in some optimized clear/copy page and an interrupt/softirq happens which uses these padlock instructions generating DNA fault). This is the failing scenario that existed even before the lazy fpu allocation changes: 0. CPU's TS flag is set 1. kernel using FPU in some optimized copy routine and while doing kernel_fpu_begin() takes an interrupt just before doing clts() 2. Takes an interrupt and ipsec uses padlock instruction. And we take a DNA fault as TS flag is still set. 3. We handle the DNA fault and set TS_USEDFPU and clear cr0.ts 4. We complete the padlock routine 5. Go back to step-1, which resumes clts() in kernel_fpu_begin(), finishes the optimized copy routine and does kernel_fpu_end(). At this point, we have cr0.ts again set to '1' but the task's TS_USEFPU is stilll set and not cleared. 6. Now kernel resumes its user operation. And at the next context switch, kernel sees it has do a FP save as TS_USEDFPU is still set and then will do a unlazy_fpu() in __switch_to(). unlazy_fpu() will take a DNA fault, as cr0.ts is '1' and now, because we are in __switch_to(), math_state_restore() will get confused and will restore the next task's FP state and will save it in prev tasks's FP state. Remember, in __switch_to() we are already on the stack of the next task but take a DNA fault for the prev task. This causes the fpu leakage. Fix the padlock instruction usage by calling them inside the context of new routines irq_ts_save/restore(), which clear/restore cr0.ts manually in the interrupt context. This will not generate spurious DNA in the context of the interrupt which will fix the oops encountered and the possible FPU leakage issue. Reported-and-bisected-by: Wolfgang Walter <wolfgang.walter@stwm.de> Signed-off-by: Suresh Siddha <suresh.b.siddha@intel.com> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
* crypto: talitos - Add handling for SEC 3.x treatment of link tableLee Nipper2008-08-131-15/+39
| | | | | | | | | | | | | | | | | Later SEC revision requires the link table (used for scatter/gather) to have an extra entry to account for the total length in descriptor [4], which contains cipher Input and ICV. This only applies to decrypt, not encrypt. Without this change, on 837x, a gather return/length error results when a decryption uses a link table to gather the fragments. This is observed by doing a ping with size of 1447 or larger with AES, or a ping with size 1455 or larger with 3des. So, add check for SEC compatible "fsl,3.0" for using extra link table entry. Signed-off-by: Lee Nipper <lee.nipper@freescale.com> Signed-off-by: Kim Phillips <kim.phillips@freescale.com> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
* Merge branch 'for-linus' of ↵Linus Torvalds2008-08-125-31/+104
|\ | | | | | | | | | | | | | | | | | | | | | | git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband: IB/ehca: Discard double CQE for one WR IB/ehca: Check idr_find() return value IB/ehca: Repoll CQ on invalid opcode IB/ehca: Rename goto label in ehca_poll_cq_one() IB/ehca: Update qp_state on cached modify_qp() IPoIB/cm: Use vmalloc() to allocate rx_rings
| * Merge branches 'ehca' and 'ipoib' into for-linusRoland Dreier2008-08-121-5/+12
| |\
| | * IPoIB/cm: Use vmalloc() to allocate rx_ringsDavid J. Wilder2008-08-081-5/+12
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | There are users that are running UDP applications that require a large receive queue size in order to get good performance. To prevent allocation failures for rx_rings when using non-SRQ mode and large recv_queue_size (1K or larger), use vmalloc() instead of kcalloc() to alocate rx_rings. Signed-off-by: David Wilder <dwilder@us.ibm.com> Signed-off-by: Roland Dreier <rolandd@cisco.com>
| * | IB/ehca: Discard double CQE for one WRAlexander Schmidt2008-08-124-20/+78
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Under rare circumstances, the ehca hardware might erroneously generate two CQEs for the same WQE, which is not compliant to the IB spec and will cause unpredictable errors like memory being freed twice. To avoid this problem, the driver needs to detect the second CQE and discard it. For this purpose, introduce an array holding as many elements as the SQ of the QP, called sq_map. Each sq_map entry stores a "reported" flag for one WQE in the SQ. When a work request is posted to the SQ, the respective "reported" flag is set to zero. After the arrival of a CQE, the flag is set to 1, which allows to detect the occurence of a second CQE. The mapping between WQE / CQE and the corresponding sq_map element is implemented by replacing the lowest 16 Bits of the wr_id with the index in the queue map. The original 16 Bits are stored in the sq_map entry and are restored when the CQE is passed to the application. Signed-off-by: Alexander Schmidt <alexs@linux.vnet.ibm.com> Signed-off-by: Roland Dreier <rolandd@cisco.com>
| * | IB/ehca: Check idr_find() return valueAlexander Schmidt2008-08-121-1/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The idr_find() function may fail when trying to get the QP that is associated with a CQE, e.g. when a QP has been destroyed between the generation of a CQE and the poll request for it. In consequence, the return value of idr_find() must be checked and the CQE must be discarded when the QP cannot be found. Signed-off-by: Alexander Schmidt <alexs@linux.vnet.ibm.com> Signed-off-by: Roland Dreier <rolandd@cisco.com>
| * | IB/ehca: Repoll CQ on invalid opcodeAlexander Schmidt2008-08-121-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When the ehca driver detects an invalid opcode in a CQE, it currently passes the CQE to the application and returns with success. This patch changes the CQE handling to discard CQEs with invalid opcodes and to continue reading the next CQE from the CQ. Signed-off-by: Alexander Schmidt <alexs@linux.vnet.ibm.com> Signed-off-by: Roland Dreier <rolandd@cisco.com>
| * | IB/ehca: Rename goto label in ehca_poll_cq_one()Alexander Schmidt2008-08-121-3/+3
| | | | | | | | | | | | | | | | | | | | | | | | Rename the "poll_cq_one_read_cqe" goto label to what it actually does, namely "repoll". Signed-off-by: Alexander Schmidt <alexs@linux.vnet.ibm.com> Signed-off-by: Roland Dreier <rolandd@cisco.com>
| * | IB/ehca: Update qp_state on cached modify_qp()Alexander Schmidt2008-08-121-4/+10
| |/ | | | | | | | | | | | | | | | | | | | | | | | | | | | | Since the introduction of the port auto-detect mode for ehca, calls to modify_qp() may be cached in the device driver when the ports are not activated yet. When a modify_qp() call is cached, the qp state remains untouched until the port is activated, which will leave the qp in the reset state. In the reset state, however, it is not allowed to post SQ WQEs, which confuses applications like ib_mad. The solution for this problem is to immediately set the qp state as requested by modify_qp(), even when the call is cached. Signed-off-by: Alexander Schmidt <alexs@linux.vnet.ibm.com> Signed-off-by: Roland Dreier <rolandd@cisco.com>
* | firmware/memmap: cleanupBernhard Walle2008-08-121-18/+43
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Various cleanup the drivers/firmware/memmap (after review by AKPM): - fix kdoc to conform to the standard - move kdoc from header to implementation files - remove superfluous WARN_ON() after kmalloc() - WARN_ON(x); if (!x) -> if(!WARN_ON(x)) - improve some comments Signed-off-by: Bernhard Walle <bwalle@suse.de> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
* | ALi M7101 PMU also available on Sun Netra's tooAlexander Clouter2008-08-121-2/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | My Sun Netra T1 AC200 has one of these... bit harsh not letting me use it and all :) ========== alex@woodchuck:~$ lspci -nn 00:01.0 PCI bridge [0604]: Sun Microsystems Computer Corp. Simba Advanced PCI Bridge [108e:5000] (rev 13) 00:01.1 PCI bridge [0604]: Sun Microsystems Computer Corp. Simba Advanced PCI Bridge [108e:5000] (rev 13) 01:03.0 Non-VGA unclassified device [0000]: ALi Corporation M7101 Power Management Controller [PMU] [10b9:7101] 01:05.1 Ethernet controller [0200]: Sun Microsystems Computer Corp. RIO GEM [108e:1101] (rev 01) 01:05.3 USB Controller [0c03]: Sun Microsystems Computer Corp. RIO USB [108e:1103] (rev 01) 01:07.0 ISA bridge [0601]: ALi Corporation M1533/M1535 PCI to ISA Bridge [Aladdin IV/V/V+] [10b9:1533] 01:0c.0 Bridge [0680]: Sun Microsystems Computer Corp. RIO EBUS [108e:1100] (rev 01) 01:0c.1 Ethernet controller [0200]: Sun Microsystems Computer Corp. RIO GEM [108e:1101] (rev 01) 01:0c.3 USB Controller [0c03]: Sun Microsystems Computer Corp. RIO USB [108e:1103] (rev 01) 01:0d.0 IDE interface [0101]: ALi Corporation M5229 IDE [10b9:5229] (rev c3) 02:08.0 SCSI storage controller [0100]: LSI Logic / Symbios Logic 53C896/897 [1000:000b] (rev 07) 02:08.1 SCSI storage controller [0100]: LSI Logic / Symbios Logic 53C896/897 [1000:000b] (rev 07) ========== Signed-off-by: Alexander Clouter <alex@digriz.org.uk> Cc: Wim Van Sebroeck <wim@iguana.be> Cc: "David S. Miller" <davem@davemloft.net> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>