Recently uart_port's iobase was changed to be an 'unsigned
long' to avoid chopping off the upper 32-bits of the
address on 64-bit CPUs. However, there are CPUs that are
32-bit but have a 64-bit address space. This changes
iobase to be 'resource_size_t' to accommodate those types
of systems. This also matches what is done for the mapbase
member of uart_port.
Signed-off-by: Josh Boyer <[email protected]>
---
diff --git a/include/linux/serial_core.h b/include/linux/serial_core.h
index e27f216..cb0185b 100644
--- a/include/linux/serial_core.h
+++ b/include/linux/serial_core.h
@@ -241,7 +241,7 @@ typedef unsigned int __bitwise__ upf_t;
struct uart_port {
spinlock_t lock; /* port lock */
- unsigned long iobase; /* in/out[bwl] */
+ resource_size_t iobase; /* in/out[bwl] */
unsigned char __iomem *membase; /* read/write[bwl] */
unsigned int irq; /* irq number */
unsigned int uartclk; /* base uart clock */
On Tue, 14 Oct 2008 12:26:21 -0400
Josh Boyer <[email protected]> wrote:
> Recently uart_port's iobase was changed to be an 'unsigned
> long' to avoid chopping off the upper 32-bits of the
> address on 64-bit CPUs. However, there are CPUs that are
> 32-bit but have a 64-bit address space. This changes
> iobase to be 'resource_size_t' to accommodate those types
> of systems. This also matches what is done for the mapbase
> member of uart_port.
>
> Signed-off-by: Josh Boyer <[email protected]>
>
> ---
>
> diff --git a/include/linux/serial_core.h b/include/linux/serial_core.h
> index e27f216..cb0185b 100644
> --- a/include/linux/serial_core.h
> +++ b/include/linux/serial_core.h
> @@ -241,7 +241,7 @@ typedef unsigned int __bitwise__ upf_t;
>
> struct uart_port {
> spinlock_t lock; /* port lock */
> - unsigned long iobase; /* in/out[bwl] */
> + resource_size_t iobase; /* in/out[bwl] */
> unsigned char __iomem *membase; /* read/write[bwl] */
> unsigned int irq; /* irq number */
> unsigned int uartclk; /* base uart clock */
This will of course require that all now-broken printk()s be unbroken.
I spot two in serial_core.c alone.
On Thu, 16 Oct 2008 14:46:45 -0700
Andrew Morton <[email protected]> wrote:
> On Tue, 14 Oct 2008 12:26:21 -0400
> Josh Boyer <[email protected]> wrote:
>
> > Recently uart_port's iobase was changed to be an 'unsigned
> > long' to avoid chopping off the upper 32-bits of the
> > address on 64-bit CPUs. However, there are CPUs that are
> > 32-bit but have a 64-bit address space. This changes
> > iobase to be 'resource_size_t' to accommodate those types
> > of systems. This also matches what is done for the mapbase
> > member of uart_port.
> >
> > Signed-off-by: Josh Boyer <[email protected]>
> >
> > ---
> >
> > diff --git a/include/linux/serial_core.h b/include/linux/serial_core.h
> > index e27f216..cb0185b 100644
> > --- a/include/linux/serial_core.h
> > +++ b/include/linux/serial_core.h
> > @@ -241,7 +241,7 @@ typedef unsigned int __bitwise__ upf_t;
> >
> > struct uart_port {
> > spinlock_t lock; /* port lock */
> > - unsigned long iobase; /* in/out[bwl] */
> > + resource_size_t iobase; /* in/out[bwl] */
> > unsigned char __iomem *membase; /* read/write[bwl] */
> > unsigned int irq; /* irq number */
> > unsigned int uartclk; /* base uart clock */
>
> This will of course require that all now-broken printk()s be unbroken.
> I spot two in serial_core.c alone.
Yes, I know that. There's a patch, or at least a discussion, floating
around on how to fix this with a %pX thing right? We can delay this
until that comes to fruition if you'd like.
josh
On Thu, 16 Oct 2008 19:44:37 -0400 Josh Boyer <[email protected]> wrote:
> On Thu, 16 Oct 2008 14:46:45 -0700
> Andrew Morton <[email protected]> wrote:
>
> > On Tue, 14 Oct 2008 12:26:21 -0400
> > Josh Boyer <[email protected]> wrote:
> >
> > > Recently uart_port's iobase was changed to be an 'unsigned
> > > long' to avoid chopping off the upper 32-bits of the
> > > address on 64-bit CPUs. However, there are CPUs that are
> > > 32-bit but have a 64-bit address space. This changes
> > > iobase to be 'resource_size_t' to accommodate those types
> > > of systems. This also matches what is done for the mapbase
> > > member of uart_port.
> > >
> > > Signed-off-by: Josh Boyer <[email protected]>
> > >
> > > ---
> > >
> > > diff --git a/include/linux/serial_core.h b/include/linux/serial_core.h
> > > index e27f216..cb0185b 100644
> > > --- a/include/linux/serial_core.h
> > > +++ b/include/linux/serial_core.h
> > > @@ -241,7 +241,7 @@ typedef unsigned int __bitwise__ upf_t;
> > >
> > > struct uart_port {
> > > spinlock_t lock; /* port lock */
> > > - unsigned long iobase; /* in/out[bwl] */
> > > + resource_size_t iobase; /* in/out[bwl] */
> > > unsigned char __iomem *membase; /* read/write[bwl] */
> > > unsigned int irq; /* irq number */
> > > unsigned int uartclk; /* base uart clock */
> >
> > This will of course require that all now-broken printk()s be unbroken.
> > I spot two in serial_core.c alone.
>
> Yes, I know that. There's a patch, or at least a discussion, floating
> around on how to fix this with a %pX thing right? We can delay this
> until that comes to fruition if you'd like.
>
Well. It just got converted from uint to ulong and we're still fixing
the bugs which that introduced.