OSDN Git Service

net: ipa: relax 64-bit build requirement
authorAlex Elder <elder@linaro.org>
Thu, 18 Mar 2021 18:59:30 +0000 (13:59 -0500)
committerDavid S. Miller <davem@davemloft.net>
Thu, 18 Mar 2021 23:20:35 +0000 (16:20 -0700)
We currently assume the IPA driver is built only for a 64 bit kernel.

When this constraint was put in place it eliminated some do_div()
calls, replacing them with the "/" and "%" operators.  We now only
use these operations on u32 and size_t objects.  In a 32-bit kernel
build, size_t will be 32 bits wide, so there remains no reason to
use do_div() for divide and modulo.

A few recent commits also fix some code that assumes that DMA
addresses are 64 bits wide.

With that, we can get rid of the 64-bit build requirement.

Signed-off-by: Alex Elder <elder@linaro.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ipa/Kconfig
drivers/net/ipa/ipa_main.c

index b68f128..90a9026 100644 (file)
@@ -1,6 +1,6 @@
 config QCOM_IPA
        tristate "Qualcomm IPA support"
-       depends on 64BIT && NET && QCOM_SMEM
+       depends on NET && QCOM_SMEM
        depends on ARCH_QCOM || COMPILE_TEST
        depends on QCOM_RPROC_COMMON || (QCOM_RPROC_COMMON=n && COMPILE_TEST)
        select QCOM_MDT_LOADER if ARCH_QCOM
index 97c1b55..d354e3e 100644 (file)
@@ -735,8 +735,14 @@ MODULE_DEVICE_TABLE(of, ipa_match);
 static void ipa_validate_build(void)
 {
 #ifdef IPA_VALIDATE
-       /* We assume we're working on 64-bit hardware */
-       BUILD_BUG_ON(!IS_ENABLED(CONFIG_64BIT));
+       /* At one time we assumed a 64-bit build, allowing some do_div()
+        * calls to be replaced by simple division or modulo operations.
+        * We currently only perform divide and modulo operations on u32,
+        * u16, or size_t objects, and of those only size_t has any chance
+        * of being a 64-bit value.  (It should be guaranteed 32 bits wide
+        * on a 32-bit build, but there is no harm in verifying that.)
+        */
+       BUILD_BUG_ON(!IS_ENABLED(CONFIG_64BIT) && sizeof(size_t) != 4);
 
        /* Code assumes the EE ID for the AP is 0 (zeroed structure field) */
        BUILD_BUG_ON(GSI_EE_AP != 0);