[PATCH] ide: identify non decoded master/slave by serial and model
From: Alan Cox <alan@redhat.com>
Some interfaces (notably PCMCIA ones) don't decode the master/slave select so
you get two copies of a device appearing and bad things happening if a user
accidentally uses both.
This checks for the model/serial matching but also knows about non ATA drives
ide=noprobe and a Maxtor problem that was found in Andrew's testing of an
earlier patch. Although M00000.. drives should be RMA'd to Maxtor (and with
info on where they were obtained...) we don't want to break anyone who has
them.
If you get invalid geometry (eg a failed drive) the box hangs on boot because
we try and unregister the registered driver and end up in a locking mess.
We change the behaviour to simply leave the device unattached which avoids
the mess.
This was put in for PPC specifically and defined in the 2.4 tree to be
paranoid about breaking stuff. The actual wait for hwif spin up is however
perfectly correct for all drives. In the normal PC case the PC BIOS has done
this but with other embedded boxes and with things like LinuxBIOS it may not
have done. Thus it should always be done.
"It doesn't work now so it clearly isnt being used 8). We hold the lock
because its a proc function and we then replace the proc functions in the
attach method -> deadlock. It is also incredibly hard to fix without a
major rewrite."
The same is true for HDIO_SET_IDE_SCSI ioctl.
Both were broken 18 months ago in 2.5.63 as a side-effect of locking fixes.
Linus Torvalds [Sat, 28 Aug 2004 03:04:12 +0000 (20:04 -0700)]
Remove QIC-02 tape from Kconfig.
Let's leave the code for a while yet, and see if somebody screams.
But both Red Hat and SuSE claim it is unused, so it probably is. The
driver hasn't gotten updated in years, and google doesn't seem to
show any usage either.
Alexander Viro [Fri, 27 Aug 2004 13:59:05 +0000 (06:59 -0700)]
[PATCH] misc alpha bits
* long constant in a.out.h
* missing cast to pointer in pgtable.h
* removed useless __chk_user_ptr() in get_user() and put_user() - with fixed
typeof handling in sparse we are getting the check from
__typeof__(*(ptr)) __user *__pu_addr = (ptr); \
anyway, so __chk_user_ptr() is redundant there.
Signed-off-by: Al Viro <viro@parcelfarce.linux.org.uk> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Linus Torvalds [Fri, 27 Aug 2004 12:29:11 +0000 (05:29 -0700)]
Fix "insert_resource()" nesting bug
It used to create totally impossible resource trees in some
circumstances where it was asked to insert a conflicting
resource. We never noticed, because it wasn't used that much.
Alexander Viro [Fri, 27 Aug 2004 12:13:20 +0000 (05:13 -0700)]
[PATCH] 64bit cleanup in bt878 and btaudio
~0x0UL passed in u32 argument will do what the authors wanted, but it's
a hell of a silly way to spell ~0U on 32bit boxen and it generates warnings on
64bit boxen (we get correct value after truncation, but compiler doesn't
know that ;-)
Signed-off-by: Al Viro <viro@parcelfarce.linux.org.uk> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Alexander Viro [Fri, 27 Aug 2004 12:12:55 +0000 (05:12 -0700)]
[PATCH] mpu401 check_region() removal
mpu401 ports are claimed by callers now
probe_mpu401() gets pointer to resulting struct resource
callers updated, a bunch of check_region() calls eliminated
Signed-off-by: Al Viro <viro@parcelfarce.linux.org.uk> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Alexander Viro [Fri, 27 Aug 2004 12:12:19 +0000 (05:12 -0700)]
[PATCH] ad1848 check_region() removal
* ports for ad1848 are now claimed by callers
* ad1848_detect() gets pointer to struct resource in question
* ad1848_init() gets the same pointer and consumes it
* ports for mss are now claimed by callers (both config and ad1848 ones)
* probe_ms_sound() gets pointer to ad1848 ports
* attach_ms_sound() gets the same pointer and consumes both regions.
* callers updated. That had killed a *lot* of check_region() and closed
corresponding races.
Signed-off-by: Al Viro <viro@parcelfarce.linux.org.uk> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Dave Hansen [Fri, 27 Aug 2004 09:35:06 +0000 (02:35 -0700)]
[AF_PACKET]: Use void * for virtual addresses.
I've been auditing code, cleaning up warning where code passes
unsigned long's to functions and macros that really take pointers.
Here's some explanation as to why I think these types were coded up
this way originally:
http://marc.theaimsgroup.com/?l=linux-mm&m=109155379124628&w=2
The attached patch make packet_opt->pg_vec a pointer to an array of
char*'s instead of a pointer to an array of unsigned
David S. Miller [Fri, 27 Aug 2004 09:12:23 +0000 (02:12 -0700)]
[SPARC64]: Fix delay with HZ==1000.
When I moved sparc64 over to HZ==1000 this added some
problems to the udelay() handling. Specifically, with
slower cpus we could now get underflows to zero for
things like udelay(1) due to the order of multiplies
and shifts.
Fix this, and move it out to arch/sparc64/lib/delay.c
so it is easier to tinker with this in the future and
also to optimize away one of the multiplies for the
constant delay case just like other platforms do.
Signed-off-by: David S. Miller <davem@davemloft.net>
Whether a brainfart or a mismerge, I inadvertently broke PA-RISC during
the fork_by_hand()/init_idle() consolidation.
The following patch repairs a compilebug/thinko pair, consisting of the
use of an undeclared variable cpunum, and not attempting fork_idle()
until after the check for IS_ERR(idle) reported by James Bottomley.
Signed-off-by: William Irwin <wli@holomorphy.com> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Dave Airlie [Sat, 28 Aug 2004 05:42:30 +0000 (15:42 +1000)]
Add new i915 driver from Tungsten Graphics Inc. This driver covers the i830
chipsets also, a new X 2D + 3D driver are needed to use this but they have
been integrated into at least the X.org tree at this point and I think the
XFree86 tree. There are probably a few cleanups necessary for this driver.
From: Keith Whitwell <keith@tungstengraphics.com> Signed-off-by: Dave Airlie <airlied@linux.ie>
Dave Airlie [Fri, 27 Aug 2004 04:27:02 +0000 (21:27 -0700)]
[PATCH] drm: optimise i8x0 accesses..
This optimises the drm code to not do put_user() on memory the kernel
allocated and then mmap-installed to userspace, but instead makes it use
the kernel virtual address directly instead.
From: Arjan van de Ven <arjanv@redhat.com> Signed-off-by: Dave Airlie <airlied@linux.ie> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Adrian Bunk [Fri, 27 Aug 2004 03:45:56 +0000 (20:45 -0700)]
[PATCH] really uninline lmc_trace
As part of some gcc 3.4 fixes, someone removed the inline from the
prototype of lmc_trace in lmc_debug.c, but the useless inline at the actual
function remained.
Signed-off-by: Adrian Bunk <bunk@fs.tum.de> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Andrew Morton [Fri, 27 Aug 2004 03:45:07 +0000 (20:45 -0700)]
[PATCH] Fix x86_64 vs select.c namespace clash
fs/select.c:122:1: warning: "__IN" redefined
In file included from include/linux/timex.h:61,
from include/linux/sched.h:11,
from include/linux/module.h:10,
from fs/select.c:17:
include/asm/io.h:70:1: warning: this is the location of the previous definition
fs/select.c:123:1: warning: "__OUT" redefined
include/asm/io.h:60:1: warning: this is the location of the previous definition
Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Ryan S. Arnold [Fri, 27 Aug 2004 03:44:30 +0000 (20:44 -0700)]
[PATCH] HVCS hotplug fixes
Here is an HVCS (drivers/char/hvcs.c) patch which fixes the hvcs driver
problems with hotplugged vty-server adapters. The current driver handles
the adapter index assignment improperly so after a number of device
removals and insertions the driver could no longer map a tty->index to a
vty-server properly and tty_open() attempts would fail. This patch solves
this problem by always assigning the lowest available index to the new
adapters and returning an index to the list when the adapter is removed.
changelog:
drivers/char/hvcs.c
===================
-Added hvcs_index_list to manage the lowest available index.
-Added four helper functions to manage the list, which include the
creation and destruction of the list, the get'ing of the lowest index,
and the returning of an index.
-Moved free_irq() outside of the hvcs_final_close() function in order to
get it out of the spinlock.
-Rearranged hvcs_close() to accomodate the previous change.
-Removed local CLC_LENGTH define and used HVCS_CLC_LENGTH from
arch/ppc64/hvcserver.h instead.
-Cleaned up some printks and did some house keeping on the changelog.
Documentation/powerpc/hvcs.txt
==============================
-Added information on sysfs 'index' attribute added in previous hvcs
patch.
-Added Q & A section on how to find the proper dev node for a newly
added adapter.
I think this is the last of the HVCS patches for a while, as all of my
oustanding issues have been dealt with.
Signed-off-by: Ryan S. Arnold <rsa@us.ibm.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Yanmin Zhang [Fri, 27 Aug 2004 03:44:17 +0000 (20:44 -0700)]
[PATCH] interrupt is enabled before it should be when kernel is booted
There is a minor problem in function start_kernel. start_kernel will
enable interrupt after calling profile_init. However, before that,
function time_init on IA64 platform could enable interrupt. See this call
sequence:
This patch changes the name of the sparc32 Kconfig menu from "General
Setup" to "General Machine Setup", to match the changes committed to most
other arches in 2.6.9-rc1.
Signed-off-by: William Irwin <wli@holomorphy.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
We have this patch that adds ftape support for x86_64 and cleans up the
alpha support a little. The comments look like Vojtech did the x86_64 part
and I guess the alpha bits are from Herbert Xu.
Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
While trying out compiling of reiser4 on sparc64, ppc64, alpha, and ia64, I
discovered that WAITQUEUE_DEBUG is nowhere defined in 2.6.x, and various
compiler versions spew copious warnings at #if on it. Convert
__SEMAPHORE_INITIALIZER() to C99 initializers while in the area.
Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Arun Sharma [Fri, 27 Aug 2004 03:43:14 +0000 (20:43 -0700)]
[PATCH] Fix copying of unaligned data across user/kernel boundary
32 bit compatibility code sometimes needs to copy unaligned data across
kernel/user boundary and currently there is no architecture independent API
to do it.
(1) Introduce new APIs __{get,put}_user_unaligned. These APIs are
necessary because the optimal way to copy unaligned data across
kernel/user boundary is different on different architectures.
Some architectures don't even care about alignment.
On some __put_user is faster than __copy_to_user for small sizes.
(2) Optimize __{get,put}_user_unaligned for ia64, x86-64, s390, ppc64.
(3) Fix compat_filldir64() which is broken on big-endian machines
Thanks to Arnd Bergmann <arnd@arndb.de> for his help.
Signed-off-by: Gordon Jin <gordon.jin@intel.com> Signed-off-by: Arun Sharma <arun.sharma@intel.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Tim Schmielau [Fri, 27 Aug 2004 03:42:51 +0000 (20:42 -0700)]
[PATCH] make oom killer points unsigned long
It seems a little unsafe to me to have oom killer badness points of type
int, when all the underlying objects are unsigned long.
I can't immediately think of a case where this matters much, but e.g. a
long-running job or daemon on a 64 bit machine might lose it's bonus
because of that.
Signed-off-by: Tim Schmielau <tim@physik3.uni-rostock.de> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Frank Pavlic [Fri, 27 Aug 2004 03:37:58 +0000 (20:37 -0700)]
[PATCH] s390: lcs network driver
lcs network driver changes:
- Allocate the reply structure instead of taking it from the stack.
- Use del_timer_sync instead of del_timer.
- Clean up helper threads creation/shutdown.
- Split lcs_register_mc_addresses to make it readable again.
- Free multicast list entries when device is going down.
- Retransmit multicast list in device recovery.
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Thomas Richter [Fri, 27 Aug 2004 03:37:46 +0000 (20:37 -0700)]
[PATCH] parport: NetMOS 9805 interface
Add support for netmos devices to the parallel port driver.
NetMOS 9805 support is already in the kernel, this patch adds the support for
the missing 9735,9855,9755 and 9715 chips.
And another remark: The 9735 and 9835 seem to be chips with serial *and*
parallel interfaces, so I suppose they are already claimed somewhere in the
serial driver. I don't know whether this causes any problems. I'm sorry that
I can't test, I've only a 9805 here. Any idea how these "dual" chips have to
be handled by the kernel?
Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Unaccount VM_DONTCOPY vmas properly; the child inherits the whole of the
parent's virtual accounting from the memcpy() in copy_mm(), but the
VM_DONTCOPY check here is where a decision is made for the child not to
inherit the vmas corresponding to some accounted memory usages. Hence,
unaccount them when skipping over them here.
Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
[PATCH] fix text reporting in O(1) proc_pid_statm()
Some kind of brainfart happened here, though it's not visible on the
default display from top(1) etc. This patch fixes up the gibberish I
mistakenly put down for text with the proper text size, and subtracts it
from data as per the O(vmas) code beforehand.
Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Merely removing down_read(&mm->mmap_sem) from task_vsize() is too
half-assed to let stand. The following patch removes the vma iteration
as well as the down_read(&mm->mmap_sem) from both task_mem() and
task_statm() and callers for the CONFIG_MMU=y case in favor of
accounting the various stats reported at the times of vma creation,
destruction, and modification. Unlike the 2.4.x patches of the same
name, this has no per-pte-modification overhead whatsoever.
This patch quashes end user complaints of top(1) being slow as well as
kernel hacker complaints of per-pte accounting overhead simultaneously.
Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
task_vsize() doesn't need mm->mmap_sem for the CONFIG_MMU case; the
semaphore doesn't prevent mm->total_vm from going stale or getting
inconsistent with other numbers regardless. Also, KSTK_EIP() and
KSTK_ESP() don't want or need protection from mm->mmap_sem either. So this
pushes mm->mmap_sem to task_vsize() in the CONFIG_MMU=n task_vsize().
Also, hoist the prototype of task_vsize() into proc_fs.h
The net result of this is a small speedup of procps for CONFIG_MMU.
Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Dave Hansen [Fri, 27 Aug 2004 03:35:51 +0000 (20:35 -0700)]
[PATCH] include asm/page.h for virt_to_page()
asm/page.h seems to be the accepted place to declare virt_to_page() on a vast
majority of architectures. This patch makes sure that a few files which use
that function also directly include the header.
Signed-off-by: Dave Hansen <haveblue@us.ibm.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Dave Hansen [Fri, 27 Aug 2004 03:35:39 +0000 (20:35 -0700)]
[PATCH] don't align virt_to_page() args
__pa() is always be consistent inside of a single page. The next thing
virt_to_page() does after that is shift down the address, killing the bits
that __change_page_attr() just masked off.
Remove the superfluous masking.
Signed-off-by: Dave Hansen <haveblue@us.ibm.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Dave Hansen [Fri, 27 Aug 2004 03:35:26 +0000 (20:35 -0700)]
[PATCH] vmalloc_fault() cleanup
Store the physical pgd address in a different variable than the virtual
address.
There's no real reason to only use 1 variable here, other than saving a
line of code. But, the types really are different and we might as well
just spell that out explicitly.
Signed-off-by: Dave Hansen <haveblue@us.ibm.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Dave Hansen [Fri, 27 Aug 2004 03:35:14 +0000 (20:35 -0700)]
[PATCH] call virt_to_page() with void*, not UL
I'm sure there's a good reason for these functions to take virtual addresses
as unsigned longs, so suppress the warnings and cast them to the proper types
before calling the virt/phys conversion functions
A perfectly acceptable alternative would be to go and change free_pages() to
stop taking unsigned longs for virtual addresses, but this has a much smaller
impact.
Signed-off-by: Dave Hansen <haveblue@us.ibm.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Dave Hansen [Fri, 27 Aug 2004 03:34:51 +0000 (20:34 -0700)]
[PATCH] reduce casting in sysenter.c
Ran across this because it's another place where an unsigned long is passed
directly to __pa(). Making the "page" variable a void* seems a bit more
natural than an unsigned long and reduces the net number of casts by 1.
Without it, we probably need another (void *) cast in the __pa() call.
For more explanation as to why this was probably done originally, see this
post: http://marc.theaimsgroup.com/?l=linux-mm&m=109155379124628&w=2
Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>