powerpc/srio: Fix the compile errors when building with 64bit

Submitted by Liu Gang on March 2, 2012, 7:08 a.m.

Details

Message ID 1330672127-22172-1-git-send-email-Gang.Liu@freescale.com
State Changes Requested
Delegated to: Kumar Gala
Headers show

Commit Message

Liu Gang March 2, 2012, 7:08 a.m.
For the file "arch/powerpc/sysdev/fsl_rmu.c", there will be some compile
errors while using the corenet64_smp_defconfig:

.../fsl_rmu.c:315: error: cast from pointer to integer of different size
.../fsl_rmu.c:320: error: cast to pointer from integer of different size
.../fsl_rmu.c:320: error: cast to pointer from integer of different size
.../fsl_rmu.c:320: error: cast to pointer from integer of different size
.../fsl_rmu.c:330: error: cast to pointer from integer of different size
.../fsl_rmu.c:332: error: cast to pointer from integer of different size
.../fsl_rmu.c:339: error: cast to pointer from integer of different size
.../fsl_rmu.c:340: error: cast to pointer from integer of different size
.../fsl_rmu.c:341: error: cast to pointer from integer of different size
.../fsl_rmu.c:348: error: cast to pointer from integer of different size
.../fsl_rmu.c:348: error: cast to pointer from integer of different size
.../fsl_rmu.c:348: error: cast to pointer from integer of different size
.../fsl_rmu.c:659: error: cast from pointer to integer of different size
.../fsl_rmu.c:659: error: format '%8.8x' expects type 'unsigned int',
		   but argument 5 has type 'size_t'
.../fsl_rmu.c:985: error: cast from pointer to integer of different size
.../fsl_rmu.c:997: error: cast to pointer from integer of different size

Rewrote the corresponding code with the support of 64bit building.

Signed-off-by: Liu Gang <Gang.Liu@freescale.com>
Signed-off-by: Shaohui Xie <Shaohui.Xie@freescale.com>
Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
---
 arch/powerpc/sysdev/fsl_rmu.c |   11 ++++++-----
 1 files changed, 6 insertions(+), 5 deletions(-)

Comments

David Laight March 2, 2012, 9:57 a.m.
> For the file "arch/powerpc/sysdev/fsl_rmu.c", there will be 
> some compile errors while using the corenet64_smp_defconfig:

I'm sure that replacing 'u32' with 'unsigned long'
is really the best thing to do here.
It looks to me as though they should be some pointer type.

	David
Paul Gortmaker March 2, 2012, 2:30 p.m.
On 12-03-02 02:08 AM, Liu Gang wrote:
> For the file "arch/powerpc/sysdev/fsl_rmu.c", there will be some compile
> errors while using the corenet64_smp_defconfig:
> 
> .../fsl_rmu.c:315: error: cast from pointer to integer of different size
> .../fsl_rmu.c:320: error: cast to pointer from integer of different size
> .../fsl_rmu.c:320: error: cast to pointer from integer of different size
> .../fsl_rmu.c:320: error: cast to pointer from integer of different size
> .../fsl_rmu.c:330: error: cast to pointer from integer of different size
> .../fsl_rmu.c:332: error: cast to pointer from integer of different size
> .../fsl_rmu.c:339: error: cast to pointer from integer of different size
> .../fsl_rmu.c:340: error: cast to pointer from integer of different size
> .../fsl_rmu.c:341: error: cast to pointer from integer of different size
> .../fsl_rmu.c:348: error: cast to pointer from integer of different size
> .../fsl_rmu.c:348: error: cast to pointer from integer of different size
> .../fsl_rmu.c:348: error: cast to pointer from integer of different size
> .../fsl_rmu.c:659: error: cast from pointer to integer of different size
> .../fsl_rmu.c:659: error: format '%8.8x' expects type 'unsigned int',
> 		   but argument 5 has type 'size_t'
> .../fsl_rmu.c:985: error: cast from pointer to integer of different size
> .../fsl_rmu.c:997: error: cast to pointer from integer of different size
> 
> Rewrote the corresponding code with the support of 64bit building.
> 
> Signed-off-by: Liu Gang <Gang.Liu@freescale.com>
> Signed-off-by: Shaohui Xie <Shaohui.Xie@freescale.com>
> Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>

