From: Juergen Gross <juergen.gross@ts.fujitsu.com>
To: Keir Fraser <keir.fraser@eu.citrix.com>
Cc: "xen-devel@lists.xensource.com" <xen-devel@lists.xensource.com>
Subject: Re: ACPI-Tables corrupted?
Date: Wed, 28 Jul 2010 14:13:39 +0200 [thread overview]
Message-ID: <4C501EF3.8070402@ts.fujitsu.com> (raw)
In-Reply-To: <C875D57C.1BD3D%keir.fraser@eu.citrix.com>
On 07/28/2010 01:39 PM, Keir Fraser wrote:
>
>
>
> On 28/07/2010 12:26, "Juergen Gross"<juergen.gross@ts.fujitsu.com> wrote:
>
>> On 07/28/2010 12:03 PM, Keir Fraser wrote:
>>> On 28/07/2010 10:38, "Juergen Gross"<juergen.gross@ts.fujitsu.com> wrote:
>>>
>>>> As you can see, the DMAR eye-catcher is replaced by blanks!
>>>> This leads to a programmed panic in the crash kernel later in case of a
>>>> panic in dom0...
>>>>
>>>> Any ideas?
>>>> BTW: seen in unstable AND 4.0
>>>
>>> Look at the tail of xen/drivers/passthrough/vtd/dmar.c: Xen *always*
>>> *unconditionally* trashes the DMAR so that dom0 will not parse it.
>>> Presumably bad stuff would happen if it did.
>>
>> 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...
>
>> 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):
void __init enable_IR_x2apic(void)
{
unsigned long flags;
struct IO_APIC_route_entry **ioapic_entries = NULL;
int ret, x2apic_enabled = 0;
int dmar_table_init_ret = 0;
#ifdef CONFIG_INTR_REMAP
dmar_table_init_ret = dmar_table_init();
if (dmar_table_init_ret)
pr_debug("dmar_table_init() failed with %d:\n",
dmar_table_init_ret);
#endif
ioapic_entries = alloc_ioapic_entries();
if (!ioapic_entries) {
pr_err("Allocate ioapic_entries failed\n");
goto out;
}
ret = save_IO_APIC_setup(ioapic_entries);
if (ret) {
pr_info("Saving IO-APIC state failed: %d\n", ret);
goto out;
}
local_irq_save(flags);
mask_8259A();
mask_IO_APIC_setup(ioapic_entries);
if (dmar_table_init_ret)
ret = 0;
else
ret = enable_IR();
if (!ret) {
/* IR is required if there is APIC ID > 255 even when running
* under KVM
*/
if (max_physical_apicid > 255 || !kvm_para_available())
goto nox2apic;
/*
* 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
--
Juergen Gross Principal Developer Operating Systems
TSP ES&S SWE OS6 Telephone: +49 (0) 89 3222 2967
Fujitsu Technology Solutions e-mail: juergen.gross@ts.fujitsu.com
Domagkstr. 28 Internet: ts.fujitsu.com
D-80807 Muenchen Company details: ts.fujitsu.com/imprint.html
next prev parent reply other threads:[~2010-07-28 12:13 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-07-28 9:38 ACPI-Tables corrupted? Juergen Gross
2010-07-28 10:03 ` Keir Fraser
2010-07-28 11:26 ` Juergen Gross
2010-07-28 11:39 ` Keir Fraser
2010-07-28 12:13 ` Juergen Gross [this message]
2010-07-28 12:45 ` Keir Fraser
2010-07-28 13:27 ` Juergen Gross
2010-07-28 13:36 ` Konrad Rzeszutek Wilk
2010-07-29 6:19 ` Juergen Gross
2010-07-29 6:39 ` Keir Fraser
2010-07-29 6:48 ` Juergen Gross
2010-07-29 6:48 ` Keir Fraser
2010-07-29 6:53 ` Juergen Gross
2010-08-06 13:39 ` Jan Beulich
2010-08-06 14:04 ` Keir Fraser
2010-07-29 6:31 ` Jiang, Yunhong
2010-07-29 6:40 ` Keir Fraser
2010-07-29 6:48 ` Keir Fraser
2010-07-29 7:37 ` Jiang, Yunhong
2010-07-29 9:04 ` Juergen Gross
2010-07-29 9:33 ` Keir Fraser
2010-07-29 10:24 ` Keir Fraser
2010-07-30 4:47 ` Juergen Gross
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4C501EF3.8070402@ts.fujitsu.com \
--to=juergen.gross@ts.fujitsu.com \
--cc=keir.fraser@eu.citrix.com \
--cc=xen-devel@lists.xensource.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.