[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH v5 08/11] vpci/bars: add handlers to map the BARs



>>> On 12.09.17 at 11:54, <roger.pau@xxxxxxxxxx> wrote:
> On Thu, Sep 07, 2017 at 03:53:07AM -0600, Jan Beulich wrote:
>> >>> On 14.08.17 at 16:28, <roger.pau@xxxxxxxxxx> wrote:
>> > +
>> > +    /*
>> > +     * The PCI Local Bus Specification suggests writing ~0 to both the 
>> > high
>> > +     * and the low part of the BAR registers before attempting to read 
>> > back
>> > +     * the size.
>> > +     *
>> > +     * However real device BARs registers (at least the ones I've tried)
>> > +     * will return the size of the BAR just by having written ~0 to one 
>> > half
>> > +     * of it, independently of the value of the other half of the 
>> > register.
>> > +     * Hence here Xen will switch to returning the size as soon as one 
>> > half
>> > +     * of the BAR register has been written with ~0.
>> > +     */
>> 
>> I don't believe this is correct behavior (but I'd have to play with
>> some hardware to see whether I can confirm the behavior you
>> describe): How would you place a BAR at, say, 0x1ffffff0?
> 
> I don't think it's 'correct' behavior either, but FreeBSD has been
> sizing BARs like that, and nobody noticed any issues. I just fixed it
> recently:
> 
> https://svnweb.freebsd.org/base/head/sys/dev/pci/pci.c?r1=312250&r2=321863 

Oh, no, that old code was fine afaict. You have to view the two
halves of a 64-bit BAR as completely distinct registers, and
sizing of the full BAR can be done either by writing both, then
reading both, or reading/writing each half. The problem with the
code in the patch here is that you don't treat the two halves as
fully separate registers, implying that one half being written with
all ones _also_ makes the other half return the sizing value
instead of the last written address.

Jan


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
https://lists.xen.org/xen-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.