On 2011-09-02 13:27, Jan Kiszka wrote: > On 2011-09-02 09:48, Sasha Levin wrote: >> The RH bit exists in the message address register (lower 32 bits of >> the address). >> >> The bit indicates whether the message should go to the processor which was >> indicated in the destination ID bits, or whether it should go to the >> processor running at the lowest priority. >> >> Cc: Avi Kivity <avi@xxxxxxxxxx> >> Cc: Marcelo Tosatti <mtosatti@xxxxxxxxxx> >> Signed-off-by: Sasha Levin <levinsasha928@xxxxxxxxx> >> --- >> virt/kvm/irq_comm.c | 17 ++++++++++++++++- >> 1 files changed, 16 insertions(+), 1 deletions(-) >> >> diff --git a/virt/kvm/irq_comm.c b/virt/kvm/irq_comm.c >> index 9f614b4..0ba3a3d 100644 >> --- a/virt/kvm/irq_comm.c >> +++ b/virt/kvm/irq_comm.c >> @@ -134,7 +134,22 @@ int kvm_set_msi(struct kvm_kernel_irq_routing_entry *e, >> irq.level = 1; >> irq.shorthand = 0; >> >> - /* TODO Deal with RH bit of MSI message address */ >> + /* >> + * If the RH bit is set, we'll deliver to the processor running >> + * at the lowest priority. >> + */ >> + if (e->msi.address_lo & MSI_ADDR_REDIRECTION_LOWPRI) { >> + irq.delivery_mode = MSI_DATA_DELIVERY_LOWPRI; >> + } else { >> + /* >> + * If the RH bit is not set, we'll deliver to the specific >> + * processor mentioned in destination ID, and ignore the DM >> + * bit. >> + */ >> + irq.dest_mode = MSI_ADDR_DEST_MODE_PHYSICAL; >> + irq.delivery_mode = MSI_DATA_DELIVERY_FIXED; >> + } >> + >> return kvm_irq_delivery_to_apic(kvm, NULL, &irq); >> } >> > > Do you happen have a kvm unit test for this? Or how did you validate the > change? It doesn't look incorrect to me, I'd just like to check it QEMU > as well which apparently already has the logic above but also some > contradictory comment. Err, no, QEMU does not have this logic, it also ignores RH. But the above bits make "irq.delivery_mode = e->msi.data & 0x700" pointless. And that strongly suggests something is still wrong. Jan -- Siemens AG, Corporate Technology, CT T DE IT 1 Corporate Competence Center Embedded Linux -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html