Looking for an idea/workaround for using MIPS ioremap_nocache (__ioremap) in IRQ

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,

Once I've hit
BUG_ON(in_interrupt());
when hacking PCI drivers locally on MIPS board. I see the problem but
don't know the solution.

1) I think "read" and "write" of struct pci_ops should be safe to call
in IRQ handler
2) In drivers/bcma/driver_pci_host.c we use ioremap_nocache

This causes a problem for boards with 2 PCI(e) cards. The base address
for the 2nd card is
#define BCMA_SOC_PCI1_CFG               0x44000000U
which doesn't allow MIPS to use KSEG1.

As the result forwardtrace looks like this:
1) ioremap_nocache
2) __ioremap_mode
3) __ioremap
4) get_vm_area
5) __get_vm_area_node
And then we can hit BUG_ON(in_interrupt());

Can you see any solution for this? Currently there isn't any mainline
code triggering this problem, but it would be nice to have everything
working anyway.


As one of workarounds I was thinking about mapping whole space early.
Unfortunately there are many possible registers (0xffff), few PCI
functions (0x30000), many possible PCI devices (0xf80000). It's way to
big space I guess to keep it mapped all the time.

-- 
Rafał





[Index of Archives]     [Linux MIPS Home]     [LKML Archive]     [Linux ARM Kernel]     [Linux ARM]     [Linux]     [Git]     [Yosemite News]     [Linux SCSI]     [Linux Hams]

  Powered by Linux