2007-10-29 04:51:27

by Al Viro

[permalink] [raw]
Subject: [PATCH] intel-iommu fixes

* off by one in dmar_get_fault_reason() (maximal index in
array is ARRAY_SIZE()-1, not ARRAY_SIZE())
* NULL noise removal
* __iomem annotation fix

Signed-off-by: Al Viro <[email protected]>
---
diff --git a/drivers/pci/intel-iommu.c b/drivers/pci/intel-iommu.c
index 0c4ab3b..9b35259 100644
--- a/drivers/pci/intel-iommu.c
+++ b/drivers/pci/intel-iommu.c
@@ -745,7 +745,7 @@ static char *fault_reason_strings[] =
"non-zero reserved fields in PTE",
"Unknown"
};
-#define MAX_FAULT_REASON_IDX ARRAY_SIZE(fault_reason_strings)
+#define MAX_FAULT_REASON_IDX ARRAY_SIZE(fault_reason_strings) - 1

char *dmar_get_fault_reason(u8 fault_reason)
{
@@ -995,7 +995,6 @@ static struct intel_iommu *alloc_iommu(struct dmar_drhd_unit *drhd)
return iommu;
error_unmap:
iounmap(iommu->reg);
- iommu->reg = 0;
error:
kfree(iommu);
return NULL;
@@ -1808,7 +1807,7 @@ get_valid_domain_for_dev(struct pci_dev *pdev)
if (!domain) {
printk(KERN_ERR
"Allocating domain for %s failed", pci_name(pdev));
- return 0;
+ return NULL;
}

/* make sure context mapping is ok */
@@ -1818,7 +1817,7 @@ get_valid_domain_for_dev(struct pci_dev *pdev)
printk(KERN_ERR
"Domain context map for %s failed",
pci_name(pdev));
- return 0;
+ return NULL;
}
}

diff --git a/drivers/pci/intel-iommu.h b/drivers/pci/intel-iommu.h
index ee88dd2..459ad1f 100644
--- a/drivers/pci/intel-iommu.h
+++ b/drivers/pci/intel-iommu.h
@@ -58,7 +58,7 @@
hi = readl(dmar + reg + 4); \
(((u64) hi) << 32) + lo; })
*/
-static inline u64 dmar_readq(void *addr)
+static inline u64 dmar_readq(void __iomem *addr)
{
u32 lo, hi;
lo = readl(addr);


2007-10-29 15:26:14

by Mark D Rustad

[permalink] [raw]
Subject: Re: [PATCH] intel-iommu fixes

On Oct 28, 2007, at 11:51 PM, Al Viro wrote:

> * off by one in dmar_get_fault_reason() (maximal index in
> array is ARRAY_SIZE()-1, not ARRAY_SIZE())
> * NULL noise removal
> * __iomem annotation fix
>
> Signed-off-by: Al Viro <[email protected]>
> ---
> diff --git a/drivers/pci/intel-iommu.c b/drivers/pci/intel-iommu.c
> index 0c4ab3b..9b35259 100644
> --- a/drivers/pci/intel-iommu.c
> +++ b/drivers/pci/intel-iommu.c
> @@ -745,7 +745,7 @@ static char *fault_reason_strings[] =
> "non-zero reserved fields in PTE",
> "Unknown"
> };
> -#define MAX_FAULT_REASON_IDX ARRAY_SIZE(fault_reason_strings)
> +#define MAX_FAULT_REASON_IDX ARRAY_SIZE(fault_reason_strings) - 1

This define now should really have ()'s around its value now that it
is an expression to avoid potential problems at its reference sites.

<snip>

--
Mark Rustad, [email protected]


2007-10-29 16:55:45

by mark gross

[permalink] [raw]
Subject: Re: [PATCH] intel-iommu fixes

On Mon, Oct 29, 2007 at 04:51:16AM +0000, Al Viro wrote:
> * off by one in dmar_get_fault_reason() (maximal index in
> array is ARRAY_SIZE()-1, not ARRAY_SIZE())
> * NULL noise removal
> * __iomem annotation fix
>
> Signed-off-by: Al Viro <[email protected]>
> ---
> diff --git a/drivers/pci/intel-iommu.c b/drivers/pci/intel-iommu.c
> index 0c4ab3b..9b35259 100644
> --- a/drivers/pci/intel-iommu.c
> +++ b/drivers/pci/intel-iommu.c
> @@ -745,7 +745,7 @@ static char *fault_reason_strings[] =
> "non-zero reserved fields in PTE",
> "Unknown"
> };
> -#define MAX_FAULT_REASON_IDX ARRAY_SIZE(fault_reason_strings)
> +#define MAX_FAULT_REASON_IDX ARRAY_SIZE(fault_reason_strings) - 1

Probably should be
+#define MAX_FAULT_REASON_IDX (ARRAY_SIZE(fault_reason_strings) - 1)

>
> char *dmar_get_fault_reason(u8 fault_reason)
> {
> @@ -995,7 +995,6 @@ static struct intel_iommu *alloc_iommu(struct dmar_drhd_unit *drhd)
> return iommu;
> error_unmap:
> iounmap(iommu->reg);
> - iommu->reg = 0;
> error:
> kfree(iommu);
> return NULL;
> @@ -1808,7 +1807,7 @@ get_valid_domain_for_dev(struct pci_dev *pdev)
> if (!domain) {
> printk(KERN_ERR
> "Allocating domain for %s failed", pci_name(pdev));
> - return 0;
> + return NULL;
> }
>
> /* make sure context mapping is ok */
> @@ -1818,7 +1817,7 @@ get_valid_domain_for_dev(struct pci_dev *pdev)
> printk(KERN_ERR
> "Domain context map for %s failed",
> pci_name(pdev));
> - return 0;
> + return NULL;
> }
> }
>
> diff --git a/drivers/pci/intel-iommu.h b/drivers/pci/intel-iommu.h
> index ee88dd2..459ad1f 100644
> --- a/drivers/pci/intel-iommu.h
> +++ b/drivers/pci/intel-iommu.h
> @@ -58,7 +58,7 @@
> hi = readl(dmar + reg + 4); \
> (((u64) hi) << 32) + lo; })
> */
> -static inline u64 dmar_readq(void *addr)
> +static inline u64 dmar_readq(void __iomem *addr)
> {
> u32 lo, hi;
> lo = readl(addr);
Looks good to me.

ACK --mgross

2007-11-16 07:14:58

by Denys Vlasenko

[permalink] [raw]
Subject: Re: [PATCH] intel-iommu fixes

On Sunday 28 October 2007 21:51, Al Viro wrote:
> -#define MAX_FAULT_REASON_IDX ARRAY_SIZE(fault_reason_strings)
> +#define MAX_FAULT_REASON_IDX ARRAY_SIZE(fault_reason_strings) - 1

The macro is unsafe without yet another ()s around it.
--
vda