]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
iommupt: Make pt_feature() always_inline
authorJason Gunthorpe <jgg@nvidia.com>
Fri, 9 Jan 2026 14:29:52 +0000 (10:29 -0400)
committerJoerg Roedel <joerg.roedel@amd.com>
Sat, 10 Jan 2026 09:50:45 +0000 (10:50 +0100)
gcc 8.5 on powerpc does not automatically inline these functions even
though they evaluate to constants in key cases. Since the constant
propagation is essential for some code elimination and built-time checks
this causes a build failure:

 ERROR: modpost: "__pt_no_sw_bit" [drivers/iommu/generic_pt/fmt/iommu_amdv1.ko] undefined!

Caused by this:

if (pts_feature(&pts, PT_FEAT_DMA_INCOHERENT) &&
    !pt_test_sw_bit_acquire(&pts,
    SW_BIT_CACHE_FLUSH_DONE))
flush_writes_item(&pts);

Where pts_feature() evaluates to a constant false. Mark them as
__always_inline to force it to evaluate to a constant and trigger the code
elimination.

Fixes: 7c5b184db714 ("genpt: Generic Page Table base API")
Reported-by: kernel test robot <lkp@intel.com>
Closes: https://lore.kernel.org/oe-kbuild-all/202512230720.9y9DtWIo-lkp@intel.com/
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
drivers/iommu/generic_pt/pt_defs.h

index c25544d72f979a5947d67070fc41581f079063be..707b3b0282fad711ac7304b73eae1d46b3453482 100644 (file)
@@ -202,7 +202,7 @@ static inline bool pt_table_install32(struct pt_state *pts, u32 table_entry)
 
 #define PT_SUPPORTED_FEATURE(feature_nr) (PT_SUPPORTED_FEATURES & BIT(feature_nr))
 
-static inline bool pt_feature(const struct pt_common *common,
+static __always_inline bool pt_feature(const struct pt_common *common,
                              unsigned int feature_nr)
 {
        if (PT_FORCE_ENABLED_FEATURES & BIT(feature_nr))
@@ -212,7 +212,7 @@ static inline bool pt_feature(const struct pt_common *common,
        return common->features & BIT(feature_nr);
 }
 
-static inline bool pts_feature(const struct pt_state *pts,
+static __always_inline bool pts_feature(const struct pt_state *pts,
                               unsigned int feature_nr)
 {
        return pt_feature(pts->range->common, feature_nr);