Messages in this thread | | | Date | Wed, 12 Mar 2008 10:38:49 +0530 | From | Chandru <> | Subject | Re: [RFC] [Patch] calgary iommu: Use the first kernel's tce tables in kdump |
| |
> Hi Chandru, > > - How do we make sure that previous kernel's TCE tables are not > overwritten > by new kernel (In case previous kernel allocated TCE tables in first > 640 KB?) > TCE tables are allocated using alloc_bootmem_low() with goal set to 0. Don't know if this will be sufficient. Investigating... > - How do we make sure that when new kernel tries to setup an entry in > TCE table, then it does not try to clear up an existing entry which is > still in use? > A bitmap is created once the first kernel's TCE table is found. This bitmap is populated by reading the entries in the tce table. Non-zero entries in the table are marked as used/reserved in the bitmap. > Did you try the Muli suggestion of ignoring DMA error in exception > handler? With what I tried, I was not successful > What happens if I setup new table and try to switch to new > table? This is the root cause of the problem. > Some sort of error will occur. The pci bus on that PHB goes into an undefined state ( returning 0xffffffff for all reads on that bus ). > Can't we modify the handler and > ignore it for kdump case and move on? > The system booted! , :) with the following change. Muli acceptable??
static void calgary_watchdog(unsigned long data) { ... ... /* Disable bus that caused the error and ignore if it's kdump kernel */ + if ( !is_kdump_kernel()) { target = calgary_reg(bbar, phb_offset(tbl->it_busno) | PHB_CONFIG_RW_OFFSET); val32 = be32_to_cpu(readl(target)); val32 |= PHB_SLOT_DISABLE; writel(cpu_to_be32(val32), target); + } readl(target); /* flush */ .. .. } > Thanks > Vivek > -Chandru
| |