Hi Liu,

You can't just go adding a "Signed-off-by:" line for me to a patch that
I've never seen before.  Perhaps you meant to add "Reported-by:" ?

Paul.
--

> ---
>  arch/powerpc/sysdev/fsl_rmu.c |   11 ++++++-----
>  1 files changed, 6 insertions(+), 5 deletions(-)
> 
> diff --git a/arch/powerpc/sysdev/fsl_rmu.c b/arch/powerpc/sysdev/fsl_rmu.c
> index 1548578..468011e 100644
> --- a/arch/powerpc/sysdev/fsl_rmu.c
> +++ b/arch/powerpc/sysdev/fsl_rmu.c
> @@ -311,8 +311,8 @@ fsl_rio_dbell_handler(int irq, void *dev_instance)
>  
>  	/* XXX Need to check/dispatch until queue empty */
>  	if (dsr & DOORBELL_DSR_DIQI) {
> -		u32 dmsg =
> -			(u32) fsl_dbell->dbell_ring.virt +
> +		unsigned long dmsg =
> +			(unsigned long) fsl_dbell->dbell_ring.virt +
>  			(in_be32(&fsl_dbell->dbell_regs->dqdpar) & 0xfff);
>  		struct rio_dbell *dbell;
>  		int found = 0;
> @@ -657,7 +657,8 @@ fsl_add_outb_message(struct rio_mport *mport, struct rio_dev *rdev, int mbox,
>  	int ret = 0;
>  
>  	pr_debug("RIO: fsl_add_outb_message(): destid %4.4x mbox %d buffer " \
> -		 "%8.8x len %8.8x\n", rdev->destid, mbox, (int)buffer, len);
> +		 "%8.8lx len %8.8zx\n", rdev->destid, mbox,
> +		(unsigned long)buffer, len);
>  	if ((len < 8) || (len > RIO_MAX_MSG_SIZE)) {
>  		ret = -EINVAL;
>  		goto out;
> @@ -972,7 +973,7 @@ out:
>  void *fsl_get_inb_message(struct rio_mport *mport, int mbox)
>  {
>  	struct fsl_rmu *rmu = GET_RMM_HANDLE(mport);
> -	u32 phys_buf, virt_buf;
> +	unsigned long phys_buf, virt_buf;
>  	void *buf = NULL;
>  	int buf_idx;
>  
> @@ -982,7 +983,7 @@ void *fsl_get_inb_message(struct rio_mport *mport, int mbox)
>  	if (phys_buf == in_be32(&rmu->msg_regs->ifqepar))
>  		goto out2;
>  
> -	virt_buf = (u32) rmu->msg_rx_ring.virt + (phys_buf
> +	virt_buf = (unsigned long) rmu->msg_rx_ring.virt + (phys_buf
>  						- rmu->msg_rx_ring.phys);
>  	buf_idx = (phys_buf - rmu->msg_rx_ring.phys) / RIO_MAX_MSG_SIZE;
>  	buf = rmu->msg_rx_ring.virt_buffer[buf_idx];
Kumar Gala March 2, 2012, 3:11 p.m.
On Mar 2, 2012, at 1:08 AM, Liu Gang wrote:

> For the file "arch/powerpc/sysdev/fsl_rmu.c", there will be some compile
> errors while using the corenet64_smp_defconfig:
> 
> .../fsl_rmu.c:315: error: cast from pointer to integer of different size
> .../fsl_rmu.c:320: error: cast to pointer from integer of different size
> .../fsl_rmu.c:320: error: cast to pointer from integer of different size
> .../fsl_rmu.c:320: error: cast to pointer from integer of different size
> .../fsl_rmu.c:330: error: cast to pointer from integer of different size
> .../fsl_rmu.c:332: error: cast to pointer from integer of different size
> .../fsl_rmu.c:339: error: cast to pointer from integer of different size
> .../fsl_rmu.c:340: error: cast to pointer from integer of different size
> .../fsl_rmu.c:341: error: cast to pointer from integer of different size
> .../fsl_rmu.c:348: error: cast to pointer from integer of different size
> .../fsl_rmu.c:348: error: cast to pointer from integer of different size
> .../fsl_rmu.c:348: error: cast to pointer from integer of different size
> .../fsl_rmu.c:659: error: cast from pointer to integer of different size
> .../fsl_rmu.c:659: error: format '%8.8x' expects type 'unsigned int',
> 		   but argument 5 has type 'size_t'
> .../fsl_rmu.c:985: error: cast from pointer to integer of different size
> .../fsl_rmu.c:997: error: cast to pointer from integer of different size
> 
> Rewrote the corresponding code with the support of 64bit building.
> 
> Signed-off-by: Liu Gang <Gang.Liu@freescale.com>
> Signed-off-by: Shaohui Xie <Shaohui.Xie@freescale.com>
> Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
> ---
> arch/powerpc/sysdev/fsl_rmu.c |   11 ++++++-----
> 1 files changed, 6 insertions(+), 5 deletions(-)
> 
> diff --git a/arch/powerpc/sysdev/fsl_rmu.c b/arch/powerpc/sysdev/fsl_rmu.c
> index 1548578..468011e 100644
> --- a/arch/powerpc/sysdev/fsl_rmu.c
> +++ b/arch/powerpc/sysdev/fsl_rmu.c
> @@ -311,8 +311,8 @@ fsl_rio_dbell_handler(int irq, void *dev_instance)
> 
> 	/* XXX Need to check/dispatch until queue empty */
> 	if (dsr & DOORBELL_DSR_DIQI) {
> -		u32 dmsg =
> -			(u32) fsl_dbell->dbell_ring.virt +
> +		unsigned long dmsg =
> +			(unsigned long) fsl_dbell->dbell_ring.virt +
> 			(in_be32(&fsl_dbell->dbell_regs->dqdpar) & 0xfff);
> 		struct rio_dbell *dbell;
> 		int found = 0;
> @@ -657,7 +657,8 @@ fsl_add_outb_message(struct rio_mport *mport, struct rio_dev *rdev, int mbox,
> 	int ret = 0;
> 
> 	pr_debug("RIO: fsl_add_outb_message(): destid %4.4x mbox %d buffer " \
> -		 "%8.8x len %8.8x\n", rdev->destid, mbox, (int)buffer, len);
> +		 "%8.8lx len %8.8zx\n", rdev->destid, mbox,
> +		(unsigned long)buffer, len);
> 	if ((len < 8) || (len > RIO_MAX_MSG_SIZE)) {
> 		ret = -EINVAL;
> 		goto out;

For this case it seems as if some cast should be added to DBELL_* macros

> @@ -972,7 +973,7 @@ out:
> void *fsl_get_inb_message(struct rio_mport *mport, int mbox)
> {
> 	struct fsl_rmu *rmu = GET_RMM_HANDLE(mport);
> -	u32 phys_buf, virt_buf;
> +	unsigned long phys_buf, virt_buf;

Do you really want to change phys_buf to an 'unsigned long'?

Should virt_buf really be void * here?

> 	void *buf = NULL;
> 	int buf_idx;
> 
> @@ -982,7 +983,7 @@ void *fsl_get_inb_message(struct rio_mport *mport, int mbox)
> 	if (phys_buf == in_be32(&rmu->msg_regs->ifqepar))
> 		goto out2;
> 
> -	virt_buf = (u32) rmu->msg_rx_ring.virt + (phys_buf
> +	virt_buf = (unsigned long) rmu->msg_rx_ring.virt + (phys_buf
> 						- rmu->msg_rx_ring.phys);
> 	buf_idx = (phys_buf - rmu->msg_rx_ring.phys) / RIO_MAX_MSG_SIZE;
> 	buf = rmu->msg_rx_ring.virt_buffer[buf_idx];

The memcpy later could remove a cast if you make virt_buf a void *.

> -- 
> 1.7.0.4
> 
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at  http://www.tux.org/lkml/
Liu Gang March 5, 2012, 2:52 a.m.
Hi, Paul,

On Fri, 2012-03-02 at 09:30 -0500, Paul Gortmaker wrote:
> > Signed-off-by: Liu Gang <Gang.Liu@freescale.com>
> > Signed-off-by: Shaohui Xie <Shaohui.Xie@freescale.com>
> > Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
> 
> Hi Liu,
> 
> You can't just go adding a "Signed-off-by:" line for me to a patch that
> I've never seen before.  Perhaps you meant to add "Reported-by:" ?
> 
> Paul.

I'm sorry for this. I added "Signed-off-by" for you because I wanted to
thank you found this issue. I'll add "Reported-by:" if needed in the
future.

Best Regards,

Liu Gang
Liu Gang March 5, 2012, 2:20 p.m.
Hi, Kumar,

On Fri, 2012-03-02 at 09:11 -0600, Kumar Gala wrote:
> > diff --git a/arch/powerpc/sysdev/fsl_rmu.c b/arch/powerpc/sysdev/fsl_rmu.c
> > index 1548578..468011e 100644
> > --- a/arch/powerpc/sysdev/fsl_rmu.c
> > +++ b/arch/powerpc/sysdev/fsl_rmu.c
> > @@ -311,8 +311,8 @@ fsl_rio_dbell_handler(int irq, void *dev_instance)
> > 
> > 	/* XXX Need to check/dispatch until queue empty */
> > 	if (dsr & DOORBELL_DSR_DIQI) {
> > -		u32 dmsg =
> > -			(u32) fsl_dbell->dbell_ring.virt +
> > +		unsigned long dmsg =
> > +			(unsigned long) fsl_dbell->dbell_ring.virt +
> > 			(in_be32(&fsl_dbell->dbell_regs->dqdpar) & 0xfff);
> > 		struct rio_dbell *dbell;
> > 		int found = 0;
> > @@ -657,7 +657,8 @@ fsl_add_outb_message(struct rio_mport *mport, struct rio_dev *rdev, int mbox,
> > 	int ret = 0;
> > 
> > 	pr_debug("RIO: fsl_add_outb_message(): destid %4.4x mbox %d buffer " \
> > -		 "%8.8x len %8.8x\n", rdev->destid, mbox, (int)buffer, len);
> > +		 "%8.8lx len %8.8zx\n", rdev->destid, mbox,
> > +		(unsigned long)buffer, len);
> > 	if ((len < 8) || (len > RIO_MAX_MSG_SIZE)) {
> > 		ret = -EINVAL;
> > 		goto out;
> 
> For this case it seems as if some cast should be added to DBELL_* macros

Do you mean the DBELL_* macro should be added the cast "u16" and like
this:
#define DBELL_SID(x)    (u16)(*(u16 *)(x + DOORBELL_SID_OFFSET))

> > @@ -972,7 +973,7 @@ out:
> > void *fsl_get_inb_message(struct rio_mport *mport, int mbox)
> > {
> > 	struct fsl_rmu *rmu = GET_RMM_HANDLE(mport);
> > -	u32 phys_buf, virt_buf;
> > +	unsigned long phys_buf, virt_buf;
> 
> Do you really want to change phys_buf to an 'unsigned long'?
> 
> Should virt_buf really be void * here?

I think you are right, the phys_buf should not be changed to 'unsigned
long' and the virt_buf should be void *. I'll correct this in next
version.

> > @@ -982,7 +983,7 @@ void *fsl_get_inb_message(struct rio_mport *mport, int mbox)
> 
> The memcpy later could remove a cast if you make virt_buf a void *.

Thanks a lot, will remove.

Best Regards,

Liu Gang
Kumar Gala March 6, 2012, 5:46 p.m.
On Mar 5, 2012, at 8:20 AM, Liu Gang wrote:

> Hi, Kumar,
> 
> On Fri, 2012-03-02 at 09:11 -0600, Kumar Gala wrote:
>>> diff --git a/arch/powerpc/sysdev/fsl_rmu.c b/arch/powerpc/sysdev/fsl_rmu.c
>>> index 1548578..468011e 100644
>>> --- a/arch/powerpc/sysdev/fsl_rmu.c
>>> +++ b/arch/powerpc/sysdev/fsl_rmu.c
>>> @@ -311,8 +311,8 @@ fsl_rio_dbell_handler(int irq, void *dev_instance)
>>> 
>>> 	/* XXX Need to check/dispatch until queue empty */
>>> 	if (dsr & DOORBELL_DSR_DIQI) {
>>> -		u32 dmsg =
>>> -			(u32) fsl_dbell->dbell_ring.virt +
>>> +		unsigned long dmsg =
>>> +			(unsigned long) fsl_dbell->dbell_ring.virt +
>>> 			(in_be32(&fsl_dbell->dbell_regs->dqdpar) & 0xfff);

How about a struct instead:

struct rmu_dmsg {
	u16	dummy;
	u16	tid;
	u16	sid;
	u16	info;
};

	struct rmu_dmsg *dmsg = fsl_dbell->dbell_ring.virt + (in_be32(&fsl_dbell->dbell_regs->dqdpar) & 0xfff);

Than you can git rid of the DBELL_* macros.


- k
Liu Gang March 7, 2012, 12:52 p.m.
Hi, Kumar,

On Tue, 2012-03-06 at 11:46 -0600, Kumar Gala wrote:
> How about a struct instead:
> 
> struct rmu_dmsg {
> 	u16	dummy;
> 	u16	tid;
> 	u16	sid;
> 	u16	info;
> };
> 
> 	struct rmu_dmsg *dmsg = fsl_dbell->dbell_ring.virt + (in_be32(&fsl_dbell->dbell_regs->dqdpar) & 0xfff);
> 
> Than you can git rid of the DBELL_* macros.

Yes, this can really git rid of the DBELL_* macros and some other code.
I'll update the patch based on your comments.
Thanks a lot.

Liu Gang

Patch hide | download patch | download mbox

diff --git a/arch/powerpc/sysdev/fsl_rmu.c b/arch/powerpc/sysdev/fsl_rmu.c
index 1548578..468011e 100644
--- a/arch/powerpc/sysdev/fsl_rmu.c
+++ b/arch/powerpc/sysdev/fsl_rmu.c
@@ -311,8 +311,8 @@  fsl_rio_dbell_handler(int irq, void *dev_instance)
 
 	/* XXX Need to check/dispatch until queue empty */
 	if (dsr & DOORBELL_DSR_DIQI) {
-		u32 dmsg =
-			(u32) fsl_dbell->dbell_ring.virt +
+		unsigned long dmsg =
+			(unsigned long) fsl_dbell->dbell_ring.virt +
 			(in_be32(&fsl_dbell->dbell_regs->dqdpar) & 0xfff);
 		struct rio_dbell *dbell;
 		int found = 0;
@@ -657,7 +657,8 @@  fsl_add_outb_message(struct rio_mport *mport, struct rio_dev *rdev, int mbox,
 	int ret = 0;
 
 	pr_debug("RIO: fsl_add_outb_message(): destid %4.4x mbox %d buffer " \
-		 "%8.8x len %8.8x\n", rdev->destid, mbox, (int)buffer, len);
+		 "%8.8lx len %8.8zx\n", rdev->destid, mbox,
+		(unsigned long)buffer, len);
 	if ((len < 8) || (len > RIO_MAX_MSG_SIZE)) {
 		ret = -EINVAL;
 		goto out;
@@ -972,7 +973,7 @@  out:
 void *fsl_get_inb_message(struct rio_mport *mport, int mbox)
 {
 	struct fsl_rmu *rmu = GET_RMM_HANDLE(mport);
-	u32 phys_buf, virt_buf;
+	unsigned long phys_buf, virt_buf;
 	void *buf = NULL;
 	int buf_idx;
 
@@ -982,7 +983,7 @@  void *fsl_get_inb_message(struct rio_mport *mport, int mbox)
 	if (phys_buf == in_be32(&rmu->msg_regs->ifqepar))
 		goto out2;
 
-	virt_buf = (u32) rmu->msg_rx_ring.virt + (phys_buf
+	virt_buf = (unsigned long) rmu->msg_rx_ring.virt + (phys_buf
 						- rmu->msg_rx_ring.phys);
 	buf_idx = (phys_buf - rmu->msg_rx_ring.phys) / RIO_MAX_MSG_SIZE;
 	buf = rmu->msg_rx_ring.virt_buffer[buf_idx];