2005-09-15 19:27:08

by Al Viro

[permalink] [raw]
Subject: [PATCH] epca iomem annotations + several missing readw()

[originally sent to Alan, he had no problems with it]
* iomem pointers marked as such
* several direct dereferencings of such pointers replaced with
read[bw]().
Signed-off-by: Al Viro <[email protected]>
----
diff -urN RC13-git8-base/drivers/char/epca.c current/drivers/char/epca.c
--- RC13-git8-base/drivers/char/epca.c 2005-09-08 10:17:39.000000000 -0400
+++ current/drivers/char/epca.c 2005-09-08 23:53:33.000000000 -0400
@@ -534,7 +534,7 @@

unsigned long flags;
struct tty_struct *tty;
- struct board_chan *bc;
+ struct board_chan __iomem *bc;

if (!(ch->asyncflags & ASYNC_INITIALIZED))
return;
@@ -618,7 +618,7 @@
struct channel *ch;
unsigned long flags;
int remain;
- struct board_chan *bc;
+ struct board_chan __iomem *bc;

/* ----------------------------------------------------------------
pc_write is primarily called directly by the kernel routine
@@ -685,7 +685,7 @@
------------------------------------------------------------------- */

dataLen = min(bytesAvailable, dataLen);
- memcpy(ch->txptr + head, buf, dataLen);
+ memcpy_toio(ch->txptr + head, buf, dataLen);
buf += dataLen;
head += dataLen;
amountCopied += dataLen;
@@ -726,7 +726,7 @@
struct channel *ch;
unsigned long flags;
unsigned int head, tail;
- struct board_chan *bc;
+ struct board_chan __iomem *bc;

remain = 0;

@@ -773,7 +773,7 @@
int remain;
unsigned long flags;
struct channel *ch;
- struct board_chan *bc;
+ struct board_chan __iomem *bc;

/* ---------------------------------------------------------
verifyChannel returns the channel from the tty struct
@@ -830,7 +830,7 @@
unsigned int tail;
unsigned long flags;
struct channel *ch;
- struct board_chan *bc;
+ struct board_chan __iomem *bc;
/* ---------------------------------------------------------
verifyChannel returns the channel from the tty struct
if it is valid. This serves as a sanity check.
@@ -976,7 +976,7 @@
struct channel *ch;
unsigned long flags;
int line, retval, boardnum;
- struct board_chan *bc;
+ struct board_chan __iomem *bc;
unsigned int head;

line = tty->index;
@@ -1041,7 +1041,7 @@
ch->statusflags = 0;

/* Save boards current modem status */
- ch->imodem = bc->mstat;
+ ch->imodem = readb(&bc->mstat);

/* ----------------------------------------------------------------
Set receive head and tail ptrs to each other. This indicates
@@ -1399,10 +1399,10 @@
{ /* Begin post_fep_init */

int i;
- unsigned char *memaddr;
- struct global_data *gd;
+ unsigned char __iomem *memaddr;
+ struct global_data __iomem *gd;
struct board_info *bd;
- struct board_chan *bc;
+ struct board_chan __iomem *bc;
struct channel *ch;
int shrinkmem = 0, lowwater ;

@@ -1461,7 +1461,7 @@
8 and 64 of these structures.
-------------------------------------------------------------------- */

- bc = (struct board_chan *)(memaddr + CHANSTRUCT);
+ bc = (struct board_chan __iomem *)(memaddr + CHANSTRUCT);

/* -------------------------------------------------------------------
The below assignment will set gd to point at the BEGINING of
@@ -1470,7 +1470,7 @@
pointer begins at 0xd10.
---------------------------------------------------------------------- */

- gd = (struct global_data *)(memaddr + GLOBAL);
+ gd = (struct global_data __iomem *)(memaddr + GLOBAL);

/* --------------------------------------------------------------------
XEPORTS (address 0xc22) points at the number of channels the
@@ -1493,6 +1493,7 @@

for (i = 0; i < bd->numports; i++, ch++, bc++) { /* Begin for each port */
unsigned long flags;
+ u16 tseg, rseg;

