On Fri, Sep 18, 2020 at 04:02:26PM +0100, Robin Murphy wrote: > On 2020-09-18 15:18, Jean-Philippe Brucker wrote: > > When building with C=1, sparse reports some issues regarding endianness > > annotations: > > > > arm-smmu-v3.c:221:26: warning: cast to restricted __le64 > > arm-smmu-v3.c:221:24: warning: incorrect type in assignment (different base > > types) > > arm-smmu-v3.c:221:24: expected restricted __le64 [usertype] > > arm-smmu-v3.c:221:24: got unsigned long long [usertype] > > arm-smmu-v3.c:229:20: warning: incorrect type in argument 1 (different base > > types) > > arm-smmu-v3.c:229:20: expected restricted __le64 [usertype] *[assigned] > > dst > > arm-smmu-v3.c:229:20: got unsigned long long [usertype] *ent > > arm-smmu-v3.c:229:25: warning: incorrect type in argument 2 (different base > > types) > > arm-smmu-v3.c:229:25: expected unsigned long long [usertype] *[assigned] > > src > > arm-smmu-v3.c:229:25: got restricted __le64 [usertype] * > > arm-smmu-v3.c:396:20: warning: incorrect type in argument 1 (different base > > types) > > arm-smmu-v3.c:396:20: expected restricted __le64 [usertype] *[assigned] > > dst > > arm-smmu-v3.c:396:20: got unsigned long long * > > arm-smmu-v3.c:396:25: warning: incorrect type in argument 2 (different base > > types) > > arm-smmu-v3.c:396:25: expected unsigned long long [usertype] *[assigned] > > src > > arm-smmu-v3.c:396:25: got restricted __le64 [usertype] * > > arm-smmu-v3.c:1349:32: warning: invalid assignment: |= > > arm-smmu-v3.c:1349:32: left side has type restricted __le64 > > arm-smmu-v3.c:1349:32: right side has type unsigned long > > arm-smmu-v3.c:1396:53: warning: incorrect type in argument 3 (different > > base types) > > arm-smmu-v3.c:1396:53: expected restricted __le64 [usertype] *dst > > arm-smmu-v3.c:1396:53: got unsigned long long [usertype] *strtab > > arm-smmu-v3.c:1424:39: warning: incorrect type in argument 1 (different > > base types) > > arm-smmu-v3.c:1424:39: expected unsigned long long [usertype] > > *[assigned] strtab > > arm-smmu-v3.c:1424:39: got restricted __le64 [usertype] *l2ptr > > > > While harmless, they are incorrect and could hide actual errors during > > development. Fix them. > > Reviewed-by: Robin Murphy <robin.mur...@arm.com>
Thanks! > > Signed-off-by: Jean-Philippe Brucker <jean-phili...@linaro.org> > > --- > > > > There is another false positive due to passing INT_MIN to cmpxchg, and > > __cmpxchg* to truncate them to u8 and u16: > > > > arch/arm64/include/asm/cmpxchg.h:172:1: warning: cast truncates bits from > > constant value (ffffffff80000000 becomes 0) > > arch/arm64/include/asm/cmpxchg.h:172:1: warning: cast truncates bits from > > constant value (ffffffff80000000 becomes 0) > > > > I haven't found a satisfying fix so far, except adding __force to > > __cmpxchg_case* which could hide actual bugs. > > I guess that's a general issue with the switch(sizeof()) idiom of sparse not > being aware that those cases are unreachable? Precisely. I wondered if _Generic could help, but it looks like the problem is the same. Thanks, Jean _______________________________________________ iommu mailing list iommu@lists.linux-foundation.org https://lists.linuxfoundation.org/mailman/listinfo/iommu