diff options
author | Johannes Berg <johannes.berg@intel.com> | 2021-09-15 21:30:22 +0300 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2022-01-27 13:03:44 +0300 |
commit | 4e71908ba7cb581342205a9d3b4a8b56109e3ae8 (patch) | |
tree | a866034d12d4a27b01adcf95ebc254add372c984 /lib | |
parent | 6c72a5bc4df4565164569d4833efc6f19c44dcbc (diff) | |
download | linux-4e71908ba7cb581342205a9d3b4a8b56109e3ae8.tar.xz |
lib/logic_iomem: Fix operation on 32-bit
[ Upstream commit 4e8a5edac5010820e7c5303fc96f5a262e096bb6 ]
On 32-bit, the first entry might be at 0/NULL, but that's
strange and leads to issues, e.g. where we check "if (ret)".
Use a IOREMAP_BIAS/IOREMAP_MASK of 0x80000000UL to avoid
this. This then requires reducing the number of areas (via
MAX_AREAS), but we still have 128 areas, which is enough.
Fixes: ca2e334232b6 ("lib: add iomem emulation (logic_iomem)")
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: Richard Weinberger <richard@nod.at>
Signed-off-by: Sasha Levin <sashal@kernel.org>
Diffstat (limited to 'lib')
-rw-r--r-- | lib/logic_iomem.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/lib/logic_iomem.c b/lib/logic_iomem.c index 54fa601f3300..549b22d4bcde 100644 --- a/lib/logic_iomem.c +++ b/lib/logic_iomem.c @@ -21,15 +21,15 @@ struct logic_iomem_area { #define AREA_SHIFT 24 #define MAX_AREA_SIZE (1 << AREA_SHIFT) -#define MAX_AREAS ((1ULL<<32) / MAX_AREA_SIZE) +#define MAX_AREAS ((1U << 31) / MAX_AREA_SIZE) #define AREA_BITS ((MAX_AREAS - 1) << AREA_SHIFT) #define AREA_MASK (MAX_AREA_SIZE - 1) #ifdef CONFIG_64BIT #define IOREMAP_BIAS 0xDEAD000000000000UL #define IOREMAP_MASK 0xFFFFFFFF00000000UL #else -#define IOREMAP_BIAS 0 -#define IOREMAP_MASK 0 +#define IOREMAP_BIAS 0x80000000UL +#define IOREMAP_MASK 0x80000000UL #endif static DEFINE_MUTEX(regions_mtx); |