Skip to contentSkip to conversation

VT-d: Hardware require RH bit to be set in IRTE when delivery mode is LPR

PATCH In review Sheng Yang 2 participants 3 messages Aug 26, 2010

lore
Share & tools
lore

Sheng Yang

author
#0 lore raw

PATCH 1/1 VT-d: Hardware require RH bit to be set in IRTE when delivery mode is LPR

--

(quoted diff) +0 -0

b/xen/drivers/passthrough/vtd/intremap.c

xen/drivers/passthrough/vtd/intremap.c +10 -2
@@ -320,9 +320,13 @@
         *(((u32 *)&new_rte) + 0) = value;
         new_ire.lo.fpd = 0;
         new_ire.lo.dm = new_rte.dest_mode;
-        new_ire.lo.rh = 0;
         new_ire.lo.tm = new_rte.trigger;
         new_ire.lo.dlm = new_rte.delivery_mode;
+        /* Hardware require RH = 1 for LPR delivery mode */
+        if ( new_ire.lo.dlm == dest_LowestPrio )
+            new_ire.lo.rh = 1;
+        else
+            new_ire.lo.rh = 0;
         new_ire.lo.avail = 0;
         new_ire.lo.res_1 = 0;
         new_ire.lo.vector = new_rte.vector;
@@ -632,9 +636,13 @@
     /* Set interrupt remapping table entry */
     new_ire.lo.fpd = 0;
     new_ire.lo.dm = (msg->address_lo >> MSI_ADDR_DESTMODE_SHIFT) & 0x1;
-    new_ire.lo.rh = 0;
     new_ire.lo.tm = (msg->data >> MSI_DATA_TRIGGER_SHIFT) & 0x1;
     new_ire.lo.dlm = (msg->data >> MSI_DATA_DELIVERY_MODE_SHIFT) & 0x1;
+    /* Hardware require RH = 1 for LPR delivery mode */
+    if ( new_ire.lo.dlm == dest_LowestPrio )
+        new_ire.lo.rh = 1;
+    else
+        new_ire.lo.rh = 0;
     new_ire.lo.avail = 0;
     new_ire.lo.res_1 = 0;
     new_ire.lo.vector = (msg->data >> MSI_DATA_VECTOR_SHIFT) &
xen/drivers/passthrough/vtd/intremap.c +10 -2
@@ -320,9 +320,13 @@
         *(((u32 *)&new_rte) + 0) = value;
         new_ire.lo.fpd = 0;
         new_ire.lo.dm = new_rte.dest_mode;
-        new_ire.lo.rh = 0;
         new_ire.lo.tm = new_rte.trigger;
         new_ire.lo.dlm = new_rte.delivery_mode;
+        /* Hardware require RH = 1 for LPR delivery mode */
+        if ( new_ire.lo.dlm == dest_LowestPrio )
+            new_ire.lo.rh = 1;
+        else
+            new_ire.lo.rh = 0;
         new_ire.lo.avail = 0;
         new_ire.lo.res_1 = 0;
         new_ire.lo.vector = new_rte.vector;
@@ -632,9 +636,13 @@
     /* Set interrupt remapping table entry */
     new_ire.lo.fpd = 0;
     new_ire.lo.dm = (msg->address_lo >> MSI_ADDR_DESTMODE_SHIFT) & 0x1;
-    new_ire.lo.rh = 0;
     new_ire.lo.tm = (msg->data >> MSI_DATA_TRIGGER_SHIFT) & 0x1;
     new_ire.lo.dlm = (msg->data >> MSI_DATA_DELIVERY_MODE_SHIFT) & 0x1;
+    /* Hardware require RH = 1 for LPR delivery mode */
+    if ( new_ire.lo.dlm == dest_LowestPrio )
+        new_ire.lo.rh = 1;
+    else
+        new_ire.lo.rh = 0;
     new_ire.lo.avail = 0;
     new_ire.lo.res_1 = 0;
     new_ire.lo.vector = (msg->data >> MSI_DATA_VECTOR_SHIFT) &

_______________________________________________
Xen-devel mailing list
[email protected]
http://lists.xensource.com/xen-devel

#1 lore raw

xen/drivers/passthrough/vtd/intremap.c line 329

Quoted 5 lines · Sheng Yang
xen/drivers/passthrough/vtd/intremap.c +5 -0
+    /* Hardware require RH = 1 for LPR delivery mode */
+    if ( new_ire.lo.dlm == dest_LowestPrio )
+        new_ire.lo.rh = 1;
+    else
+        new_ire.lo.rh = 0;

