[Spice-devel] [PATCH] add registry key "DisableSurfaces"

Alon Levy alevy at redhat.com
Wed Sep 5 07:11:30 PDT 2012


> ack w minor notes

All correct, I'll fix and push.

> 
> Alon Levy wrote:
> > Presence of the key disables off screen surfaces creation; The
> > callback
> > is still registered, but it always fails.
> >
> > Registry key is checked on device initialization only, not during
> > runtime, so you must reset the vm to see any affects.
> > ---
> >  display/driver.c     | 11 +++++++++++
> >  display/driver.rc    |  4 ++--
> >  display/qxldd.h      |  1 +
> >  include/qxl_driver.h |  2 ++
> >  miniport/qxl.c       | 47
> >  ++++++++++++++++++++++++++++++++++++++++++++++-
> >  miniport/qxl.inf     |  2 +-
> >  miniport/qxl.rc      |  6 +++---
> >  7 files changed, 66 insertions(+), 7 deletions(-)
> >
> > diff --git a/display/driver.c b/display/driver.c
> > index ef011ad..156befe 100644
> > --- a/display/driver.c
> > +++ b/display/driver.c
> > @@ -843,6 +843,13 @@ static BOOL PrepareHardware(PDev *pdev)
> >  
> >      pdev->dev_id = dev_info.dev_id;
> >  
> > +    pdev->create_non_primary_surfaces =
> > dev_info.create_non_primary_surfaces;
> > +    DEBUG_PRINT((pdev, 1, "%s: create_non_primary_surfaces =
> > %d\n", __FUNCTION__,
> > +                 pdev->create_non_primary_surfaces));
> > +
> > +    DEBUG_PRINT((NULL, 1, "%s: 0x%lx exit: 0x%lx %ul\n",
> > __FUNCTION__, pdev,
> > +                 pdev->fb, pdev->fb_size));
> > +
> >   
> any reason you need this last dbg line? don't u have the same 2 lines
> below?
> >      CreateVRamSlot(pdev);
> >  
> >      DEBUG_PRINT((NULL, 1, "%s: 0x%lx exit: 0x%lx %ul\n",
> >      __FUNCTION__, pdev,
> > @@ -1409,6 +1416,10 @@ HBITMAP APIENTRY
> > DrvCreateDeviceBitmap(DHPDEV dhpdev, SIZEL size, ULONG format)
> >  
> >      pdev = (PDev *)dhpdev;
> >  
> > +    if (!pdev->create_non_primary_surfaces) {
> > +        return FALSE;
> > +    }
> > +
> >      if (!pdev->vram_slot_initialized || pdev->bitmap_format !=
> >      format || pdev->fb == 0) {
> >          DEBUG_PRINT((pdev, 3, "%s failed: %p: slot_initialized %d,
> >          format(%d,%d), fb %p\n",
> >                      __FUNCTION__, pdev,
> >                      pdev->vram_slot_initialized,
> > diff --git a/display/driver.rc b/display/driver.rc
> > index 4368925..ad449ba 100644
> > --- a/display/driver.rc
> > +++ b/display/driver.rc
> > @@ -16,12 +16,12 @@
> >  #define VER_FILEDESCRIPTION_STR     "Red Hat QXL Display Driver"
> >  #define VER_INTERNALNAME_STR        "qxldd.dll"
> >  #define VER_ORIGINALFILENAME_STR    VER_INTERNALNAME_STR
> > -#define VER_FILEVERSION_STR         "1.4.1.1"
> > +#define VER_FILEVERSION_STR         "1.4.2.3"
> >  #define VER_PRODUCTNAME_STR         "Spice"
> >  #define VER_PRODUCTVERSION_STR      VER_FILEVERSION_STR
> >  
> >  #undef  VER_PRODUCTVERSION
> > -#define VER_PRODUCTVERSION           1,4,1,1
> > +#define VER_PRODUCTVERSION           1.4.2.3
> >   
> shouldn't it be with ","s instead of "."s ?
> >  
> >  #define VER_COMPANYNAME_STR         "Red Hat Inc."
> >  #define VER_LEGALCOPYRIGHT_STR      "� Red Hat Inc. All rights
> >  reserved."
> > diff --git a/display/qxldd.h b/display/qxldd.h
> > index d0166b5..1a1b5d5 100644
> > --- a/display/qxldd.h
> > +++ b/display/qxldd.h
> > @@ -220,6 +220,7 @@ typedef struct PDev {
> >      SIZEL resolution;
> >      UINT32 max_bitmap_size;
> >      ULONG bitmap_format;
> > +    UINT8 create_non_primary_surfaces;
> >  
> >      ULONG fb_size;
> >      BYTE* fb;
> > diff --git a/include/qxl_driver.h b/include/qxl_driver.h
> > index eac6f5f..677ee17 100644
> > --- a/include/qxl_driver.h
> > +++ b/include/qxl_driver.h
> > @@ -119,6 +119,8 @@ typedef struct QXLDriverInfo {
> >      UINT32 n_surfaces;
> >  
> >      UINT64 fb_phys;
> > +
> > +    UINT8 create_non_primary_surfaces;
> >  } QXLDriverInfo;
> >  
> >  #endif
> > diff --git a/miniport/qxl.c b/miniport/qxl.c
> > index 003669b..bd449c3 100644
> > --- a/miniport/qxl.c
> > +++ b/miniport/qxl.c
> > @@ -95,6 +95,8 @@ typedef struct QXLExtension {
> >  
> >      char *log_buf;
> >      PUCHAR log_port;
> > +
> > +    UINT8 create_non_primary_surfaces;
> >  } QXLExtension;
> >  
> >  #define QXL_ALLOC_TAG '_lxq'
> > @@ -1002,6 +1004,47 @@ static VP_STATUS
> > SetCustomDisplay(QXLExtension *dev_ext, QXLEscapeSetCustomDispl
> >                             dev_ext->custom_mode);
> >  }
> >  
> > +VP_STATUS QXLRegistryCallback(
> > +  PVOID HwDeviceExtension,
> > +  PVOID Context,
> > +  PWSTR ValueName,
> > +  PVOID ValueData,
> > +  ULONG ValueLength
> > +)
> > +{
> > +    QXLExtension *dev_ext = HwDeviceExtension;
> > +    ULONG *key_ret = (ULONG *)Context;
> > +
> > +    DEBUG_PRINT((dev_ext, 60, "%s: length %d, first byte %d\n",
> > __FUNCTION__,
> > +                ValueLength, (UINT8)ValueData));
> > +
> > +    if (key_ret) {
> > +        *key_ret = *(PULONG)ValueData;
> > +    }
> > +    return NO_ERROR;
> > +}
> > +
> > +static UINT8 check_non_primary_surfaces_registry_key(QXLExtension
> > *dev_ext)
> > +{
> > +    VP_STATUS ret;
> > +    ULONG key_ret;
> > +
> > +    ret = VideoPortGetRegistryParameters(
> > +              dev_ext,
> > +              L"DisableSurfaces",
> > +              FALSE,
> > +              QXLRegistryCallback,
> > +              &key_ret);
> > +    if (ret == ERROR_INVALID_PARAMETER) {
> > +        dev_ext->create_non_primary_surfaces = 1;
> > +        DEBUG_PRINT((dev_ext, 0, "%s: CreateNonPrimarySurfaces key
> > doesn't exist, default to 1\n",
> > +                    __FUNCTION__));
> > +    } else {
> > +        dev_ext->create_non_primary_surfaces = 0;
> > +    }
> > +    return dev_ext->create_non_primary_surfaces;
> > +}
> > +
> >  BOOLEAN StartIO(PVOID dev_extension, PVIDEO_REQUEST_PACKET packet)
> >  {
> >      QXLExtension *dev_ext = dev_extension;
> > @@ -1187,9 +1230,11 @@ BOOLEAN StartIO(PVOID dev_extension,
> > PVIDEO_REQUEST_PACKET packet)
> >  
> >              driver_info->n_surfaces = dev_ext->rom->n_surfaces;
> >  
> > -	    driver_info->fb_phys = dev_ext->vram_physical.QuadPart;
> > +            driver_info->fb_phys =
> > dev_ext->vram_physical.QuadPart;
> >  
> >              driver_info->dev_id = dev_ext->rom->id;
> > +
> > +            driver_info->create_non_primary_surfaces =
> > check_non_primary_surfaces_registry_key(dev_ext);
> >          }
> >          break;
> >  
> > diff --git a/miniport/qxl.inf b/miniport/qxl.inf
> > index d20778b..9b17575 100644
> > --- a/miniport/qxl.inf
> > +++ b/miniport/qxl.inf
> > @@ -3,7 +3,7 @@
> >  
> >  [Version]
> >  Signature = "$CHICAGO$"
> > -DriverVer = 03/20/2011,1.4.1.1
> > +DriverVer = 08/15/2012,1.4.2.3
> >  Provider = %RHAT%
> >  CatalogFile = qxl.cat
> >  Class = Display
> > diff --git a/miniport/qxl.rc b/miniport/qxl.rc
> > index 86f04b9..b912a5e 100644
> > --- a/miniport/qxl.rc
> > +++ b/miniport/qxl.rc
> > @@ -16,12 +16,12 @@
> >  #define VER_FILEDESCRIPTION_STR     "Red Hat QXL Display Driver"
> >  #define VER_INTERNALNAME_STR        "qxl.sys"
> >  #define VER_ORIGINALFILENAME_STR    VER_INTERNALNAME_STR
> > -#define VER_FILEVERSION_STR         "1.4.1.1"
> > +#define VER_FILEVERSION_STR         "1.4.2.3"
> >  #define VER_PRODUCTNAME_STR         "Spice"
> > -#define VER_PRODUCTVERSION_STR      "1.4.1.1"
> > +#define VER_PRODUCTVERSION_STR      "1.4.2.3"
> >  
> >  #undef  VER_PRODUCTVERSION
> > -#define VER_PRODUCTVERSION           1,4,1,1
> > +#define VER_PRODUCTVERSION           1.4.2.3
> >   
> shouldn't it be with ","s instead of "."s ?
> >  
> >  #define VER_COMPANYNAME_STR         "Red Hat Inc."
> >  #define VER_LEGALCOPYRIGHT_STR      "� Red Hat Inc. All rights
> >  reserved."
> >   
> > ------------------------------------------------------------------------
> >
> > _______________________________________________
> > Spice-devel mailing list
> > Spice-devel at lists.freedesktop.org
> > http://lists.freedesktop.org/mailman/listinfo/spice-devel
> >   
> 
> 


More information about the Spice-devel mailing list