Messages in this thread | | | From | "Michael S. Zick" <> | Subject | Re: [Compile Warning] 2.6.30-rc8 build | Date | Fri, 5 Jun 2009 12:40:50 -0500 |
| |
On Fri June 5 2009, Roland Dreier wrote: > > To my reading of the function, I think gcc has a point: > > > > drivers/serial/8250.c: In function 'serial8250_shutdown': > > drivers/serial/8250.c:1685: warning: 'i' may be used uninitialized in this function > > > > It does read as if the code might try to initialize > > the 'lock' field of a null pointer. > > The code in question is: > > static void serial_unlink_irq_chain(struct uart_8250_port *up) > { > struct irq_info *i; > struct hlist_node *n; > struct hlist_head *h; > > mutex_lock(&hash_mutex); > > h = &irq_lists[up->port.irq % NR_IRQ_HASH]; > > hlist_for_each(n, h) { > i = hlist_entry(n, struct irq_info, node); > if (i->irq == up->port.irq) > break; > } > > BUG_ON(n == NULL); > BUG_ON(i->head == NULL); > > if (list_empty(i->head)) > free_irq(up->port.irq, i); > > and if the hlist_for_each() doesn't find a matching irq_info to put in > i, then the BUG_ON(n == NULL) will kill the system. So there's no bug > although it is understandable that gcc can't see that. > > (Not sure why you talk about "the 'lock' field of a null pointer" -- I > assume your gcc warns about the function serial8250_shutdown() because > it is inlining a function only called from a single location) >
Later in the code that gcc thought had the problem - - where it tries to do a spinlock_init(i->lock).
Of course, I, just like gcc, did not know the machine had already died. I'll stick an "i = something" at the top (NULL?) just to shut up gcc.
Mike > - R. > >
| |