Linux IOMMU Development
 help / color / mirror / Atom feed
From: Thomas Gleixner <tglx@linutronix.de>
To: Feng Wu <feng.wu@intel.com>
Cc: joro@8bytes.org, dwmw2@infradead.org, jiang.liu@linux.intel.com,
	iommu@lists.linux-foundation.org, linux-kernel@vger.kernel.org
Subject: Re: [v5 3/9] iommu, x86: Abstract modify_irte() to accept two format of irte
Date: Wed, 20 May 2015 13:46:26 +0200 (CEST)	[thread overview]
Message-ID: <alpine.DEB.2.11.1505201144370.4225@nanos> (raw)
In-Reply-To: <1432098937-19527-4-git-send-email-feng.wu@intel.com>

On Wed, 20 May 2015, Feng Wu wrote:

> After introducing VT-d posted-interrupts, we have two format
> of IRTE: remapped and posted. This patch make modify_irte()
> suitable for both of them.

>  static int modify_irte(struct irq_2_iommu *irq_iommu,
> -		       struct irte *irte_modified)
> +		       void *data)

That's hardly an abstraction. You just make the pointer void so you
can hand in arbitrary nonsense.

And with the new struct you having crap like this:

+               memcpy(irte_pi, &ir_data->irte_entry, sizeof(struct irte));

and this:

+       struct irte_pi *irte_pi = (struct irte_pi *)irte;

Why not extending struct irte proper and avoid the whole void pointer
and mempcy and other crappola.

Patch below.

Thanks,

	tglx

------------->

iommu: dmar: Extend struct irte for VT-d Posted-Interrrupts

The IRTE (Interrupt Remapping Table Entry) is either an entry for
remapped or for posted interrupts. The hardware distiguishes between
remapped and posted entries by bit 15 in the low 64 bit of the
IRTE. If cleared the entry is remapped, if set it's posted.

The entries have common fields and dependent on the posted bit fields
with different meanings.

Extend struct irte to handle the differences between remap and posted
mode by having three structs in the unions:

	- Shared
	- Remapped
	- Posted

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
 include/linux/dmar.h |   68 +++++++++++++++++++++++++++++++++++++++------------
 1 file changed, 53 insertions(+), 15 deletions(-)

Index: linux/include/linux/dmar.h
===================================================================
--- linux.orig/include/linux/dmar.h
+++ linux/include/linux/dmar.h
@@ -185,28 +185,66 @@ static inline int dmar_device_remove(voi
 
 struct irte {
 	union {
+		/* Shared between remap and posted mode*/
 		struct {
-			__u64	present 	: 1,
-				fpd		: 1,
-				dst_mode	: 1,
-				redir_hint	: 1,
-				trigger_mode	: 1,
-				dlvry_mode	: 3,
-				avail		: 4,
-				__reserved_1	: 4,
-				vector		: 8,
-				__reserved_2	: 8,
-				dest_id		: 32;
+			__u64	present		: 1,  /*  0      */
+				fpd		: 1,  /*  1      */
+				__res0		: 6,  /*  2 -  6 */
+				avail		: 4,  /*  8 - 11 */
+				__res1		: 3,  /* 12 - 14 */
+				posted		: 1,  /* 15      */
+				vector		: 8,  /* 16 - 23 */
+				__res2		: 40; /* 24 - 63 */
+		};
+
+		/* Remap mode */
+		struct {
+			__u64	r_present	: 1,  /*  0      */
+				r_fpd		: 1,  /*  1      */
+				dst_mode	: 1,  /*  2      */
+				redir_hint	: 1,  /*  3      */
+				trigger_mode	: 1,  /*  4      */
+				dlvry_mode	: 3,  /*  5 -  7 */
+				r_avail		: 4,  /*  8 - 11 */
+				r_res1		: 4,  /* 12 - 13 */
+				r_posted	: 1,  /* 15      */
+				r_vector	: 8,  /* 16 - 23 */
+				r_res2		: 8,  /* 24 - 31 */
+				dest_id		: 32; /* 32 - 63 */
+		};
+
+		/* Posted mode */
+		struct {
+			__u64	p_present	: 1,  /*  0      */
+				p_fpd		: 1,  /*  1      */
+				p_res0		: 6,  /*  2 -  6 */
+				p_avail		: 4,  /*  8 - 11 */
+				p_res1		: 4,  /* 12 - 13 */
+				p_urgent	: 1,  /* 14      */
+				p_posted	: 1,  /* 15      */
+				p_vector	: 8,  /* 16 - 23 */
+				p_res2		: 14, /* 24 - 37 */
+				pda_l		: 26; /* 38 - 63 */
 		};
 		__u64 low;
 	};
 
 	union {
+		/* Shared between remap and posted mode*/
+		struct {
+			__u64	sid		: 16,  /* 64 - 79 */
+				sq		: 2,   /* 80 - 81 */
+				svt		: 2,   /* 82 - 83 */
+				__res3		: 44;  /* 84 - 127 */
+		};
+
+		/* Posted mode*/
 		struct {
-			__u64	sid		: 16,
-				sq		: 2,
-				svt		: 2,
-				__reserved_3	: 44;
+			__u64	p_sid		: 16,  /* 64 - 79 */
+				p_sq		: 2,   /* 80 - 81 */
+				p_svt		: 2,   /* 82 - 83 */
+				p_res3		: 12,  /* 84 - 95 */
+				pda_h		: 32;  /* 96 - 127 */
 		};
 		__u64 high;
 	};

  reply	other threads:[~2015-05-20 11:46 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-05-20  5:15 [v5 0/9] Add VT-d Posted-Interrupts support - IOMMU part Feng Wu
2015-05-20  5:15 ` [v5 1/9] iommu: Add new member capability to struct irq_remap_ops Feng Wu
     [not found] ` <1432098937-19527-1-git-send-email-feng.wu-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
2015-05-20  5:15   ` [v5 2/9] iommu, x86: Define new irte structure for VT-d Posted-Interrupts Feng Wu
2015-05-20  5:15   ` [v5 3/9] iommu, x86: Abstract modify_irte() to accept two format of irte Feng Wu
2015-05-20 11:46     ` Thomas Gleixner [this message]
2015-05-21  7:01       ` Wu, Feng
2015-05-20  5:15   ` [v5 4/9] iommu, x86: Implement irq_set_vcpu_affinity for intel_ir_chip Feng Wu
2015-05-20  5:15   ` [v5 5/9] iommu, x86: No need to migrating irq for VT-d Posted-Interrupts Feng Wu
2015-05-20  5:15   ` [v5 6/9] iommu, x86: Add cap_pi_support() to detect VT-d PI capability Feng Wu
2015-05-20  5:15   ` [v5 7/9] iommu, x86: Setup Posted-Interrupts capability for Intel iommu Feng Wu
2015-05-20  5:15   ` [v5 8/9] iommu, x86: define irq_remapping_cap() Feng Wu
2015-05-20  5:15   ` [v5 9/9] iommu, x86: Properly handler PI for IOMMU hotplug Feng Wu

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=alpine.DEB.2.11.1505201144370.4225@nanos \
    --to=tglx@linutronix.de \
    --cc=dwmw2@infradead.org \
    --cc=feng.wu@intel.com \
    --cc=iommu@lists.linux-foundation.org \
    --cc=jiang.liu@linux.intel.com \
    --cc=joro@8bytes.org \
    --cc=linux-kernel@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox