Mike Anderson [Thu, 23 Oct 2003 04:16:59 +0000 (23:16 -0500)]
[PATCH] Add release function to sd for scsi_disk structure
This patch removes the delay in calling device_del on the sdev struct
device during a surprise removal event. Reference counting functions for
sd's scsi_disk structure where also added to fix issues of unregistering
when a sd is open.
I have tested this patch using scsi_debug with differnt combinations of
adds / removes. I mounted both partitioned and un-partitioned sd disks,
remove the host, and then did a umount. The ref count debug output shows
the objects staying in place prior to the umount and cleaning up once
the umount is called.
This patch fixes an issue with a delayed call of device_del on the
sdev_gendev struct device.
- Remove the delayed call to device_del.
- Add kobject to sd scsi_disk structure.
- Add release function for scsi_disk kobject.
- Add get / put functions for scsi_disk and calls to these
functions.
Re-roll of the patch against 2.6.0-test6 to allow overriding or setting of
mode sense related flags, includes Alan Stern's as95 patch minus his
scsiglue.c changes.
Moves scsi_devinfo.h for use outside of drivers/scsi, and adds three new
devinfo flags:
Adds a per host template flags, and use of it in scsiglue.c. The per host
value can be overridden by a devinfo entry, the patch does not allow
scsi_default_dev_flags to override default host values.
USB mass storage and removable media (for testing mode page 3f use) were
not tested, if you have a USB storage device that still chokes on mode
sense 3f please give this a spin.
Mike Christie [Thu, 16 Oct 2003 14:17:01 +0000 (19:47 +0530)]
[PATCH] fix oops caused when writing to the rescan attribute
If an upper layer driver is not loaded, and you write to a device's
rescan attribute you will get an oops. The attached patch fixes this by
testing if the device's driver variable is set before accessing it.
Scott Feldman [Tue, 14 Oct 2003 10:15:35 +0000 (06:15 -0400)]
[PATCH] hang on ZEROCOPY/TSO when hitting no-Tx-resources
* Critical bug fix: under heavy Tx stress using ZEROCOPY or TSO, if we
ran out of Tx descriptors, we didn't calculate for the context
descritor used as the first of the ZEROCOPY/TSO send, nor do we clean
up the context desriptor bits in the case where the send isn't going
to fit, where we need to undo the mappings. This bug was introduced
with the 5.2.16 patch set which included a workaround for a hang
on 82544 over PCI-X. This workaround cause the check for no-Tx-
rosource logic to change, and this bug slipped in.
Scott Feldman [Tue, 14 Oct 2003 09:52:16 +0000 (05:52 -0400)]
[PATCH] ethtool_ops eeprom stuff
Finally got around to adding ethtool_ops to e100-3.0.x. I found a bug
with get_eeprom() and it seems to work best if we add get_eeprom_len() to
the ops list. Also moved check for offest + len < size into ethtool.c.
I was able to test [GS]EEPROM, PHYS_ID, GSTATS, GSTRINGS, and TEST, and
everything looks good.
Russell King [Tue, 14 Oct 2003 09:40:23 +0000 (05:40 -0400)]
[PATCH] Fix pcnet_cs network hotplug
pcnet_cs registers the network device too early. The effect of this
is that the networking hotplug scripts are unable to bring the device
up automatically.
There are two issues:
- we were registering the net device before we finished setting up
the device (eg, reading the MAC address.)
- we were using DEV_CONFIG_PENDING to block the net device "open"
callback, and as we know the other methods may be called prior
to open.
My only concern with this patch is that we set info->node.dev_name
after we register the net device, so use of cardctl during the
hotplug scripts may give unexpected results. However, I am not
aware of anyone using cardctl to read the device name in network
hotplug scripts.
Linus Torvalds [Mon, 13 Oct 2003 14:50:54 +0000 (07:50 -0700)]
Mark timer as running in the timer base _before_ we clear the pending
flag (and order it on SMP), so that del_timer_sync() always sees the
timer either pending or running if it is active.
In 2.6.0-test6, I put in a patch which fixed sealevel driver, but broke
all the other wan devices because it got rid of one level of indirection.
This puts back the indirection, and hopefully prevents others from
misreading it the same way. The SPPP drivers expect that
netdev->priv points to device local structure whose first element
is a pointer to the ppp device.
Manfred Spraul [Mon, 13 Oct 2003 04:43:13 +0000 (21:43 -0700)]
[PATCH] avoid crashes due to unaligned stacks
This fixes the stack end detection properly, and verifies that the
stack content printing does not overflow into the next page even
partially.
This is required especially for x86 BIOSes that misalign the stack,
together with the page access debugging that unmaps unused kernel
pages to check for valid accesses.
Architectures with special needs (eg HPPA with stacks that grow up)
can override the kernel stack end test with __HAVE_ARCH_KSTACK_END
if they ever enable the anal slab debugging code.
David Woodhouse [Mon, 13 Oct 2003 02:35:05 +0000 (19:35 -0700)]
[PATCH] Kernel thread signal handling.
- add disallow_signal() to complement allow_signal(), rather than
having different subsystems try to do it by hand.
- add a version of dequeue_signal() which does the necessary locking on
its own, again to avoid having modules have to care.
- let allow_signal() to actually allow signals other than
SIGKILL. Currently they get either converted to SIGKILL or
silently dropped, according to whether your kernel thread
happens to have sa_handler set for the signal in question.
(Barf alert: we do this by just installing a dummy handler)
Linus Torvalds [Sun, 12 Oct 2003 12:09:55 +0000 (05:09 -0700)]
Clear IRQ_INPROGRESS as part of "enable_irq()".
It can have gotten set by a stray interrupt if there were
no handlers while the IRQ was disabled, and we shouldn't
confuse other parts (ie this is another safety-net for the
issues that Al Viro brought up about disable_irq() deadlocks
when no handlers exist).
Fix VIA-based TB/Decrementer calibration , previously it wouldn't work
properly with HZ != 100, causing tb_to_us to be wrong and gettimeofday()
to return strangely "off" results
There is a bug in cpufreq call back funtion in timer_tsc routines,
that can result in system deadlock. The issue is: grabbing the
write_lock on xtime_lock without disabling the interrupts. So,=20
if we happen to get a timer interrupt while we are in this code,
system will go into a deadlock.
This bug only effects the kernels that have CONFIG_CPU_FREQ enabled.
Ingo Molnar [Sat, 11 Oct 2003 12:54:53 +0000 (05:54 -0700)]
[PATCH] SMP races in the timer code
This fixes two del_timer_sync() races that are still in the timer code.
The first race was actually triggered in a 2.4 backport of the 2.6 timer
code. The second race was never triggered - it is mostly theoretical on
a standalone kernel. (It's more likely in any virtualized or otherwise
preemptable environment.)
Both races happen when self-rearming timers are used. One mainstream
example is kernel/itimer.c. The effect of the races is that
del_timer_sync() lets a timer running instead of synchronizing with it,
causing logic bugs (and crashes) in the affected kernel code. One
typical incarnation of the race is a double add_timer().
CPU0 gets stuck at the [*] code-point briefly - after the timer->base has
been set to NULL, but before the base->running_timer pointer has been set
up. This is a fundamentally volatile scenario, as there's _zero_ knowledge
in the data structures that this timer is about to be executed!
Now CPU1 comes along and calls del_timer_sync(). It will find nothing -
neither timer->base nor base->running_timer will cause it to synchronize.
It will return and report that the timer has been deleted - shortly
afterwards CPU1 continues to execute the timer fn, which will cause
crashes.
This particular race is easy to fix by reordering the timer->base
clearing with set_running_timer(), and putting a wmb() between them, but
there's more races:
race #2
The checking of del_timer_sync() for 'pending or running timer' is
fundamentally unrobust. Eg. if CPU0 gets stuck at the [***] point below:
base = &per_cpu(tvec_bases, i);
if (base->running_timer == timer) {
while (base->running_timer == timer) {
cpu_relax();
preempt_check_resched();
}
[***]
break;
}
}
smp_rmb();
if (timer_pending(timer))
goto del_again;
then del_timer_sync() has already decided that this timer is not running
(we just finished loop-waiting for it), but we have not done the
timer_pending() check yet.
If the timer has re-armed itself, and if the timer expires on CPU1 (this
needs a long delay on CPU0 but that's not hard to achieve eg. in UML or
with kernel preemption enabled), then CPU1 could start to expire the
timer and gets to the [**] point in __run_timers (see above), then CPU1
gets stalled and CPU0 is unstalled, then the timer_pending() check in
del_timer_sync() will not notice the running timer, and del_timer_sync()
returns - while CPU1 is just about to run the timer!
Fixing this second race is hard - it involves a heavy race-check
operation that has to lock all bases, and has to re-check the
base->running_timer value, and timer_pending condition atomically.
This fix also fixes the first race, due to forcing del_timer_sync() to
always observe the timer state atomically, so the [*] code point will
always synchronize with del_timer_sync().
The patch is ugly but safe, and it has fixed the crashes in the 2.4
backport. I tested the patch on 2.6.0-test7 with some heavy itimer use
and it works fine. Removing self-arming timers safely is the sole
purpose of del_timer_sync(), so there's no way around this overhead i
think. I believe we should ultimately fix all major del_timer_sync()
users to not use self-arming timers - having del_timer_sync() in the
thread-exit path is now a considerable source of SMP overhead. But this
is out of the scope of current 2.6 fixes of course, and we have to
support self-arming timers as well.
Jesse Barnes [Fri, 10 Oct 2003 11:35:59 +0000 (04:35 -0700)]
[PATCH] ia64: nable SN2 in generic builds
Now that it works, we can enable sn2 in generic builds. This should not
only allow generic kernels to work on sn2, but also fix the build
problems people have been seeing with the qla1280 driver. I tested a
generic kernel built with this patch on zx1 and it worked.
Tony Luck [Fri, 10 Oct 2003 09:53:34 +0000 (02:53 -0700)]
[PATCH] ia64: fix register numbers in MCA save/restore
This corrects the save/restore code in mca_asm.S
which was written long ago, before the assembler understood
mnemonic names for 'cr' and 'ar' registers (in fact it
appears to have been written pre-silicon, some of the
control register numbers don't match with what actually
got built). There were other goofs too (like using
0, 1, 2, etc. for region register subscripts).
David Mosberger [Fri, 10 Oct 2003 09:17:14 +0000 (02:17 -0700)]
ia64: Patch by Jesse Barnes:
This patch fixes the combination of CONFIG_DISCONTIGMEM and
CONFIG_VIRTUAL_MEM_MAP so that generic kernels will work on all ia64
platforms, including sn2, and also makes sn2 specific kernels work
(which I think is a first).
I've cleaned this patch up heavily based on feedback from yourself,
Christoph and others. I've tested sn2, zx1, and dig (thanks Xavier!)
specific configurations, as well as a generic configuration that allows
the same binary to boot on zx1, dig, and sn2.
Dave Jones [Fri, 10 Oct 2003 23:31:17 +0000 (00:31 +0100)]
Merge wopr.codemonkey.org.uk:/mnt/nfs/sepia/bar/src/kernel/2.6/trees/bk-linus
into wopr.codemonkey.org.uk:/mnt/nfs/sepia/bar/src/kernel/2.6/trees/cpufreq
Dave Jones [Fri, 10 Oct 2003 23:24:13 +0000 (00:24 +0100)]
[CPUFREQ] Kill longhaul warnings
(Blah about unused variables).
This code still won't be used, as its still not tested/debugged properly
on a Nehemiah.
Dave Jones [Fri, 10 Oct 2003 21:57:10 +0000 (22:57 +0100)]
[CPUFREQ] Fix longhauls speed calculations.
We got half multipliers horribly wrong, which made us think we could
clock the CPU much higher than we actually could.
Dave Jones [Fri, 10 Oct 2003 21:02:19 +0000 (22:02 +0100)]
[CPUFREQ] Make VIA longhaul work on Samuel2 & Ezra again.
These CPUs are actually only longhaul v1 compliant.
This was catastrophic, as the MSRs moved between v1 and v2.
There was also massive confusion in the documentation regarding Ezra.
It's not another variant, so 'v2' never existed.
Renamed v3 (Powersaver) to v2 as a result of this.
[PATCH] I2C: fix i2c-dev class release function bug.
There was no release function, that was the bug :)
It caused bad messages to show up in the syslog whenever a i2c driver was removed, and could
easily oops.
Alexander Malysh [Fri, 10 Oct 2003 07:11:04 +0000 (00:11 -0700)]
[PATCH] I2C: i2c-sis630 driver fixes
attached you can find a patch that should fix i2c-sis630 driver for
2.6.0-X kernel. With i2c-sis630 from stock 2.6.0-X we have oops and
driver was not correct registered against i2c-core.
Changes:
1) fixed a oops while modprobing
2) added check for buffer overflow for i2c block data read transaction
3) added 'force' modprobe parameter. It's allow more easily
testing for not yet supported SiS chips.