ch->brdchan = bc;
ch->mailbox = gd;
@@ -1553,50 +1554,53 @@
shrinkmem = 0;
}

+ tseg = readw(&bc->tseg);
+ rseg = readw(&bc->rseg);
+
switch (bd->type) {

case PCIXEM:
case PCIXRJ:
case PCIXR:
/* Cover all the 2MEG cards */
- ch->txptr = memaddr + (((bc->tseg) << 4) & 0x1fffff);
- ch->rxptr = memaddr + (((bc->rseg) << 4) & 0x1fffff);
- ch->txwin = FEPWIN | ((bc->tseg) >> 11);
- ch->rxwin = FEPWIN | ((bc->rseg) >> 11);
+ ch->txptr = memaddr + ((tseg << 4) & 0x1fffff);
+ ch->rxptr = memaddr + ((rseg << 4) & 0x1fffff);
+ ch->txwin = FEPWIN | (tseg >> 11);
+ ch->rxwin = FEPWIN | (rseg >> 11);
break;

case PCXEM:
case EISAXEM:
/* Cover all the 32K windowed cards */
/* Mask equal to window size - 1 */
- ch->txptr = memaddr + (((bc->tseg) << 4) & 0x7fff);
- ch->rxptr = memaddr + (((bc->rseg) << 4) & 0x7fff);
- ch->txwin = FEPWIN | ((bc->tseg) >> 11);
- ch->rxwin = FEPWIN | ((bc->rseg) >> 11);
+ ch->txptr = memaddr + ((tseg << 4) & 0x7fff);
+ ch->rxptr = memaddr + ((rseg << 4) & 0x7fff);
+ ch->txwin = FEPWIN | (tseg >> 11);
+ ch->rxwin = FEPWIN | (rseg >> 11);
break;

case PCXEVE:
case PCXE:
- ch->txptr = memaddr + (((bc->tseg - bd->memory_seg) << 4) & 0x1fff);
- ch->txwin = FEPWIN | ((bc->tseg - bd->memory_seg) >> 9);
- ch->rxptr = memaddr + (((bc->rseg - bd->memory_seg) << 4) & 0x1fff);
- ch->rxwin = FEPWIN | ((bc->rseg - bd->memory_seg) >>9 );
+ ch->txptr = memaddr + (((tseg - bd->memory_seg) << 4) & 0x1fff);
+ ch->txwin = FEPWIN | ((tseg - bd->memory_seg) >> 9);
+ ch->rxptr = memaddr + (((rseg - bd->memory_seg) << 4) & 0x1fff);
+ ch->rxwin = FEPWIN | ((rseg - bd->memory_seg) >>9 );
break;

case PCXI:
case PC64XE:
- ch->txptr = memaddr + ((bc->tseg - bd->memory_seg) << 4);
- ch->rxptr = memaddr + ((bc->rseg - bd->memory_seg) << 4);
+ ch->txptr = memaddr + ((tseg - bd->memory_seg) << 4);
+ ch->rxptr = memaddr + ((rseg - bd->memory_seg) << 4);
ch->txwin = ch->rxwin = 0;
break;

} /* End switch bd->type */

ch->txbufhead = 0;
- ch->txbufsize = bc->tmax + 1;
+ ch->txbufsize = readw(&bc->tmax) + 1;

ch->rxbufhead = 0;
- ch->rxbufsize = bc->rmax + 1;
+ ch->rxbufsize = readw(&bc->rmax) + 1;

lowwater = ch->txbufsize >= 2000 ? 1024 : (ch->txbufsize / 2);

