xen-devel.lists.xenproject.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 1/3] amd iommu: use PCI macros
@ 2012-09-11 12:34 Jan Beulich
  2012-09-12 12:46 ` Wei Wang
  0 siblings, 1 reply; 2+ messages in thread
From: Jan Beulich @ 2012-09-11 12:34 UTC (permalink / raw)
  To: xen-devel; +Cc: Wei Wang

[-- Attachment #1: Type: text/plain, Size: 3949 bytes --]

... instead of open coding them.

Signed-off-by: Jan Beulich <jbeulich@suse.com>

--- a/xen/drivers/passthrough/amd/iommu_init.c
+++ b/xen/drivers/passthrough/amd/iommu_init.c
@@ -455,9 +455,9 @@ static void iommu_msi_set_affinity(struc
     unsigned int dest;
     struct amd_iommu *iommu = desc->action->dev_id;
     u16 seg = iommu->seg;
-    u8 bus = (iommu->bdf >> 8) & 0xff;
-    u8 dev = PCI_SLOT(iommu->bdf & 0xff);
-    u8 func = PCI_FUNC(iommu->bdf & 0xff);
+    u8 bus = PCI_BUS(iommu->bdf);
+    u8 dev = PCI_SLOT(iommu->bdf);
+    u8 func = PCI_FUNC(iommu->bdf);
 
     dest = set_desc_affinity(desc, mask);
 
@@ -495,13 +495,13 @@ static void iommu_msi_set_affinity(struc
 static void amd_iommu_msi_enable(struct amd_iommu *iommu, int flag)
 {
     u16 control;
-    int bus = (iommu->bdf >> 8) & 0xff;
-    int dev = PCI_SLOT(iommu->bdf & 0xff);
-    int func = PCI_FUNC(iommu->bdf & 0xff);
+    int bus = PCI_BUS(iommu->bdf);
+    int dev = PCI_SLOT(iommu->bdf);
+    int func = PCI_FUNC(iommu->bdf);
 
     control = pci_conf_read16(iommu->seg, bus, dev, func,
         iommu->msi_cap + PCI_MSI_FLAGS);
-    control &= ~(1);
+    control &= ~PCI_MSI_FLAGS_ENABLE;
     if ( flag )
         control |= flag;
     pci_conf_write16(iommu->seg, bus, dev, func,
--- a/xen/drivers/passthrough/amd/iommu_intr.c
+++ b/xen/drivers/passthrough/amd/iommu_intr.c
@@ -272,7 +272,7 @@ static void update_intremap_entry_from_m
     spinlock_t *lock;
     int offset;
 
-    bdf = (pdev->bus << 8) | pdev->devfn;
+    bdf = PCI_BDF2(pdev->bus, pdev->devfn);
     req_id = get_dma_requestor_id(pdev->seg, bdf);
     alias_id = get_intremap_requestor_id(pdev->seg, bdf);
 
@@ -340,17 +340,16 @@ void amd_iommu_msi_msg_update_ire(
     struct msi_desc *msi_desc, struct msi_msg *msg)
 {
     struct pci_dev *pdev = msi_desc->dev;
-    struct amd_iommu *iommu = NULL;
+    int bdf = PCI_BDF2(pdev->bus, pdev->devfn);
+    struct amd_iommu *iommu;
 
     if ( !iommu_intremap )
         return;
 
-    iommu = find_iommu_for_device(pdev->seg, (pdev->bus << 8) | pdev->devfn);
-
+    iommu = find_iommu_for_device(pdev->seg, bdf);
     if ( !iommu )
     {
-        AMD_IOMMU_DEBUG("Fail to find iommu for MSI device id = 0x%x\n",
-                       (pdev->bus << 8) | pdev->devfn);
+        AMD_IOMMU_DEBUG("Fail to find iommu for MSI device id = %#x\n", bdf);
         return;
     }
 
--- a/xen/drivers/passthrough/amd/iommu_map.c
+++ b/xen/drivers/passthrough/amd/iommu_map.c
@@ -597,7 +597,7 @@ static int update_paging_mode(struct dom
         /* Update device table entries using new root table and paging mode */
         for_each_pdev( d, pdev )
         {
-            bdf = (pdev->bus << 8) | pdev->devfn;
+            bdf = PCI_BDF2(pdev->bus, pdev->devfn);
             req_id = get_dma_requestor_id(pdev->seg, bdf);
             iommu = find_iommu_for_device(pdev->seg, bdf);
             if ( !iommu )
--- a/xen/drivers/passthrough/amd/pci_amd_iommu.c
+++ b/xen/drivers/passthrough/amd/pci_amd_iommu.c
@@ -373,7 +373,7 @@ static int reassign_device( struct domai
 static int amd_iommu_assign_device(struct domain *d, u16 seg, u8 bus, u8 devfn)
 {
     struct ivrs_mappings *ivrs_mappings = get_ivrs_mappings(seg);
-    int bdf = (bus << 8) | devfn;
+    int bdf = PCI_BDF2(bus, devfn);
     int req_id = get_dma_requestor_id(seg, bdf);
 
     if ( ivrs_mappings[req_id].unity_map_enable )
@@ -499,12 +499,9 @@ static int amd_iommu_remove_device(struc
 
 static int amd_iommu_group_id(u16 seg, u8 bus, u8 devfn)
 {
-    int rt;
-    int bdf = (bus << 8) | devfn;
-    rt = ( bdf < ivrs_bdf_entries ) ?
-        get_dma_requestor_id(seg, bdf) :
-        bdf;
-    return rt;
+    int bdf = PCI_BDF2(bus, devfn);
+
+    return (bdf < ivrs_bdf_entries) ? get_dma_requestor_id(seg, bdf) : bdf;
 }
 
 #include <asm/io_apic.h>




[-- Attachment #2: amd-iommu-PCI-macros.patch --]
[-- Type: text/plain, Size: 3972 bytes --]

amd iommu: use PCI macros

... instead of open coding them.

Signed-off-by: Jan Beulich <jbeulich@suse.com>

--- a/xen/drivers/passthrough/amd/iommu_init.c
+++ b/xen/drivers/passthrough/amd/iommu_init.c
@@ -455,9 +455,9 @@ static void iommu_msi_set_affinity(struc
     unsigned int dest;
     struct amd_iommu *iommu = desc->action->dev_id;
     u16 seg = iommu->seg;
-    u8 bus = (iommu->bdf >> 8) & 0xff;
-    u8 dev = PCI_SLOT(iommu->bdf & 0xff);
-    u8 func = PCI_FUNC(iommu->bdf & 0xff);
+    u8 bus = PCI_BUS(iommu->bdf);
+    u8 dev = PCI_SLOT(iommu->bdf);
+    u8 func = PCI_FUNC(iommu->bdf);
 
     dest = set_desc_affinity(desc, mask);
 
@@ -495,13 +495,13 @@ static void iommu_msi_set_affinity(struc
 static void amd_iommu_msi_enable(struct amd_iommu *iommu, int flag)
 {
     u16 control;
-    int bus = (iommu->bdf >> 8) & 0xff;
-    int dev = PCI_SLOT(iommu->bdf & 0xff);
-    int func = PCI_FUNC(iommu->bdf & 0xff);
+    int bus = PCI_BUS(iommu->bdf);
+    int dev = PCI_SLOT(iommu->bdf);
+    int func = PCI_FUNC(iommu->bdf);
 
     control = pci_conf_read16(iommu->seg, bus, dev, func,
         iommu->msi_cap + PCI_MSI_FLAGS);
-    control &= ~(1);
+    control &= ~PCI_MSI_FLAGS_ENABLE;
     if ( flag )
         control |= flag;
     pci_conf_write16(iommu->seg, bus, dev, func,
--- a/xen/drivers/passthrough/amd/iommu_intr.c
+++ b/xen/drivers/passthrough/amd/iommu_intr.c
@@ -272,7 +272,7 @@ static void update_intremap_entry_from_m
     spinlock_t *lock;
     int offset;
 
-    bdf = (pdev->bus << 8) | pdev->devfn;
+    bdf = PCI_BDF2(pdev->bus, pdev->devfn);
     req_id = get_dma_requestor_id(pdev->seg, bdf);
     alias_id = get_intremap_requestor_id(pdev->seg, bdf);
 
@@ -340,17 +340,16 @@ void amd_iommu_msi_msg_update_ire(
     struct msi_desc *msi_desc, struct msi_msg *msg)
 {
     struct pci_dev *pdev = msi_desc->dev;
-    struct amd_iommu *iommu = NULL;
+    int bdf = PCI_BDF2(pdev->bus, pdev->devfn);
+    struct amd_iommu *iommu;
 
     if ( !iommu_intremap )
         return;
 
-    iommu = find_iommu_for_device(pdev->seg, (pdev->bus << 8) | pdev->devfn);
-
+    iommu = find_iommu_for_device(pdev->seg, bdf);
     if ( !iommu )
     {
-        AMD_IOMMU_DEBUG("Fail to find iommu for MSI device id = 0x%x\n",
-                       (pdev->bus << 8) | pdev->devfn);
+        AMD_IOMMU_DEBUG("Fail to find iommu for MSI device id = %#x\n", bdf);
         return;
     }
 
--- a/xen/drivers/passthrough/amd/iommu_map.c
+++ b/xen/drivers/passthrough/amd/iommu_map.c
@@ -597,7 +597,7 @@ static int update_paging_mode(struct dom
         /* Update device table entries using new root table and paging mode */
         for_each_pdev( d, pdev )
         {
-            bdf = (pdev->bus << 8) | pdev->devfn;
+            bdf = PCI_BDF2(pdev->bus, pdev->devfn);
             req_id = get_dma_requestor_id(pdev->seg, bdf);
             iommu = find_iommu_for_device(pdev->seg, bdf);
             if ( !iommu )
--- a/xen/drivers/passthrough/amd/pci_amd_iommu.c
+++ b/xen/drivers/passthrough/amd/pci_amd_iommu.c
@@ -373,7 +373,7 @@ static int reassign_device( struct domai
 static int amd_iommu_assign_device(struct domain *d, u16 seg, u8 bus, u8 devfn)
 {
     struct ivrs_mappings *ivrs_mappings = get_ivrs_mappings(seg);
-    int bdf = (bus << 8) | devfn;
+    int bdf = PCI_BDF2(bus, devfn);
     int req_id = get_dma_requestor_id(seg, bdf);
 
     if ( ivrs_mappings[req_id].unity_map_enable )
@@ -499,12 +499,9 @@ static int amd_iommu_remove_device(struc
 
 static int amd_iommu_group_id(u16 seg, u8 bus, u8 devfn)
 {
-    int rt;
-    int bdf = (bus << 8) | devfn;
-    rt = ( bdf < ivrs_bdf_entries ) ?
-        get_dma_requestor_id(seg, bdf) :
-        bdf;
-    return rt;
+    int bdf = PCI_BDF2(bus, devfn);
+
+    return (bdf < ivrs_bdf_entries) ? get_dma_requestor_id(seg, bdf) : bdf;
 }
 
 #include <asm/io_apic.h>

[-- Attachment #3: Type: text/plain, Size: 126 bytes --]

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
http://lists.xen.org/xen-devel

^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: [PATCH 1/3] amd iommu: use PCI macros
  2012-09-11 12:34 [PATCH 1/3] amd iommu: use PCI macros Jan Beulich
@ 2012-09-12 12:46 ` Wei Wang
  0 siblings, 0 replies; 2+ messages in thread
