Since the introduction of USER_HZ the SG_[GS]ET_TIMEOUT ioctls may have
a serious BUG as userspace uses a different HZ from the HZ in kernelspace.
In x86 HZ=1000 and USER_HZ=100, resulting in confusing timouts as the
kernel measures time 10 times as fast as userspace.
This patch is an attempt to fix this by transforming USER_HZ based timing to
HZ based timing before storing it in timeout. To make sure that SG_GET_TIMEOUT
and SG_SET_TIMEOUT behave consistently a field timeout_user is added which
stores the exact value that's passed by SG_SET_TIMEOUT and it's returned on
SG_GET_TIMEOUT.
Andrew Morton [Mon, 30 Sep 2002 13:38:52 +0000 (09:38 -0400)]
scsi_initialise_merge_fn() will only set highio if ->type == TYPE_DISK.
But it's called from scsi_add_lun()->scsi_alloc_sdev() before the type
is known. The type is -1 all the time in scsi_initialise_merge_fn()
and scsi always bounces.
This patch makes it do the right thing - just enable block-highmem for
all scsi devices.
Jens had this to say:
"I guess that block-highmem has been around long enough, that I can
use the term 'historically' at least in the kernel sense :-)
This extra check was added for IDE because each device type driver
(ide-disk, ide-cd, etc) needed to be updated to not assume virtual
mappings of request data was valid. I only did that for ide-disk,
since this is the only one where bounce buffering really hurt
performance wise. So while ide-cd and ide-tape etc could have been
updated, I deemed it uninteresting and not worthwhile.
Now, this was just carried straight into the scsi counter parts,
conveniently, because of laziness. A quick glance at sr shows that it
too can aviod bouncing easily (no changes needed). st may need some
changes, though. So again, for scsi it was a matter of not impacting
existing code in 2.4 too much.
So TYPE_DISK check can be killed in 2.5 if someone does the work of
checking that it is safe. I'm not so sure it will make eg your SCSI
CD-ROM that much faster :-)"
David Brownell [Mon, 30 Sep 2002 09:45:33 +0000 (02:45 -0700)]
[PATCH] usb_sg_{init,wait,cancel}()
Here are the scatterlist primitives there's been mail about before.
Now the code has passed basic sanity testing, and is ready to merge
into Linus' tree to start getting wider use. Greg, please merge!
To recap, the routines are a utility layer packaging several usb
core facilities to improve system performance. It's synchronous.
The code uses functionality that drivers could use already, but
generally haven't:
- Request queueing. This is a big performance win. It lets
device drivers help the hcds avoid wasted i/o bandwidth, by
eliminating irq and scheduling latencies between requests. It
can make a huge difference at high speed, when the latencies
often exceed the time to handle each i/o request!
- The new usb_map_sg() primitives, leveraging IOMMU hardware
if it's there (better than entry-at-a-time mapping).
- URB_NO_INTERRUPT transfer flag, a hint to hcds that they
can avoid a 'success irq' for this urb. Only the urb for
the last scatterlist entry really needs an IRQ, the others
can be eliminated or delayed. (OHCI uses this today, and
any HCD can safely ignore it.)
The particular functionality in these APIs seemed to meet Matt's
requirements for usb-storage, so I'd hope the 2.5 usb-storage
code will start to use these routines in a while. (And maybe
those two scanner drivers: hpusbscsi, microtek.)
Brief summary of testing: this code seems correct for normal
reads and writes, but the fault paths (including cancelation)
haven't been tested yet. Both EHCI and OHCI seem to be mostly
OK with these more aggressive queued loads, but may need small
updates (like the two I sent yesterday). Unfortunately I have
to report that UHCI and urb queueing will sometimes lock up my
hardware (PIIX4), so while we're lots better than 2.4 this is
still a bit of a trouble spot for now.
I'll be making some testing software available shortly, which
will help track down remaining HCD level problems by giving the
queuing APIs (and some others!) a more strenuous workout than
most drivers will, in their day-to-day usage.
Matthew Dharm [Mon, 30 Sep 2002 09:43:41 +0000 (02:43 -0700)]
[PATCH] USB-storage: problem clearing halts
Greg, attached is a patch designed for diagnostic purposes. Please apply
to the 2.5 tree -- yes, we'll be removing this at some point in the future.
It appears that we have a problem clearing halts. This patch causes a very
clear message to be printed whenever a usb_stor_clear_halt() manages to
work. So far, I haven't seen such a thing happen. And I've seen _lots_ of
STALL conditions.
This problem has likely been around for a while... however, it hasn't been
noticed before because usb-storage was difficult to use because of other
bugs. Heck, the most recent 'bk pull' is the first one for me in _months_
which let me boot all the way into X11.
I'm going to hold my patch queue until this is resolved. On my test setup,
it's easy to see this failing. I've tried with 4 different devices, with
both UHCI and EHCI drivers. I don't want to confuse this problem with
other patches...
'result' in this function always seems to be -32. Which is odd, because
control endpoints shouldn't do that.
I'm open to suggestions as to where to look for this bug, but my instincts
are telling me that this is a core or HCD issue, not a usb-storage issue.
On a positive note, this means that the error-recovery system gets a good
workout.
Russell King [Tue, 1 Oct 2002 00:57:43 +0000 (01:57 +0100)]
[ARM] General cleanups/missed bits in previous csets
This corrects spelling mistakes, adds missed configuration for
cpufreq, corrects free_irq comment, etc.
Russell King [Mon, 30 Sep 2002 23:57:26 +0000 (00:57 +0100)]
[ARM] Fix sa1111 IRQ handling
We must clear down all currently pending IRQs before servicing any
IRQ on the chip. This prevents immediate recursion into the
interrupt handling paths when we service the first IRQ.
Russell King [Mon, 30 Sep 2002 21:23:43 +0000 (22:23 +0100)]
[ARM] Update SA1111 core and related drivers for LDM.
This cset updates the SA1111 core, PCMCIA, OHCI and keyboard drivers,
allowing them to take advantage of the Linux device manager code;
this implements initial suspend/resume support for the SA1111 in the
core. Many existing drivers currently rely on the old PM-based
interface for suspend/resume support.
David Brownell [Mon, 30 Sep 2002 09:41:46 +0000 (02:41 -0700)]
[PATCH] ohci-hcd, paranoia
In a test where some memory corruption happened, I noticed an
oops (null pointer exception in_irq) that's avoidable. Here's
a patch that avoids it ... anyone seeing the err() is likely
to hang some process, but that's better than the alternative.
(Also inlines some used-once routines, saving a bit of space
to make up for the new diagnostic.)
David Brownell [Mon, 30 Sep 2002 09:41:16 +0000 (02:41 -0700)]
[PATCH] ehci-hcd, urb queuing
In doing some more extensive testing of the urb queueing behavior,
I noticed that (a) IOC wasn't always being set for each urb, while
for now it needs to be set; (b) a qh patchup wasn't done quite
where it should be. This resolves those two issues, as well
as making it a bit less noisy to unlink lots of urbs at the once.
David Brownell [Mon, 30 Sep 2002 09:28:15 +0000 (02:28 -0700)]
[PATCH] usbcore misc cleanup
This has minor usbcore cleanups:
DOC:
- the changes passing a usb_interface to driver probe() and disconnect()
weren't reflected in their adjacent docs. likewise they still said
it was possible to get a null usb_device_id (no more).
- the (root) hub API restrictions from rmk's ARM patch weren't
flagged
- mention the non-dma-coherent cache issue for usb_buffer_alloc()
- mention disconnect() cleanup issue with usb_{control,bulk}_msg()
[ you can't cancel those urbs from disconnect() ]
CODE
- make driver ioctl() use 'usb_interface' too ... this update
also resolves an old 'one instance per device' bad assumption
- module locking on driver->ioctl() was goofy, kept BKL way too
long and didn't try_inc_mod_count() like the rest of usbcore
- hcd unlink code treated iso inappropriately like interrupt;
only interrupt still wants that automagic mode
- move iso init out of ohci into shared submit_urb logic
- remove interrupt transfer length restriction; hcds that don't
handle packetization (just like bulk :) should be updated,
but device drivers won't care for now.
Dave Jones [Mon, 30 Sep 2002 08:45:33 +0000 (01:45 -0700)]
[PATCH] trivial bits.
Adrian Bunk went through .39-dj, and pulled out a bunch of
trivial bits (docs changes, whitespace fixes etc)
- CREDITS: update the web-address of Tigran A. Aivazian
- Documentation/Changes: higher minimum version of reiserfsprogs
- s/www.linuxdoc.org/www.tldp.org/g in:
- Documentation/DocBook/sis900.tmpl
- Documentation/kernel-docs.txt
- Documentation/scsi-generic.txt
- Documentation/scsi.txt
- Documentation/sound/oss/PAS16
- Documentation/filesystems/isofs.txt: document where to get ISO 9660
docs from
- Documentation/networking/00-INDEX: document that e100.txt and e1000.txt
are present
- typo fixes in:
- Documentation/networking/ip-sysctl.txt
- Documentation/s390/Debugging390.txt
- drivers/ide/Config.help
- MAINTAINERS:
- update location of the emu10k1-devel and linux-mips lists
- Remy Card is no longer ext2 maintainer
- list Andrew Morton instead of Remy Card as second ext3 maintainer
- update mail addresses of Riley H. Williams and Jack Hammer
- misc whitespace -> tab fixes
- arch/mips/kernel/time.c: correct the location of a README
- whitespace -> tab fixes in
drivers/net/{3c505,3c509,arcnet/arcnet,at1700,hamradio/scc,ni65,
pcmcia/aironet4500_cs}.c and drivers/net/wan/lmc/lmc_var.h
- drivers/pci/quirks.c: update URL
- remove tabs/whitespace at the end of lines in:
- drivers/tc/lk201-map.map
- drivers/tc/lk201-remap.c
- drivers/tc/zs.h
- fs/jfs/jfs_logmgr.c: remove two extra empty lines
- include/linux/auto_fs.h: s/__x86_64/__x86_64__/
In two drivers a wrong size of memory was allocated for cpufreq_driver: as
it must include NR_CPUS times a struct cpufreq_policy (and not struct
cpufreq_freqs). Thanks to Petr Vandrovec for this patch.
Alexander Viro [Mon, 30 Sep 2002 06:22:56 +0000 (23:22 -0700)]
[PATCH] alloc_disk/put_disk
Beginning of proper refcounting. New helpers introduced, several drivers
switched to using them for dynamic allocation of gendisks. Once everything
is switched (and that will be way easier than per-drive gendisks series)
we will be able to add sane reference counts on gendisk, at which point
we can safely put pointer to gendisk in struct block_device / struct request
and we had pretty much won - from that point it's pretty straightforward
crapectomy in drivers.
Alexander Viro [Mon, 30 Sep 2002 06:21:56 +0000 (23:21 -0700)]
[PATCH] ->major_name inlined
char *major_name replaced with char disk_name[16]; All uses of ->major_name
replaced with those of ->disk_name and (obviously) simplified big way. Bunch
of arrays, kmallocs, etc. is gone.
Alexander Viro [Mon, 30 Sep 2002 05:41:32 +0000 (22:41 -0700)]
[PATCH] get_gendisk() prototype change
get_gendisk() now takes dev_t (instead of kdev_t) and gets an additional
argument - int *part. Set to 0 for non-partitioned, partition number
for partititoned. Callers updated. Yes, I hate passing return values
that way ;-/ We need that since old "minor(dev) - disk->first_minor"
doesn't work for stuff with non-trivial numbers (e.g. floppy) and
get_gendisk() really has to return both gendisk and partition number.
Fortunately, amount of callers of gendisk() is about to drop RSN big way...
Alexander Viro [Mon, 30 Sep 2002 05:41:00 +0000 (22:41 -0700)]
[PATCH] gendisks list switched to list_head
The list used to generate /proc/partitions turned into list_head one;
we also restore the old order of elements (originally we added to the end
of list; recent changes had reverted that, now we are back to original
order).
These days we only require a clear of BIO_UPTODATE on -EIO, we don't set
it on success. This breaks raid5. It appears to clear BIO_UPTODATE fine
but doesn't start out with it set.
This makes loop honor the queue restrictions by basically stacking all
of those, and mirroring the merge_bvec_fn() on the target queue. It also
switches loop to use per-loop device queues, since that is the only sane
way to do this from a performance POV. Also, in principle I find it to
be much nicer if every distinct block device has its own queue.
There's really no reason to BUG() out on a bio that is too big, the
gentleman thing to do would be to print a warning and just end the bio
with -EIO quietly.
The might_sleep() thing caught ide, which calls request_irq() with a
lock held. It can be argued that this is a bad thing, however I think it
can also validly be argued that requesting an irq should not be a
blocking operation. This might even remove some driver bugs where usage
count is not incremented during init...
It can also be argued, that the very first irq requests cannot be
blocking for io anyways, for good reason :-)
This fixes a procfs crash noticed by Anton Blanchard.
The procfs code can have a reference even to an already exited task, so
it needs to follow special rules accessing p->sig. The atomic-signals
patch made this bug happen at a much higher frequency, but procfs i
believe was buggy ever since, it potentially used the freed signal
structure - which just did not result in a crash like it does today.
The proper fix is to take the tasklist read-lock in
collect_sigign_sigcatch(), this excludes __exit_sighand() freeing the
signal structure prematurely.
Rob Scott [Sun, 29 Sep 2002 22:04:50 +0000 (23:04 +0100)]
[ARM PATCH] 1243/1: Add support for Ceiva Photoframe, part2: machine specifics (fixed)
Adds machine specific support for Ceiva Photoframe. Affects:
arch/arm/mach-clps711x/Makefile
arch/arm/mach-clps711x/ceiva.c (new)
include/asm-arm/arch-clps711x/hardware.h
include/asm-arm/arch-clps711x/memory.h
Differences from 1st patch:
Removed redundant static I/O mapping for flash from hardware.h
Reverted to original CONFIG_DISCONTIGMEM enabling in memory.h
Added PHYS_TO_NID definition, when DISCONTIG undefined in memory.h
Nicolas Pitre [Sun, 29 Sep 2002 21:21:59 +0000 (22:21 +0100)]
[ARM PATCH] 1293/1: fix to the ARM optimized strchr()
Two bugs here:
1) The return value of strchr("foo",0) should be the start address of
"foo" + 3, not NULL.
2) Since the second argument for strchr() is defined as an int, some
characters such as 'é' might validly end up to be the value -23 due to
signedness issues. Corectly handle those.
Russell King [Sun, 29 Sep 2002 20:10:32 +0000 (21:10 +0100)]
[ARM] Bring asm/setup.h and asm/unistd.h into line with main ARM tree
This removes some minor differences between Linus' tree and the main
ARM tree; comment clarification and some weird formatting.
[ARM PATCH] 1260/1: Fix comment in nwfpe
Hi,
I believe the comment in the nwfpe fpopcodes is slightly wrong -
although a 2nd pair of eyes on this would be a good idea.
[ARM PATCH] 1257/1: Helpful comment in stat.h
Hi,
For reasons of great complexity I found out the hard way that the
kernel must (and does) zero the pad sections in the stat structures.
Here is a comment that states this for the next person who needs to
know.
David Gibson [Sun, 29 Sep 2002 15:13:32 +0000 (08:13 -0700)]
[PATCH] Fix: Orinoco driver update
Crud. Looks like my patch making script was borken, so orinoco_pci.c
wasn't updated properly. The patch below should fix that, and adds
some other minor updates (driver version 0.13a) as well.