e100_hw_init() invokes e100_self_test() only if in_interrupt() returns
false as e100_self_test() uses msleep() which requires sleepable task
context. The in_interrupt() check is incomplete because in_interrupt()
cannot catch callers from contexts which have just preemption or interrupts
disabled.
e100_hw_init() is invoked from:
  - e100_loopback_test() which clearly is sleepable task context as the
    function uses msleep() itself.
  - e100_up() which clearly is sleepable task context as well because it
    invokes e100_alloc_cbs() abd request_irq() which both require sleepable
    task context due to GFP_KERNEL allocations and mutex_lock() operations.
Remove the pointless in_interrupt() check.
As a side effect of this analysis it turned out that e100_rx_alloc_list()
which is only invoked from e100_loopback_test() and e100_up() pointlessly
uses a GFP_ATOMIC allocation. The next invoked function e100_alloc_cbs() is
using GFP_KERNEL already.
Change the allocation mode in e100_rx_alloc_list() to GFP_KERNEL as well.
Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: David S. Miller <davem@davemloft.net>
        e100_hw_reset(nic);
 
        netif_err(nic, hw, nic->netdev, "e100_hw_init\n");
-       if (!in_interrupt() && (err = e100_self_test(nic)))
+       if ((err = e100_self_test(nic)))
                return err;
 
        if ((err = e100_phy_init(nic)))
        nic->rx_to_use = nic->rx_to_clean = NULL;
        nic->ru_running = RU_UNINITIALIZED;
 
-       if (!(nic->rxs = kcalloc(count, sizeof(struct rx), GFP_ATOMIC)))
+       if (!(nic->rxs = kcalloc(count, sizeof(struct rx), GFP_KERNEL)))
                return -ENOMEM;
 
        for (rx = nic->rxs, i = 0; i < count; rx++, i++) {