linuxppc-dev.lists.ozlabs.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/9] powerpc/powernv: Fix sparse warnings for PCI files
@ 2016-08-02  4:10 Gavin Shan
  2016-08-02  4:10 ` [PATCH 1/9] powerpc/powernv: Pass CPU-endian PE number to opal_pci_eeh_freeze_clear() Gavin Shan
                   ` (8 more replies)
  0 siblings, 9 replies; 17+ messages in thread
From: Gavin Shan @ 2016-08-02  4:10 UTC (permalink / raw)
  To: linuxppc-dev; +Cc: paulus, mpe, Gavin Shan

This fixes the warnings reported from sparse. With this applied, no sparse
warning seen from below files with "make C=2 CF=-D__CHECK_ENDIAN__".

 arch/powerpc/platforms/powernv/eeh-powernv.c
 arch/powerpc/platforms/powernv/pci-ioda.c
 arch/powerpc/platforms/powernv/pci.c

Gavin Shan (9):
  powerpc/powernv: Pass CPU-endian PE number to
    opal_pci_eeh_freeze_clear()
  powerpc/powernv: Use CPU-endian hub diag-data type in
    pnv_eeh_get_and_dump_hub_diag()
  powerpc/powernv: Specify proper data type for PCI_SLOT_ID_PREFIX
  powerpc/powernv: Use CPU-endian PEST in pnv_pci_dump_p7ioc_diag_data()
  powerpc/powernv: Fix endian for return value from pnv_tce_get()
  powerpc/powernv: Pass CPU-endian argument to xchg() in pnv_tce_xchg()
  powerpc/powernv: Fix data type for @r in pnv_ioda_parse_m64_window()
  powerpc/powernv: Fix data type of argument to __raw_{rm_, }writeq()
  powerpc/powernv: Fix data type in pnv_pci_ioda2_table_do_free_pages()

 arch/powerpc/include/asm/pnv-pci.h           |  2 +-
 arch/powerpc/platforms/powernv/eeh-powernv.c |  4 ++--
 arch/powerpc/platforms/powernv/pci-ioda.c    | 25 ++++++++++++++++---------
 arch/powerpc/platforms/powernv/pci.c         | 10 ++++++----
 4 files changed, 25 insertions(+), 16 deletions(-)

-- 
2.1.0

^ permalink raw reply	[flat|nested] 17+ messages in thread

* [PATCH 1/9] powerpc/powernv: Pass CPU-endian PE number to opal_pci_eeh_freeze_clear()
  2016-08-02  4:10 [PATCH 0/9] powerpc/powernv: Fix sparse warnings for PCI files Gavin Shan
@ 2016-08-02  4:10 ` Gavin Shan
  2016-08-02  4:32   ` Russell Currey
  2016-10-05  2:36   ` [1/9] " Michael Ellerman
  2016-08-02  4:10 ` [PATCH 2/9] powerpc/powernv: Use CPU-endian hub diag-data type in pnv_eeh_get_and_dump_hub_diag() Gavin Shan
                   ` (7 subsequent siblings)
  8 siblings, 2 replies; 17+ messages in thread
From: Gavin Shan @ 2016-08-02  4:10 UTC (permalink / raw)
  To: linuxppc-dev; +Cc: paulus, mpe, Gavin Shan

The PE number (@frozen_pe_no), filled by opal_pci_next_error() is in
big-endian format. It should be converted to CPU-dian before it is
passed to opal_pci_eeh_freeze_clear() when clearing the frozen state
if the PE is invalid one. As Michael Ellerman pointed out, the issue
is also detected by sparse:

  gwshan@gwshan:~/sandbox/l$ make C=2 CF=-D__CHECK_ENDIAN__ \
                    arch/powerpc/platforms/powernv/eeh-powernv.o
      :
  arch/powerpc/platforms/powernv/eeh-powernv.c:1541:41: \
  warning: incorrect type in argument 2 (different base types)
  arch/powerpc/platforms/powernv/eeh-powernv.c:1541:41: \
  expected unsigned long long [unsigned] [usertype] pe_number
  arch/powerpc/platforms/powernv/eeh-powernv.c:1541:41: \
  got restricted __be64 [addressable] [usertype] frozen_pe_no

This passes CPU-endian PE number to opal_pci_eeh_freeze_clear() and
it should be part of commit <0f36db77643b> ("powerpc/eeh: Fix wrong
printed PE number"), which was merged to 4.3 kernel.

Fixes: 71b540adffd9 ("powerpc/powernv: Don't escalate non-existing frozen PE")
Cc: stable@vger.kernel.org # v4.3+
Suggested-by: Paul Mackerras <paulus@samba.org>
Signed-off-by: Gavin Shan <gwshan@linux.vnet.ibm.com>
---
 arch/powerpc/platforms/powernv/eeh-powernv.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/arch/powerpc/platforms/powernv/eeh-powernv.c b/arch/powerpc/platforms/powernv/eeh-powernv.c
index 86544ea..75363d9 100644
--- a/arch/powerpc/platforms/powernv/eeh-powernv.c
+++ b/arch/powerpc/platforms/powernv/eeh-powernv.c
@@ -1538,7 +1538,7 @@ static int pnv_eeh_next_error(struct eeh_pe **pe)
 
 				/* Try best to clear it */
 				opal_pci_eeh_freeze_clear(phb->opal_id,
-					frozen_pe_no,
+					be64_to_cpu(frozen_pe_no),
 					OPAL_EEH_ACTION_CLEAR_FREEZE_ALL);
 				ret = EEH_NEXT_ERR_NONE;
 			} else if ((*pe)->state & EEH_PE_ISOLATED ||
-- 
2.1.0

^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PATCH 2/9] powerpc/powernv: Use CPU-endian hub diag-data type in pnv_eeh_get_and_dump_hub_diag()
  2016-08-02  4:10 [PATCH 0/9] powerpc/powernv: Fix sparse warnings for PCI files Gavin Shan
  2016-08-02  4:10 ` [PATCH 1/9] powerpc/powernv: Pass CPU-endian PE number to opal_pci_eeh_freeze_clear() Gavin Shan
