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

Re: [Xen-devel][PATCH][LINUX] Dynamic modes support for PV xenfb (1of2)



>>> On Wed, Jan 2, 2008 at 10:59 AM, in message 
>>> <20080102175935.GE1237@xxxxxxxxxx>,
"Daniel P. Berrange" <berrange@xxxxxxxxxx> wrote: 
> On Sun, Dec 30, 2007 at 11:45:11AM - 0700, Pat Campbell wrote:
>> +static int
>> +xenfb_check_var(struct fb_var_screeninfo *var, struct fb_info *info)
>> +{
>> +    struct xenfb_info *xenfb_info;
>> +
>> +    xenfb_info = info- >par;
>> +
>> +    if (!xenfb_info- >feature_resize) {
>> +            if (var- >xres == XENFB_WIDTH && var- >yres == XENFB_HEIGHT) {
>> +                    return 0;
>> +            }
>> +            return - EINVAL;
>> +    }
>> +    if (var- >xres == 1024 && var- >yres == 768) {
>> +            return 0;
>> +    }
>> +    if (var- >xres == 800 && var- >yres == 600) {
>> +            return 0;
>> +    }
>> +    if (var- >xres == 640 && var- >yres == 480) {
>> +            return 0;
>> +    }
>> +    return - EINVAL;
>> +}
> 
> This validates only 640x480, 800x600, and 1024x768, but further
> down you made a change to enable 1280x1024:

I will change check_var() to use this validation so we can support any 
resolution that the memory can hold with the constraint that the width
cannot exceed the scan line length.

if ( var->bits_per_pixerl == xenfb_info->page->depth && 
        var->xres <= XENFB_SCAN_LINE_LEN && 
         xenfb_mem_len >= (var->xres * var->yres * (xenfb_info->page->depth / 
8))) {
   return 0;
}

We need to check xres against XENFB_SCAN_LINE_LEN as X initializes it's
frame buffer line length once in FBDevScreenInit().   Size changes via xrandr 
do not change the X servers line length value. 
 
> 
>>       * PAGE_SIZE / sizeof(*pd) bytes.  With PAGE_SIZE == 4096 and
>>       * sizeof(unsigned long) == 4, that's 4 Megs.  Two directory
>>       * pages should be enough for a while.
>> +     *
>> +     * Increased to 3 to support 1280x1024 resolution on a 64bit system
>> +     *  (1280*1024*4)/PAGE_SIZE = 1280 pages required
>> +     *  PAGE_SIZE/64bit long = 512 pages per page directory
>>       */
>> -     unsigned long pd[2];
>> +    unsigned long pd[3];
> 
> 
> I think if we're going to the trouble of making sizes configurable
> we should at the very least support all the common regular aspect and
> widescreen modes, so that people can run the guest fullscreen at
> native resolution. My curent physical graphics card + monitor for 
> example supports the following choices via xrandr
> 
>   1680x1050 1280x800 1280x1024 1600x1024 1440x900 1400x1050 1360x768 
>   1280x960 1280x768 1280x720 1152x864 1024x768 960x600 960x540 896x672
>   840x525 832x624 800x600 800x512 720x450 680x384 640x512 640x480 
>   640x400 640x384 640x360 576x432 512x384 416x312 400x300 320x240
> 
> I don't know if there is a definitive list of video modes, or if that
> is a non- sensical question.  Could we just allow *any* mode that fits
> in the amount of RAM allowed by the 'struct xenfb_page pd[3]' ? or
> at the very least dramatically increase the set of modes we allow
> in the validation tables to something like the list I just included
> above.
> 
>>  };
>>  
>>  /*
>> @@ - 120,6 +138,8 @@ struct xenfb_page
>>   * solution is found, but don't leak it to the backend.
>>   */
>>  #ifdef __KERNEL__
>> +#define XENFB_MAX_WIDTH 1024
>> +#define XENFB_MAX_HEIGHT 768
> 
> I think it'd be beter to get rid of these vars. They don't make any sense
> when you have configurable modes. With a non- constrained aspect ratio for
> the FB, there's no (w,h) pair that can usefully define limits. The limit
> is just whatever fits in your RAM per aspect ratio.

Agreed.  

For reasons stated above will add:
 #define XENFB_SCAN_LINE_LEN 1280  

> 
> Dan.




_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel


 


Rackspace

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