From: Suravee Suthikulpanit <suravee.suthikulpanit@amd.com>
To: Jan Beulich <JBeulich@suse.com>
Cc: andrew.cooper3@citrix.com, xen-devel@lists.xen.org, keir@xen.org,
linux@eikelenboom.it
Subject: Re: [PATCH V2] x86/AMD-Vi: Add additional check for invalid special->handle
Date: Fri, 30 Aug 2013 15:35:20 -0500 [thread overview]
Message-ID: <52210208.9000809@amd.com> (raw)
In-Reply-To: <52206EA002000078000EFA11@nat28.tlf.novell.com>
[-- Attachment #1.1: Type: text/plain, Size: 3678 bytes --]
On 8/30/2013 3:06 AM, Jan Beulich wrote:
>>>> On 29.08.13 at 22:26, Suravee Suthikulpanit <suravee.suthikulpanit@amd.com> wrote:
>> On 8/29/2013 2:17 AM, Jan Beulich wrote:
>>> As said in a previous reply - I'm convinced we can't fix things both
>>> ways with just a single command line option: We need to know
>>> which value to use as anchor (I'd generally think that ought to be
>>> the value inside the square backets) and which value to use as
>>> overrides.
>>>
>>> And since my earlier patch was inspired by the Linux one - I don't
>>> think Linux allows fixing up things the way you try to here either.
>>>
>> Actually, on Linux, the it would try matching the handle (i.e. the value
>> in the square bracket). If it is specified via command line, it will
>> override the value in the IVRS.
> Right - that's matching the behavior of my patch. Or am I missing
> something here?
I believe in your patch is slightly different. In your version, it has
the following check
in the driver/passthrough/amd/iommu_acpi.c:parse_ivhd_device_special().
*/
for ( apic = 0; apic < nr_ioapics; apic++ )
{
if ( IO_APIC_ID(apic) != special->handle )
continue;
.....
First, the code tries to match the IO_APIC_ID(apic) with the
special->handle. If none is matched,
it will go directly to the exiting code (see below) without trying to
check the command line.
if ( apic == nr_ioapics )
{
printk(XENLOG_ERR "IVHD Error: Invalid IO-APIC %#x\n",
special->handle);
return 0;
}
break;
This is different on Linux where it check if the value it is trying to
matched is coming from the command line.
>> In case the entry contains the handle
>> value which is not list as IOAPIC in the ACPI APIC table, we should be
>> able to invalidate the entry. This same rule should also apply when
>> users specify invalid handle value. Also, I never see the case where
>> the special->used_id is incorrect. The other case I am seeing is when
>> the IVRS special entry is missing for IOAPIC, which this should already
>> be handled in your original patch.
>>
>> I have also verified that this works on Linux. For example, on my
>> system, there are 2 IOAPICs with APIC ID 8 and 9 according to the ACPI
>> APIC table. However, in IVRS, the value in both special entries are
>> 0xff. When I give the boot options "ivrs_ioapic[8]=00:14.0
>> ivrs_ioapic[9]=00:0.1", this allows IOMMU to initialize correctly.
> Yes, because you specify the _full_ set. But we've seen many cases
> (like Sander's) where one of the IVRS entries is correct and the other
> isn't. In that case specifying one command line option should be
> sufficient, and fixing it in the direction you propose requires - as said -
> a second command line option, anchored at other than the IO-APIC ID.
>
> Jan
Let's clarify the cases we are trying to handle here:
CASE1: IOAPIC handle ismissing in IVRS, but exist in APIC table
Users should specify the missing IOAPIC using ioapic_ivrs[<handle>]=bdf
CASE2: IOAPIC handleare duplicated in IVRS entries
This case,the code already check for duplications inIVRS. Here,we cannot trust
any existing entries in the IVRS, and we shouldonly rely ontheioapic_ivrs[<handle>]=bdf
options for all IOAPICs.
CASE3: IOAPIChandle are Bogus (i.e. 0xff ornot existing in APIC table)
We cannot trust the entry with bogus handle, and users would need to specify the ioapic_ivrs option.
Which casedo you thinkwould require the second command line option which we wouldanchor the BDF?
Or, am I missing some other cases here?
Suravee
[-- Attachment #1.2: Type: text/html, Size: 10908 bytes --]
[-- Attachment #2: Type: text/plain, Size: 126 bytes --]
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
http://lists.xen.org/xen-devel
next prev parent reply other threads:[~2013-08-30 20:35 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-08-28 17:34 [PATCH V2] x86/AMD-Vi: Add additional check for invalid special->handle suravee.suthikulpanit
2013-08-29 7:17 ` Jan Beulich
2013-08-29 20:26 ` Suravee Suthikulpanit
2013-08-30 8:06 ` Jan Beulich
2013-08-30 20:35 ` Suravee Suthikulpanit [this message]
2013-09-04 9:57 ` Jan Beulich
2013-09-04 22:48 ` Suravee Suthikulpanit
2013-09-05 7:14 ` Jan Beulich
2013-09-11 22:31 ` Suravee Suthikulpanit
2013-09-12 7:11 ` Jan Beulich
2013-09-12 8:50 ` Jan Beulich
2013-09-12 18:02 ` Suravee Suthikulpanit
2013-09-12 18:03 ` Suravee Suthikulpanit
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=52210208.9000809@amd.com \
--to=suravee.suthikulpanit@amd.com \
--cc=JBeulich@suse.com \
--cc=andrew.cooper3@citrix.com \
--cc=keir@xen.org \
--cc=linux@eikelenboom.it \
--cc=xen-devel@lists.xen.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).