@ 2016-08-02  4:10 ` Gavin Shan
  2016-08-02  4:33   ` Russell Currey
  2016-10-05  2:36   ` [2/9] " Michael Ellerman
  2016-08-02  4:10 ` [PATCH 3/9] powerpc/powernv: Specify proper data type for PCI_SLOT_ID_PREFIX Gavin Shan
                   ` (6 subsequent siblings)
  8 siblings, 2 replies; 17+ messages in thread
From: Gavin Shan @ 2016-08-02  4:10 UTC (permalink / raw)
  To: linuxppc-dev; +Cc: paulus, mpe, Gavin Shan

The hub diag-data type is filled with big-endian data by OPAL call
opal_pci_get_hub_diag_data(). We need convert it to CPU-endian value
before using it. The issue is reported by sparse as pointed by Michael
Ellerman:

  gwshan@gwshan:~/sandbox/l$ make C=2 CF=-D__CHECK_ENDIAN__ \
                        arch/powerpc/platforms/powernv/eeh-powernv.o
       :
  arch/powerpc/platforms/powernv/eeh-powernv.c:1309:21: \
  warning: restricted __be16 degrades to integer
  arch/powerpc/platforms/powernv/eeh-powernv.c:1309:21: \
  warning: restricted __be16 degrades to integer
  arch/powerpc/platforms/powernv/eeh-powernv.c:1309:21: \
  warning: restricted __be16 degrades to integer
  arch/powerpc/platforms/powernv/eeh-powernv.c:1309:21: \
  warning: restricted __be16 degrades to integer
  arch/powerpc/platforms/powernv/eeh-powernv.c:1309:21: \
  warning: restricted __be16 degrades to integer

This converts hub diag-data type to CPU-endian before using it in
pnv_eeh_get_and_dump_hub_diag().

Fixes: 2a485ad7c88d ("powerpc/powernv: Drop PHB operation next_error()")
Cc: stable@vger.kernel.org # v4.1+
Suggested-by: Michael Ellerman <mpe@ellerman.id.au>
Signed-off-by: Gavin Shan <gwshan@linux.vnet.ibm.com>
---
 arch/powerpc/platforms/powernv/eeh-powernv.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/arch/powerpc/platforms/powernv/eeh-powernv.c b/arch/powerpc/platforms/powernv/eeh-powernv.c
index 75363d9..8fec7a3 100644
--- a/arch/powerpc/platforms/powernv/eeh-powernv.c
+++ b/arch/powerpc/platforms/powernv/eeh-powernv.c
@@ -1306,7 +1306,7 @@ static void pnv_eeh_get_and_dump_hub_diag(struct pci_controller *hose)
 		return;
 	}
 
-	switch (data->type) {
+	switch (be16_to_cpu(data->type)) {
 	case OPAL_P7IOC_DIAG_TYPE_RGC:
 		pr_info("P7IOC diag-data for RGC\n\n");
 		pnv_eeh_dump_hub_diag_common(data);
-- 
2.1.0

^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PATCH 3/9] powerpc/powernv: Specify proper data type for PCI_SLOT_ID_PREFIX
  2016-08-02  4:10 [PATCH 0/9] powerpc/powernv: Fix sparse warnings for PCI files Gavin Shan
  2016-08-02  4:10 ` [PATCH 1/9] powerpc/powernv: Pass CPU-endian PE number to opal_pci_eeh_freeze_clear() Gavin Shan
  2016-08-02  4:10 ` [PATCH 2/9] powerpc/powernv: Use CPU-endian hub diag-data type in pnv_eeh_get_and_dump_hub_diag() Gavin Shan
@ 2016-08-02  4:10 ` Gavin Shan
  2016-10-05  2:36   ` [3/9] " Michael Ellerman
  2016-08-02  4:10 ` [PATCH 4/9] powerpc/powernv: Use CPU-endian PEST in pnv_pci_dump_p7ioc_diag_data() Gavin Shan
                   ` (5 subsequent siblings)
  8 siblings, 1 reply; 17+ messages in thread
From: Gavin Shan @ 2016-08-02  4:10 UTC (permalink / raw)
  To: linuxppc-dev; +Cc: paulus, mpe, Gavin Shan

This fixes the warning reported from sparse:

  gwshan@gwshan:~/sandbox/l$ make C=2 CF=-D__CHECK_ENDIAN__ \
                             arch/powerpc/platforms/powernv/eeh-powernv.o
        :
  arch/powerpc/platforms/powernv/eeh-powernv.c:875:23: \
  warning: constant 0x8000000000000000 is so big it is unsigned long

Fixes: ebe225312739 ("powerpc/powernv: Support PCI slot ID")
Suggested-by: Michael Ellerman <mpe@ellerman.id.au>
Signed-off-by: Gavin Shan <gwshan@linux.vnet.ibm.com>
---
 arch/powerpc/include/asm/pnv-pci.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/arch/powerpc/include/asm/pnv-pci.h b/arch/powerpc/include/asm/pnv-pci.h
index 0cbd813..62a36ed 100644
--- a/arch/powerpc/include/asm/pnv-pci.h
+++ b/arch/powerpc/include/asm/pnv-pci.h
@@ -15,7 +15,7 @@
 #include <misc/cxl-base.h>
 #include <asm/opal-api.h>
 
-#define PCI_SLOT_ID_PREFIX	0x8000000000000000
+#define PCI_SLOT_ID_PREFIX	(1UL << 63)
 #define PCI_SLOT_ID(phb_id, bdfn)	\
 	(PCI_SLOT_ID_PREFIX | ((uint64_t)(bdfn) << 16) | (phb_id))
 
-- 
2.1.0

^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PATCH 4/9] powerpc/powernv: Use CPU-endian PEST in pnv_pci_dump_p7ioc_diag_data()
  2016-08-02  4:10 [PATCH 0/9] powerpc/powernv: Fix sparse warnings for PCI files Gavin Shan
                   ` (2 preceding siblings ...)
  2016-08-02  4:10 ` [PATCH 3/9] powerpc/powernv: Specify proper data type for PCI_SLOT_ID_PREFIX Gavin Shan
@ 2016-08-02  4:10 ` Gavin Shan
  2016-10-05  2:36   ` [4/9] " Michael Ellerman
  2016-08-02  4:10 ` [PATCH 5/9] powerpc/powernv: Fix endian for return value from pnv_tce_get() Gavin Shan
                   ` (4 subsequent siblings)
  8 siblings, 1 reply; 17+ messages in thread
From: Gavin Shan @ 2016-08-02  4:10 UTC (permalink / raw)
  To: linuxppc-dev; +Cc: paulus, mpe, Gavin Shan

This fixes the warnings reported from sparse:

  gwshan@gwshan:~/sandbox/l$ make C=2 CF=-D__CHECK_ENDIAN__ \
                             arch/powerpc/platforms/powernv/pci.o
        :
  arch/powerpc/platforms/powernv/pci.c:312:33: \
  warning: restricted __be64 degrades to integer
  arch/powerpc/platforms/powernv/pci.c:313:33: \
  warning: restricted __be64 degrades to integer

Fixes: cee72d5bb489 ("powerpc/powernv: Display diag data on p7ioc EEH errors")
Cc: stable@vger.kernel.org # v3.3+
Signed-off-by: Gavin Shan <gwshan@linux.vnet.ibm.com>
---
 arch/powerpc/platforms/powernv/pci.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/arch/powerpc/platforms/powernv/pci.c b/arch/powerpc/platforms/powernv/pci.c
index 6701dd5..b32bafb 100644
--- a/arch/powerpc/platforms/powernv/pci.c
+++ b/arch/powerpc/platforms/powernv/pci.c
@@ -309,8 +309,8 @@ static void pnv_pci_dump_p7ioc_diag_data(struct pci_controller *hose,
 			be64_to_cpu(data->dma1ErrorLog1));
 
 	for (i = 0; i < OPAL_P7IOC_NUM_PEST_REGS; i++) {
-		if ((data->pestA[i] >> 63) == 0 &&
-		    (data->pestB[i] >> 63) == 0)
+		if ((be64_to_cpu(data->pestA[i]) >> 63) == 0 &&
+		    (be64_to_cpu(data->pestB[i]) >> 63) == 0)
 			continue;
 
 		pr_info("PE[%3d] A/B: %016llx %016llx\n",
-- 
2.1.0

^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PATCH 5/9] powerpc/powernv: Fix endian for return value from pnv_tce_get()
  2016-08-02  4:10 [PATCH 0/9] powerpc/powernv: Fix sparse warnings for PCI files Gavin Shan
                   ` (3 preceding siblings ...)
  2016-08-02  4:10 ` [PATCH 4/9] powerpc/powernv: Use CPU-endian PEST in pnv_pci_dump_p7ioc_diag_data() Gavin Shan
@ 2016-08-02  4:10 ` Gavin Shan
  2016-08-02  4:10 ` [PATCH 6/9] powerpc/powernv: Pass CPU-endian argument to xchg() in pnv_tce_xchg() Gavin Shan
                   ` (3 subsequent siblings)
  8 siblings, 0 replies; 17+ messages in thread
