David Brownell [Tue, 9 Dec 2003 10:05:06 +0000 (02:05 -0800)]
[PATCH] USB: usb_hcd_unlink_urb() test for list membership
This is a minor cleanup that replaces a test for non-null urb->hcpriv
with "is the urb on this list". HCDs don't need to use hcpriv in that
way, and in general this is a safer way to test that. (AIO does much
the same thing in its kiocb cancelation paths.)
Alan Stern [Tue, 9 Dec 2003 03:48:52 +0000 (19:48 -0800)]
[PATCH] USB storage: Add comments explaining new s-g usage
On Sun, 30 Nov 2003, Matthew Dharm wrote:
> I'm going to pass this one along to Greg, but I think some places in this
> could really use some better comments. Especially the way you use a single
> buffer inside the loop -- it took me a few minutes to figure out how your
> logic to refresh the buffer with new data worked.
>
> I'm also wondering if the access_xfer_buf() function could use some more
> header comments, stating why this is needed (i.e. spelling out the
> kmap()-isms).
Okay, here it is. This patch basically just adds comments. Each routine
that uses the new scatter-gather function gets a brief explanation of
what's going on, and access_xfer_buf() itself gets detailed comments
saying what it's doing and why it's necessary. You may even want to cut
some of it back; I was pretty verbose.
Alan Stern [Tue, 9 Dec 2003 03:46:03 +0000 (19:46 -0800)]
[PATCH] USB storage: Convert sddr55 to use the new s-g routines
This patch changes the sddr55 driver to make it use the new scatter-gather
routines. It has not been tested, but perhaps Andries Brouwer will be
able to try it out.
Alan Stern [Tue, 9 Dec 2003 03:44:56 +0000 (19:44 -0800)]
[PATCH] USB storage: Update scatter-gather handling in the shuttle-usbat
This patch updates the shuttle_usbat driver to use the new scatter-gather
transfer routines. The small set of changes needed speaks well for the
original organization of the code.
Alan Stern [Tue, 9 Dec 2003 03:43:57 +0000 (19:43 -0800)]
[PATCH] USB storage: Update scatter-gather handling in the isd200 driver
This patch fixes the scatter-gather handling in isd200, replacing an
incorrect routine there with calls to the new routine added in the
previous patch. It also removes a couple of places where the driver
returned data for commands that shouldn't get any (TEST-UNIT-READY and
START-STOP).
Alan Stern [Tue, 9 Dec 2003 03:42:16 +0000 (19:42 -0800)]
[PATCH] USB storage: Convert datafab to use the new s-g routines
This patch updates the datafab driver to the new scatter-gather handling,
which makes it safe for systems with >1GByte of memory.
It has been tested by Eduard Hasenleithner.
Alan Stern [Mon, 8 Dec 2003 09:45:52 +0000 (01:45 -0800)]
[PATCH] USB storage: Change sddr09 to use the new s-g access routine
This patch updates the sddr09 driver to use the new scatter-gather access
routine. After installing it, the user who experienced memory access
violations says everything is now working properly.
Alan Stern [Mon, 8 Dec 2003 09:45:21 +0000 (01:45 -0800)]
[PATCH] USB storage: Fix scatter-gather buffer access in usb-storage core
This patch adds a routine to protocol.c that correctly transfers data to
or from a scatter-gather buffer. According to Jens Axboe, we've been
using page_address() incorrectly -- it's necessary to use kmap() instead
-- and in fact it doesn't give the desired result when the buffers are
located in high memory. This could affect anyone using a system with 1 GB
or more of RAM, and one user has already reported such a problem (as you
know).
The three fixup routines in protocol.c and usb.c have been changed to use
the new s-g access routine. When similar adjustments have been made to
all the subdrivers, we will be able to eliminate the raw_bulk.c source
file entirely.
Alan Stern [Mon, 8 Dec 2003 09:45:04 +0000 (01:45 -0800)]
[PATCH] USB storage: Remove dead code from debug.c
This patch removes an uncalled subroutine from debug.c. I only noticed it
when tracking down scatter-gather usage; there didn't seem to be any
reason to repair it since it wasn't being used anywhere.
Alan Stern [Mon, 8 Dec 2003 09:44:49 +0000 (01:44 -0800)]
[PATCH] USB storage: Enhance sddr09 to work with 64 MB SmartMedia cards
This patch was written by Andries Brouwer. It adds to sddr09 the ability
to use 64 MB SmartMedia cards. I have added a few minor alterations to
make it fit in with my sequence of other patches.
Alan Stern [Mon, 8 Dec 2003 09:44:31 +0000 (01:44 -0800)]
[PATCH] USB storage: Remove unneeded scatter-gather operations in sddr09
This patch removes some unnecessary scatter-gather code from the sddr09
driver. In its place a single smaller buffer is re-used each time through
an I/O loop, as opposed to transferring all the data at once.
Andries Brouwer kindly tested this and suggested some improvements to get
it working right.
Added vendor/product ids for Epson, Genius, Microtek, Plustek,
Reflecta, and Visioneer scanners. Removed ids for HP PSC devices as
these are supported by the hpoj userspace driver.
Alan Stern [Mon, 8 Dec 2003 09:08:03 +0000 (01:08 -0800)]
[PATCH] USB: Fix khubd synchronization
It improves synchronization with hub_irq() and guarantees that the hub
disconnect() routine doesn't exit until the URB's completion routine has
finished.
Alan Stern [Mon, 8 Dec 2003 08:54:38 +0000 (00:54 -0800)]
[PATCH] USB: khubd optimization
It changes spin_lock_save() to spin_lock() within the completion routine
and list_del()/INIT_LIST_HEAD() to list_del_init(). It's nothing more
than a minor optimization.
David Brownell [Fri, 5 Dec 2003 03:14:07 +0000 (19:14 -0800)]
[PATCH] USB: ohci, fix iso "bad entry" bug + misc
A while back there were some reports of ohci reporting a "bad entry"
diagnostic, mostly with ISO transfers, which were mysterious until
I recently found an easy way to reproduce it.
This patch:
- Fixes at least one cause of that "bad entry" diagnostic by
waiting for INTR_WDH before completing ED unlink processing.
(Else URB unlinking could free TDs on the donelist, so the
WDH processing would see those entries as "bad".)
- Merges the patch from Darwin Rambo <drambo@broadcom.com>,
coping with CPUs that can't do 16 bit accesses (MIPS).
- Renames a function as start_ed_unlink(), matching its role.
- Fixes minor debug output issues, including a FIXME to tell
more info about TDs on the periodic schedule. And adding
some missing newlines (makes this patch seem big).
Nobody's complained much about that "bad entry" issue lately, but
if necessary that part would be particularly easy to split out.
Please merge to the next kernel that gets USB patches.
Alan Stern [Fri, 5 Dec 2003 03:06:53 +0000 (19:06 -0800)]
[PATCH] USB storage: Issue CBI clear_halt and fix BBB residue
This patch does 2 things (bad, I know -- but they're both pretty small
and pretty obscure).
The CBI specification states in section 2.4.3.1.3 that
... the host shall also issue Clear Feature for Endpoint Halt
to the Bulk In pipe if the device reports that the Data In
command block has Failed.
along with a note in section 2.5.3 that Data Out commands should work
analogously. This patch does that, along with cleaning up the status
detection logic a little.
For Bulk-only transfers we currently ignore the dResidue field in the CSW,
except for reporting it (without byte-swapping!) in a debug message. The
patch uses it to compute the residue value returned to the SCSI layer.
Note that the Bulk-only spec allows devices to transfer more data than
they actually use (i.e., they may add padding or ignore stuff) and then
inform the host of this by means of the dResidue value. The logic used is
simple: our reported residue is the larger of what the device claims and
what we didn't transfer, except that it can't be larger than the total
transfer length.
Pete Zaitcev [Thu, 4 Dec 2003 07:14:51 +0000 (23:14 -0800)]
[PATCH] USB: fix comment in usblp
I know Linus is not taking cleanups at this point, but perhaps
you can delete it in your tree. Seems like someone (Oliver?)
fixed all the garbage in old printer.c, so the comment is not
needed anymore.
I reviewed changes, and usblp.c looks correct. I'm doing backport
to 2.4 for Fedora right now.
Ingo Molnar [Wed, 3 Dec 2003 04:59:12 +0000 (20:59 -0800)]
[PATCH] Fix /proc access to dead thread group list oops
The pid_alive() check within the loop is incorrect. If we are within
the tasklist lock and the thread group leader is valid then the thread
chain will be fully intact.
Instead, the check should be _outside_ the loop, since if the group
leader no longer exists, the whole list is gone and we must not try
to access it.
Hirofumi Ogawa [Mon, 1 Dec 2003 02:40:47 +0000 (18:40 -0800)]
[PATCH] Missing initialization of /proc/net/tcp seq_file
We need to initialize st->state in tcp_seq_start(). Otherwise
tcp_seq_stop() is run with previous st->state, and it calls the unneeded
unlock etc, causing a kernel crash.
Ben Collins [Wed, 26 Nov 2003 04:15:46 +0000 (20:15 -0800)]
[PATCH] Lastminute IEEE-1394 fixes
I've got a lot more changes than what's included here. I've put this
down to the bear minimum to get things working sanely.
Mainly, I just want to get all the people hit by this a chance to use
2.6.0 without having to get our tree. Changes itemized:
- Fix deadlock possibility in csr.c:read_maps()
- Fix kmalloc to use ATOMIC in highlevel.c.
- s/in_interrupt/irqs_disabled/ in ieee1394_transactions.c to fix
warnings when transactions occured.
- Introduce a release callback for the host driver and use it correctly.
- Reorganize the nodemgr probe so we do an initial scan to discover
devices, check IRM/CycleMaster, then do a final full probe when things
are kosher. Fixes a problem where device registration and hotplug
would cause some serious problems when a bus reset was forced in the
middle of the probe.
[PATCH] prevent oops from read of proc entry for tty drivers
There are /proc handles there setup by proc_tty_register_driver, but there is
no module ownership association, so anything that reads after module unload
will blow.
The trivial fix is to propagate the owner of tty_driver to proc entry.
David S. Miller [Mon, 24 Nov 2003 11:44:51 +0000 (03:44 -0800)]
[NET]: In sock_queue_rcv_skb(), do not deref skb->len after it is queued to the socket.
In implementations that use no socket locking, such as RAW sockets,
once we queue the SKB to the socket another cpu can remove the SKB
from the socket queue and free up the SKB making the skb->len access
touch freed memory.
Based upon a report from Burton Windle, kernel bugzilla #937
James Bottomley [Mon, 24 Nov 2003 04:02:15 +0000 (22:02 -0600)]
Fix locking problems in scsi_report_bus_reset() causing aic7xxx to hang
All the users of this function in the SCSI tree call it with the host
lock held. With the new list traversal code, it was trying to take
the lock again to traverse the list.
Fix it to use the unlocked version of list traversal and modify the
header comments to make it clear that the lock is expected to be held
on calling it.
James Bottomley [Sat, 22 Nov 2003 12:21:22 +0000 (06:21 -0600)]
Updated state model for SCSI devices
I've been looking at enforcing lifetime phases for SCSI devices
(primarily to try to get the mid layer to offload as much of the device
creation and hotplug pieces as it can).
I've hijacked the sdev_state field of the struct scsi_device (formerly
this was a bitmap, now it becomes an enumerated state).
I've also begun adding references sdev_gendev into the code to pin the
scsi_device---initially in the queue function, but possibly this should
also be done in the scsi_command_get/put, the idea being to prevent
scsi_device freeing while there's still device activity.
The object phases I identified are:
1. SDEV_CREATED - we've just allocated the device. It may respond to
internally generated commands, but not to user ones (the user should
actually have no way to access a device in this state, but just in
case).
2. SDEV_RUNNING - the device is fully operational
3. SDEV_CANCEL - The device is cleanly shutting down. It may respond to
internally generated commands (for cancellation/recovery) only; all user
commands are errored unless they have already been queued (QUEUE_FULL
handling and the like).
4. SDEV_DEL - The device is gone. *all* commands are errored out.
Ordinarily, the device should move through all four phases from creation
to destruction, but moving SDEV_RUNNING->SDEV_DEL because of surprise
ejection should work.
It's starting to look like the online flag should be absorbed into this
(offlined devices move essentially to SDEV_CANCEL and could be
reactivated by moving to SDEV_RUNNING).
I haven't altered the similar bitmap model that scsi_host has, although
this too should probably move to an enumerated state model.
I've tested this by physically yanking a module out from underneath a
running filesystem with no ill effects (other than a slew of I/O
errors).
The obvious problem is that this kills possible user error handling, but
we don't do any of that yet.
Mike Anderson [Sat, 22 Nov 2003 03:13:02 +0000 (21:13 -0600)]
[PATCH] scsi device ref count (update)
This patch is against scsi-bugfixes-2.6. I updated it based on comments
received. It breaks up the reference count initialization for scsi_device
and restores calling slave_destroy for all scsi_devices configured or
not. I ran a small regression using the scsi_debug, aic7xxx, and qla2xxx
driver. I also had a debug patch for more verbose kobject cleanup and
patch for a badness check on atomic_dec going negative (previously
provided by Linus).
The object cleanup appears to being functioning correctly. I only saw
previously reported badness output:
- Synchronizing SCSI cache fails on cleanup.
- scsi_debug.c missing release (I believe Doug posted a patch)
- aic7xxx warnings on rmmod due to ahc_platform_free calling
scsi_remove_host with ahc_list_lock held.
This patch splits the scsi device struct device register into init and
add. It also addresses memory leak issues of not calling slave_destroy
on scsi_devices that are not configured in.
Details:
* Make scsi_device_dev_release extern for scsi_scan to use in
alloc_sdev.
* Move scsi_free_sdev code to scsi_device_dev_release. Have
previous callers of scsi_free_sdev call slave_destroy plus put_device.
* Changed name of scsi_device_register to scsi_sysfs_add_sdev to
match host call and align with split struct device init.
* Move sdev_gendev device and class init to scsi_alloc_sdev.
Davide Libenzi [Sat, 22 Nov 2003 00:39:48 +0000 (16:39 -0800)]
[PATCH] More SiS interrupt routing
It turns out that the SiS irq routing logic doesn't go by chipset
after all - it's just that some pirq entries are "legacy" numbers,
while others are raw offsets into PCI config space (and the legacy
numbers are more commonly used with the older chipsets, which
explains the correlations).
Adam Belay [Fri, 21 Nov 2003 11:36:07 +0000 (03:36 -0800)]
[PATCH] reserve resources specified by the PnPBIOS properly
A bug prevents the PnP layer from reserving some of the resources
specified by the PnPBIOS. As a result some systems will have
unpredicable (random crashes etc.) problems because of resource
conflicts, especially when PCMCIA support is enabled. This patch
fixes the problem by ensuring that the proper resource data is
reserved.
David Stevens [Fri, 21 Nov 2003 08:49:32 +0000 (00:49 -0800)]
[IPV6]: Fix header length calculation in multicast input.
It did not account for extension headers properly. If we get
this length wrong, we do not determine if a multicast packet
is MLDv1 vs. MLDv2 correctly.
David Mosberger [Fri, 21 Nov 2003 06:10:39 +0000 (22:10 -0800)]
ia64: Drop printk from ia64_ni_syscall(). This is a temporary fix
for 2.6.0. The proper fix is to replace ia64_ni_syscall with
sys_ni_syscall, but that would make the patch quite large, so
we defer that till 2.6.1.
David Mosberger [Fri, 21 Nov 2003 05:25:04 +0000 (21:25 -0800)]
ia64: Fix off-by-1 error in imm60 patching. The bug hasn't been observed
in practice, but it's clearly wrong and just waiting there to
get triggered...
David Stevens [Thu, 20 Nov 2003 08:34:18 +0000 (00:34 -0800)]
[IPV6]: In igmp6_group_queried, fix address check to comply with RFC2710.
RFC2710 says:
1) MLD messages are never sent for multicast addresses whose scope is 0
(reserved) or 1 (node-local).
2) MLD messages ARE sent for multicast addresses whose scope is 2
(link-local), including Solicited-Node multicast addersses [ADDR-ARCH],
except for the link-scope, all-nodes address (FF02::1).
The current MLDv1 code does not send reports for link-scope addresses
and doesn't restrict scope 0. This may break switches that snoop reports for
determining which ports should receive particular addresses. Patch below.
David S. Miller [Wed, 19 Nov 2003 12:50:27 +0000 (04:50 -0800)]
[SPARC64]: Get PCI floppies fully functional again.
EBUS DMA fixes:
- Add EBUS_DMA_FLAG_TCI_DISABLE that the client can set if it
wants only to hear device interrupts, not DMA complete ones.
- When initially resetting the EBUS DMA unit, put valid burst etc.
encodings in the CSR register. Not doing this appears to leave
the attached ISA device in a weird state.
PCI FLOPPY fixes:
- Do ebus_dma_enable() before ebus_dma_request()
- In sun_pci_fd_set_dma_mode() do not forget to set the direction.
- Set EBUS_DMA_FLAG_TCI_DISABLE in ebus_dma flags.
- Make sure that in error paths sun_fdc/FCD1 will be -1 (invalid).
Thanks to Soyoung Park for loaning her Ultra5 to me so I could fix this.