|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [v3 09/15] vt-d: Extend struct iremap_entry to support VT-d Posted-Interrupts
On 24/06/15 06:18, Feng Wu wrote:
> diff --git a/xen/drivers/passthrough/vtd/iommu.h
> b/xen/drivers/passthrough/vtd/iommu.h
> index e807253..49daa70 100644
> --- a/xen/drivers/passthrough/vtd/iommu.h
> +++ b/xen/drivers/passthrough/vtd/iommu.h
> @@ -289,29 +289,43 @@ struct dma_pte {
> /* interrupt remap entry */
> struct iremap_entry {
> union {
> - u64 lo_val;
> + struct { u64 lo, hi; };
> struct {
> - u64 p : 1,
> + u16 p : 1,
> fpd : 1,
> dm : 1,
> rh : 1,
> tm : 1,
> dlm : 3,
> avail : 4,
> - res_1 : 4,
> - vector : 8,
> - res_2 : 8,
> - dst : 32;
> - }lo;
> - };
> - union {
> - u64 hi_val;
> + res_1 : 4;
> + u8 vector;
> + u8 res_2;
> + u32 dst;
> + u16 sid;
> + u16 sq : 2,
> + svt : 2,
> + res_3 : 12;
> + u32 res_4 : 32;
res_4 does not need to be a bitfield.
> + } remap;
> struct {
> - u64 sid : 16,
> - sq : 2,
> + u16 p : 1,
> + fpd : 1,
> + res_1 : 6,
> + avail : 4,
> + res_2 : 2,
> + urg : 1,
> + im : 1;
I think "im" needs exposing in both the post and remap unions, as it is
the bit which identifies which representation to use.
> + u8 vector;
> + u8 res_3;
> + u32 res_4 : 6,
> + pda_l : 26;
> + u16 sid;
> + u16 sq : 2,
> svt : 2,
> - res_1 : 44;
> - }hi;
> + res_5 : 12;
> + u32 pda_h;
> + } post;
> };
> };
>
> diff --git a/xen/drivers/passthrough/vtd/utils.c
> b/xen/drivers/passthrough/vtd/utils.c
> index bd14c02..a5fe237 100644
> --- a/xen/drivers/passthrough/vtd/utils.c
> +++ b/xen/drivers/passthrough/vtd/utils.c
> @@ -238,14 +238,14 @@ static void dump_iommu_info(unsigned char key)
> else
> p = &iremap_entries[i % (1 << IREMAP_ENTRY_ORDER)];
>
> - if ( !p->lo.p )
> + if ( !p->remap.p )
> continue;
> printk(" %04x: %x %x %04x %08x %02x %x %x %x %x
> %x"
> " %x %x\n", i,
> - (u32)p->hi.svt, (u32)p->hi.sq, (u32)p->hi.sid,
> - (u32)p->lo.dst, (u32)p->lo.vector, (u32)p->lo.avail,
> - (u32)p->lo.dlm, (u32)p->lo.tm, (u32)p->lo.rh,
> - (u32)p->lo.dm, (u32)p->lo.fpd, (u32)p->lo.p);
> + (u32)p->remap.svt, (u32)p->remap.sq, (u32)p->remap.sid,
> + (u32)p->remap.dst, (u32)p->remap.vector,
> (u32)p->remap.avail,
> + (u32)p->remap.dlm, (u32)p->remap.tm, (u32)p->remap.rh,
> + (u32)p->remap.dm, (u32)p->remap.fpd, (u32)p->remap.p);
This printing is only valid if "im" is 0. As this series adds support
for the posted format, I would suggest you extend this debugging here to
deal with both formats.
~Andrew
> print_cnt++;
> }
> if ( iremap_entries )
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |