1. 05 Feb, 2004 40 commits
    • Alexander Viro's avatar
      [PATCH] scsi/imm.c cleanup and fixes (7/8) · 7f7a3665
      Alexander Viro authored
      	* switched to use ->hostdata to get imm_struct from Scsi_Host, end
      of messing with imm_hosts[]
      7f7a3665
    • Alexander Viro's avatar
      [PATCH] scsi/imm.c cleanup and fixes (6/8) · a49bd994
      Alexander Viro authored
      	* fixed missing wakeups in imm_pb_claim()/imm_wakeup() - if the
      former had been called just as current holder of port was giving it up,
      we could set "I'm waiting" flag too late.  Cleaned up the timeout logics.
      a49bd994
    • Alexander Viro's avatar
      [PATCH] scsi/imm.c cleanup and fixes (5/8) · 9234c5a2
      Alexander Viro authored
      	* starting to kill imm_detect - we move the "probe a single port"
      logics into a separate function and shift scanning into imm_driver_init().
      Later that will give us a parport_driver ->attach().
      9234c5a2
    • Alexander Viro's avatar
      [PATCH] scsi/imm.c cleanup and fixes (4/8) · f7d83e8b
      Alexander Viro authored
      	* killed include of scsi_module.h and switched from scsi_register()
      to scsi_alloc_host().  We still keep the old detect logics at that point,
      it will be gone later.
      f7d83e8b
    • Alexander Viro's avatar
      [PATCH] scsi/imm.c cleanup and fixes (3/8) · 3a527da7
      Alexander Viro authored
      	* killed imm_pb_claim() call in imm_init()
      3a527da7
    • Alexander Viro's avatar
      [PATCH] scsi/imm.c cleanup and fixes (2/8) · d3cce34b
      Alexander Viro authored
      	* switched imm to passing around references to imm_struct instead
      of host numbers.
      d3cce34b
    • Alexander Viro's avatar
      [PATCH] scsi/imm.c cleanup and fixes (1/8) · 8e840158
      Alexander Viro authored
      	* imm.c fed through Lindent, functions unused elsewhere (by now -
      	  all of them) made static.
      8e840158
    • Alexander Viro's avatar
      [PATCH] paride cleanup and fixes (25/25) · 0968e60c
      Alexander Viro authored
      paride has a ->private field for use by low-level drivers.  It's not
      64bit-clean - it's int, but is used to store a pointer (bpck6).
      Fix: replace with unsigned long, update typecasts in users.
      0968e60c
    • Alexander Viro's avatar
      [PATCH] paride cleanup and fixes (24/25) · 02343cfd
      Alexander Viro authored
      pd_identify() converted to pd_special_command().
      02343cfd
    • Alexander Viro's avatar
      [PATCH] paride cleanup and fixes (23/25) · 247f8c00
      Alexander Viro authored
      pd_init_units() merged into pd_detect(), pd_drive_count made local to
      pd_detect().
      247f8c00
    • Alexander Viro's avatar
      [PATCH] paride cleanup and fixes (22/25) · 135c1870
      Alexander Viro authored
      Now disk->present is not needed - we can always check for disk->gd.
      Field removed, pd_probe_drive() became void(struct pd_unit *), pd_detect()
      cleaned up,
      135c1870
    • Alexander Viro's avatar
      [PATCH] paride cleanup and fixes (21/25) · bf444155
      Alexander Viro authored
      Moved allocation and setup (but not adding) of gendisk into
      pd_probe_drive().
      bf444155
    • Alexander Viro's avatar
      [PATCH] paride cleanup and fixes (20/25) · 4e7afa4f
      Alexander Viro authored
      Switched everything except pd_identify() to use of special requests.
      New helper: pd_special_command() - builds special request, feeds it
      into queue and waits for completion.
      Moved pi_connect()/pi_disconnect() to the beginning/end of pi_identify.
      4e7afa4f
    • Alexander Viro's avatar
      [PATCH] paride cleanup and fixes (19/25) · a5c66122
      Alexander Viro authored
      Reordered stuff
      made pd_ready() inlined
      renamed ps_timeout to pd_timeout
      renamed ps_tq to fsm_tq
      renamed ps_set_intr to fsm_schedule
      removed unused pd_wait_open.
      a5c66122
    • Alexander Viro's avatar
      [PATCH] paride cleanup and fixes (18/25) · 4542c37e
      Alexander Viro authored
      Moved calls of ->connect and ->disconnect into run_fsm().  The only
      change is that now do_pd_start_io() is ran when we are connected.
      4542c37e
    • Alexander Viro's avatar
      [PATCH] paride cleanup and fixes (17/25) · 3b4de4f2
      Alexander Viro authored
      Equivalent transformation:
      	now that all phase functions are called claimed, we can
      	simplify the logics around claiming - new variable (pd_claimed)
      	keeps track of claim/unclaim we'd done.  We check it in the
      	beginning of the loop and do claiming if it's not set.
      3b4de4f2
    • Alexander Viro's avatar
      [PATCH] paride cleanup and fixes (16/25) · f35387f3
      Alexander Viro authored
      Equivalent transformation:
      	* phase = do_pd_io replaced with phase = NULL, corresponding
      	  check + open-coded equivalent added in run_fsm loop.
      	* do_pd_io() is gone.
      f35387f3
    • Alexander Viro's avatar
      [PATCH] paride cleanup and fixes (15/25) · aa759ff3
      Alexander Viro authored
      Equivalent transformation:
      	next_request() call expanded.
      aa759ff3
    • Alexander Viro's avatar
      [PATCH] paride cleanup and fixes (14/25) · 7e396129
      Alexander Viro authored
      Equivalent transformation:
      	call of pi_do_claimed() in run_fsm() expanded; recursive
      	call of run_fsm() replaced with loop.
      7e396129
    • Alexander Viro's avatar
      [PATCH] paride cleanup and fixes (13/25) · 1a2300d3
      Alexander Viro authored
      Equivalent transformation:
      	pi_unclaim() moved from phase functions to run_fsm().
      1a2300d3
    • Alexander Viro's avatar
      [PATCH] paride cleanup and fixes (12/25) · 0254c3b4
      Alexander Viro authored
      Equivalent transformation:
      	* calls of pi_disconnect() in phase functions expanded.
      	* since both do_pd_read_start() and do_pd_write_start()
      	  are always called claimed (as the matter of fact,
      	  all phase functions except do_pd_io() are), we can
      	  replace call of pi_connect() with direct method call -
      	  pi_claim() is no-op there.
      0254c3b4
    • Alexander Viro's avatar
      [PATCH] paride cleanup and fixes (11/25) · bd4941ed
      Alexander Viro authored
      Equivalent transformation:
      	* new type - enum action.  phase functions return it now.
      	  run_fsm() looks at the result of phase() and does the
      	  corresponding action - next_request(), pi_do_claimed()
      	  or ps_set_intr().
      bd4941ed
    • Alexander Viro's avatar
      [PATCH] paride cleanup and fixes (10/25) · 02f5e0b8
      Alexander Viro authored
      Equivalent transformation:
      	* ps_continuation renamed - it's "phase" now.
      	* run_fsm() does what ps_tq_int() used to do
      	* calls of pi_do_claimed(..., func) replaced with
      	  phase = func; pi_do_claimed(..., run_fsm);
      	Now all phase functions are called from run_fsm() and we
      	can start pulling the common code into it.
      02f5e0b8
    • Alexander Viro's avatar
      [PATCH] paride cleanup and fixes (9/25) · 75233d40
      Alexander Viro authored
      Equivalent transformation:
      	do_pd_reqeust1() calls lambda-expanded, function killed.
      	resulting call of ps_set_intr() in next_request() has been
      	moved past dropping pd_lock.
      75233d40
    • Alexander Viro's avatar
      [PATCH] paride cleanup and fixes (8/25) · df81a2ca
      Alexander Viro authored
      Equivalent transformation:
      	instead of having do_pd_request1() calling do_pd_io() via
      	pi_do_claimed() and do_pd_io() calling do_pd_io_start() via
      	ps_set_intr(), do it the other way round.
      df81a2ca
    • Alexander Viro's avatar
      [PATCH] paride cleanup and fixes (7/25) · d01f635e
      Alexander Viro authored
      Equivalent transformation:
      	Handling of bogus requests taken into do_pd_io_start() - we
      	call next_request(0) as we would for any other error.  We
      	need to call pi_unclaim() before that - on other paths that
      	would happen as a side effect of pi_disconnect().
      	Setting variables moved into do_pd_io_start() - they don't
      	need pd_lock being held, so we can shift that outside.
      d01f635e
    • Alexander Viro's avatar
      [PATCH] paride cleanup and fixes (6/25) · b2e1ca59
      Alexander Viro authored
      Equivalent transformation:
      	* new function: do_pd_io_start().  Checks pd_cmd and calls
      	  do_pd_read_start() or do_pd_write_start().
      	* do_pd_read() and do_pd_write() merged into do_pd_io(), which
      	  schedules execution of do_pd_io_start().
      b2e1ca59
    • Alexander Viro's avatar
      [PATCH] paride cleanup and fixes (5/25) · 9f12c416
      Alexander Viro authored
      pd_busy gone - we can check for pd_req != NULL instead.
      9f12c416
    • Alexander Viro's avatar
      [PATCH] paride cleanup and fixes (4/25) · bca77c3b
      Alexander Viro authored
      Logics around "if not ready, schedule the same step again" taken
      out of ps_tq_intr() and into the steps that need it.
      bca77c3b
    • Alexander Viro's avatar
      [PATCH] paride cleanup and fixes (3/25) · a820fb08
      Alexander Viro authored
      Removed junk (see the analysis in the previous patch), removed
      ps_set_intr() arguments.
      a820fb08
    • Alexander Viro's avatar
      [PATCH] paride cleanup and fixes (2/25) · 227aca07
      Alexander Viro authored
      Preparation to crapectomy - expanded include of pseudo.h, split
      the part of pd_do_request() into pd_do_request1(), leaving in pd_do_request()
      only the check that FSM is not running and call of pd_do_request1().
      Added locking analysis - it's in drivers/block/paride/Transition-notes
      and it will be used on the next step.  Even though the subsequent steps are
      small, they rely on properties of the damn thing and proof of these properties
      is hairy.  Amazing perversions people manage to produce when writing a trivial
      FSM - the code is very convoluted for no good reason...
      227aca07
    • Alexander Viro's avatar
      [PATCH] paride cleanup and fixes (1/25) · f5cba060
      Alexander Viro authored
      * new helper: pi_schedule_claimed() - pi_do_claimed() sans the call
        of continuation if we don't have to wait; returns 1 if we don't
        have to wait and 0 otherwise.
      f5cba060
    • Alexander Viro's avatar
      [PATCH] parport fixes (6/6) · a2cafb3c
      Alexander Viro authored
      	daisy.c used to access the topology list with no locking whatsoever.
      Protected by spinlock, fixed numerous bugs in handling of the single-linked
      list (I'm not kidding - just take a look at the old parport_daisy_fini()
      and weep; it is supposed to go through a simple list and remove all entries
      that satisfy a condition).
      a2cafb3c
    • Alexander Viro's avatar
      [PATCH] parport fixes (5/6) · 9d00a8c0
      Alexander Viro authored
      	bw-qcam.c turned into proper parport driver.  Instead of (racy)
      scanning the list of ports we use ->attach() and ->detach().
      9d00a8c0
    • Alexander Viro's avatar
      [PATCH] parport fixes (4/6) · 3a313b98
      Alexander Viro authored
      	parport_gsc.c turned into proper parisc driver; instead of scanning
      the list of ports upon rmmod in search of ones that had been created by us,
      we do cleanup where it belongs - in parisc driver ->remove().
      3a313b98
    • Alexander Viro's avatar
      [PATCH] parport fixes (3/6) · 57f5dca3
      Alexander Viro authored
      	A bunch of parport_enumerate() users was duplicating parport_find_...()
      without proper locking.  Replaced with use of appropriate helpers, races closed.
      57f5dca3
    • Alexander Viro's avatar
      [PATCH] parport fixes (2/6) · 3833f137
      Alexander Viro authored
      	We use a new mutex to protect all additions/removals of drivers and
      ports.  That cures a lot of insanity:
      	* driver removals can't hit us in the middle of attach_driver_chain().
      Old code simply dies on that.
      	* port removals can't hit us in the middle of driver registration.
      Again, old code dies on that.
      	* driver ->detach() is allowed to block now.
      	* we are guaranteed that by the time when parport_unregister_driver()
      returns, all ->detach() calls are finished.  Old code did _not_ guarantee
      that (read: was inherently racy since rmmod of driver could race with port
      removal and get driver->detach(port) called after the module was gone).
      	* we are guaranteed that driver->attach(port) won't be called
      more than once.  With the old code that was a matter of luck.
      	* removed piles and piles of braindead code.
      3833f137
    • Alexander Viro's avatar
      [PATCH] parport fixes (1/6) · 8d19538b
      Alexander Viro authored
      	Current tree has all allocated ports on portlist.  However,
      most of the portlist users assume that we only have announced ports
      there and break badly if they happen to see the list after port driver
      has created a port (parport_register_port()) but before it finishes
      the setup (and calls parport_announce_port()).
      	The only place that wants to see all allocated port is
      parport_register_port() itself and only to pick the first unused
      port number.
      	We add a new list (all_ports) and put ports there when allocated;
      that list is kept ordered by port->number.  Ports are placed on portlist
      only by parport_announce_port().
      	Gobs of shite in parport_register_port() removed, pile of races
      closed...
      8d19538b
    • Linus Torvalds's avatar
      Merge bk://gkernel.bkbits.net/libata-2.5 · 99db82cf
      Linus Torvalds authored
      into home.osdl.org:/home/torvalds/v2.5/linux
      99db82cf
    • Jeff Garzik's avatar
      Merge redhat.com:/spare/repo/linux-2.5 · 8e4396ac
      Jeff Garzik authored
      into redhat.com:/spare/repo/libata-2.5
      8e4396ac