Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 18 Aug 2005 19:24:30 +0000 (UTC)
From:      John Baldwin <jhb@FreeBSD.org>
To:        src-committers@FreeBSD.org, cvs-src@FreeBSD.org, cvs-all@FreeBSD.org
Subject:   cvs commit: src/sys/pci if_xl.c if_xlreg.h
Message-ID:  <200508181924.j7IJOUpM060614@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
jhb         2005-08-18 19:24:30 UTC

  FreeBSD src repository

  Modified files:
    sys/pci              if_xl.c if_xlreg.h 
  Log:
  Various fixups to locking:
  - Remove a lot of superfluous locking during attach.  There is no need
    to lock access to the driver until some other thread has a way of getting
    to it.  For ethernet drivers the other ways include registering an
    interrupt handler via bus_setup_intr(), calling ether_ifattach() to hook
    into the network stack, and kicking off a callout-driven timer via
    callout_reset().
  - Use callout_* rather than timeout/untimeout.
  - Break out of xl_rxeof() if IFF_DRV_RUNNING is clear after ifp->if_input
    returns to handle the case where the interface was stopped while we were
    passing a packet up the stack.  Don't call xl_rxeof() in xl_rxeof_task()
    unless IFF_DRV_RUNNING is set.  With these fixes in place, any
    outstanding task will gracefully terminate as soon as it gets a chance to
    run after the interface has been stopped via xl_stop().  As a result,
    taskqueue_drain() is no longer required in xl_stop().  The task is still
    drained in detach() however to make sure that detach() can safely destroy
    the driver mutex at the end of the function.
  - Lock the driver lock in the ifmedia callouts and don't lock across
    ifmedia_ioctl() in xl_ioctl().
  
  Note: glebius came up with most of (3) as well independently.  I took a
  rather roundabout way of arriving at the same conclusion.
  
  MFC after:      3 days
  
  Revision  Changes    Path
  1.195     +32 -48    src/sys/pci/if_xl.c
  1.56      +1 -1      src/sys/pci/if_xlreg.h



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200508181924.j7IJOUpM060614>