VT-d: Hardware require RH bit to be set in IRTE when delivery mode is LPR
PATCH 1/1 VT-d: Hardware require RH bit to be set in IRTE when delivery mode is LPR
Signed-off-by Sheng Yang <[email protected]>
--
(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
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
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