Re: [PATCH 2/2] - usbserial: race-condition fix.

From: Luiz Fernando Capitulino (lcapitulino_at_mandriva.com.br)
Date: 11/23/05

  • Next message: Vojtech Pavlik: "Re: Christmas list for the kernel"
    Date:	Wed, 23 Nov 2005 10:07:08 -0200
    To: Eduardo Pereira Habkost <ehabkost@mandriva.com>
    
    

    On Wed, 23 Nov 2005 09:56:33 -0200
    Eduardo Pereira Habkost <ehabkost@mandriva.com> wrote:

    | On Wed, Nov 23, 2005 at 09:36:55AM -0200, Luiz Fernando Capitulino wrote:
    | > On Tue, 22 Nov 2005 14:13:53 -0800
    | > Greg KH <gregkh@suse.de> wrote:
    | >
    | > | On Tue, Nov 22, 2005 at 07:59:26PM -0200, Luiz Fernando Capitulino wrote:
    | > | > @@ -60,6 +61,7 @@ struct usb_serial_port {
    | > | > struct usb_serial * serial;
    | > | > struct tty_struct * tty;
    | > | > spinlock_t lock;
    | > | > + struct semaphore sem;
    | > |
    | > | You forgot to document what this semaphore is used for.
    | >
    | > Okay.
    | >
    | > | Hm, can we just use the spinlock already present in the port structure
    | > | for this? Well, drop the spinlock and use the semaphore? Yeah, that
    | > | means grabbing a semaphore for ever write for some devices, but USB data
    | > | rates are slow enough it wouldn't matter :)
    | >
    | > As far as I read the code, I found that spinlock is only used by the
    | > generic driver, in the
    | > drivers/usb/serial/generic.c:usb_serial_generic_write() function.
    | >
    | > Can we drop the spinlock there and use our new semaphore? Or should we
    | > create a new spinlock just to use there?
    |
    | The spin_lock is used only to protect write_urb_busy. An atomic_t seem
    | to be more appropriate for it. If we do that, I guess we can remove the
    | (then unused) spinlock.

     Ok, but, hmm.. I found the spinklock is actually used by other drivers too.

     I didn't catch this before because I wasn't compiling then. Sorry, my fault.

    | So we have three proposed changes:
    |
    | - Add semaphore to serialize close()/open() (properly documented)
    | - Replace write_urb_busy with an atomic_t
    | - Remove the spinlock

     Since the spinlock seems to be only used to protect 'write_urb_busy', I agree
    with those changes.

     Greg, do you? If so, I suggested we should add the semaphore first, because
    it is a bug fix.

     I can do the 'write_urb_busy' type replace next week (yes, I will replace all
    the drivers).

    -- 
    Luiz Fernando N. Capitulino
    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at  http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at  http://www.tux.org/lkml/
    

  • Next message: Vojtech Pavlik: "Re: Christmas list for the kernel"

    Relevant Pages

    • Re: PPP problem in a usb driver...
      ... > problem is basically when multiple WAN are calling my WAN Open routine ... Protecting all of open and all of close with the same semaphore ... > SMP Compliant without spinlock. ... If a spinlock is used both in an interrupt and in process ...
      (comp.os.linux.development.system)
    • Re: [patch] remove the BKL (Big Kernel Lock), this time for real
      ... and that codepath is only for correctness - the semaphore code ... real semaphore 2) no _user_ or maintainer of that code cares about the ... BKL because it's not performance-critical. ... spinlock madly across 512 CPUs, ...
      (Linux-Kernel)
    • Re: [RESEND 2/2] - usbserial: race-condition fix.
      ... Greg KH wrote: ... atomic functions, of course), since the current spinlock seems to be only ... same port. ... The patch below fixes that by adding a semaphore to ensure that no ...
      (Linux-Kernel)
    • Re: [PATCH 2/2] - usbserial: race-condition fix.
      ... drop the spinlock and use the semaphore? ... > operations in the usb-serial driver, is a bit weird to use the same ... send the line "unsubscribe linux-kernel" in ...
      (Linux-Kernel)
    • Re: [PATCH 2/2] - usbserial: race-condition fix.
      ... drop the spinlock and use the semaphore? ... lots of other usb-serial drivers use it. ... send the line "unsubscribe linux-kernel" in ...
      (Linux-Kernel)