From: Takashi Iwai <tiwai@suse.de>
To: "linux-os (Dick Johnson)" <linux-os@analogic.com>
Cc: "Andrew Morton" <akpm@osdl.org>, <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH] Add cast to __iomem pointer in scsi drivers
Date: Tue, 14 Feb 2006 21:40:47 +0100 [thread overview]
Message-ID: <s5hu0b1ad2o.wl%tiwai@suse.de> (raw)
In-Reply-To: <Pine.LNX.4.61.0602141530420.32364@chaos.analogic.com>
At Tue, 14 Feb 2006 15:35:29 -0500,
linux-os (Dick Johnson) wrote:
>
>
> On Tue, 14 Feb 2006, Takashi Iwai wrote:
>
> > Add the missing cast to __iomem pointer in some scsi drivers.
> >
> > Signed-off-by: Takashi Iwai <tiwai@suse.de>
> >
> > ---
> > drivers/scsi/megaraid.c | 8 ++++----
> > drivers/scsi/sata_svw.c | 41 +++++++++++++++++++++++------------------
> > drivers/scsi/sata_vsc.c | 43 ++++++++++++++++++++++++-------------------
> > 3 files changed, 51 insertions(+), 41 deletions(-)
> >
> > diff --git a/drivers/scsi/megaraid.c b/drivers/scsi/megaraid.c
> > index d101a8a..13c9395 100644
> > --- a/drivers/scsi/megaraid.c
> > +++ b/drivers/scsi/megaraid.c
> > @@ -72,10 +72,10 @@ static unsigned short int max_mbox_busy_
> > module_param(max_mbox_busy_wait, ushort, 0);
> > MODULE_PARM_DESC(max_mbox_busy_wait, "Maximum wait for mailbox in microseconds if busy (default=MBOX_BUSY_WAIT=10)");
> >
> > -#define RDINDOOR(adapter) readl((adapter)->base + 0x20)
> > -#define RDOUTDOOR(adapter) readl((adapter)->base + 0x2C)
> > -#define WRINDOOR(adapter,value) writel(value, (adapter)->base + 0x20)
> > -#define WROUTDOOR(adapter,value) writel(value, (adapter)->base + 0x2C)
> > +#define RDINDOOR(adapter) readl((void __iomem *)((adapter)->base + 0x20))
> > +#define RDOUTDOOR(adapter) readl((void __iomem *)((adapter)->base + 0x2C))
> > +#define WRINDOOR(adapter,value) writel(value, (void __iomem *)((adapter)->base + 0x20))
> > +#define WROUTDOOR(adapter,value) writel(value, (void __iomem *)((adapter)->base + 0x2C))
> >
> > /*
> > * Global variables
> > diff --git a/drivers/scsi/sata_svw.c b/drivers/scsi/sata_svw.c
> > index d847256..862a3ba 100644
> > --- a/drivers/scsi/sata_svw.c
> > +++ b/drivers/scsi/sata_svw.c
> > @@ -110,26 +110,31 @@ static void k2_sata_tf_load(struct ata_p
> > unsigned int is_addr = tf->flags & ATA_TFLAG_ISADDR;
> >
> > if (tf->ctl != ap->last_ctl) {
> > - writeb(tf->ctl, ioaddr->ctl_addr);
> > + writeb(tf->ctl, (void __iomem *) ioaddr->ctl_addr);
> > ap->last_ctl = tf->ctl;
> > ata_wait_idle(ap);
> > }
> > if (is_addr && (tf->flags & ATA_TFLAG_LBA48)) {
> > - writew(tf->feature | (((u16)tf->hob_feature) << 8), ioaddr->feature_addr);
> > - writew(tf->nsect | (((u16)tf->hob_nsect) << 8), ioaddr->nsect_addr);
> > - writew(tf->lbal | (((u16)tf->hob_lbal) << 8), ioaddr->lbal_addr);
> > - writew(tf->lbam | (((u16)tf->hob_lbam) << 8), ioaddr->lbam_addr);
> > - writew(tf->lbah | (((u16)tf->hob_lbah) << 8), ioaddr->lbah_addr);
> > + writew(tf->feature | (((u16)tf->hob_feature) << 8),
> > + (void __iomem *) ioaddr->feature_addr);
> > + writew(tf->nsect | (((u16)tf->hob_nsect) << 8),
> > + (void __iomem *) ioaddr->nsect_addr);
> > + writew(tf->lbal | (((u16)tf->hob_lbal) << 8),
> > + (void __iomem *) ioaddr->lbal_addr);
> > + writew(tf->lbam | (((u16)tf->hob_lbam) << 8),
> > + (void __iomem *) ioaddr->lbam_addr);
> > + writew(tf->lbah | (((u16)tf->hob_lbah) << 8),
> > + (void __iomem *) ioaddr->lbah_addr);
> > } else if (is_addr) {
> > - writew(tf->feature, ioaddr->feature_addr);
> > - writew(tf->nsect, ioaddr->nsect_addr);
> > - writew(tf->lbal, ioaddr->lbal_addr);
> > - writew(tf->lbam, ioaddr->lbam_addr);
> > - writew(tf->lbah, ioaddr->lbah_addr);
> > + writew(tf->feature, (void __iomem *) ioaddr->feature_addr);
> > + writew(tf->nsect, (void __iomem *) ioaddr->nsect_addr);
> > + writew(tf->lbal, (void __iomem *) ioaddr->lbal_addr);
> > + writew(tf->lbam, (void __iomem *) ioaddr->lbam_addr);
> > + writew(tf->lbah, (void __iomem *) ioaddr->lbah_addr);
> > }
> >
> > if (tf->flags & ATA_TFLAG_DEVICE)
> > - writeb(tf->device, ioaddr->device_addr);
> > + writeb(tf->device, (void __iomem *) ioaddr->device_addr);
> >
> > ata_wait_idle(ap);
> > }
> > @@ -141,12 +146,12 @@ static void k2_sata_tf_read(struct ata_p
> > u16 nsect, lbal, lbam, lbah, feature;
> >
> > tf->command = k2_stat_check_status(ap);
> > - tf->device = readw(ioaddr->device_addr);
> > - feature = readw(ioaddr->error_addr);
> > - nsect = readw(ioaddr->nsect_addr);
> > - lbal = readw(ioaddr->lbal_addr);
> > - lbam = readw(ioaddr->lbam_addr);
> > - lbah = readw(ioaddr->lbah_addr);
> > + tf->device = readw((void __iomem *) ioaddr->device_addr);
> > + feature = readw((void __iomem *) ioaddr->error_addr);
> > + nsect = readw((void __iomem *) ioaddr->nsect_addr);
> > + lbal = readw((void __iomem *) ioaddr->lbal_addr);
> > + lbam = readw((void __iomem *) ioaddr->lbam_addr);
> > + lbah = readw((void __iomem *) ioaddr->lbah_addr);
> >
> > tf->feature = feature;
> > tf->nsect = nsect;
> > diff --git a/drivers/scsi/sata_vsc.c b/drivers/scsi/sata_vsc.c
> > index 2e2c3b7..cacacc5 100644
> > --- a/drivers/scsi/sata_vsc.c
> > +++ b/drivers/scsi/sata_vsc.c
> > @@ -130,21 +130,26 @@ static void vsc_sata_tf_load(struct ata_
> > vsc_intr_mask_update(ap, tf->ctl & ATA_NIEN);
> > }
> > if (is_addr && (tf->flags & ATA_TFLAG_LBA48)) {
> > - writew(tf->feature | (((u16)tf->hob_feature) << 8), ioaddr->feature_addr);
> > - writew(tf->nsect | (((u16)tf->hob_nsect) << 8), ioaddr->nsect_addr);
> > - writew(tf->lbal | (((u16)tf->hob_lbal) << 8), ioaddr->lbal_addr);
> > - writew(tf->lbam | (((u16)tf->hob_lbam) << 8), ioaddr->lbam_addr);
> > - writew(tf->lbah | (((u16)tf->hob_lbah) << 8), ioaddr->lbah_addr);
> > + writew(tf->feature | (((u16)tf->hob_feature) << 8),
> > + (void __iomem *) ioaddr->feature_addr);
> > + writew(tf->nsect | (((u16)tf->hob_nsect) << 8),
> > + (void __iomem *) ioaddr->nsect_addr);
> > + writew(tf->lbal | (((u16)tf->hob_lbal) << 8),
> > + (void __iomem *) ioaddr->lbal_addr);
> > + writew(tf->lbam | (((u16)tf->hob_lbam) << 8),
> > + (void __iomem *) ioaddr->lbam_addr);
> > + writew(tf->lbah | (((u16)tf->hob_lbah) << 8),
> > + (void __iomem *) ioaddr->lbah_addr);
> > } else if (is_addr) {
> > - writew(tf->feature, ioaddr->feature_addr);
> > - writew(tf->nsect, ioaddr->nsect_addr);
> > - writew(tf->lbal, ioaddr->lbal_addr);
> > - writew(tf->lbam, ioaddr->lbam_addr);
> > - writew(tf->lbah, ioaddr->lbah_addr);
> > + writew(tf->feature, (void __iomem *) ioaddr->feature_addr);
> > + writew(tf->nsect, (void __iomem *) ioaddr->nsect_addr);
> > + writew(tf->lbal, (void __iomem *) ioaddr->lbal_addr);
> > + writew(tf->lbam, (void __iomem *) ioaddr->lbam_addr);
> > + writew(tf->lbah, (void __iomem *) ioaddr->lbah_addr);
> > }
> >
> > if (tf->flags & ATA_TFLAG_DEVICE)
> > - writeb(tf->device, ioaddr->device_addr);
> > + writeb(tf->device, (void __iomem *) ioaddr->device_addr);
> >
> > ata_wait_idle(ap);
> > }
> > @@ -156,12 +161,12 @@ static void vsc_sata_tf_read(struct ata_
> > u16 nsect, lbal, lbam, lbah, feature;
> >
> > tf->command = ata_check_status(ap);
> > - tf->device = readw(ioaddr->device_addr);
> > - feature = readw(ioaddr->error_addr);
> > - nsect = readw(ioaddr->nsect_addr);
> > - lbal = readw(ioaddr->lbal_addr);
> > - lbam = readw(ioaddr->lbam_addr);
> > - lbah = readw(ioaddr->lbah_addr);
> > + tf->device = readw((void __iomem *) ioaddr->device_addr);
> > + feature = readw((void __iomem *) ioaddr->error_addr);
> > + nsect = readw((void __iomem *) ioaddr->nsect_addr);
> > + lbal = readw((void __iomem *) ioaddr->lbal_addr);
> > + lbam = readw((void __iomem *) ioaddr->lbam_addr);
> > + lbah = readw((void __iomem *) ioaddr->lbah_addr);
> >
> > tf->feature = feature;
> > tf->nsect = nsect;
> > @@ -279,8 +284,8 @@ static void __devinit vsc_sata_setup_por
> > port->ctl_addr = base + VSC_SATA_TF_CTL_OFFSET;
> > port->bmdma_addr = base + VSC_SATA_DMA_CMD_OFFSET;
> > port->scr_addr = base + VSC_SATA_SCR_STATUS_OFFSET;
> > - writel(0, base + VSC_SATA_UP_DESCRIPTOR_OFFSET);
> > - writel(0, base + VSC_SATA_UP_DATA_BUFFER_OFFSET);
> > + writel(0, (void __iomem *) (base + VSC_SATA_UP_DESCRIPTOR_OFFSET));
> > + writel(0, (void __iomem *) (base + VSC_SATA_UP_DATA_BUFFER_OFFSET));
> > }
>
>
> With all these casts, doesn't it point out that something is wrong
> with writel(), writew(), readl(), and readw() ??? The cast's to
> volatile types should be within the macros, not scattered
> throughout everyone's driver code!
The patch is just for fixing compile warnings.
readl(), writel() and co are inline functions, and they should be cast
explicitly on the caller side.
Takashi
next prev parent reply other threads:[~2006-02-14 20:40 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-02-14 20:13 Takashi Iwai
2006-02-14 20:35 ` linux-os (Dick Johnson)
2006-02-14 20:40 ` Takashi Iwai [this message]
2006-02-14 20:46 ` Mark Lord
2006-02-14 20:59 ` Takashi Iwai
2006-02-14 21:03 ` Russell King
2006-02-14 21:05 ` Al Viro
2006-02-14 21:14 ` Takashi Iwai
2006-02-14 21:17 ` Al Viro
2006-02-14 20:40 ` Al Viro
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=s5hu0b1ad2o.wl%tiwai@suse.de \
--to=tiwai@suse.de \
--cc=akpm@osdl.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-os@analogic.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®