2015-03-12 21:08-0600, James Sullivan:
> ---
> Changes since v2:
>     * Added one time warning message when RH=1
>     * Documented conflict between RH=1 and delivery mode
>     * Tidied code to check RH=1/DM=1 (remove bool phys, use if/else)
> Changes since v3:
>     * Fixed logical error in RH=1/DM=1 check
>     * Aligned quotation blocks in multiline pr_warn_once argument
> 
> diff --git a/arch/x86/kvm/irq_comm.c b/arch/x86/kvm/irq_comm.c
> @@ -103,12 +103,24 @@ static inline void kvm_set_msi_irq(struct 
> kvm_kernel_irq_routing_entry *e,
>                       MSI_ADDR_DEST_ID_MASK) >> MSI_ADDR_DEST_ID_SHIFT;
>       irq->vector = (e->msi.data &
>                       MSI_DATA_VECTOR_MASK) >> MSI_DATA_VECTOR_SHIFT;
> -     irq->dest_mode = (1 << MSI_ADDR_DEST_MODE_SHIFT) & e->msi.address_lo;
> +     /*
> +      * TODO Deal with RH bit of MSI message address
> +      *  IF RH=1, then MSI delivers only to the processor with the
> +      *  lowest interrupt priority among processors that can receive
> +      *  the interrupt.
> +      */
> +     if ((e->msi.address_lo & MSI_ADDR_REDIRECTION_LOWPRI) &&
> +                     (e->msi.address_lo & MSI_ADDR_DEST_MODE_LOGICAL))
> +             irq->dest_mode = APIC_DEST_LOGICAL;
> +     else
> +             irq->dest_mode = APIC_DEST_PHYSICAL;
>       irq->trig_mode = (1 << MSI_DATA_TRIGGER_SHIFT) & e->msi.data;
>       irq->delivery_mode = e->msi.data & 0x700;
> +     if (e->msi.address_lo & MSI_ADDR_REDIRECTION_LOWPRI)
> +             pr_warn_once("KVM may not correctly deliver MSIs "
> +                          "with RH set.\n");

Please begin the warning with "kvm: ".

It's better to have a line bit longer than 80 columns than to break a
string that we might want to `grep` for; reword if possible, or you
might prefer something like
   pr_warn_once(
        "long");

(Documentation/CodingStyle, Chapter 2.  It's nitpicking, sorry, but we
 recently had a patch that fixed just that too ...
 http://permalink.gmane.org/gmane.comp.emulators.kvm.devel/133110)

Then,
Reviewed-by: Radim Krčmář <[email protected]>

Thanks.


---
The warning message is very clever:
- it contains the magical "may" qualifier and being protected only by
  RH=1 creates weird-looking code structure, but it is technically right
  1) lowest-priority delivery may be set in msi.data, which avoids our
     otherwise incorrect behavior with RH=1/DM=1
  2) RH=1/DM=0 can't deliver to multiple APICs (broadcast is forbidden),
     but real hardware may overwrite delivery mode from msi.data
- being two lines apart adds to suspicion, yet it can be hint to those
  possible problems

I only fear it is too clever :)
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to