From: Gavin Shan @ 2016-08-02  4:10 UTC (permalink / raw)
  To: linuxppc-dev; +Cc: paulus, mpe, Gavin Shan, Alexey Kardashevskiy

This fixes the warning reported from sparse:

  gwshan@gwshan:~/sandbox/l$ make C=2 CF=-D__CHECK_ENDIAN__ \
                             arch/powerpc/platforms/powernv/pci.o
        :
  arch/powerpc/platforms/powernv/pci.c:761:16: \
  warning: incorrect type in return expression (different base types)
  arch/powerpc/platforms/powernv/pci.c:761:16: \
  expected unsigned long
  arch/powerpc/platforms/powernv/pci.c:761:16: \
  got restricted __be64 [usertype] <noident>

Cc: Alexey Kardashevskiy <aik@ozlabs.ru>
Fixes: c5bb44edee19 ("powerpc/powernv: Implement accessor to TCE entry")
Signed-off-by: Gavin Shan <gwshan@linux.vnet.ibm.com>
---
 arch/powerpc/platforms/powernv/pci.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/arch/powerpc/platforms/powernv/pci.c b/arch/powerpc/platforms/powernv/pci.c
index b32bafb..9a26a57 100644
--- a/arch/powerpc/platforms/powernv/pci.c
+++ b/arch/powerpc/platforms/powernv/pci.c
@@ -758,7 +758,7 @@ void pnv_tce_free(struct iommu_table *tbl, long index, long npages)
 
 unsigned long pnv_tce_get(struct iommu_table *tbl, long index)
 {
-	return *(pnv_tce(tbl, index - tbl->it_offset));
+	return (__force unsigned long)(*(pnv_tce(tbl, index - tbl->it_offset)));
 }
 
 struct iommu_table *pnv_pci_table_alloc(int nid)
