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
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 <redacted>
Signed-off-by: Gavin Shan <redacted>
---
arch/powerpc/platforms/powernv/eeh-powernv.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
@@ -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;}elseif((*pe)->state&EEH_PE_ISOLATED||
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 <redacted>
---
arch/powerpc/include/asm/pnv-pci.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
@@ -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(+(unsignedlong*)pnv_tce(tbl,idx),+(__forceunsignedlong)cpu_to_be64(newtce)));*hpa=oldtce&~(TCE_PCI_READ|TCE_PCI_WRITE);*direction=iommu_tce_direction(oldtce);
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 <redacted>
---
arch/powerpc/platforms/powernv/pci-ioda.c | 20 +++++++++++++-------
1 file changed, 13 insertions(+), 7 deletions(-)
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 <redacted>
---
arch/powerpc/platforms/powernv/eeh-powernv.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
From: Russell Currey <hidden> Date: 2016-08-02 04:33:01
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 <redacted>
Signed-off-by: Gavin Shan <redacted>
---
From: Russell Currey <hidden> Date: 2016-08-02 04:33:06
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 <redacted>
---
From: Michael Ellerman <hidden> Date: 2016-10-05 02:36:26
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 <redacted>
Signed-off-by: Gavin Shan <redacted>
Reviewed-by: Russell Currey <redacted>
From: Michael Ellerman <hidden> Date: 2016-10-05 02:36:26
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 <redacted>
Reviewed-by: Russell Currey <redacted>
From: Michael Ellerman <hidden> Date: 2016-10-05 02:36:27
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 <redacted>