Interrupt vector 0 can be used on some platform. In libata, the routine ata_host_activate() considers irq=0 as invalid. As a result, when running linux in non-root cell of Jailhouse, if we allocate just one PCI ATA device to the guest, the device will get an IRQ of value 0. Although IRQ0 is perfectly legal, ATA device will fail to start up. Signed-off-by: Chaohong guo <chaohong.guo@xxxxxxxxx> --- drivers/ata/libata-core.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c index a9dd4ea7467d..d83ba91c5051 100644 --- a/drivers/ata/libata-core.c +++ b/drivers/ata/libata-core.c @@ -6628,7 +6628,7 @@ int ata_host_activate(struct ata_host *host, int irq, return rc; /* Special case for polling mode */ - if (!irq) { + if (irq < 0) { WARN_ON(irq_handler); return ata_host_register(host, sht); } -- 2.17.1