The form 'if ( p ) x = 1; else x = 0;' is better written as 'x = (p)'. Please re-submit in that style.

-- Keir

author
#2 lore raw
Quoted 11 lines · On Thursday 26 August 2010 17:24:40 Keir Fraser wrote:

Review

Quoted 5 lines · Sheng Yang
(quoted diff) +5 -0
+    /* Hardware require RH = 1 for LPR delivery mode */
+    if ( new_ire.lo.dlm == dest_LowestPrio )
+        new_ire.lo.rh = 1;
+    else
+        new_ire.lo.rh = 0;

The form 'if ( p ) x = 1; else x = 0;' is better written as 'x = (p)'. Please re-submit in that style.

-- Keir

Updated, thanks.

--
regards
Yang, Sheng

--

(quoted diff) +0 -0

b/xen/drivers/passthrough/vtd/intremap.c

xen/drivers/passthrough/vtd/intremap.c +4 -2
@@ -320,9 +320,10 @@
         *(((u32 *)&new_rte) + 0) = value;
         new_ire.lo.fpd = 0;
         new_ire.lo.dm = new_rte.dest_mode;
-        new_ire.lo.rh = 0;
         new_ire.lo.tm = new_rte.trigger;
         new_ire.lo.dlm = new_rte.delivery_mode;
+        /* Hardware require RH = 1 for LPR delivery mode */
+        new_ire.lo.rh = (new_ire.lo.dlm == dest_LowestPrio);
         new_ire.lo.avail = 0;
         new_ire.lo.res_1 = 0;
         new_ire.lo.vector = new_rte.vector;
@@ -632,9 +633,10 @@
     /* Set interrupt remapping table entry */
     new_ire.lo.fpd = 0;
     new_ire.lo.dm = (msg->address_lo >> MSI_ADDR_DESTMODE_SHIFT) & 0x1;
-    new_ire.lo.rh = 0;
     new_ire.lo.tm = (msg->data >> MSI_DATA_TRIGGER_SHIFT) & 0x1;
     new_ire.lo.dlm = (msg->data >> MSI_DATA_DELIVERY_MODE_SHIFT) & 0x1;
+    /* Hardware require RH = 1 for LPR delivery mode */
+    new_ire.lo.rh = (new_ire.lo.dlm == dest_LowestPrio);
     new_ire.lo.avail = 0;
     new_ire.lo.res_1 = 0;
     new_ire.lo.vector = (msg->data >> MSI_DATA_VECTOR_SHIFT) &
xen/drivers/passthrough/vtd/intremap.c +4 -2
@@ -320,9 +320,10 @@
         *(((u32 *)&new_rte) + 0) = value;
         new_ire.lo.fpd = 0;
         new_ire.lo.dm = new_rte.dest_mode;
-        new_ire.lo.rh = 0;
         new_ire.lo.tm = new_rte.trigger;
         new_ire.lo.dlm = new_rte.delivery_mode;
+        /* Hardware require RH = 1 for LPR delivery mode */
+        new_ire.lo.rh = (new_ire.lo.dlm == dest_LowestPrio);
         new_ire.lo.avail = 0;
         new_ire.lo.res_1 = 0;
         new_ire.lo.vector = new_rte.vector;
@@ -632,9 +633,10 @@
     /* Set interrupt remapping table entry */
     new_ire.lo.fpd = 0;
     new_ire.lo.dm = (msg->address_lo >> MSI_ADDR_DESTMODE_SHIFT) & 0x1;
-    new_ire.lo.rh = 0;
     new_ire.lo.tm = (msg->data >> MSI_DATA_TRIGGER_SHIFT) & 0x1;
     new_ire.lo.dlm = (msg->data >> MSI_DATA_DELIVERY_MODE_SHIFT) & 0x1;
+    /* Hardware require RH = 1 for LPR delivery mode */
+    new_ire.lo.rh = (new_ire.lo.dlm == dest_LowestPrio);
     new_ire.lo.avail = 0;
     new_ire.lo.res_1 = 0;
     new_ire.lo.vector = (msg->data >> MSI_DATA_VECTOR_SHIFT) &

_______________________________________________
Xen-devel mailing list
[email protected]
http://lists.xensource.com/xen-devel