1. 15 May, 2015 38 commits
  2. 04 May, 2015 2 commits
    • Gregory CLEMENT's avatar
      gpio: mvebu: Fix mask/unmask managment per irq chip type · a4bba4c1
      Gregory CLEMENT authored
      commit 61819549 upstream.
      
      Level IRQ handlers and edge IRQ handler are managed by tow different
      sets of registers. But currently the driver uses the same mask for the
      both registers. It lead to issues with the following scenario:
      
      First, an IRQ is requested on a GPIO to be triggered on front. After,
      this an other IRQ is requested for a GPIO of the same bank but
      triggered on level. Then the first one will be also setup to be
      triggered on level. It leads to an interrupt storm.
      
      The different kind of handler are already associated with two
      different irq chip type. With this patch the driver uses a private
      mask for each one which solves this issue.
      
      It has been tested on an Armada XP based board and on an Armada 375
      board. For the both boards, with this patch is applied, there is no
      such interrupt storm when running the previous scenario.
      
      This bug was already fixed but in a different way in the legacy
      version of this driver by Evgeniy Dushistov:
      9ece8839 "ARM: orion: Fix for certain
      sequence of request_irq can cause irq storm". The fact the new version
      of the gpio drive could be affected had been discussed there:
      http://thread.gmane.org/gmane.linux.ports.arm.kernel/344670/focus=364012Reported-by: default avatarEvgeniy A. Dushistov <dushistov@mail.ru>
      Signed-off-by: default avatarGregory CLEMENT <gregory.clement@free-electrons.com>
      Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
      Signed-off-by: default avatarJiri Slaby <jslaby@suse.cz>
      a4bba4c1
    • Max Filippov's avatar
      xtensa: ISS: fix locking in TAP network adapter · 26ef1aba
      Max Filippov authored
      commit 24e94454 upstream.
      
      - don't lock lp->lock in the iss_net_timer for the call of iss_net_poll,
        it will lock it itself;
      - invert order of lp->lock and opened_lock acquisition in the
        iss_net_open to make it consistent with iss_net_poll;
      - replace spin_lock with spin_lock_bh when acquiring locks used in
        iss_net_timer from non-atomic context;
      - replace spin_lock_irqsave with spin_lock_bh in the iss_net_start_xmit
        as the driver doesn't use lp->lock in the hard IRQ context;
      - replace __SPIN_LOCK_UNLOCKED(lp.lock) with spin_lock_init, otherwise
        lockdep is unhappy about using non-static key.
      Signed-off-by: default avatarMax Filippov <jcmvbkbc@gmail.com>
      Signed-off-by: default avatarJiri Slaby <jslaby@suse.cz>
      26ef1aba