-- 
2.1.0

^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PATCH 6/9] powerpc/powernv: Pass CPU-endian argument to xchg() in pnv_tce_xchg()
  2016-08-02  4:10 [PATCH 0/9] powerpc/powernv: Fix sparse warnings for PCI files Gavin Shan
                   ` (4 preceding siblings ...)
  2016-08-02  4:10 ` [PATCH 5/9] powerpc/powernv: Fix endian for return value from pnv_tce_get() Gavin Shan
@ 2016-08-02  4:10 ` Gavin Shan
  2016-08-02  4:10 ` [PATCH 7/9] powerpc/powernv: Fix data type for @r in pnv_ioda_parse_m64_window() Gavin Shan
                   ` (2 subsequent siblings)
  8 siblings, 0 replies; 17+ messages in thread
From: Gavin Shan @ 2016-08-02  4:10 UTC (permalink / raw)
  To: linuxppc-dev; +Cc: paulus, mpe, Gavin Shan, Alexey Kardashevskiy

This fixes warning reported from sparse:

  gwshan@gwshan:~/sandbox/l$ make C=2 CF=-D__CHECK_ENDIAN__ \
                             arch/powerpc/platforms/powernv/pci.o
  arch/powerpc/platforms/powernv/pci.c:740:18: \
  warning: cast from restricted __be64
  arch/powerpc/platforms/powernv/pci.c:740:18: \
  warning: cast to restricted __be64
  arch/powerpc/platforms/powernv/pci.c:740:18: \
  warning: cast from restricted __be64
  arch/powerpc/platforms/powernv/pci.c:740:18: \
  warning: cast to restricted __be64

Cc: Alexey Kardashevskiy <aik@ozlabs.ru>
Fixes: 802a345183c0 ("powerpc/powernv/ioda: Fix endianness when reading TCEs")
Signed-off-by: Gavin Shan <gwshan@linux.vnet.ibm.com>
---
 arch/powerpc/platforms/powernv/pci.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/arch/powerpc/platforms/powernv/pci.c b/arch/powerpc/platforms/powernv/pci.c
index 9a26a57..4e385f9 100644
--- a/arch/powerpc/platforms/powernv/pci.c
+++ b/arch/powerpc/platforms/powernv/pci.c
@@ -737,7 +737,9 @@ int pnv_tce_xchg(struct iommu_table *tbl, long index,
 	if (newtce & TCE_PCI_WRITE)
 		newtce |= TCE_PCI_READ;
 
-	oldtce = be64_to_cpu(xchg(pnv_tce(tbl, idx), cpu_to_be64(newtce)));
+	oldtce = be64_to_cpu((__force __be64)xchg(
+			(unsigned long *)pnv_tce(tbl, idx),
+			(__force unsigned long)cpu_to_be64(newtce)));
 	*hpa = oldtce & ~(TCE_PCI_READ | TCE_PCI_WRITE);
 	*direction = iommu_tce_direction(oldtce);
 
-- 
2.1.0

^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PATCH 7/9] powerpc/powernv: Fix data type for @r in pnv_ioda_parse_m64_window()
  2016-08-02  4:10 [PATCH 0/9] powerpc/powernv: Fix sparse warnings for PCI files Gavin Shan
                   ` (5 preceding siblings ...)
  2016-08-02  4:10 ` [PATCH 6/9] powerpc/powernv: Pass CPU-endian argument to xchg() in pnv_tce_xchg() Gavin Shan
@ 2016-08-02  4:10 ` Gavin Shan
  2016-10-05  2:36   ` [7/9] " Michael Ellerman
  2016-08-02  4:10 ` [PATCH 8/9] powerpc/powernv: Fix data type of argument to __raw_{rm_, }writeq() Gavin Shan
  2016-08-02  4:10 ` [PATCH 9/9] powerpc/powernv: Fix data type in pnv_pci_ioda2_table_do_free_pages() Gavin Shan
  8 siblings, 1 reply; 17+ messages in thread
From: Gavin Shan @ 2016-08-02  4:10 UTC (permalink / raw)
  To: linuxppc-dev; +Cc: paulus, mpe, Gavin Shan

This fixes warning reported from 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:451:49: \
  warning: incorrect type in argument 2 (different base types)
  arch/powerpc/platforms/powernv/pci-ioda.c:451:49: \
  expected restricted __be32 const [usertype] *addr
  arch/powerpc/platforms/powernv/pci-ioda.c:451:49: \
  got unsigned int const [usertype] *
  arch/powerpc/platforms/powernv/pci-ioda.c:452:50: \
  warning: incorrect type in argument 1 (different base types)
  arch/powerpc/platforms/powernv/pci-ioda.c:452:50: \
  expected restricted __be32 const [usertype] *cell
  arch/powerpc/platforms/powernv/pci-ioda.c:452:50: \
  got unsigned int const [usertype] *
  arch/powerpc/platforms/powernv/pci-ioda.c:454:35: \
  warning: incorrect type in argument 1 (different base types)
  arch/powerpc/platforms/powernv/pci-ioda.c:454:35: \
  expected restricted __be32 const [usertype] *cell
  arch/powerpc/platforms/powernv/pci-ioda.c:454:35: \
  got unsigned int const [usertype] *[assigned] r

Fixes: 262af557dd75 ("powerpc/powernv: Enable M64 aperatus for PHB3")
Signed-off-by: Gavin Shan <gwshan@linux.vnet.ibm.com>
---
 arch/powerpc/platforms/powernv/pci-ioda.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/arch/powerpc/platforms/powernv/pci-ioda.c b/arch/powerpc/platforms/powernv/pci-ioda.c
index 891fc4a..ac60190 100644
--- a/arch/powerpc/platforms/powernv/pci-ioda.c
+++ b/arch/powerpc/platforms/powernv/pci-ioda.c
@@ -402,7 +402,7 @@ static void __init pnv_ioda_parse_m64_window(struct pnv_phb *phb)
 	struct device_node *dn = hose->dn;
 	struct resource *res;
 	u32 m64_range[2], i;
-	const u32 *r;
+	const __be32 *r;
 	u64 pci_addr;
 
 	if (phb->type != PNV_PHB_IODA1 && phb->type != PNV_PHB_IODA2) {
-- 
2.1.0

^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PATCH 8/9] powerpc/powernv: Fix data type of argument to __raw_{rm_, }writeq()
  2016-08-02  4:10 [PATCH 0/9] powerpc/powernv: Fix sparse warnings for PCI files Gavin Shan
                   ` (6 preceding siblings ...)
  2016-08-02  4:10 ` [PATCH 7/9] powerpc/powernv: Fix data type for @r in pnv_ioda_parse_m64_window() Gavin Shan
@ 2016-08-02  4:10 ` Gavin Shan
  2016-08-02  4:10 ` [PATCH 9/9] powerpc/powernv: Fix data type in pnv_pci_ioda2_table_do_free_pages() Gavin Shan
  8 siblings, 0 replies; 17+ messages in thread
From: Gavin Shan @ 2016-08-02  4:10 UTC (permalink / raw)
  To: linuxppc-dev; +Cc: paulus, mpe, Gavin Shan

The value passed to __raw_rm_writeq() and __raw_writeq() should be "u64"
and "unsigned long". This fixes warning reported from 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>

Signed-off-by: Gavin Shan <gwshan@linux.vnet.ibm.com>
---
 arch/powerpc/platforms/powernv/pci-ioda.c | 20 +++++++++++++-------
 1 file changed, 13 insertions(+), 7 deletions(-)

diff --git a/arch/powerpc/platforms/powernv/pci-ioda.c b/arch/powerpc/platforms/powernv/pci-ioda.c
index ac60190..3d367ba 100644
--- a/arch/powerpc/platforms/powernv/pci-ioda.c
+++ b/arch/powerpc/platforms/powernv/pci-ioda.c
@@ -1791,9 +1791,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;
         }
 
@@ -1858,9 +1860,11 @@ 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)
@@ -1870,7 +1874,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,
@@ -1893,9 +1897,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;
 	}
 }
-- 
2.1.0

^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PATCH 9/9] powerpc/powernv: Fix data type in pnv_pci_ioda2_table_do_free_pages()
  2016-08-02  4:10 [PATCH 0/9] powerpc/powernv: Fix sparse warnings for PCI files Gavin Shan
                   ` (7 preceding siblings ...)
  2016-08-02  4:10 ` [PATCH 8/9] powerpc/powernv: Fix data type of argument to __raw_{rm_, }writeq() Gavin Shan
@ 2016-08-02  4:10 ` Gavin Shan
  8 siblings, 0 replies; 17+ messages in thread
