From mboxrd@z Thu Jan 1 00:00:00 1970 From: Keir Fraser Subject: Re: ACPI-Tables corrupted? Date: Wed, 28 Jul 2010 13:45:12 +0100 Message-ID: References: <4C501EF3.8070402@ts.fujitsu.com> Mime-Version: 1.0 Content-Type: text/plain; charset="US-ASCII" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <4C501EF3.8070402@ts.fujitsu.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: Juergen Gross Cc: "xen-devel@lists.xensource.com" List-Id: xen-devel@lists.xenproject.org On 28/07/2010 13:13, "Juergen Gross" wrote: >>> As Dom0 is a pv-kernel, it should be able to ignore this entry. >>> The crash kernel OTOH should not panic due to the trashed entry! >>> What is the correct solution here? >> >> Could provide a cmdline option to not nobble the DMAR? > > That's a possibility. > I wonder whether it wouldn't be better to let dom0 decide not to use it if > running under xen. This would remove the requirement for zapping the ACPI > table. IMO it's always a bad idea to change data of a deeper layer... If we don't zap the DMAR then every existing dom0 kernel will fail with new hypervisor. We could gate it on a new elfnote, or rename to XMAR and have dom0 rename it back, or just have a flag day. >>> The crash kernel expects a valid DMAR entry, as following code in >>> enable_IR_x2apic() suggests: >> >> I don't know what that function does, nor how the error path below depends >> on DMAR. DMAR isn't mentioned in the below code. > > Sorry, here a larger fragment (source arch/x86/kernel/apic/apic.c): > /* IR is required if there is APIC ID > 255 even when running > * under KVM > */ > if (max_physical_apicid > 255 || !kvm_para_available()) > goto nox2apic; The if stmt is confusing. Also, what would happen if this kernel was booted on a system without VT-d (and hence no DMAR)? Presumably it *can* boot in a DMAR-less environment -- there must be something odd going on for it to end on this path for us. -- Keir > /* > * without IR all CPUs can be addressed by IOAPIC/MSI > * only in physical mode > */ > x2apic_force_phys(); > } > > x2apic_enabled = 1; > > if (x2apic_supported() && !x2apic_mode) { > x2apic_mode = 1; > enable_x2apic(); > pr_info("Enabled x2apic\n"); > } > > nox2apic: > if (!ret) /* IR enabling failed */ > restore_IO_APIC_setup(ioapic_entries); > unmask_8259A(); > local_irq_restore(flags); > > out: > if (ioapic_entries) > free_ioapic_entries(ioapic_entries); > > if (x2apic_enabled) > return; > > if (x2apic_preenabled) > panic("x2apic: enabled by BIOS but kernel init failed."); > else if (cpu_has_x2apic) > pr_info("Not enabling x2apic, Intr-remapping init > failed.\n"); > } > > > dmar_table_init() will return -ENODEV if no DMAR record is found. > > > Juergen