From: Jan Glauber Date: Wed, 5 Dec 2012 13:43:25 +0000 (+0100) Subject: s390/pci: no msleep in potential IRQ context X-Git-Url: https://git.karo-electronics.de/?a=commitdiff_plain;h=c59b9f92653f102856ca7802af551788c143a3a3;p=linux-beck.git s390/pci: no msleep in potential IRQ context The PCI instructions may be used in IRQ context so scheduling is forbidden. Use udelay and shorten the delay since we are now polling. Signed-off-by: Jan Glauber Signed-off-by: Martin Schwidefsky --- diff --git a/arch/s390/include/asm/pci_insn.h b/arch/s390/include/asm/pci_insn.h index 15b88b908e8c..1486a98d5dad 100644 --- a/arch/s390/include/asm/pci_insn.h +++ b/arch/s390/include/asm/pci_insn.h @@ -3,7 +3,7 @@ #include -#define ZPCI_INSN_BUSY_DELAY 1 /* 1 millisecond */ +#define ZPCI_INSN_BUSY_DELAY 1 /* 1 microsecond */ /* Load/Store status codes */ #define ZPCI_PCI_ST_FUNC_NOT_ENABLED 4 @@ -138,7 +138,7 @@ static inline int rpcit_instr(u64 fn, u64 addr, u64 range) do { cc = __rpcit(fn, addr, range, &status); if (cc == 2) - msleep(ZPCI_INSN_BUSY_DELAY); + udelay(ZPCI_INSN_BUSY_DELAY); } while (cc == 2); if (cc) @@ -198,7 +198,7 @@ static inline int pcilg_instr(u64 *data, u64 req, u64 offset) do { cc = __pcilg(data, req, offset, &status); if (cc == 2) - msleep(ZPCI_INSN_BUSY_DELAY); + udelay(ZPCI_INSN_BUSY_DELAY); } while (cc == 2); if (cc) { @@ -236,7 +236,7 @@ static inline int pcistg_instr(u64 data, u64 req, u64 offset) do { cc = __pcistg(data, req, offset, &status); if (cc == 2) - msleep(ZPCI_INSN_BUSY_DELAY); + udelay(ZPCI_INSN_BUSY_DELAY); } while (cc == 2); if (cc) @@ -268,7 +268,7 @@ static inline int pcistb_instr(const u64 *data, u64 req, u64 offset) do { cc = __pcistb(data, req, offset, &status); if (cc == 2) - msleep(ZPCI_INSN_BUSY_DELAY); + udelay(ZPCI_INSN_BUSY_DELAY); } while (cc == 2); if (cc)