From: Gavin Shan @ 2016-08-02  4:10 UTC (permalink / raw)
  To: linuxppc-dev; +Cc: paulus, mpe, Gavin Shan, Alexey Kardashevskiy

This fixes warning reported from 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

Cc: Alexey Kardashevskiy <aik@ozlabs.ru>
Fixes: bbb845c4bac8 ("powerpc/powernv: Implement multilevel TCE tables")
Signed-off-by: Gavin Shan <gwshan@linux.vnet.ibm.com>
---
 arch/powerpc/platforms/powernv/pci-ioda.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/arch/powerpc/platforms/powernv/pci-ioda.c b/arch/powerpc/platforms/powernv/pci-ioda.c
index 3d367ba..cc2d28c 100644
--- a/arch/powerpc/platforms/powernv/pci-ioda.c
+++ b/arch/powerpc/platforms/powernv/pci-ioda.c
@@ -2644,7 +2644,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;
-- 
2.1.0

^ permalink raw reply related	[flat|nested] 17+ messages in thread

* Re: [PATCH 1/9] powerpc/powernv: Pass CPU-endian PE number to opal_pci_eeh_freeze_clear()
  2016-08-02  4:10 ` [PATCH 1/9] powerpc/powernv: Pass CPU-endian PE number to opal_pci_eeh_freeze_clear() Gavin Shan
@ 2016-08-02  4:32   ` Russell Currey
  2016-10-05  2:36   ` [1/9] " Michael Ellerman
  1 sibling, 0 replies; 17+ messages in thread
From: Russell Currey @ 2016-08-02  4:32 UTC (permalink / raw)
  To: Gavin Shan, linuxppc-dev; +Cc: paulus

On Tue, 2016-08-02 at 14:10 +1000, Gavin Shan wrote:
> The PE number (@frozen_pe_no), filled by opal_pci_next_error() is in
> big-endian format. It should be converted to CPU-dian before it is
> passed to opal_pci_eeh_freeze_clear() when clearing the frozen state
> if the PE is invalid one. As Michael Ellerman pointed out, the issue
> is also detected by sparse:
> 
>   gwshan@gwshan:~/sandbox/l$ make C=2 CF=-D__CHECK_ENDIAN__ \
>                     arch/powerpc/platforms/powernv/eeh-powernv.o
>       :
>   arch/powerpc/platforms/powernv/eeh-powernv.c:1541:41: \
>   warning: incorrect type in argument 2 (different base types)
>   arch/powerpc/platforms/powernv/eeh-powernv.c:1541:41: \
>   expected unsigned long long [unsigned] [usertype] pe_number
>   arch/powerpc/platforms/powernv/eeh-powernv.c:1541:41: \
>   got restricted __be64 [addressable] [usertype] frozen_pe_no
> 
> This passes CPU-endian PE number to opal_pci_eeh_freeze_clear() and
> it should be part of commit <0f36db77643b> ("powerpc/eeh: Fix wrong
> printed PE number"), which was merged to 4.3 kernel.
> 
> Fixes: 71b540adffd9 ("powerpc/powernv: Don't escalate non-existing frozen PE")
> Cc: stable@vger.kernel.org # v4.3+
> Suggested-by: Paul Mackerras <paulus@samba.org>
> Signed-off-by: Gavin Shan <gwshan@linux.vnet.ibm.com>
> ---

Reviewed-by: Russell Currey <ruscur@russell.cc>

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH 2/9] powerpc/powernv: Use CPU-endian hub diag-data type in pnv_eeh_get_and_dump_hub_diag()
  2016-08-02  4:10 ` [PATCH 2/9] powerpc/powernv: Use CPU-endian hub diag-data type in pnv_eeh_get_and_dump_hub_diag() Gavin Shan
