Hi All, I have module with Xilinx FPGA. It implements UART(s), SPI(s), parallel I/O and interfaces them to the Host CPU via PCI Express bus. I see that my system freezes without capturing the crash dump for certain tests. I debugged this issue and it was tracked down to the ‘readl()’ in interrupt handler code In ISR, first reads the Interrupt Status register using ‘readl()’ as given below. status = readl(ctrl->reg + INT_STATUS); And then clears the pending interrupts using ‘writel()’ as given blow. writel(status, ctrl->reg + INT_STATUS); I've noticed a kernel hang if INT_STATUS register read again after clearing the pending interrupts. My system freezes only after executing the same ISR code after millions of interrupts. Basically reading the memory mapped register in ISR resulting this behavior. If I comment “status = readl(ctrl->reg + INT_STATUS);” after clearing the pending interrupts then system is stable . As a temporary workaround I avoided reading the INT_STATUS register after clearing the pending bits, and this code change works fine. Can someone clarify me why the kernel hangs without crash dump incase if I read the INT_STATUS register using readl() after clearing(writel()) the pending bits? To read the memory mapped IO kernel provides {read}{b,w,l,q}() API’s. If PCIe card is not responsive , can call to readl() from interrupt context makes system freeze? Thanks for any suggestions and solutions to this problem! Snippet of the ISR code is given blow: https://pastebin.com/as2tSPwE static irqreturn_t pcie_isr(int irq, void *data) { struct test_device *ctrl = (struct test_device *)data; u32 status; … status = readl(ctrl->reg + INT_STATUS); /* * Check to see if it was our interrupt */ if (!(status & 0x000C)) return IRQ_NONE; /* Clear the interrupt */ writel(status, ctrl->reg + INT_STATUS); if (status & 0x0004) { /* * Tx interrupt pending. */ .... } if (status & 0x0008) { /* Rx interrupt Pending */ /* The system freezes if I read again the INT_STATUS register as given below */ status = readl(ctrl->reg + INT_STATUS); .... } .. return IRQ_HANDLED; } -- Thanks, Sekhar _______________________________________________ Kernelnewbies mailing list Kernelnewbies@xxxxxxxxxxxxxxxxx https://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies