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

Re: [Xen-devel][RFC] Dynamic modes support for PV xenfb (included)

Markus Armbruster wrote:
> Pat Campbell <plc@xxxxxxxxxx> writes:
>> Markus Armbruster wrote:
>>> The current PVFB code shares the framebuffer as follows.  The
>>> framebuffer is described by a two level directory.  The first level is
>>> the page directory pd[] in the shared page.  pd[] contains the mfns of
>>> the second level directory pages.  Those form an array containing the
>>> mfns of the framebuffer.
>>> Your patch replaces both levels of the page directory by grants, but
>>> not the framebuffer itself.  What exactly does that buy us?
>> Patch does not replace the pd array.  That is still being used to
>> maintain backwards compatibility.  The required framebuffer memory is
>> allocated in xenfb_probe() and is never reallocated or changed.  Only
>> the mapping to the framebuffer is changed.
>> Maybe some pseudo code this will make it clearer.
>> Frontend (FE)
>>    Determine framebuffer size
>>    Allocate framebuffer 
>>    Fill in array of mfns
>>    Set shared page info to default mem length, width and height
>>    Fill in grant refs using array of mfns
>>    Back end Connected?
>>         Send map extended event (uses grant ref)
>>    Map extended done event?
>>         Free grant refs
>> Backend  (BE)
>>    Calculate number of mfns based on mem length from shared  page
>>    Map in and point at framebuffer
>>    Map extended event?
>>          Map in using grant ref
>>          Change framebuffer pointer to the new location
>>                 (still the same FE memory but now we can reach father
>> into it) 
>>          Send Map extended done
>> At this point the Backend is still treating the framebuffer as
>> 800x600x32 but does has access to the extended framebuffer memory but
>> does not use it.  When a resize event occurs the screen geometry changes
>> but not the framebuffers mappings.
> Understood.
>> So to answer what it buys us.  It buys us access to a larger framebuffer
>> for higher resolutions support.
> I can't see how using grants for the page directory is an improvement
> over your previous iteration, which used pd[].  Can you explain?
I will try, I am not the greatest communicator lately. 

Previous iteration did use pd[] extending it to 3 from 2, this had the
drawback of limiting our frame buffer size to a max of 6 MB for a 64 bit
guest, 12mb for a 32 bit guest.  6MB can handle a maximum of 1280x1024
which in previous emails was deemed not enough. 
HD 1080  1920x1200 requires   9MB   (pd[5], 64bit)
WQXGA  2560x1600 requires 16MB   (pd[8], 64bit)

I could of just extended pd[] some more to increase the available slots
but every time we want to increase the total frame buffer size we have
to compile both ends.  Probably could just keep reading/mapping until we
hit a NULL in the backend to eliminate that issue but that ends adding
any new items to the shared info page.

By using grants:
   I don't effect the current shared info
   Don't have to deal with differences between a 64 bit long and a 32
bit long. 
   Single grant ref fits within the event structure

Are those benefits worth the code complexity that grants added?   Not
sure.  Other than grants, which I can remove and revert to pd[], are all
the other issues that were raised addressed?

While I was working on this I "briefly" looked at the grant APIs to see
how hard it would be to create a new API that allocates and claims a
continuous block of references.  If I had a guaranteed continuous block
I would then only need to send the initial ref number and a count to the


Xen-devel mailing list



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