@ 2016-08-02  4:33   ` Russell Currey
  2016-10-05  2:36   ` [2/9] " Michael Ellerman
  1 sibling, 0 replies; 17+ messages in thread
From: Russell Currey @ 2016-08-02  4:33 UTC (permalink / raw)
  To: Gavin Shan, linuxppc-dev; +Cc: paulus

On Tue, 2016-08-02 at 14:10 +1000, Gavin Shan wrote:
> The hub diag-data type is filled with big-endian data by OPAL call
> opal_pci_get_hub_diag_data(). We need convert it to CPU-endian value
> before using it. The issue is reported by sparse as pointed by Michael
> Ellerman:
> 
>   gwshan@gwshan:~/sandbox/l$ make C=2 CF=-D__CHECK_ENDIAN__ \
>                         arch/powerpc/platforms/powernv/eeh-powernv.o
>        :
>   arch/powerpc/platforms/powernv/eeh-powernv.c:1309:21: \
>   warning: restricted __be16 degrades to integer
>   arch/powerpc/platforms/powernv/eeh-powernv.c:1309:21: \
>   warning: restricted __be16 degrades to integer
>   arch/powerpc/platforms/powernv/eeh-powernv.c:1309:21: \
>   warning: restricted __be16 degrades to integer
>   arch/powerpc/platforms/powernv/eeh-powernv.c:1309:21: \
>   warning: restricted __be16 degrades to integer
>   arch/powerpc/platforms/powernv/eeh-powernv.c:1309:21: \
>   warning: restricted __be16 degrades to integer
> 
> This converts hub diag-data type to CPU-endian before using it in
> pnv_eeh_get_and_dump_hub_diag().
> 
> Fixes: 2a485ad7c88d ("powerpc/powernv: Drop PHB operation next_error()")
> Cc: stable@vger.kernel.org # v4.1+
> Suggested-by: Michael Ellerman <mpe@ellerman.id.au>
> Signed-off-by: Gavin Shan <gwshan@linux.vnet.ibm.com>
> ---

Reviewed-by: Russell Currey <ruscur@russell.cc>

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [1/9] powerpc/powernv: Pass CPU-endian PE number to opal_pci_eeh_freeze_clear()
  2016-08-02  4:10 ` [PATCH 1/9] powerpc/powernv: Pass CPU-endian PE number to opal_pci_eeh_freeze_clear() Gavin Shan
  2016-08-02  4:32   ` Russell Currey
