On 28/3/18 11:44 am, Paul Mackerras wrote: > From: Gavin Shan <gws...@linux.vnet.ibm.com> > > The value passed to __raw_rm_writeq() and __raw_writeq() should be "u64" > and "unsigned long". This fixes warning reported by sparse: > > gwshan@gwshan:~/sandbox/l$ make C=2 CF=-D__CHECK_ENDIAN__ \ > arch/powerpc/platforms/powernv/pci-ioda.o > arch/powerpc/platforms/powernv/pci-ioda.c:1794:41: \ > warning: incorrect type in argument 1 (different base types) > arch/powerpc/platforms/powernv/pci-ioda.c:1794:41: \ > expected unsigned long long [unsigned] [usertype] val > arch/powerpc/platforms/powernv/pci-ioda.c:1794:41: \ > got restricted __be64 [usertype] <noident> > arch/powerpc/platforms/powernv/pci-ioda.c:1796:38: \ > warning: incorrect type in argument 1 (different base types) > arch/powerpc/platforms/powernv/pci-ioda.c:1796:38: \ > expected unsigned long [unsigned] v > arch/powerpc/platforms/powernv/pci-ioda.c:1796:38: \ > got restricted __be64 [usertype] <noident> > > This also fixes another warning reported by sparse: > > gwshan@gwshan:~/sandbox/l$ make C=2 CF=-D__CHECK_ENDIAN__ \ > arch/powerpc/platforms/powernv/pci-ioda.o > : > arch/powerpc/platforms/powernv/pci-ioda.c:2647:45: \ > warning: cast to restricted __be64 > > Signed-off-by: Gavin Shan <gws...@linux.vnet.ibm.com> > Signed-off-by: Paul Mackerras <pau...@ozlabs.org>
Reviewed-by: Alexey Kardashevskiy <a...@ozlabs.ru> > --- > diff --git a/arch/powerpc/platforms/powernv/pci-ioda.c > b/arch/powerpc/platforms/powernv/pci-ioda.c > index a6c92c7..71de087 100644 > --- a/arch/powerpc/platforms/powernv/pci-ioda.c > +++ b/arch/powerpc/platforms/powernv/pci-ioda.c > @@ -1976,9 +1976,11 @@ static void pnv_pci_p7ioc_tce_invalidate(struct > iommu_table *tbl, > mb(); /* Ensure above stores are visible */ > while (start <= end) { > if (rm) > - __raw_rm_writeq(cpu_to_be64(start), invalidate); > + __raw_rm_writeq((__force u64)cpu_to_be64(start), > + invalidate); > else > - __raw_writeq(cpu_to_be64(start), invalidate); > + __raw_writeq((__force unsigned long)cpu_to_be64(start), > + invalidate); > start += inc; > } > > @@ -2055,9 +2057,10 @@ static void pnv_pci_phb3_tce_invalidate_entire(struct > pnv_phb *phb, bool rm) > > mb(); /* Ensure previous TCE table stores are visible */ > if (rm) > - __raw_rm_writeq(cpu_to_be64(val), invalidate); > + __raw_rm_writeq((__force u64)cpu_to_be64(val), invalidate); > else > - __raw_writeq(cpu_to_be64(val), invalidate); > + __raw_writeq((__force unsigned long)cpu_to_be64(val), > + invalidate); > } > > static inline void pnv_pci_phb3_tce_invalidate_pe(struct pnv_ioda_pe *pe) > @@ -2067,7 +2070,7 @@ static inline void > pnv_pci_phb3_tce_invalidate_pe(struct pnv_ioda_pe *pe) > unsigned long val = PHB3_TCE_KILL_INVAL_PE | (pe->pe_number & 0xFF); > > mb(); /* Ensure above stores are visible */ > - __raw_writeq(cpu_to_be64(val), invalidate); > + __raw_writeq((__force unsigned long)cpu_to_be64(val), invalidate); > } > > static void pnv_pci_phb3_tce_invalidate(struct pnv_ioda_pe *pe, bool rm, > @@ -2090,9 +2093,11 @@ static void pnv_pci_phb3_tce_invalidate(struct > pnv_ioda_pe *pe, bool rm, > > while (start <= end) { > if (rm) > - __raw_rm_writeq(cpu_to_be64(start), invalidate); > + __raw_rm_writeq((__force u64)cpu_to_be64(start), > + invalidate); > else > - __raw_writeq(cpu_to_be64(start), invalidate); > + __raw_writeq((__force unsigned long)cpu_to_be64(start), > + invalidate); > start += inc; > } > } > @@ -2864,7 +2869,8 @@ static void pnv_pci_ioda2_table_do_free_pages(__be64 > *addr, > u64 *tmp = (u64 *) addr_ul; > > for (i = 0; i < size; ++i) { > - unsigned long hpa = be64_to_cpu(tmp[i]); > + unsigned long hpa = > + be64_to_cpu((__force __be64)(tmp[i])); > > if (!(hpa & (TCE_PCI_READ | TCE_PCI_WRITE))) > continue; > -- Alexey