Robert Love [Sun, 16 Jun 2002 11:33:19 +0000 (04:33 -0700)]
[PATCH] scheduler whitespace/comment merge from -ac
Attached patch brings over the sane bits from 2.4-ac: i.e. if Linus
merges this and Alan merges your patch minus my complaints, the two
trees will be in sync...
Martin Dalecki [Sun, 16 Jun 2002 05:32:56 +0000 (22:32 -0700)]
[PATCH] 2.5.21 ide 92
- Finally unify task_in_intr and task_mulin_intr. One crucial code path less to
watch out, but a quite dangerous step in itself. PIO reading is functional
again. The next step will be the unification of the write path of course.
- Introduce a small helper for the execution of task file commands which
basically just send a simple command down to the drive.
- Add a buffer parameter to ide_raw_taskfile allowing to unify the handling of
ioctl and normal ide_raw_taskfile request.
- Fix some small function pointer type mismatches.
Apply more host chip controller clenups by Bartlomiej:
- move setting drive->current_speed from *_tune_chipset()
to ide_config_drive_speed()
cmd64x.c:
- convert cmd64x_tuneproc() to use ata-timing library
- clean cmd64x_tune_chipset() and cmd680_tune_chipset()
hpt366.c:
- remove empty timings table
it8172.c:
- kill prototypes
- update to new udma_setup() scheme
Linus Torvalds [Sat, 15 Jun 2002 21:20:57 +0000 (14:20 -0700)]
cardbus.c:
Set up CardBus cards correctly: initialize them fully
before calling device_register(), and make sure to tell
the world that it's a PCI-like bus.
Pavel Machek [Sat, 15 Jun 2002 07:53:09 +0000 (00:53 -0700)]
[PATCH] suspend-to-{ram/disk} cleanups/fixes for 2.5.21
This kills Sysrq-D support (did not work anyway, and complicated
code).
Adds resume support to i8259A (otherwise interrupts will not work
after S3).
HAVE_NEW_DEVICE_MODEL is always true in 2.5, so we should define
it. S3 can't work properly without that. Also limit toshiba workaround
to S1. (This hide lack of i8259A support for me).
Fixes compilation, and kills <asm/suspend.h> being included
twice with ugly hacks around.
François Romieu [Sat, 15 Jun 2002 07:28:43 +0000 (00:28 -0700)]
[PATCH] 2.5.21 - hdlc drivers fixes
- (leak) memory allocated in dscc4_found1() isn't freed by caller in error path.
dscc4_free1() is now in charge of this duty.
- (style) code factored in dscc4_remove_one after use of dscc4_free1().
Below a patch removing the list of sense codes from usb/storage/debug.h
since the same list is already found in scsi/constants.c.
This also brings this list up to date with SCSI-3.
The main purpose is to avoid trying to read the partition table
of a removable disk when the drive has told us that no media
are present. (Right now we try to read a 4K block and fail and
retry and fail, and give an I/O error on the first sector,
then try to read the second sector and fail and retry ...)
Unused fields sector_bit_size and sector_bit_shift in
struct scsi_disk were removed. The field has_part_table
(that has nothing to do with partition tables) was
renamed to has_been_registered . The field ready was
renamed to media_present .
The overly long sd_init_onedisk() was split up.
When we notice that no media are present anymore, the
partitions are removed from /proc/partitions, but the
drive remains, with size 0.
A future patch will remove the field capacity - there are
all too many places where capacities are stored - but the
present patch is large enough already.
There is also a quite independent patch in scsi_error.c
(yesterday someone had an infinite loop retrying to read
bad media) - this patch honours the SCpnt->retries.
In case you applied this already, just ignore the scsi_error.c part.
William Stinson [Fri, 14 Jun 2002 15:29:19 +0000 (11:29 -0400)]
[janitor] update the yam hamradio driver to
- remove call to check_region
- check the result of request_region
- call release_region if something goes wrong afterwards during driver initialisation.
I don't have this hardware so I can't verify if it works (compilation checked only).
William Stinson [Fri, 14 Jun 2002 15:26:12 +0000 (11:26 -0400)]
[janitor] update the eepro Intel EtherExpress Pro/10 device driver to
1) check the status of call to request_region
2) and return an error in case of problem.
I don't have this hardware so compilation checked only.
William Stinson [Fri, 14 Jun 2002 15:21:32 +0000 (11:21 -0400)]
[janitor] update the eexpress.c net driver to
1) check the status of call to request_region
2) and return an error and release the interrupt held in case of problem.
(In my first attempted patch for this driver I had forgotten to release the interrupt.)
I don't have this hardware so compilation checked only.
William Stinson [Fri, 14 Jun 2002 15:20:09 +0000 (11:20 -0400)]
[janitor] update the DAC960 Driver for Mylex DAC960/AcceleRAID/eXtremeRAID PCI RAID Controllers
to
1) check result of calls to request_region and handle failure to allocate region resource
2) add and use an extra label "Failure1" which frees the region resource
in case of device driver initialisation error later on
William Stinson [Fri, 14 Jun 2002 15:15:52 +0000 (11:15 -0400)]
[janitor] update the sdlamain Multiprotocol WAN Link Driver to
1) check the status of call to request_region
2) and return an error in case of problem.
Note that a call to check_region still remains in this driver (in subroutine check_s508_conflicts).
I don't have this hardware so compilation checked only.
William Stinson [Fri, 14 Jun 2002 15:14:28 +0000 (11:14 -0400)]
[janitor] update the ni65 network driver to
1) remove call to check_region and use request_region instead checking the return value
2) release region resource in case of driver initialisation error
I don't have this hardware so compilation checked only.
William Stinson [Fri, 14 Jun 2002 15:10:22 +0000 (11:10 -0400)]
[janitor] update the optcd Optics Storage 8000 AT CDROM driver
1) remove call to check_region
2) check the status of call to request_region
3) and return an error in case of problem.
William Stinson [Fri, 14 Jun 2002 15:08:28 +0000 (11:08 -0400)]
[janitor] update the stallion.c multiport serial driver checks the result of copy_to_user
and returns -EFAULT in case not all data was copied. Patch also changes the return code
of stl_getserial() from void to int in order to return error code in case of failure.
I don't have this hardware so compilation checked only.
William Stinson [Fri, 14 Jun 2002 15:01:26 +0000 (11:01 -0400)]
[janitor] update the ray_cs.c PCMCIA client driver for the Raylink wireless LAN card
1) checks the result of copy_to_user and
2) returns -EFAULT in case not all data was copied.
I don't have this hardware so compilation checked only.
William Stinson [Fri, 14 Jun 2002 14:59:57 +0000 (10:59 -0400)]
[janitor] update the istallion.c multiport serial driver
1) checks the result of copy_XX_user and returns -EFAULT in case not all data was copied.
2) Patch changes the return code of stl_getserial() from void to int in order to return error code in case of failure.
3) Patch also fixes two instances of the uninitialised string name being used on request_region calls
I don't have this hardware so compilation checked only.
William Stinson [Fri, 14 Jun 2002 14:58:03 +0000 (10:58 -0400)]
[janitor] update the isicom.c multiport serial driver to
1) check the result of copy_from_user
2) return -EFAULT in case not all data was copied
3) release resources in case of failure
Jean Tourrilhes [Fri, 14 Jun 2002 14:43:33 +0000 (10:43 -0400)]
IrDA update 3/4:
<Following patch from Shimizu Takuja/Gerhard Bertelsmann>
o [FEATURE] Dongle driver for ActiSys 200L hardware
<Following patch from Leung/me>
o [FEATURE] Dongle driver for Mobile Action MA600 hardware
Jean Tourrilhes [Fri, 14 Jun 2002 14:38:50 +0000 (10:38 -0400)]
IrDA updates 1/4:
o [FEATURE] Update various comments to current state
o [CORRECT] Handle properly failure of URB with new speed
o [CORRECT] Don't test for (self != NULL) after using it (doh !)
o [FEATURE] Other minor cleanups
Jeff Garzik [Fri, 14 Jun 2002 14:02:38 +0000 (10:02 -0400)]
net driver 8139cp updates:
* add preliminary 8169 gige support (ifdef'd out)
* support several diagnostic ethtool ioctls
* do not write to legacy 8139 registers we never use
- added calc_num_ports() ability to determine the number of actual
ports the device has on the fly. This should help out with some
of the Palm and Sony devices.
USB: usb-serial api changes
- added calc_num_ports() callback so that driver can override the
fixed num_ports value after querying the device.
- split startup() callback into probe() and attach() in anticipation
of the driverfs api changes
- probe() is called before the usb_serial structure is set up,
and can be used to download firmware to a device, and other
early initialization.
- attach() is called after the usb_serial structure is completely
setup, allowing the device to create private structures, and
have full access to the device.
Robert Love [Fri, 14 Jun 2002 03:51:48 +0000 (20:51 -0700)]
[PATCH] kernel preemption bits (2/2)
In both preempt_schedule in sched.c and resume_kernel in entry.S, it is
possible to return with need_resched set and thus a pending preemption
but not service that preemption for some time.
Consider:
- return from schedule() to preempt_schedule
- interrupt occurs, sets need_resched
- we cannot preempt since preempt_count = PREEMPT_ACTIVE
- back in preempt_schedule, set preempt_count = 0
Now we again can preempt, but we will not. Instead we return and
continue executing. On the next interrupt, we will redo the whole
fiasco which is a waste since we could of reentered schedule while we
were there. Worse, if we acquire a lock before the next interrupt we
can potentially delay the pending reschedule a very long time. This is
not acceptable.
The solution is to check for and loop on need_resched on resume_kernel
and preempt_schedule like schedule itself does.
Robert Love [Fri, 14 Jun 2002 03:51:35 +0000 (20:51 -0700)]
[PATCH] kernel preemption bits (1/2)
Two big ouches in x86 entry.S:
(1) Up until 2.5.20, we were not properly reading the irq_stat
and bh_count values from the right CPU. Brian Gerst sent you
a patch to fix this. This raises the question: why was this not
a problem? Seems we do not need this check at all as having a
nonzero irq_star or bh_count implies having a nonzero preempt_count,
which we test for above. Thus this patch removes those tests and
the related defines.
(2) What if it is possible to preempt even with interrupts disabled?
Turns out it is. Consider if we take an exception (say, for a
TLB miss) and enter resume_kernel and preempt. Even if interrupts
are disabled, an exception can occur and end up in resume_kernel.
We need to check to make sure interrupts are not off, to ensure
we are not coming off an unmasked exception.
Even with the added check from issue #2, we have less code after #1 so
we can walk away with a bugfix and an optimization here. ;)
Thanks to George Anzinger, with whom I actually had #2 bite me, and who
helped with these issues.
Martin Dalecki [Fri, 14 Jun 2002 02:50:02 +0000 (19:50 -0700)]
[PATCH] 2.5.21 IDE 91
- Realize that the only place where ata_do_taskfile gets used is ide-disk.c
move it and its "friends' over there.
- Unify the do_request method for disk devices. This saves quite a lot of code.
- Make task_muin_intr and task_in_intr use the same busy status checks on
entry.
- Unfold get_command at the single only place where it's used.
- Add missing __ata_end_request on kill_rq path.
- Rename udma_tcq_taskfile() to udma_tcq_init to make the code look like to
normal udma_init. Revert the logics of udma_init and it's
implementations to mirror that of udma_tcq_init().
- Fix a tiny bug in pmac_udma_init() where it was reporting the wrong value up
on failure.
- Revert the logics of udma_start(). It's called from udma_init context.
Realize that it is always returning ide_started. Make it self and the
implementations of it return void.
Martin Dalecki [Fri, 14 Jun 2002 02:49:48 +0000 (19:49 -0700)]
[PATCH] 2.5.21 IDE 90
- Implement the assertion that the lock is already held, if we run
ata_status_poll.
- The usual host chip code load from Bartomiej onierkiewicz. Fortunately
I'm able to check the sis5513 fixes on a life system.
More serious stuff... for IDE 88:
- implement ata_best_pio_mode() in ata-timing.c
(play safer than driver's config_chipset_for_pio())
- replace config_chipset_for_pio() by ata_best_pio_mode()
in host chips drivers
(trivial for hpt34x.c, hpt366.c and serverworks.c,
non-trivial for cmd64x.c and sis5513.c)
- set PIO also for (U)DMA modes in cmd64x_tune_chipset()
(cmd64x.c)
- fix bug in setting PIO0-2 for devices also supporting PIO3/4
(sis5513.c)
- misc cleanups
- Rename XXX_do_request back do do_request. This was just tmporary tagging.
- Move ata_taskfile() call down to the ide-disk request handler.c, which is the
only place needing it. Rename ata_taskfile to ata_do_taskfile(). This
allowed us to implement the assertion that ata_do_taskfile() will be only
called with the channel lock already held.
Martin Dalecki [Fri, 14 Jun 2002 02:49:33 +0000 (19:49 -0700)]
[PATCH] 2.5.21 IDE 89
- fix lock initialization for device tree handling. Well I would be lucky if
it would be just a device tree like in Solaris. But after studying the code
which goes in right now it appears to develop quite fast in to a "just in
case" and "ad-hoc" inferface mess we have already in /proc. Shit!
Look for example at the initialization of a device struct. First we have a
name to the directory encompassing the device and the immediately we fill in
the georgeous name field - which is enterly unnecessary.
- Pull locking out from the device type drivers do_request handlers. This
allowed us to remove the draddy unlocking on entry to start_request.
Much more of host controller rigister acces on crutial code paths is
now covered by the queue access lock.
Flavien Lebarbé [Thu, 13 Jun 2002 09:45:54 +0000 (02:45 -0700)]
[PATCH] usblp_ioctl for non-little-endian machines
ioctl(LPGETSTATUS) is known to put the status into an int. The usblp
driver has a problem in this area as it does not put it into an int but
into a char. Let's see :
from drivers/char/lp.c : lp_ioctl :
int status
copy_to_user((int *) arg, &status, sizeof(int))
David Brownell [Thu, 13 Jun 2002 09:39:09 +0000 (02:39 -0700)]
[PATCH] ohci-hcd init err detect
Here's a followup patch, should apply on top of what I sent
this morning ... please do so! (Sorry, same name but the
patch is different.)
Along with some cleanups, this actually restores a line that
was dropped somewhere in 2.5 ... basically, at least SiS and
OPTi violate the OHCI spec so they don't init "by the book".
Hugh Dickins [Thu, 13 Jun 2002 09:12:58 +0000 (02:12 -0700)]
[PATCH] swap 3/3 unsafe Dirty check
Todd R. Eigenschink <todd@tekinteractive.com> reported 2.4 swapoff
kernel BUG at filemap.c:122 to LKML 24 May. Other problems on that
system may have contributed, but yes, despite __delete_from_swap_cache
doing ClearPageDirty before __remove_inode_page to avoid the BUG(),
a concurrent zap_pte_range might race to set_page_dirty. So skip
that oops in PageSwapCache case. Remove the prior ClearPageDirty?
maybe but not without deeper thought: let stay for now.
Hugh Dickins [Thu, 13 Jun 2002 09:12:39 +0000 (02:12 -0700)]
[PATCH] swap 2/3 unsafe SwapCache check
Recent testing has shown that BUG() check in try_to_unuse is unsafe.
delete_from_swap_cache does final swap_free just after removing page
from swap cache, and add_to_swap_cache does swap_duplicate just before
putting page into swap cache, therefore swapin_readahead may resurrect
a dying swap entry and assign a new page to it. That's fine, there's
no need to change this ordering; but it does mean that try_to_unuse's
page may have left the swap cache yet its swap_map count still be set.
That BUG() has done good service for swapoff sanity, but now abandon it.
Hugh Dickins [Thu, 13 Jun 2002 09:12:20 +0000 (02:12 -0700)]
[PATCH] swap 1/3 swapon leak
Burton Windle <bwindle@fint.org> reported Kernel memory leak with
swapon/swapoff? LKML 31 May. swapon uses rw_swap_page_nolock to read
swap_header page (peculiar! should probably rework that sometime),
nothing freed the buffers from the page, thus page also never freed.
Hugh Dickins [Thu, 13 Jun 2002 09:12:00 +0000 (02:12 -0700)]
[PATCH] tmpfs 5/5 SMP-safe
Remove /* SMP-safe */ comments before shmem_truncate and shmem_mknod:
don't know who or why put there, but they seem to imply that the rest
of shmem.c is unsafe.
Hugh Dickins [Thu, 13 Jun 2002 09:11:40 +0000 (02:11 -0700)]
[PATCH] tmpfs 4/5 swapoff tweaks
Several simple speedups to tmpfs swapoff: without patch, swapoff of a
kernel tree in tmpfs might take take 2 minutes, with patch 4 seconds.
Inline search go no further than necessary; only search inode when it
has swapped pages; start next search from same inode; list in order.
(There's a "list_move_tail" in this patch: not available in 2.5.21,
but I believe you now have it in your ongoing tree.)
Hugh Dickins [Thu, 13 Jun 2002 09:11:04 +0000 (02:11 -0700)]
[PATCH] tmpfs 2/5 long symlinks
shmem_symlink was letting a long symlink overwrite its vfs_inode, now
included within struct shmem_inode_info - oops! and failed long symlink
inodes were freed but still left on the shmem_inodes list, causing oops
in swapoff at shutdown (if not earlier).
Hugh Dickins [Thu, 13 Jun 2002 09:10:46 +0000 (02:10 -0700)]
[PATCH] tmpfs 1/5 rename nlink
shmem_rename was not maintaining the correct link count on the
parent directories when a directory was moved from one to another.
This patch from Christoph Rohland <cr@sap.com>, already in 2.5-dj.
hpt366.c:
- kill hpt_min_rev()
- kill redundant hpt368_tune_chipset() and hpt374_tune_chipset()
- fix badlists checking in config_chipset_for_dma()
- misc cleanups
pdc202xx.c:
- clean registers decoding
- clean pdc202xx_tune_chipset()
- kill pdc202xx_udma_irq_status(), use generic udma_pci_irq_status()
- rationalize pdc202xx_reset()
- kill UDMA_SPEED_FLAG() and PDC_CLOCK() macros,
do it right by defining constants PDC_UDMA and PDC_CLK
- kill init_high_16() inline, no need to hide internals
- clean pdc202xx_init_chipset()
- split ata66_pdc202xx() and pdc202xx_init_chipset()
- clean config_chipset_for_dma()
- misc cleanups
- Fix plug in of CF cards. The previously used sub device driver attach method
lookup was entirely hosed.
- Enforce indentation style on ide-cs.c. Enable debugging there. (Makes the
patch quite big...)
Benjamin LaHaise [Thu, 13 Jun 2002 03:36:00 +0000 (20:36 -0700)]
[PATCH] 2.5.20 x86 iobitmap cleanup
This makes the IO bitmap allocations a separately allocated structure,
shrinking the default task size.
We alloc it in sys_ioperm() and copy_thread() and frees in
exit_thread(). It also gets rid of the IO_BITMAP_SIZE+1 crap, as only
the tss actually needs the tail long, and we weren't copying it into the
bitmap anyways.
Stephen Rothwell [Thu, 13 Jun 2002 03:35:41 +0000 (20:35 -0700)]
[PATCH] utimes permission check
The utime and utimes should do exactly the smae permission check
according to SUSv3.
"The effective user ID of the process shall match the owner of the file,
or has write access to the file or appropriate privileges to use this call
in this manner."
utimes when passed a NULL second argument would fail on a read only
file even if the file is owned by the caller.
Jens Axboe [Thu, 13 Jun 2002 03:12:12 +0000 (20:12 -0700)]
[PATCH] generic tag update
The following comes from James Bottemley, as he updated the SCSI layer
to use the generic tagging.
Basically just put blk_queue_tag_request() into ll_rw_blk.c and name it
something more sane, blk_queue_find_tag(). In addition, remove REQ_CMD
requirement in blk_queue_start_tag() -- this is actually IDE specific
(we can only tag read/write requests there...), SCSI actually requires
everything to be tagged once enabled. It's replaced with a safety check
for an already tagged request.
Jens Axboe [Thu, 13 Jun 2002 03:11:59 +0000 (20:11 -0700)]
[PATCH] final plug stuff
This is a merge of the two things that are needed for the plugging as it
stands in 2.5.21. The first is fixing the locking to be both clearer and
safe (Andrew repeatedly broke the old version). The second is a few
changes that allow make_request_fn drivers to utilize plugging. This is
needed for umem and raid, for instance, that have their private
plugging.
this way the task-lock makes sure that a task is not scheduled on some
other CPU before the switch-out finishes, but the runqueue lock is
dropped. (Local interrupts are kept disabled in this variant, just to
exclude things like TLB flushes - if that matters.)
architectures that can hold the runqueue lock during context-switch can do
the following simplification:
#define prepare_arch_schedule(prev) do { } while(0)
#define finish_arch_schedule(prev) do { } while(0)
#define prepare_arch_switch(rq) do { } while(0)
#define finish_arch_switch(rq) spin_unlock_irq(&(rq)->lock)
further optimizations possible in the 'simple' variant:
- an architecture does not have to handle the 'last' parameter in
switch_to() if the 'prev' parameter is unused in finish_arch_schedule().
This way the inlined return value of context_switch() too gets optimized
away at compile-time.
- an architecture does not have to pass the 'prev' pointer to
schedule_tail(), if the 'prev' parameter is unused in
finish_arch_schedule().
the x86 architecture makes use of these optimizations.
Via this solution we have a reasonably flexible context-switch setup which
falls back to the current (faster) code on x86, but on other platforms the
runqueue lock can be dropped before doing the context-switch as well.
Ingo
NOTE: i have coded and tested the 'complex' variant on x86 as well to make
sure it works for you on Sparc64 - but since x86's switch_mm() is
not too subtle it can use the simpler variant. [ The following
things had to be done to make x86 arch use the complex variant: the
4 complex macros have to be used in system.h, entry.S has to
'pushl %ebx' and 'addl $4, %esp' around the call to schedule_tail(),
and switch_to() had to be reverted to the 3-parameter variant
present in the 2.4 kernels.
NOTE2: prepare_to_switch() functionality has been moved into the
prepare_arch_switch() macro.
NOTE3: please use macros for prepare|finish_arch_switch() so that we can
keep the scheduler data structures internal to sched.c.
David Brownell [Wed, 12 Jun 2002 06:59:06 +0000 (23:59 -0700)]
[PATCH] ohci-hcd init err detect
I tracked down some of those "can't enumerate" problems to a
chip init problem. This patch detects and reports that case
(better than the current nasty failure mode, and worth keeping
even after we have a fix that works on OPTi/SiS/...) as well as
doing some other minor cleanup.
Andrew Morton [Wed, 12 Jun 2002 05:57:20 +0000 (22:57 -0700)]
[PATCH] writeback memory allocation robustness
- If we're PF_MEMALLOC and BIO allocation failed, fall back to try
to allocate a smaller BIO (from a different mempool)
- When writepages() gets confused, call a_ops->writepage()
instead of going directly to block_write_full_page(). It
gives the fs more flexibility, and XFS may want this.
Andrew Morton [Wed, 12 Jun 2002 05:57:02 +0000 (22:57 -0700)]
[PATCH] ext3 ordering fix
Fix the order of inodes being marked dirty in a couple of corner cases.
The only impact of this bug is that the on-disk copies of i_version
might got out of sync for a directory, or that an error inserting an
inode into a directory might leave its i_nlinks incorrect on disk for a
short interval. Neither problem will cause trouble for ext3 during
normal operation, but the nlink problem might cause e2fsck to emit
unnecessary warnings if we crash while the incorrect version of the
inode is in the journal.
Matthew Wilcox [Wed, 12 Jun 2002 05:38:36 +0000 (22:38 -0700)]
[PATCH] fs/locks.c cleanup
- Inline locks_notify_blocked.
- Remove a couple of now-bogus comments.
- Remove the obsolete F_SHLCK and F_EXLCK cases.
- Remove the last remaining reference to FL_BROKEN.
ISDN: Fix warning and cleanup in new hisax sub-driver.
amd7930_fn.h defined a static array, which however was only used in
one of the files which include amd7930_fn.h. So move the array to the
file where it is actually referenced.
While we're at it, do some more cleanup like removing the #defines
for BYTE,WORD and use u16,u8 instead - WORD was even wrongly defined
to unsigned int. Also, convert some macros to inlines etc.
The eicon header defined macros for byte, word, dword. Apart from that
not being a good idea in general, it did clash with the use of a parameter
called "word" in asm/signal.h. At some other place in the Eicon headers,
there are also typedefs for these types, so the macros can simply go away.