[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <200612202143.55778.oliver@neukum.org>
Date: Wed, 20 Dec 2006 21:43:54 +0100
From: Oliver Neukum <oliver@...kum.org>
To: J <jhnlmn@...oo.com>, linux-usb-devel@...ts.sourceforge.net
Cc: linux-kernel@...r.kernel.org
Subject: Re: Possible race condition in usb-serial.c
Am Mittwoch, 20. Dezember 2006 20:32 schrieb J:
> I am currently trying to fix a legacy 2.4 based USB
> driver and I am having various races,
> serial_open/usb_serial_disconnect is the most lively.
> I am not asking your help in fixing this old 2.4 junk
> (in fact I already fixed it using a global semaphore
> to protect serial_table).
Please send in a patch for 2.4. It's very important to have a
very reliable ultraconservative tested kernel available.
> But I still want to understand how the latest and
> greatest 2.6 driver is supposed to work so I can
> adopt some of the changes. At first I thought that
> the ref-counting will help, but then found that
> it does not fix much! The race is as lively
> as ever.
I suppose the last time I looked at that code, khubd still took
BKL. Or I overlooked the race. I have no serial devices since
the cell phone broke.
> Also I found that BKL/lock_kernel is compiled out in
> my configuration because it is not an SMP build.
>
> I see that in 2.6 BKL/lock_kernel are also optional
> for non-SMP builds. Is it true?
> If yes, then again, how this is supposed to work
> and avoid races?
Look closer. If you build with preemption, taking BKL disables preemption.
BKL is effective only until you schedule. On UP, without preemption
ordinary kernel code will not reenter. You need no lock that doesn't guard
against interrupts unless you schedule under these narrow conditions.
Could you test the attached patch against 2.6?
Regards
Oliver
View attachment "usbserialtablerace.diff" of type "text/x-diff" (2558 bytes)
Powered by blists - more mailing lists