Re: [PATCH] iommu/io-pgtable-arm: fix self-test WARNs on i386

2015-02-25 Thread Joerg Roedel
On Mon, Feb 16, 2015 at 06:38:20PM +, Will Deacon wrote:
> Various build/boot bots have reported WARNs being triggered by the ARM
> iopgtable LPAE self-tests on i386 machines.
> 
> This boils down to two instances of right-shifting a 32-bit unsigned
> long (i.e. an iova) by more than the size of the type. On 32-bit ARM,
> this happens to give us zero, hence my testing didn't catch this
> earlier.
> 
> This patch fixes the issue by using DIV_ROUND_UP and explicit case to
> to avoid the erroneous shifts.
> 
> Reported-by: Fengguang Wu 
> Reported-by: Huang Ying 
> Signed-off-by: Will Deacon 
> ---
> 
> Joerg -- please can you apply this as a fix for 3.20?

Applied to my fixes branch, thanks Will.

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH] iommu/io-pgtable-arm: fix self-test WARNs on i386

2015-02-25 Thread Joerg Roedel
On Mon, Feb 16, 2015 at 06:38:20PM +, Will Deacon wrote:
 Various build/boot bots have reported WARNs being triggered by the ARM
 iopgtable LPAE self-tests on i386 machines.
 
 This boils down to two instances of right-shifting a 32-bit unsigned
 long (i.e. an iova) by more than the size of the type. On 32-bit ARM,
 this happens to give us zero, hence my testing didn't catch this
 earlier.
 
 This patch fixes the issue by using DIV_ROUND_UP and explicit case to
 to avoid the erroneous shifts.
 
 Reported-by: Fengguang Wu fengguang...@intel.com
 Reported-by: Huang Ying ying.hu...@intel.com
 Signed-off-by: Will Deacon will.dea...@arm.com
 ---
 
 Joerg -- please can you apply this as a fix for 3.20?

Applied to my fixes branch, thanks Will.

--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


[PATCH] iommu/io-pgtable-arm: fix self-test WARNs on i386

2015-02-16 Thread Will Deacon
Various build/boot bots have reported WARNs being triggered by the ARM
iopgtable LPAE self-tests on i386 machines.

This boils down to two instances of right-shifting a 32-bit unsigned
long (i.e. an iova) by more than the size of the type. On 32-bit ARM,
this happens to give us zero, hence my testing didn't catch this
earlier.

This patch fixes the issue by using DIV_ROUND_UP and explicit case to
to avoid the erroneous shifts.

Reported-by: Fengguang Wu 
Reported-by: Huang Ying 
Signed-off-by: Will Deacon 
---

Joerg -- please can you apply this as a fix for 3.20?

 drivers/iommu/io-pgtable-arm.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/drivers/iommu/io-pgtable-arm.c b/drivers/iommu/io-pgtable-arm.c
index 5a500edf00cc..b610a8dee238 100644
--- a/drivers/iommu/io-pgtable-arm.c
+++ b/drivers/iommu/io-pgtable-arm.c
@@ -56,7 +56,8 @@
d)->levels - ((l) - ARM_LPAE_START_LVL(d) + 1)) \
  * (d)->bits_per_level) + (d)->pg_shift)
 
-#define ARM_LPAE_PAGES_PER_PGD(d)  ((d)->pgd_size >> (d)->pg_shift)
+#define ARM_LPAE_PAGES_PER_PGD(d)  \
+   DIV_ROUND_UP((d)->pgd_size, 1UL << (d)->pg_shift)
 
 /*
  * Calculate the index at level l used to map virtual address a using the
@@ -66,7 +67,7 @@
((l) == ARM_LPAE_START_LVL(d) ? ilog2(ARM_LPAE_PAGES_PER_PGD(d)) : 0)
 
 #define ARM_LPAE_LVL_IDX(a,l,d)
\
-   (((a) >> ARM_LPAE_LVL_SHIFT(l,d)) & \
+   (((u64)(a) >> ARM_LPAE_LVL_SHIFT(l,d)) &\
 ((1 << ((d)->bits_per_level + ARM_LPAE_PGD_IDX(l,d))) - 1))
 
 /* Calculate the block/page mapping size at level l for pagetable in d. */
-- 
2.1.4

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


[PATCH] iommu/io-pgtable-arm: fix self-test WARNs on i386

2015-02-16 Thread Will Deacon
Various build/boot bots have reported WARNs being triggered by the ARM
iopgtable LPAE self-tests on i386 machines.

This boils down to two instances of right-shifting a 32-bit unsigned
long (i.e. an iova) by more than the size of the type. On 32-bit ARM,
this happens to give us zero, hence my testing didn't catch this
earlier.

This patch fixes the issue by using DIV_ROUND_UP and explicit case to
to avoid the erroneous shifts.

Reported-by: Fengguang Wu fengguang...@intel.com
Reported-by: Huang Ying ying.hu...@intel.com
Signed-off-by: Will Deacon will.dea...@arm.com
---

Joerg -- please can you apply this as a fix for 3.20?

 drivers/iommu/io-pgtable-arm.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/drivers/iommu/io-pgtable-arm.c b/drivers/iommu/io-pgtable-arm.c
index 5a500edf00cc..b610a8dee238 100644
--- a/drivers/iommu/io-pgtable-arm.c
+++ b/drivers/iommu/io-pgtable-arm.c
@@ -56,7 +56,8 @@
d)-levels - ((l) - ARM_LPAE_START_LVL(d) + 1)) \
  * (d)-bits_per_level) + (d)-pg_shift)
 
-#define ARM_LPAE_PAGES_PER_PGD(d)  ((d)-pgd_size  (d)-pg_shift)
+#define ARM_LPAE_PAGES_PER_PGD(d)  \
+   DIV_ROUND_UP((d)-pgd_size, 1UL  (d)-pg_shift)
 
 /*
  * Calculate the index at level l used to map virtual address a using the
@@ -66,7 +67,7 @@
((l) == ARM_LPAE_START_LVL(d) ? ilog2(ARM_LPAE_PAGES_PER_PGD(d)) : 0)
 
 #define ARM_LPAE_LVL_IDX(a,l,d)
\
-   (((a)  ARM_LPAE_LVL_SHIFT(l,d))  \
+   (((u64)(a)  ARM_LPAE_LVL_SHIFT(l,d)) \
 ((1  ((d)-bits_per_level + ARM_LPAE_PGD_IDX(l,d))) - 1))
 
 /* Calculate the block/page mapping size at level l for pagetable in d. */
-- 
2.1.4

--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/