>> > other 10 are questionable. Those 10 are all simple variations on the
>> > following code:
>> >
>> > Start --->
>> > if (!tmp_buf) {
>> > page = get_free_page(GFP_KERNEL);
>> >
>> > Error --->
>> > if (tmp_buf)
>> > free_page(page);
>> > else
>> > tmp_buf = (unsigned char *) page;
>> > }
>>
>> That one is not a bug. The serial drivers do this to handle a race.
>> Really it should be
May be I'm being dumb here, and without wishing to open the 'volatile'
can of worms elsewhere, but:
static char * tmp_buf;
How will this be guaranteed to help handle a race, when gcc is
likely either to have tmp_buf in a register (not declared
volatile), or perhaps even optimize out the second reference.
Seems to me (and I may well be wrong), either there is a
race thread (tmp_buf being assigned between the first
test and grabbing the page), in which case as tmp_buf may
be in a register, it doesn't avoid the race (and potentially
stomps on the existing buffer), or there is not a race, in
which case the second check is unnecessary. IE the checker
found a real bug.
-- Alex Bligh - 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/
This archive was generated by hypermail 2b29 : Tue Jul 31 2001 - 21:00:29 EST