Skip to content

Commit

Permalink
serial: 8250: Use 'hlist_for_each_entry' to simplify code
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
tititiou36 authored and gregkh committed May 13, 2021
1 parent 021212f commit 89e7800
Showing 1 changed file with 4 additions and 14 deletions.
18 changes: 4 additions & 14 deletions drivers/tty/serial/8250/8250_core.c
Original file line number Diff line number Diff line change
Expand Up @@ -172,21 +172,18 @@ 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;

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;
}

if (n == NULL) {
if (i == NULL) {
i = kzalloc(sizeof(struct irq_info), GFP_KERNEL);
if (i == NULL) {
mutex_unlock(&hash_mutex);
Expand Down Expand Up @@ -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))
Expand Down

0 comments on commit 89e7800

Please sign in to comment.