serial: 8250: Use 'hlist_for_each_entry' to simplify code
authorChristophe JAILLET <christophe.jaillet@wanadoo.fr>
Wed, 28 Apr 2021 07:30:40 +0000 (09:30 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 13 May 2021 14:25:42 +0000 (16:25 +0200)
Use 'hlist_for_each_entry' instead of hand writing it.
This saves a few lines of code.

The comment about warning generated by some gcc version is also removed.
The way 'hlist_for_each_entry' is written should prevent such a warning to
be emitted.

Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
Link: https://lore.kernel.org/r/14024ddeb2b3a8c5b0138b5ba5083f54d00164a9.1619594713.git.christophe.jaillet@wanadoo.fr
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/tty/serial/8250/8250_core.c

index cae61d1..081b773 100644 (file)
@@ -172,7 +172,6 @@ static void serial_do_unlink(struct irq_info *i, struct uart_8250_port *up)
 static int serial_link_irq_chain(struct uart_8250_port *up)
 {
        struct hlist_head *h;
-       struct hlist_node *n;
        struct irq_info *i;
        int ret;
 
@@ -180,13 +179,11 @@ static int serial_link_irq_chain(struct uart_8250_port *up)
 
        h = &irq_lists[up->port.irq % NR_IRQ_HASH];
 
-       hlist_for_each(n, h) {
-               i = hlist_entry(n, struct irq_info, node);
+       hlist_for_each_entry(i, h, node)
                if (i->irq == up->port.irq)
                        break;
-       }
 
-       if (n == NULL) {
+       if (i == NULL) {
                i = kzalloc(sizeof(struct irq_info), GFP_KERNEL);
                if (i == NULL) {
                        mutex_unlock(&hash_mutex);
@@ -220,25 +217,18 @@ static int serial_link_irq_chain(struct uart_8250_port *up)
 
 static void serial_unlink_irq_chain(struct uart_8250_port *up)
 {
-       /*
-        * yes, some broken gcc emit "warning: 'i' may be used uninitialized"
-        * but no, we are not going to take a patch that assigns NULL below.
-        */
        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);
+       hlist_for_each_entry(i, h, node)
                if (i->irq == up->port.irq)
                        break;
-       }
 
-       BUG_ON(n == NULL);
+       BUG_ON(i == NULL);
        BUG_ON(i->head == NULL);
 
        if (list_empty(i->head))