@ 2016-10-05  2:36   ` Michael Ellerman
  1 sibling, 0 replies; 17+ messages in thread
From: Michael Ellerman @ 2016-10-05  2:36 UTC (permalink / raw)
  To: Gavin Shan, linuxppc-dev; +Cc: paulus, Gavin Shan

On Tue, 2016-02-08 at 04:10:29 UTC, Gavin Shan wrote:
> The PE number (@frozen_pe_no), filled by opal_pci_next_error() is in
> big-endian format. It should be converted to CPU-dian before it is
> passed to opal_pci_eeh_freeze_clear() when clearing the frozen state
> if the PE is invalid one. As Michael Ellerman pointed out, the issue
> is also detected by sparse:
> 
>   gwshan@gwshan:~/sandbox/l$ make C=2 CF=-D__CHECK_ENDIAN__ \
>                     arch/powerpc/platforms/powernv/eeh-powernv.o
>       :
>   arch/powerpc/platforms/powernv/eeh-powernv.c:1541:41: \
>   warning: incorrect type in argument 2 (different base types)
>   arch/powerpc/platforms/powernv/eeh-powernv.c:1541:41: \
>   expected unsigned long long [unsigned] [usertype] pe_number
>   arch/powerpc/platforms/powernv/eeh-powernv.c:1541:41: \
>   got restricted __be64 [addressable] [usertype] frozen_pe_no
> 
> This passes CPU-endian PE number to opal_pci_eeh_freeze_clear() and
> it should be part of commit <0f36db77643b> ("powerpc/eeh: Fix wrong
> printed PE number"), which was merged to 4.3 kernel.
> 
> Fixes: 71b540adffd9 ("powerpc/powernv: Don't escalate non-existing frozen PE")
> Cc: stable@vger.kernel.org # v4.3+
> Suggested-by: Paul Mackerras <paulus@samba.org>
> Signed-off-by: Gavin Shan <gwshan@linux.vnet.ibm.com>
> Reviewed-by: Russell Currey <ruscur@russell.cc>

Applied to powerpc next, thanks.

https://git.kernel.org/powerpc/c/d63e51b31e0b655ed0f581b8a8fd4c

cheers

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [2/9] powerpc/powernv: Use CPU-endian hub diag-data type in pnv_eeh_get_and_dump_hub_diag()
  2016-08-02  4:10 ` [PATCH 2/9] powerpc/powernv: Use CPU-endian hub diag-data type in pnv_eeh_get_and_dump_hub_diag() Gavin Shan
  2016-08-02  4:33   ` Russell Currey
@ 2016-10-05  2:36   ` Michael Ellerman
  1 sibling, 0 replies; 17+ messages in thread
From: Michael Ellerman @ 2016-10-05  2:36 UTC (permalink / raw)
  To: Gavin Shan, linuxppc-dev; +Cc: paulus, Gavin Shan

On Tue, 2016-02-08 at 04:10:30 UTC, Gavin Shan wrote:
> The hub diag-data type is filled with big-endian data by OPAL call
> opal_pci_get_hub_diag_data(). We need convert it to CPU-endian value
> before using it. The issue is reported by sparse as pointed by Michael
> Ellerman:
> 
>   gwshan@gwshan:~/sandbox/l$ make C=2 CF=-D__CHECK_ENDIAN__ \
>                         arch/powerpc/platforms/powernv/eeh-powernv.o
>        :
>   arch/powerpc/platforms/powernv/eeh-powernv.c:1309:21: \
>   warning: restricted __be16 degrades to integer
>   arch/powerpc/platforms/powernv/eeh-powernv.c:1309:21: \
>   warning: restricted __be16 degrades to integer
>   arch/powerpc/platforms/powernv/eeh-powernv.c:1309:21: \
>   warning: restricted __be16 degrades to integer
>   arch/powerpc/platforms/powernv/eeh-powernv.c:1309:21: \
>   warning: restricted __be16 degrades to integer
>   arch/powerpc/platforms/powernv/eeh-powernv.c:1309:21: \
>   warning: restricted __be16 degrades to integer
> 
> This converts hub diag-data type to CPU-endian before using it in
> pnv_eeh_get_and_dump_hub_diag().
> 
> Fixes: 2a485ad7c88d ("powerpc/powernv: Drop PHB operation next_error()")
> Cc: stable@vger.kernel.org # v4.1+
> Suggested-by: Michael Ellerman <mpe@ellerman.id.au>
> Signed-off-by: Gavin Shan <gwshan@linux.vnet.ibm.com>
> Reviewed-by: Russell Currey <ruscur@russell.cc>

Applied to powerpc next, thanks.

https://git.kernel.org/powerpc/c/a7032132d7560a8434e1f54b71efd7

cheers

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [3/9] powerpc/powernv: Specify proper data type for PCI_SLOT_ID_PREFIX
  2016-08-02  4:10 ` [PATCH 3/9] powerpc/powernv: Specify proper data type for PCI_SLOT_ID_PREFIX Gavin Shan
@ 2016-10-05  2:36   ` Michael Ellerman
  0 siblings, 0 replies; 17+ messages in thread
From: Michael Ellerman @ 2016-10-05  2:36 UTC (permalink / raw)
  To: Gavin Shan, linuxppc-dev; +Cc: paulus, Gavin Shan

On Tue, 2016-02-08 at 04:10:31 UTC, Gavin Shan wrote:
> This fixes the warning reported from sparse:
> 
>   gwshan@gwshan:~/sandbox/l$ make C=2 CF=-D__CHECK_ENDIAN__ \
>                              arch/powerpc/platforms/powernv/eeh-powernv.o
>         :
>   arch/powerpc/platforms/powernv/eeh-powernv.c:875:23: \
>   warning: constant 0x8000000000000000 is so big it is unsigned long
> 
> Fixes: ebe225312739 ("powerpc/powernv: Support PCI slot ID")
> Suggested-by: Michael Ellerman <mpe@ellerman.id.au>
> Signed-off-by: Gavin Shan <gwshan@linux.vnet.ibm.com>

Applied to powerpc next, thanks.

https://git.kernel.org/powerpc/c/066bcd785aac9c10e5f9b873f9bd2e

cheers

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [4/9] powerpc/powernv: Use CPU-endian PEST in pnv_pci_dump_p7ioc_diag_data()
  2016-08-02  4:10 ` [PATCH 4/9] powerpc/powernv: Use CPU-endian PEST in pnv_pci_dump_p7ioc_diag_data() Gavin Shan
@ 2016-10-05  2:36   ` Michael Ellerman
  0 siblings, 0 replies; 17+ messages in thread
