OSDN Git Service

media: rc: sir_ir: detect presence of port
authorSean Young <sean@mess.org>
Wed, 8 Nov 2017 21:19:45 +0000 (16:19 -0500)
committerMauro Carvalho Chehab <mchehab@s-opensource.com>
Wed, 15 Nov 2017 13:57:34 +0000 (08:57 -0500)
commit30b4e122d71cbec2944a5f8b558b88936ee42f10
treed9502baa72354fa85ff8aae9cdd4062d16147b71
parentf2ecc3d0787e05d9145722feed01d4a11ab6bec1
media: rc: sir_ir: detect presence of port

Without this test, sir_ir clumsy claims resources for a device which
does not exist.

The 0-day kernel test robot reports the following errors (in a loop):
sir_ir sir_ir.0: Trapped in interrupt
genirq: Flags mismatch irq 4. 00000000 (ttyS0) vs. 00000000 (sir_ir)

When sir_ir is loaded with the default io and irq, the following happens:
 - sir_ir claims irq 4
 - user space opens /dev/ttyS0
 - in serial8250_do_startup(), some setup is done for ttyS0, which causes
   irq 4 to fire (in THRE test)
 - sir_ir does not realise it was not for it, and spins until the "trapped
   in interrupt"
 - now serial driver calls setup_irq() and fails and we get the
   "Flags mismatch" error.

There is no port present at 0x3e8 so simply check for the presence of a
port, as suggested by Linus.

Reported-by: kbuild test robot <fengguang.wu@intel.com>
Tested-by: Fengguang Wu <fengguang.wu@intel.com>
Signed-off-by: Sean Young <sean@mess.org>
Cc: <stable@vger.kernel.org> # 4.12+
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
drivers/media/rc/sir_ir.c