> >>    Eventually all physical I/O needs a physical address.  The quickest
> >>    way to get to a physical address is to be given an array of vm_page_t's
> >>    (which can be trivially translated to physical addresses).
> >
> > Not all: PIO access to ATA needs virtual access.  RAID5 needs
> > virtual access to calculate parity. 
> 
> I'm not sure what you mean by "virtual access".  If you mean
> file-related rather than partition-related, no: like the rest of
> Vinum, RAID-5 uses only partition-related offsets.

No, the issue here has to do with the mapping of the data buffers.  If 
you're doing PIO, or otherwise manipulating the data in the driver before 
you give it to the hardware (eg. inside vinum) then you need the data 
buffers mapped into your virtual address space.

OTOH, if you're handing the buffer information to a busmaster device, 
you don't need this, instead you need the physical address of the buffer 
sections.

> > For RAID5 we have the opposite problem also: data is created which
> > has only a mapped existance and the b_pages[] array is not
> > populated.
> 
> Hmm.  I really need to check that I'm not missing something here.

The point here is that when you create RAID5 parity data, the buffer's 
physical addresses aren't filled in.

-- 
\\ Give a man a fish, and you feed him for a day. \\  Mike Smith
\\ Tell him he should learn how to fish himself,  \\  [EMAIL PROTECTED]
\\ and he'll hate you for a lifetime.             \\  [EMAIL PROTECTED]




To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-current" in the body of the message

Reply via email to