Stas Sergeev [Fri, 7 May 2004 02:35:35 +0000 (19:35 -0700)]
[PATCH] Fix IO bitmap invalidate
There is a bug where if any process that obtained an IO access
permissions via ioperm() does not explicitly "drop" that permissions,
the IO permissions don't get properly invalidated on process exit.
The cause is that exit_thread() only invalidates the per-thread
io_bitmap pointer, but doesn't invalidate the per-TSS io_bitmap pointer
as well.
As the per-thread pointer is invalidated, __switch_to() doesn't take
care of that one either, so the per-TSS pointer stays valid as long as
some other process does ioperm().
This fixes the problem - it invalidates the per-TSS io_bitmap pointer
and the problem goes away.
When Patrick removed ide_notify_reboot() in 2.5.42, he didn't notice
that it meant that IDE no longer had any shutdown() functionality.
So we did the right thing on suspend, but not on shutdown.
ide_notify_reboot() was only doing STANDBY on shutdown (because FLUSH
'doesn't work' in 2.4 too) but it worked okay and we still should do STANDBY
on shutdown because some broken disks flush their caches.
Thus just calls bus->suspend() (FLUSH+STANDBY) at shutdown time. We can
add some safety delay later - 2.4 doesn't have any.
I've updated the logips2pp driver to detect the MX310 and MX510 mice
and also made it more maintainable by putting everything into one
table instead of having 4 arrays for them (the MX700 support wasn't
added correctly in the last revision).
[PATCH] IDE disk cache flush at unopportune momemnts
This makes the idedisk_release function only flush the cache on final
release; with the recent 2.6 blocklayer updates release gets called
somewhat frequently, and at times where IO is outstanding to the disk.
This bug didn't trigger before simply because ide_cacheflush_p() always
was a nop.
Nitin A. Kamble [Thu, 6 May 2004 23:26:06 +0000 (16:26 -0700)]
[PATCH] mxcsr patch for i386 & x86-64
This enables proper mxcsr register masking: the magic mask "0xffbf"
is not necessarily correct for all CPU's, and there is an architected
way to discover the proper MXCSR feature bits by examining the fxsave
results.
Please refer to IA32 Software Developer's Manual, Volume 1, Section
11.6.6 for more details.
Petr Vandrovec [Thu, 6 May 2004 03:22:19 +0000 (20:22 -0700)]
[PATCH] ncpfs data corruption when using large TCP transfers
ncpfs was forgetting to update iovec's iov_base field whenever partial
transmission occured. This was causing data corruption during large
(60kB) writes.
The code now also passes copy of iovec to the sock_sendmsg, so it does
not rely on network stack updating (or not updating) passed iovec in
case of success (or failure).
Paul Wagland [Thu, 6 May 2004 00:50:40 +0000 (17:50 -0700)]
[PATCH] bug fix for megaraid memory leak
I was going through the code looking for bits and pieces to pull across
into the new LSI Logic beta megaraid driver /sys fs code and came across
this one.
LSI Logic have already fixed this issue for the 2.4 driver, and the new
beta driver does not use the /proc filesystem at all, so no problem
there.
The problem is that resources are not freed upon certain error
conditions in the in-kernel megaraid driver, to quote from Lester
Hightower (who originally found the issue):
"The problem occurs only in the circumstance where one reads one of
the /proc/megaraid/hba<X>/diskdrives-ch<N> files where the card <X>
does not have channel <N> on it. Most people would likely not
notice this leak in normal operation, but due to the way that we
monitor our MegaRaid cards in our company (we read these /proc
entries every 180s) so we found the leak rather quickly, and
unpleasantly (when your kernel eats all your RAM)."
Anyway, here is the fix, compiled and tested OK for me.
From: Alan Cox <alan@redhat.com>, Arjan van de Ven <arjanv@redhat.com>
- calculate drive->wcache for non-removable disks too
- flush the cache before unlocking the door on removable media,
otherwise you have a small race with the human
There is an bug in bigsmp sub-architecture, due to which it will not
enable all the CPUs when the BIOS-APICIDs are not 0 to n-1 (where n is
total number of CPUs). Particularly, only 2 CPU comes up on a system
that has 4 CPUs with BIOS APICID as (0, 1, 6, 7).=20
The bug is root caused to check_apicid_present(bit) call in smpboot.c,
when bigsmp is expecting apicid in place of bit.
check_apicid_present(bit) in bigsmp subarchitecture checks the bit with
phys_id_present_map (which is actually map representing all apicids and
not bit).
One solution is to change check_apicid_present(bit) to
check_apicid_present(apicid), in smp_boot_cpus(). But, it can affect
all the other subarchitectures in various subtle ways. So, here is a
simple alternate fix (Thanks to Martin Bligh), which solves the above
problem.
[ Confirmation from Martin:
Looks fine, it's exactly the same fix we use for Summit. Since
we're using the other method instead of the bitmap, this check
isn't needed, so we can just bypass it. This way also has the
great advantage of being isolated to the bigsmp subarch, so it only
needs testing there ;-)
]
Andrew Morton [Wed, 5 May 2004 09:46:18 +0000 (02:46 -0700)]
[PATCH] cciss update
From: <mikem@beardog.cca.cpqcorp.net>
This patch adds support for 2 new controllers. The first is a PCI-Express
version of the 6400. The second is actually a SATA controller using the cciss
interface.
[PATCH] fixup for C1 Halt Disconnect problem on nForce2 chipsets
Based on information provided by "Allen Martin" <AMartin@nvidia.com>:
A hang is caused when the CPU generates a very fast CONNECT/HALT cycle
sequence. Workaround is to set the SYSTEM_IDLE_TIMEOUT to 80 ns.
This allows the state-machine and timer to return to a proper state within
80 ns of the CONNECT and probe appearing together. Since the CPU will not
issue another HALT within 80 ns of the initial HALT, the failure condition
is avoided.
[PATCH] allow drivers to claim the lapic NMI watchdog HW
Here is an updated lapic NMI ownership tracking patch which
should address the issues that were raised with the first one:
- Simplified the API function names to {reserve,release}_lapic_nmi().
- Rewrote the ownership tracking code to use two individually named
flags instead of using arithmetic and the sign. The code is now
simple enough that no "hiding" macros are needed. (Thanks Albert
for that suggestion.)
Gerd Knorr [Wed, 5 May 2004 01:16:54 +0000 (18:16 -0700)]
[PATCH] Fix oops in video_register_device
degerrit@web.de wrote:
"I caused an oops in unusual circumstances by accidentally "forcing" a
video device number which was too high or already taken (don't know
which). I assume this probably shouldn't give an oops (though it was my
fault), so here's a bugreport..."
Fixed by adding a range check for the number passed in by the driver.
This adds some initial support for the latest model of iBook G4 (still
need some work on the clock chip at least and some radeonfb updates that
I'll send later along with other fixes for this driver).
It also removes a useless delay and fixes detection of the airport card
on the "Windtunnel" class desktop G4 machines.
[PATCH] ppc/ppc64: Cleanup PPC970 CPU initialization
This cleans up the code used to initialize the 970 CPU.
More specifically, it adds support for the 970FX, makes sure we don't
touch registers we aren't supposed to when running in LPAR mode, and
stop blindly zeroing out HID4 and HID5, we just clear the bits we really
want clear in there and leave the rest to the firmware.
Chris Wright [Tue, 4 May 2004 11:48:34 +0000 (04:48 -0700)]
[PATCH] fix queues_count accounting in mqueue_delete_inode()
During mqueue_get_inode(), it's possible that kmalloc() of the
info->messages array will fail. This failure mode will cause the
queues_count to be (incorrectly) decremented twice. This patch uses
info->messages on mqueue_delete_inode() to determine whether the
mqueue was every truly created, and hence proper accounting is needed
on destruction.
Alex Williamson [Tue, 4 May 2004 17:18:13 +0000 (18:18 +0100)]
[SERIAL] 8250_hcdp needs irq sharing
Patch from Alex Williamson
Here's a trivial patch that makes 8250_hcdp setup the correct flags
when IRQ sharing is enabled for serial ports.
The HCDP table tells us if the device is a PCI UART. We can use this
to set the shared interrupt flag as well as program the interrupt with
the correct polarity/trigger (should get rid of "changing vector <x>
from IO-SAPIC-edge to IO-SAPIC-level" messages at bootup). This also
allows non-PCI UARTs to be left un-shareable, which is likely much
more safe (edge triggered).
The bit that I'm keying on is still part of the older 1.0a HCDP spec,
so should be implemented (it was on all the boxes I tested). If
there's firmware out there that doesn't set this bit or the interrupt
supported flag, the HCDP UART may run in polling mode, but should
still be functional.
Daniel Ritz [Tue, 4 May 2004 22:31:38 +0000 (23:31 +0100)]
[PCMCIA] add EnE specific initialization to fix HDSP
Patch from Daniel Ritz.
This patch clears an almost undocumented EnE specific test register
that makes sound on RME Hammerfall DSP Carbus work...should even work
after suspend.
Andrew Morton [Tue, 4 May 2004 11:10:36 +0000 (04:10 -0700)]
[PATCH] report size of printk buffer
From: <Andries.Brouwer@cwi.nl>
In the old days the printk log buffer had a constant size, and dmesg asked
for the 4096, later 8192, later 16384 bytes in there. These days the
printk log buffer has variable size, and it is not easy for dmesg to do the
right thing, especially when doing a "read and clear". The patch below
adds a syslog subfuntion that reports the buffer size.
Chris Wright [Tue, 4 May 2004 11:10:25 +0000 (04:10 -0700)]
[PATCH] fix memleak in sys_mq_timedsend
Move error handling to capture all three possible error conditions on
sending to a full queue. Without this fix any unprivileged user can
leak arbitrary amounts of kernel memory.
Paul Mackerras [Tue, 4 May 2004 00:57:39 +0000 (17:57 -0700)]
[PATCH] ppc32: Updated boot fix
This fixes booting on some PPC32 machines, notably CHRP and powermac
machines. This is a modified version of Tom Rini's patch that addresses
the concerns I had with it.
The problem was that the linker script was getting included in the list
of things that got put together to make some of the sorts of bootable
images that we produce. This removes ld.script in cases where it wasn't
appropriate and changes the rules in others so that although we have the
dependency on ld.script, it doesn't get included in the list of things
to link.
David Gibson [Tue, 4 May 2004 00:57:29 +0000 (17:57 -0700)]
[PATCH] ppc64: Use slbie, not slbia in hugepage code
On PPC64, when we prepare segments below 4G for use with hugepages, we
need to flush their entries from the SLB, in case SLB entries
specifying normal pages were already present.
Previously we did that by flushing the entire SLB, the patch below
changes this to individually flush each necessary segment with slbie.
The new version may well be slightly faster, but the real reason for
it is so that this code path doesn't need to be changed to reinstate
any bolted SLB entries, if we add them. The existing version has
already caused problems (read, crashes) when combined with some
patches that add bolted SLB entries.
Andrew Morton [Tue, 4 May 2004 00:57:17 +0000 (17:57 -0700)]
[PATCH] cancel_delayed_work() fix
cancel_delayed_work() forgets to clear the workqueue's pending flag. This
makes the workqueue appear to be permanently busy, so any subsequent attempts
to use it will fail.
[SPARC32]: Reduce fragmentation in the bitmap allocator
The existing allocator is first-fit with wraparound. This allows
a large number of small holes to accumulate in the early part of the
region, leading to heavy fragmentation. This adjusts the algorithm
to rescan the region when smaller sizes are requested, reducing
early fragmentation.
Linus Torvalds [Sun, 2 May 2004 06:04:40 +0000 (23:04 -0700)]
Make types of big integers in bitops.h explicit.
"sparse" warns about implicit type conversions that may cause
surprising results. Did you know that large decimal types have
different type conversions from large hexadecimals?
the following patch converts the error handling paths in VFAT fs to use
goto, making it more consistent with other filesystem code. Shrinks the
resulting binary by 144 bytes in my build.
Alexander Viro [Sat, 1 May 2004 12:53:15 +0000 (05:53 -0700)]
[PATCH] mcdx.c insanity removal
The mcdx.c author had pulled off something absolutely amazing - he had
declared several unsigned variables (ISA port numbers) as void *, using
explicit cast to unsigned in almost all places that used them.
Exception: printk. There he proudly used them as pointers - with %3p in
format. That cute trick allowed him to avoid using %03x, which
apparently scared him for some reason.
Switched to use of unsigned, killed casts, replaced %3p with %03x in
formats. BTW, the code had been that way since the initial merge back
in 1.3.7...
Paul Mackerras [Sat, 1 May 2004 12:10:20 +0000 (05:10 -0700)]
[PATCH] ppc64: fix incorrect signal handler argument
This fixes a bug in the ppc64 signal delivery code where the signal
number argument to a signal handler can get corrupted before the handler
is called. The specific scenario is that a process is in a blocking
system call when two signals get generated for it, both of which have
handlers.
The signal code will stack up two signal frames on the process stack
(assuming the mask for the first signal delivered doesn't block the
second signal) and return to userspace to run the handler for the second
signal. On return from that handler the first handler gets run with an
incorrect signal number argument because we end up with regs->result
still having a negative value (left over from when the system call was
interrupted) when it should be zero. This patch sets it to zero when we
set up the signal frame (in three places; for 64-bit processes, and for
32-bit processes for RT and non-RT signals).
The way we handle signal delivery and signal handler return using the
regs->result field in ppc64 is more complicated than it needs to be. In
ppc32 I have already simplified it and eliminated use of the
regs->result field. I am going to do the same in the ppc64 code, but I
think this patch should go in for now to fix the bug.
The patch also fixes a couple of places where we were unnecessarily and
incorrectly truncating the regs->result value to 32 bits
(sys32_sigreturn and sys32_rt_sigreturn return a long value, as all
syscalls do, and if regs->result is negative we need those syscalls to
return a negative value).
Thanks to Maneesh Soni for identifying the specific circumstances
under which this bug shows up.
Herbert Xu [Sat, 1 May 2004 10:39:13 +0000 (03:39 -0700)]
[IPV4/IPV6]: Fix listing of listening sockets.
There is a bug in listening_get_first() which used by /proc/net/tcp*
where it wasn't looping through all the sockets in each hash chain.
This problem doesn't show up unless the first socket in a chain doesn't
match the family that is being looked up.
The following patch fixes this by getting rid of listening_get_first()
altogether.
Denis Vlasenko [Sat, 1 May 2004 10:32:45 +0000 (03:32 -0700)]
[PATCH] add missing #include
There's a subtle problem with "inline" usage in <linux/string.h>:
<linux/string.h>:
this pulls in __constant_c_and_count_memset()
<linux/mm.h>:
this pulls <compiler.h>, re-defining
inline == __inline__ __attribute__((always_inline)).
But by now it is too late! The compiler has already seen the bare
"inline" in string.h, and hasn't inlined it.
Result:
# grep __constant System.map c0144670 t __constant_c_and_count_memset c0145c60 t __constant_c_and_count_memset
... many more copies of this function ...
On OSB4 the hwif->ultra_mask is set to not support UDMA.
Unfortunately in that case svwks_config_drive_xfer_rate()
falls through to the end of the function, instead of trying
other DMA modes.