From: James Bottomley <James.Bottomley@HansenPartnership.com>
To: Grant Grundler <grundler@google.com>
Cc: Alan Cox <alan@lxorguk.ukuu.org.uk>,
akpm@linux-foundation.org, linux-scsi@vger.kernel.org,
fujita.tomonori@lab.ntt.co.jp
Subject: Re: [patch 13/17] drivers/scsi/initio.c: suppress compile warning
Date: Mon, 31 Mar 2008 09:56:46 -0500 [thread overview]
Message-ID: <1206975406.3192.16.camel@localhost.localdomain> (raw)
In-Reply-To: <da824cf30803302150m8157e8aob5914f8efef58ed9@mail.gmail.com>
On Sun, 2008-03-30 at 21:50 -0700, Grant Grundler wrote:
> On Fri, Mar 28, 2008 at 8:09 PM, James Bottomley
> <James.Bottomley@hansenpartnership.com> wrote:
> > On Fri, 2008-03-28 at 17:49 -0700, Grant Grundler wrote:
> > > On Fri, Mar 28, 2008 at 4:51 PM, James Bottomley
> > > <James.Bottomley@hansenpartnership.com> wrote:
> > > ...
> > > > So basically, most of the cpu_to_le32 in this driver look wrong. If I
> > > > can fix it (or persuade someone else to fix it) can anyone test it on a
> > > > BE platform?
> > >
> > > But the code I submitted the patch is also broken for LE platforms.
> > > (As you pointed out earlier and was my original incentive for
> > > submitting the patch).
> >
> > No ... it's correct on a LE platform .. the warning is superfluous we
> > promote a u8 to a u32 and then complain when it's truncated to a u8
> > again.
>
> Yeah, you are right. It would produce correct code on LE platform.
> Not sure why now I thought it wouldn't.
>
> > > If most of the usage is wrong anyway, perhaps it's better to
> > > not pretend the driver can work on a BE platform and just rip
> > > all the cpu_to_le32() usage out...including the one I submitted
> > > the patch for. Either way, that change should go in. Right?
> >
> > Well, not really; the problem is it's not complete ... it only covers up
> > the real problem by silencing the warning.
>
> After looking at the code for a bit, I think I would prefer to disable
> the driver entirely for BE platforms since it's pretty clear it could
> never work correctly. I'm not willing to own it for BE platforms.
Unfortunately, there's no way to do that which won't have the random
configuration people after you with a big stick ... we don't have a
config option for BE, only a runtime option ... make the compile break
and they'll find it and bug report it.
Don't worry, I won't make you own the BE part of this. A reasonable fix
that looks like it has a chance of working will be fine.
> > If the actual BE pieces of the driver worked, you could make it correct
> > either by making senselen a u32 and leaving the cpu_to_le32 or adding it
> > to the point at which we assign it to bufflen.
>
> Making senselen u32 would also require fixing this bit in tulip_main():
> if (!(scb->mode & SCM_RSENS)) { /* not
> in auto req. sense mode */
> ...
> if (scb->flags & SCF_SENSE) {
> u8 len;
> len = scb->senselen;
> ...
> scb->cdb[3] = 0;
> scb->cdb[4] = len;
> scb->cdb[5] = 0;
> initio_push_pend_scb(host, scb);
> break;
> ...
Sure ... but the u32 fix doesn't work because the driver isn't BE ready.
The correct fix is to trip the wrong cpu_to_leX out of it.
>
> > If you can verify my analysis of the way the driver works, then the
> > complete fix should be pretty simple: just remove the cpu_to_le32 from
> > everywhere except the sg list construction.
>
> I think your analysis is correct. Seems the key bits are
> in initio_xfer_data_in/out() routines and around the SCF_SG handling.
>
> But I am not interested in actually testing it.
I'm not sure anyone can. All of the initio users I know (well both of
them) have x86 boxes.
> The more I look at this code, the less I want to do with it.
OK ... just fix what we currently know is broken and I'll find some
other willing victim^Wvolunteer if someone actually finds that it still
doesn't work.
> Another similar issue with bufptr usage in tulip_main():
>
> scb->bufptr = scb->senseptr;
>
> is pushing a LE32 into native byte pointer used in initio_state_5():
No ... bufptr is transmitted directly via outl, so it should be a CPU
native variable. The only bus native variables we have in the entire
driver are the SG list elements.
> scb->bufptr += ((u32) (i - scb->sgidx) << 3);
>
> and
> scb->bufptr += (u32) xcnt;
>
> bufptr will be converted to "Bus Endianess" when finally written to
> the controller:
> outl(scb->bufptr, host->addr + TUL_XAddH);
Right, so we strip the spurious cpu_to_leX and keep everything CPU
native (apart from the SG list entries).
> I also expected bugs with initio_host->semaph. I initially thought
> there would be memory ordering issues and needed to be
> declared "volatile". But seems to be properly protected by a spinlock.
>
> Nit: i91u_intr() could use spin_lock() instead of spinlock_irqsave().
The call chains for that one are pretty deep ... are you sure? I agree
it looks like it should be re-entrant against other interrupts, but I
wouldn't bet the farm on it ... and if we're wrong the x86 users will
see corruption.
James
next prev parent reply other threads:[~2008-03-31 14:56 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-03-28 21:48 [patch 13/17] drivers/scsi/initio.c: suppress compile warning akpm
2008-03-28 21:55 ` Grant Grundler
2008-03-28 22:13 ` Andrew Morton
2008-03-28 22:26 ` James Bottomley
2008-03-28 22:43 ` Alan Cox
2008-03-28 23:51 ` James Bottomley
2008-03-29 0:49 ` Grant Grundler
2008-03-29 3:09 ` James Bottomley
2008-03-31 4:50 ` Grant Grundler
2008-03-31 14:56 ` James Bottomley [this message]
2008-03-31 16:23 ` Grant Grundler
2008-04-04 7:05 ` Grant Grundler
2008-04-05 16:14 ` Grant Grundler
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=1206975406.3192.16.camel@localhost.localdomain \
--to=james.bottomley@hansenpartnership.com \
--cc=akpm@linux-foundation.org \
--cc=alan@lxorguk.ukuu.org.uk \
--cc=fujita.tomonori@lab.ntt.co.jp \
--cc=grundler@google.com \
--cc=linux-scsi@vger.kernel.org \
/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