From: Michael Ellerman @ 2016-10-05  2:36 UTC (permalink / raw)
  To: Gavin Shan, linuxppc-dev; +Cc: paulus, Gavin Shan

On Tue, 2016-02-08 at 04:10:32 UTC, Gavin Shan wrote:
> This fixes the warnings reported from sparse:
> 
>   gwshan@gwshan:~/sandbox/l$ make C=2 CF=-D__CHECK_ENDIAN__ \
>                              arch/powerpc/platforms/powernv/pci.o
>         :
>   arch/powerpc/platforms/powernv/pci.c:312:33: \
>   warning: restricted __be64 degrades to integer
>   arch/powerpc/platforms/powernv/pci.c:313:33: \
>   warning: restricted __be64 degrades to integer
> 
> Fixes: cee72d5bb489 ("powerpc/powernv: Display diag data on p7ioc EEH errors")
> Cc: stable@vger.kernel.org # v3.3+
> Signed-off-by: Gavin Shan <gwshan@linux.vnet.ibm.com>

Applied to powerpc next, thanks.

https://git.kernel.org/powerpc/c/5adaf8629b193f185ca5a1665b9e77

cheers

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [7/9] powerpc/powernv: Fix data type for @r in pnv_ioda_parse_m64_window()
  2016-08-02  4:10 ` [PATCH 7/9] powerpc/powernv: Fix data type for @r in pnv_ioda_parse_m64_window() Gavin Shan
@ 2016-10-05  2:36   ` Michael Ellerman
  0 siblings, 0 replies; 17+ messages in thread
From: Michael Ellerman @ 2016-10-05  2:36 UTC (permalink / raw)
  To: Gavin Shan, linuxppc-dev; +Cc: paulus, Gavin Shan

On Tue, 2016-02-08 at 04:10:35 UTC, Gavin Shan wrote:
> This fixes warning reported from 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:451:49: \
>   warning: incorrect type in argument 2 (different base types)
>   arch/powerpc/platforms/powernv/pci-ioda.c:451:49: \
>   expected restricted __be32 const [usertype] *addr
>   arch/powerpc/platforms/powernv/pci-ioda.c:451:49: \
>   got unsigned int const [usertype] *
>   arch/powerpc/platforms/powernv/pci-ioda.c:452:50: \
>   warning: incorrect type in argument 1 (different base types)
>   arch/powerpc/platforms/powernv/pci-ioda.c:452:50: \
>   expected restricted __be32 const [usertype] *cell
>   arch/powerpc/platforms/powernv/pci-ioda.c:452:50: \
>   got unsigned int const [usertype] *
>   arch/powerpc/platforms/powernv/pci-ioda.c:454:35: \
>   warning: incorrect type in argument 1 (different base types)
>   arch/powerpc/platforms/powernv/pci-ioda.c:454:35: \
>   expected restricted __be32 const [usertype] *cell
>   arch/powerpc/platforms/powernv/pci-ioda.c:454:35: \
>   got unsigned int const [usertype] *[assigned] r
> 
> Fixes: 262af557dd75 ("powerpc/powernv: Enable M64 aperatus for PHB3")
> Signed-off-by: Gavin Shan <gwshan@linux.vnet.ibm.com>

Applied to powerpc next, thanks.

https://git.kernel.org/powerpc/c/0e7736c6b806b24c693367196a076c

cheers

^ permalink raw reply	[flat|nested] 17+ messages in thread

end of thread, other threads:[~2016-10-05  2:36 UTC | newest]

Thread overview: 17+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-08-02  4:10 [PATCH 0/9] powerpc/powernv: Fix sparse warnings for PCI files Gavin Shan
2016-08-02  4:10 ` [PATCH 1/9] powerpc/powernv: Pass CPU-endian PE number to opal_pci_eeh_freeze_clear() Gavin Shan
2016-08-02  4:32   ` Russell Currey
2016-10-05  2:36   ` [1/9] " Michael Ellerman
2016-08-02  4:10 ` [PATCH 2/9] powerpc/powernv: Use CPU-endian hub diag-data type in pnv_eeh_get_and_dump_hub_diag() Gavin Shan
2016-08-02  4:33   ` Russell Currey
2016-10-05  2:36   ` [2/9] " Michael Ellerman
2016-08-02  4:10 ` [PATCH 3/9] powerpc/powernv: Specify proper data type for PCI_SLOT_ID_PREFIX Gavin Shan
2016-10-05  2:36   ` [3/9] " Michael Ellerman
2016-08-02  4:10 ` [PATCH 4/9] powerpc/powernv: Use CPU-endian PEST in pnv_pci_dump_p7ioc_diag_data() Gavin Shan
2016-10-05  2:36   ` [4/9] " Michael Ellerman
2016-08-02  4:10 ` [PATCH 5/9] powerpc/powernv: Fix endian for return value from pnv_tce_get() Gavin Shan
2016-08-02  4:10 ` [PATCH 6/9] powerpc/powernv: Pass CPU-endian argument to xchg() in pnv_tce_xchg() Gavin Shan
2016-08-02  4:10 ` [PATCH 7/9] powerpc/powernv: Fix data type for @r in pnv_ioda_parse_m64_window() Gavin Shan
2016-10-05  2:36   ` [7/9] " Michael Ellerman
2016-08-02  4:10 ` [PATCH 8/9] powerpc/powernv: Fix data type of argument to __raw_{rm_, }writeq() Gavin Shan
2016-08-02  4:10 ` [PATCH 9/9] powerpc/powernv: Fix data type in pnv_pci_ioda2_table_do_free_pages() Gavin Shan

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).