svn commit: r260165 - head/sys/dev/ahci
Konstantin Belousov
kostikbel at gmail.com
Fri Jan 3 18:22:07 UTC 2014
On Fri, Jan 03, 2014 at 09:49:12AM -0700, Ian Lepore wrote:
> On Wed, 2014-01-01 at 22:32 +0200, Konstantin Belousov wrote:
> > On Wed, Jan 01, 2014 at 08:26:08PM +0000, Zbigniew Bodek wrote:
> > > Author: zbb
> > > Date: Wed Jan 1 20:26:08 2014
> > > New Revision: 260165
> > > URL: http://svnweb.freebsd.org/changeset/base/260165
> > >
> > > Log:
> > > Use only mapped BIOs on ARM
> > >
> > > Using unmapped BIOs causes failure inside bus_dmamap_sync, since
> > > this function requires valid MVA address, which is not present
> > > if mapping is not set up.
> > >
> > > Submitted by: Wojciech Macek <wma at semihalf.com>
> > > Obtained from: Semihalf
> > >
> > > Modified:
> > > head/sys/dev/ahci/ahci.c
> > >
> > > Modified: head/sys/dev/ahci/ahci.c
> > > ==============================================================================
> > > --- head/sys/dev/ahci/ahci.c Wed Jan 1 20:22:29 2014 (r260164)
> > > +++ head/sys/dev/ahci/ahci.c Wed Jan 1 20:26:08 2014 (r260165)
> > > @@ -3066,7 +3066,15 @@ ahciaction(struct cam_sim *sim, union cc
> > > if (ch->caps & AHCI_CAP_SPM)
> > > cpi->hba_inquiry |= PI_SATAPM;
> > > cpi->target_sprt = 0;
> > > +#ifdef __arm__
> > > + /*
> > > + * Do not use unmapped buffers on ARM. Doing so will cause
> > > + * failure inside bus_dmamap_sync due to lack of VA.
> > > + */
> > > + cpi->hba_misc = PIM_SEQSCAN;
> > > +#else
> > > cpi->hba_misc = PIM_SEQSCAN | PIM_UNMAPPED;
> > > +#endif
> > > cpi->hba_eng_cnt = 0;
> > > if (ch->caps & AHCI_CAP_SPM)
> > > cpi->max_target = 15;
> >
> > I think this is wrong. If bus_dmamap_sync(9) is not functional on arm,
> > then unmapped io should be disabled on arm unconditionally, using
> > unmapped_buf_allowed. Why ahci(4) is special in this regard, leaving
> > other controllers broken for arm ?
>
> I think this entire concept is wrong, and the fix should be in armv6
> busdma or pmap code. An unmapped page is, by definition, not cached.
> The only way data becomes cached is because flags in a mapping indicated
> the memory is cacheable. If we have data from unmapped pages in the
> cache, that's a bug in the armv6 pmap implementation, I think.
I agree with the statement that the fix must be in busdma MD code,
possibly with some cooperation with pmap code. On the other hand, I do
not understand later claims.
BIO unmapped attribute only means that bio does not carry a pointer to
(some) mapping of the bio_ma pages. In other words, unmapped BIO does
not imply globally unmapped page, and CPU cache might contain the lines
from the BIO pages.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 834 bytes
Desc: not available
URL: <http://lists.freebsd.org/pipermail/svn-src-all/attachments/20140103/ede1ae3e/attachment.sig>
More information about the svn-src-all
mailing list