@@ -1718,11 +1722,11 @@
static void doevent(int crd)
{ /* Begin doevent */

- void *eventbuf;
+ void __iomem *eventbuf;
struct channel *ch, *chan0;
static struct tty_struct *tty;
struct board_info *bd;
- struct board_chan *bc;
+ struct board_chan __iomem *bc;
unsigned int tail, head;
int event, channel;
int mstat, lstat;
@@ -1817,7 +1821,7 @@
static void fepcmd(struct channel *ch, int cmd, int word_or_byte,
int byte2, int ncmds, int bytecmd)
{ /* Begin fepcmd */
- unchar *memaddr;
+ unchar __iomem *memaddr;
unsigned int head, cmdTail, cmdStart, cmdMax;
long count;
int n;
@@ -2000,7 +2004,7 @@

unsigned int cmdHead;
struct termios *ts;
- struct board_chan *bc;
+ struct board_chan __iomem *bc;
unsigned mval, hflow, cflag, iflag;

bc = ch->brdchan;
@@ -2010,7 +2014,7 @@
ts = tty->termios;
if ((ts->c_cflag & CBAUD) == 0) { /* Begin CBAUD detected */
cmdHead = readw(&bc->rin);
- bc->rout = cmdHead;
+ writew(cmdHead, &bc->rout);
cmdHead = readw(&bc->tin);
/* Changing baud in mid-stream transmission can be wonderful */
/* ---------------------------------------------------------------
@@ -2116,7 +2120,7 @@
unchar *rptr;
struct termios *ts = NULL;
struct tty_struct *tty;
- struct board_chan *bc;
+ struct board_chan __iomem *bc;
int dataToRead, wrapgap, bytesAvailable;
unsigned int tail, head;
unsigned int wrapmask;
@@ -2154,7 +2158,7 @@
--------------------------------------------------------------------- */

if (!tty || !ts || !(ts->c_cflag & CREAD)) {
- bc->rout = head;
+ writew(head, &bc->rout);
return;
}

@@ -2270,7 +2274,7 @@
static int pc_tiocmget(struct tty_struct *tty, struct file *file)
{
struct channel *ch = (struct channel *) tty->driver_data;
- struct board_chan *bc;
+ struct board_chan __iomem *bc;
unsigned int mstat, mflag = 0;
unsigned long flags;

@@ -2351,7 +2355,7 @@
unsigned long flags;
unsigned int mflag, mstat;
unsigned char startc, stopc;
- struct board_chan *bc;
+ struct board_chan __iomem *bc;
struct channel *ch = (struct channel *) tty->driver_data;
void __user *argp = (void __user *)arg;

@@ -2633,7 +2637,7 @@
spin_lock_irqsave(&epca_lock, flags);
/* Just in case output was resumed because of a change in Digi-flow */
if (ch->statusflags & TXSTOPPED) { /* Begin transmit resume requested */
- struct board_chan *bc;
+ struct board_chan __iomem *bc;
globalwinon(ch);
bc = ch->brdchan;
if (ch->statusflags & LOWWAIT)
@@ -2727,7 +2731,7 @@
static void setup_empty_event(struct tty_struct *tty, struct channel *ch)
{ /* Begin setup_empty_event */

- struct board_chan *bc = ch->brdchan;
+ struct board_chan __iomem *bc = ch->brdchan;

globalwinon(ch);
ch->statusflags |= EMPTYWAIT;
diff -urN RC13-git8-base/drivers/char/epca.h current/drivers/char/epca.h
--- RC13-git8-base/drivers/char/epca.h 2005-09-08 10:17:39.000000000 -0400
+++ current/drivers/char/epca.h 2005-09-08 23:53:33.000000000 -0400
@@ -128,17 +128,17 @@
unsigned long c_cflag;
unsigned long c_lflag;
unsigned long c_oflag;
- unsigned char *txptr;
- unsigned char *rxptr;
+ unsigned char __iomem *txptr;
+ unsigned char __iomem *rxptr;
unsigned char *tmp_buf;
struct board_info *board;
- struct board_chan *brdchan;
+ struct board_chan __iomem *brdchan;
struct digi_struct digiext;
struct tty_struct *tty;
wait_queue_head_t open_wait;
wait_queue_head_t close_wait;
struct work_struct tqueue;
- struct global_data *mailbox;
+ struct global_data __iomem *mailbox;
};

struct board_info
@@ -150,7 +150,7 @@
unsigned long port;
unsigned long membase;
unsigned char __iomem *re_map_port;
- unsigned char *re_map_membase;
+ unsigned char __iomem *re_map_membase;
unsigned long memory_seg;
void ( * memwinon ) (struct board_info *, unsigned int) ;
void ( * memwinoff ) (struct board_info *, unsigned int) ;

----- End forwarded message -----


2005-09-15 21:24:10

by Linus Torvalds

[permalink] [raw]
Subject: Re: [PATCH] epca iomem annotations + several missing readw()


Gaah.

On Thu, 15 Sep 2005, Al Viro wrote:
> { /* Begin post_fep_init */
>
> int i;
> - unsigned char *memaddr;
> - struct global_data *gd;
> + unsigned char __iomem *memaddr;
> + struct global_data __iomem *gd;

Please don't use "[unsigned] char __iomem *".

Why? Two reasons:

- it's pointless. You can't dereference it anyway, and unlike a struct or
an array, it has no addressing capabilities that "void __iomem *"
doesn't have (gcc extension that the kernel uses widely).

Dereferencing needs "read/write[bwl]()" anyway.

- it results in horrors like this:

> - bc = (struct board_chan *)(memaddr + CHANSTRUCT);
> + bc = (struct board_chan __iomem *)(memaddr + CHANSTRUCT);

which could instead be nicely written as

bc = memaddr + CHANSTRUCT;

if "memaddr" were just a "void __iomem *".

I bet the patch would look like a nice cleanup if you did that. Hint,
hint.

Linus

2005-09-15 21:38:38

by Al Viro

[permalink] [raw]
Subject: Re: [PATCH] epca iomem annotations + several missing readw()

On Thu, Sep 15, 2005 at 02:23:53PM -0700, Linus Torvalds wrote:
>
> Gaah.
>
> On Thu, 15 Sep 2005, Al Viro wrote:
> > { /* Begin post_fep_init */
> >
> > int i;
> > - unsigned char *memaddr;
> > - struct global_data *gd;
> > + unsigned char __iomem *memaddr;
> > + struct global_data __iomem *gd;
>
> Please don't use "[unsigned] char __iomem *".

Not a problem, I simply wanted to keep __iomem stuff apart from driver
cleanups.

> Why? Two reasons:

[obvious - we are in full agreement here]

> I bet the patch would look like a nice cleanup if you did that. Hint,
> hint.

OK... I'd rather do that as an incremental, to keep unrelated changes
separate, but I can merge them if you prefer it that way.

2005-09-15 21:53:30

by Al Viro

[permalink] [raw]
Subject: Re: [PATCH] epca iomem annotations + several missing readw()

On Thu, Sep 15, 2005 at 10:38:38PM +0100, Al Viro wrote:
> Not a problem, I simply wanted to keep __iomem stuff apart from driver
> cleanups.
>
> > Why? Two reasons:
>
> [obvious - we are in full agreement here]
>
> > I bet the patch would look like a nice cleanup if you did that. Hint,
> > hint.
>
> OK... I'd rather do that as an incremental, to keep unrelated changes
> separate, but I can merge them if you prefer it that way.

Here it is... Note that I've kept ->rxptr and ->txptr iomem pointers to
char - that's what they really are and for these suckers we do not get
any casts, etc.

Signed-off-by: Al Viro <[email protected]>
----
diff -urN RC14-rc1-lne390/drivers/char/epca.c RC14-rc1-epca/drivers/char/epca.c
--- RC14-rc1-lne390/drivers/char/epca.c 2005-09-08 10:07:30.000000000 -0400
+++ RC14-rc1-epca/drivers/char/epca.c 2005-09-15 17:49:04.000000000 -0400
@@ -534,7 +534,7 @@

unsigned long flags;
struct tty_struct *tty;
- struct board_chan *bc;
+ struct board_chan __iomem *bc;

if (!(ch->asyncflags & ASYNC_INITIALIZED))
return;
@@ -618,7 +618,7 @@
struct channel *ch;
unsigned long flags;
int remain;
- struct board_chan *bc;
+ struct board_chan __iomem *bc;

/* ----------------------------------------------------------------
pc_write is primarily called directly by the kernel routine
@@ -685,7 +685,7 @@
------------------------------------------------------------------- */

dataLen = min(bytesAvailable, dataLen);
- memcpy(ch->txptr + head, buf, dataLen);
+ memcpy_toio(ch->txptr + head, buf, dataLen);
buf += dataLen;
head += dataLen;
amountCopied += dataLen;
@@ -726,7 +726,7 @@
struct channel *ch;
unsigned long flags;
unsigned int head, tail;
- struct board_chan *bc;
+ struct board_chan __iomem *bc;

remain = 0;

@@ -773,7 +773,7 @@
int remain;
unsigned long flags;
struct channel *ch;
- struct board_chan *bc;
+ struct board_chan __iomem *bc;

/* ---------------------------------------------------------
verifyChannel returns the channel from the tty struct
@@ -830,7 +830,7 @@
unsigned int tail;
unsigned long flags;
struct channel *ch;
- struct board_chan *bc;
+ struct board_chan __iomem *bc;
/* ---------------------------------------------------------
verifyChannel returns the channel from the tty struct
if it is valid. This serves as a sanity check.
@@ -976,7 +976,7 @@
struct channel *ch;
unsigned long flags;
int line, retval, boardnum;
- struct board_chan *bc;
+ struct board_chan __iomem *bc;
unsigned int head;

line = tty->index;
@@ -1041,7 +1041,7 @@
ch->statusflags = 0;

/* Save boards current modem status */
- ch->imodem = bc->mstat;
+ ch->imodem = readb(&bc->mstat);

/* ----------------------------------------------------------------
Set receive head and tail ptrs to each other. This indicates
@@ -1399,10 +1399,10 @@
{ /* Begin post_fep_init */

int i;
- unsigned char *memaddr;
- struct global_data *gd;
+ void __iomem *memaddr;
+ struct global_data __iomem *gd;
struct board_info *bd;
- struct board_chan *bc;
+ struct board_chan __iomem *bc;
struct channel *ch;
int shrinkmem = 0, lowwater ;

@@ -1461,7 +1461,7 @@
8 and 64 of these structures.
-------------------------------------------------------------------- */

- bc = (struct board_chan *)(memaddr + CHANSTRUCT);
+ bc = memaddr + CHANSTRUCT;

/* -------------------------------------------------------------------
The below assignment will set gd to point at the BEGINING of
@@ -1470,7 +1470,7 @@
pointer begins at 0xd10.
---------------------------------------------------------------------- */

- gd = (struct global_data *)(memaddr + GLOBAL);
+ gd = memaddr + GLOBAL;

/* --------------------------------------------------------------------
XEPORTS (address 0xc22) points at the number of channels the
@@ -1493,6 +1493,7 @@

for (i = 0; i < bd->numports; i++, ch++, bc++) { /* Begin for each port */
unsigned long flags;
+ u16 tseg, rseg;

ch->brdchan = bc;
ch->mailbox = gd;
@@ -1553,50 +1554,53 @@
shrinkmem = 0;
}

+ tseg = readw(&bc->tseg);
+ rseg = readw(&bc->rseg);
+
switch (bd->type) {

case PCIXEM:
case PCIXRJ:
case PCIXR:
/* Cover all the 2MEG cards */
- ch->txptr = memaddr + (((bc->tseg) << 4) & 0x1fffff);
- ch->rxptr = memaddr + (((bc->rseg) << 4) & 0x1fffff);
- ch->txwin = FEPWIN | ((bc->tseg) >> 11);
- ch->rxwin = FEPWIN | ((bc->rseg) >> 11);
+ ch->txptr = memaddr + ((tseg << 4) & 0x1fffff);
+ ch->rxptr = memaddr + ((rseg << 4) & 0x1fffff);
+ ch->txwin = FEPWIN | (tseg >> 11);
+ ch->rxwin = FEPWIN | (rseg >> 11);
break;

case PCXEM:
case EISAXEM:
/* Cover all the 32K windowed cards */
/* Mask equal to window size - 1 */
- ch->txptr = memaddr + (((bc->tseg) << 4) & 0x7fff);
- ch->rxptr = memaddr + (((bc->rseg) << 4) & 0x7fff);
- ch->txwin = FEPWIN | ((bc->tseg) >> 11);
- ch->rxwin = FEPWIN | ((bc->rseg) >> 11);
+ ch->txptr = memaddr + ((tseg << 4) & 0x7fff);
+ ch->rxptr = memaddr + ((rseg << 4) & 0x7fff);
+ ch->txwin = FEPWIN | (tseg >> 11);
+ ch->rxwin = FEPWIN | (rseg >> 11);
break;

case PCXEVE:
case PCXE:
- ch->txptr = memaddr + (((bc->tseg - bd->memory_seg) << 4) & 0x1fff);
- ch->txwin = FEPWIN | ((bc->tseg - bd->memory_seg) >> 9);
- ch->rxptr = memaddr + (((bc->rseg - bd->memory_seg) << 4) & 0x1fff);
- ch->rxwin = FEPWIN | ((bc->rseg - bd->memory_seg) >>9 );
+ ch->txptr = memaddr + (((tseg - bd->memory_seg) << 4) & 0x1fff);
+ ch->txwin = FEPWIN | ((tseg - bd->memory_seg) >> 9);
+ ch->rxptr = memaddr + (((rseg - bd->memory_seg) << 4) & 0x1fff);
+ ch->rxwin = FEPWIN | ((rseg - bd->memory_seg) >>9 );
break;

case PCXI:
case PC64XE:
- ch->txptr = memaddr + ((bc->tseg - bd->memory_seg) << 4);
- ch->rxptr = memaddr + ((bc->rseg - bd->memory_seg) << 4);
+ ch->txptr = memaddr + ((tseg - bd->memory_seg) << 4);
+ ch->rxptr = memaddr + ((rseg - bd->memory_seg) << 4);
ch->txwin = ch->rxwin = 0;
break;

} /* End switch bd->type */

ch->txbufhead = 0;
- ch->txbufsize = bc->tmax + 1;
+ ch->txbufsize = readw(&bc->tmax) + 1;

ch->rxbufhead = 0;
- ch->rxbufsize = bc->rmax + 1;
+ ch->rxbufsize = readw(&bc->rmax) + 1;

lowwater = ch->txbufsize >= 2000 ? 1024 : (ch->txbufsize / 2);

@@ -1718,11 +1722,11 @@
static void doevent(int crd)
{ /* Begin doevent */

- void *eventbuf;
+ void __iomem *eventbuf;
struct channel *ch, *chan0;
static struct tty_struct *tty;
struct board_info *bd;
- struct board_chan *bc;
+ struct board_chan __iomem *bc;
unsigned int tail, head;
int event, channel;
int mstat, lstat;
@@ -1817,7 +1821,7 @@
static void fepcmd(struct channel *ch, int cmd, int word_or_byte,
int byte2, int ncmds, int bytecmd)
{ /* Begin fepcmd */
- unchar *memaddr;
+ unchar __iomem *memaddr;
unsigned int head, cmdTail, cmdStart, cmdMax;
long count;
int n;
@@ -2000,7 +2004,7 @@

unsigned int cmdHead;
struct termios *ts;
- struct board_chan *bc;
+ struct board_chan __iomem *bc;
unsigned mval, hflow, cflag, iflag;

bc = ch->brdchan;
@@ -2010,7 +2014,7 @@
ts = tty->termios;
if ((ts->c_cflag & CBAUD) == 0) { /* Begin CBAUD detected */
cmdHead = readw(&bc->rin);
- bc->rout = cmdHead;
+ writew(cmdHead, &bc->rout);
cmdHead = readw(&bc->tin);
/* Changing baud in mid-stream transmission can be wonderful */
/* ---------------------------------------------------------------
@@ -2116,7 +2120,7 @@
unchar *rptr;
struct termios *ts = NULL;
struct tty_struct *tty;
- struct board_chan *bc;
+ struct board_chan __iomem *bc;
int dataToRead, wrapgap, bytesAvailable;
unsigned int tail, head;
unsigned int wrapmask;
@@ -2154,7 +2158,7 @@
--------------------------------------------------------------------- */

if (!tty || !ts || !(ts->c_cflag & CREAD)) {
- bc->rout = head;
+ writew(head, &bc->rout);
return;
}

@@ -2270,7 +2274,7 @@
static int pc_tiocmget(struct tty_struct *tty, struct file *file)
{
struct channel *ch = (struct channel *) tty->driver_data;
- struct board_chan *bc;
+ struct board_chan __iomem *bc;
unsigned int mstat, mflag = 0;
unsigned long flags;

@@ -2351,7 +2355,7 @@
unsigned long flags;
unsigned int mflag, mstat;
unsigned char startc, stopc;
- struct board_chan *bc;
+ struct board_chan __iomem *bc;
struct channel *ch = (struct channel *) tty->driver_data;
void __user *argp = (void __user *)arg;

@@ -2633,7 +2637,7 @@
spin_lock_irqsave(&epca_lock, flags);
/* Just in case output was resumed because of a change in Digi-flow */
if (ch->statusflags & TXSTOPPED) { /* Begin transmit resume requested */
- struct board_chan *bc;
+ struct board_chan __iomem *bc;
globalwinon(ch);
bc = ch->brdchan;
if (ch->statusflags & LOWWAIT)
@@ -2727,7 +2731,7 @@
static void setup_empty_event(struct tty_struct *tty, struct channel *ch)
{ /* Begin setup_empty_event */

- struct board_chan *bc = ch->brdchan;
+ struct board_chan __iomem *bc = ch->brdchan;

globalwinon(ch);
ch->statusflags |= EMPTYWAIT;
diff -urN RC14-rc1-lne390/drivers/char/epca.h RC14-rc1-epca/drivers/char/epca.h
--- RC14-rc1-lne390/drivers/char/epca.h 2005-09-08 10:07:30.000000000 -0400
+++ RC14-rc1-epca/drivers/char/epca.h 2005-09-15 17:49:04.000000000 -0400
@@ -128,17 +128,17 @@
unsigned long c_cflag;
unsigned long c_lflag;
unsigned long c_oflag;
- unsigned char *txptr;
- unsigned char *rxptr;
+ unsigned char __iomem *txptr;
+ unsigned char __iomem *rxptr;
unsigned char *tmp_buf;
struct board_info *board;
- struct board_chan *brdchan;
+ struct board_chan __iomem *brdchan;
struct digi_struct digiext;
struct tty_struct *tty;
wait_queue_head_t open_wait;
wait_queue_head_t close_wait;
struct work_struct tqueue;
- struct global_data *mailbox;
+ struct global_data __iomem *mailbox;
};

struct board_info
@@ -149,8 +149,8 @@
unsigned short numports;
unsigned long port;
unsigned long membase;
- unsigned char __iomem *re_map_port;
- unsigned char *re_map_membase;
+ void __iomem *re_map_port;
+ void __iomem *re_map_membase;
unsigned long memory_seg;
void ( * memwinon ) (struct board_info *, unsigned int) ;
void ( * memwinoff ) (struct board_info *, unsigned int) ;

2005-09-15 22:10:22

by Russell King

[permalink] [raw]
Subject: Re: [PATCH] epca iomem annotations + several missing readw()

On Thu, Sep 15, 2005 at 08:27:04PM +0100, Al Viro wrote:
> [originally sent to Alan, he had no problems with it]
> * iomem pointers marked as such
> * several direct dereferencings of such pointers replaced with
> read[bw]().
> Signed-off-by: Al Viro <[email protected]>

Thanks for copying me, but I have no interest in any serial driver
which doesn't use the serial core interface.

I don't want to act as "person to review any change just because the
driver says serial" - that's not the role I decided to get involved
with.

--
Russell King
Linux kernel 2.6 ARM Linux - http://www.arm.linux.org.uk/
maintainer of: 2.6 Serial core

2005-09-15 22:19:15

by Al Viro

[permalink] [raw]
Subject: Re: [PATCH] epca iomem annotations + several missing readw()

On Thu, Sep 15, 2005 at 11:10:14PM +0100, Russell King wrote:
> On Thu, Sep 15, 2005 at 08:27:04PM +0100, Al Viro wrote:
> > [originally sent to Alan, he had no problems with it]
> > * iomem pointers marked as such
> > * several direct dereferencings of such pointers replaced with
> > read[bw]().
> > Signed-off-by: Al Viro <[email protected]>
>
> Thanks for copying me, but I have no interest in any serial driver
> which doesn't use the serial core interface.
>
> I don't want to act as "person to review any change just because the
> driver says serial" - that's not the role I decided to get involved
> with.

Hey, seeing the intensity of your complaints about _not_ being Cc'd...
Better safe than serial maintainer ;-)

OK, so what stuff do you want to be Cc'd on? My current approximation
would be arch/arm/*, include/asm-arm/*,drivers/serial/*,include/linux/serial*.
Well, and any changes of tty interfaces, if I ever get involved in such...
Any additions/removals?

2005-09-15 22:27:38

by Russell King

[permalink] [raw]
Subject: Re: [PATCH] epca iomem annotations + several missing readw()

On Thu, Sep 15, 2005 at 11:19:14PM +0100, Al Viro wrote:
> On Thu, Sep 15, 2005 at 11:10:14PM +0100, Russell King wrote:
> > On Thu, Sep 15, 2005 at 08:27:04PM +0100, Al Viro wrote:
> > > [originally sent to Alan, he had no problems with it]
> > > * iomem pointers marked as such
> > > * several direct dereferencings of such pointers replaced with
> > > read[bw]().
> > > Signed-off-by: Al Viro <[email protected]>
> >
> > Thanks for copying me, but I have no interest in any serial driver
> > which doesn't use the serial core interface.
> >
> > I don't want to act as "person to review any change just because the
> > driver says serial" - that's not the role I decided to get involved
> > with.
>
> Hey, seeing the intensity of your complaints about _not_ being Cc'd...
> Better safe than serial maintainer ;-)

My feelings as well when I get random serial bugs in bugzilla for drivers
I have zero clue about and no one to assign them to. 8/

> OK, so what stuff do you want to be Cc'd on? My current approximation
> would be arch/arm/*, include/asm-arm/*,drivers/serial/*,include/linux/serial*.
> Well, and any changes of tty interfaces, if I ever get involved in such...
> Any additions/removals?

Broadly, it's:

arch/arm/*
drivers/*/arm
drivers/mfd/* (this fits at the moment, but whether it will in
the future depends what else appears there.)

drivers/mmc/*
drivers/serial* (though only the drivers in there actually using
serial_core - unfortunately some non-serial_core
drivers appear to have been placed in there.)

include/asm-arm/*
include/linux/8250*
include/linux/serial*
fs/adfs/*

but there are various drivers authored by myself which I'd obviously be
interested in CC'ed.

--
Russell King
Linux kernel 2.6 ARM Linux - http://www.arm.linux.org.uk/
maintainer of: 2.6 Serial core