Re: x86/apic: MSI address malformed for "flat" driver

From: Cyril Novikov
Date: Tue Sep 11 2018 - 02:11:04 EST


On 9/7/2018 12:11 PM, Thomas Gleixner wrote:
On Thu, 6 Sep 2018, Philipp Eppelt wrote:

The "flat" driver defines the MSI addressing scheme to be used as
logical addressing in flat mode. The MSI msg address is composed
accordingly, but sets MSI_ADDR_REDIRECTION_CPU which is a zero at bit[3].

Correct. That's what it means:

* When RH is 0, the interrupt is directed to the processor listed in the
Destination ID field.

So for DM:

* If RH is 0, then the DM bit is ignored and the message is sent ahead
independent of whether the physical or logical destination mode is
used.

which is means that the delivery does not do any magic redirections,
because the Redirection Hint is off. If RH is set, then the delivery can
redirect according to the rules in the DM section. We are not using that
because we want targeted single CPU delivery.

The interpretation of the DID field is purely depending on the local APIC
itself by matching the APIC ID against the DID field. And the local APIC ID
of CPU0 is 1 << 0, i.e. 0x1 which matches the MSI message you see.

I believe you are wrong here and the local APIC ID of CPU0 is 0.

processor : 0
vendor_id : GenuineIntel
...
physical id : 0
siblings : 8
core id : 0
cpu cores : 4
apicid : 0

The fact that the code works means that DM is not ignored when RH is 0. In other words, RH=0 DM=1 means logical destination mode.

--
Cyril