From: Wei Wang @ 2012-09-12 12:46 UTC (permalink / raw)
  To: Jan Beulich; +Cc: xen-devel

Tested and Acked
Thanks,
Wei

On 09/11/2012 02:34 PM, Jan Beulich wrote:
> ... instead of open coding them.
>
> Signed-off-by: Jan Beulich<jbeulich@suse.com>
>
> --- a/xen/drivers/passthrough/amd/iommu_init.c
> +++ b/xen/drivers/passthrough/amd/iommu_init.c
> @@ -455,9 +455,9 @@ static void iommu_msi_set_affinity(struc
>       unsigned int dest;
>       struct amd_iommu *iommu = desc->action->dev_id;
>       u16 seg = iommu->seg;
> -    u8 bus = (iommu->bdf>>  8)&  0xff;
> -    u8 dev = PCI_SLOT(iommu->bdf&  0xff);
> -    u8 func = PCI_FUNC(iommu->bdf&  0xff);
> +    u8 bus = PCI_BUS(iommu->bdf);
> +    u8 dev = PCI_SLOT(iommu->bdf);
> +    u8 func = PCI_FUNC(iommu->bdf);
>
>       dest = set_desc_affinity(desc, mask);
>
> @@ -495,13 +495,13 @@ static void iommu_msi_set_affinity(struc
>   static void amd_iommu_msi_enable(struct amd_iommu *iommu, int flag)
>   {
>       u16 control;
> -    int bus = (iommu->bdf>>  8)&  0xff;
> -    int dev = PCI_SLOT(iommu->bdf&  0xff);
> -    int func = PCI_FUNC(iommu->bdf&  0xff);
> +    int bus = PCI_BUS(iommu->bdf);
> +    int dev = PCI_SLOT(iommu->bdf);
> +    int func = PCI_FUNC(iommu->bdf);
>
>       control = pci_conf_read16(iommu->seg, bus, dev, func,
>           iommu->msi_cap + PCI_MSI_FLAGS);
> -    control&= ~(1);
> +    control&= ~PCI_MSI_FLAGS_ENABLE;
>       if ( flag )
>           control |= flag;
>       pci_conf_write16(iommu->seg, bus, dev, func,
> --- a/xen/drivers/passthrough/amd/iommu_intr.c
> +++ b/xen/drivers/passthrough/amd/iommu_intr.c
> @@ -272,7 +272,7 @@ static void update_intremap_entry_from_m
>       spinlock_t *lock;
>       int offset;
>
> -    bdf = (pdev->bus<<  8) | pdev->devfn;
> +    bdf = PCI_BDF2(pdev->bus, pdev->devfn);
>       req_id = get_dma_requestor_id(pdev->seg, bdf);
>       alias_id = get_intremap_requestor_id(pdev->seg, bdf);
>
> @@ -340,17 +340,16 @@ void amd_iommu_msi_msg_update_ire(
>       struct msi_desc *msi_desc, struct msi_msg *msg)
>   {
>       struct pci_dev *pdev = msi_desc->dev;
> -    struct amd_iommu *iommu = NULL;
> +    int bdf = PCI_BDF2(pdev->bus, pdev->devfn);
> +    struct amd_iommu *iommu;
>
>       if ( !iommu_intremap )
>           return;
>
> -    iommu = find_iommu_for_device(pdev->seg, (pdev->bus<<  8) | pdev->devfn);
> -
> +    iommu = find_iommu_for_device(pdev->seg, bdf);
>       if ( !iommu )
>       {
> -        AMD_IOMMU_DEBUG("Fail to find iommu for MSI device id = 0x%x\n",
> -                       (pdev->bus<<  8) | pdev->devfn);
> +        AMD_IOMMU_DEBUG("Fail to find iommu for MSI device id = %#x\n", bdf);
>           return;
>       }
>
> --- a/xen/drivers/passthrough/amd/iommu_map.c
> +++ b/xen/drivers/passthrough/amd/iommu_map.c
> @@ -597,7 +597,7 @@ static int update_paging_mode(struct dom
>           /* Update device table entries using new root table and paging mode */
>           for_each_pdev( d, pdev )
>           {
> -            bdf = (pdev->bus<<  8) | pdev->devfn;
> +            bdf = PCI_BDF2(pdev->bus, pdev->devfn);
>               req_id = get_dma_requestor_id(pdev->seg, bdf);
>               iommu = find_iommu_for_device(pdev->seg, bdf);
>               if ( !iommu )
> --- a/xen/drivers/passthrough/amd/pci_amd_iommu.c
> +++ b/xen/drivers/passthrough/amd/pci_amd_iommu.c
> @@ -373,7 +373,7 @@ static int reassign_device( struct domai
>   static int amd_iommu_assign_device(struct domain *d, u16 seg, u8 bus, u8 devfn)
>   {
>       struct ivrs_mappings *ivrs_mappings = get_ivrs_mappings(seg);
> -    int bdf = (bus<<  8) | devfn;
> +    int bdf = PCI_BDF2(bus, devfn);
>       int req_id = get_dma_requestor_id(seg, bdf);
>
>       if ( ivrs_mappings[req_id].unity_map_enable )
> @@ -499,12 +499,9 @@ static int amd_iommu_remove_device(struc
>
>   static int amd_iommu_group_id(u16 seg, u8 bus, u8 devfn)
>   {
> -    int rt;
> -    int bdf = (bus<<  8) | devfn;
> -    rt = ( bdf<  ivrs_bdf_entries ) ?
> -        get_dma_requestor_id(seg, bdf) :
> -        bdf;
> -    return rt;
> +    int bdf = PCI_BDF2(bus, devfn);
> +
> +    return (bdf<  ivrs_bdf_entries) ? get_dma_requestor_id(seg, bdf) : bdf;
>   }
>
>   #include<asm/io_apic.h>
>
>
>

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2012-09-12 12:46 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-09-11 12:34 [PATCH 1/3] amd iommu: use PCI macros Jan Beulich
2012-09-12 12:46 ` Wei Wang

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).