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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.