summaryrefslogtreecommitdiff
path: root/glx
Commit message (Collapse)AuthorAgeFilesLines
* meson: hide C API if Xorg is disabled (like autotools)Jan Beich2021-03-111-1/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When building only Xwayland using Meson some files are always installed. This causes package conflict if Xwayland is built separately from Xorg. include/xorg/compositeext.h include/xorg/damage.h include/xorg/damagestr.h include/xorg/dbestruct.h include/xorg/dri3.h include/xorg/fb.h include/xorg/fboverlay.h include/xorg/fbpict.h include/xorg/fbrop.h include/xorg/geext.h include/xorg/geint.h include/xorg/glyphstr.h include/xorg/mi.h include/xorg/micmap.h include/xorg/micoord.h include/xorg/migc.h include/xorg/miline.h include/xorg/mioverlay.h include/xorg/mipict.h include/xorg/mipointer.h include/xorg/mipointrst.h include/xorg/mistruct.h include/xorg/misync.h include/xorg/misyncfd.h include/xorg/misyncshm.h include/xorg/misyncstr.h include/xorg/mizerarc.h include/xorg/panoramiX.h include/xorg/panoramiXsrv.h include/xorg/picture.h include/xorg/picturestr.h include/xorg/present.h include/xorg/presentext.h include/xorg/randrstr.h include/xorg/rrtransform.h include/xorg/shadow.h include/xorg/shmint.h include/xorg/syncsdk.h include/xorg/vndserver.h include/xorg/wfbrename.h include/xorg/xace.h include/xorg/xacestr.h include/xorg/xorg-server.h include/xorg/xvdix.h include/xorg/xvmcext.h share/aclocal/xorg-server.m4 Reviewed-by: Michel Dänzer <mdaenzer@redhat.com>
* glx: Remove unused bswap_CARD64Michel Dänzer2020-11-301-12/+0
| | | | | | | | GCC warned about it: ../../../glx/indirect_dispatch_swap.c:85:1: warning: ‘bswap_CARD64’ defined but not used [-Wunused-function] 85 | bswap_CARD64(const void *src) | ^~~~~~~~~~~~
* GLX: fix context render type queriesErik Kurzinger2020-11-263-5/+16
| | | | | | | | | | | Querying the GLX_RENDER_TYPE of a GLX context via glXQueryContext will currently return the render type of the context's FB config, which is a bitmask of GLX_RGBA_BIT / GLX_COLOR_INDEX_BIT / ... values. However, this query should really return the render type that was specified when creating the context, which is one of GLX_RGBA_TYPE / GLX_COLOR_INDEX_TYPE / .... To enable this, save the render type when creating a new context (defaulting to GLX_RGBA_TYPE if unspecified), and then include this value in the context attributes sent to clients.
* configure: Build hashtable for Xres and glvndOlivier Fourdan2020-11-091-1/+3
| | | | | | | | | | | | | | With autoconf, hashtable support is built along with Xres support. Yet, glvnd also use it, so when disabling Xres from configure, the build will fail at link time because hashtable functions are not available. Untie the build of hashtable from Xres support, just like meson build does. Signed-off-by: Olivier Fourdan <ofourdan@redhat.com> Closes: https://gitlab.freedesktop.org/xorg/xserver/-/issues/1091
* glx: set errorValue when returning GLXBadFBConfigPeter Harris2020-09-301-2/+7
| | | | | | | client->errorValue is already set in validGlxFBConfig. Set it in __glXDisp_CreateContextAttribsARB for consistency. Signed-off-by: Peter Harris <pharris@opentext.com>
* glx: Implement GLX_EXT_get_drawable_typeAdam Jackson2020-09-283-1/+11
| | | | | | | | | | Trivial extension to let the client query whether this is a window pixmap or pbuffer. Mostly for Mesa's convenience when setting up drawable state, but plausibly useful for apps and middleware as well. Upstream OpenGL Registry merge request: https://github.com/KhronosGroup/OpenGL-Registry/pull/425
* Fix spelling/wording issuesAlan Coopersmith2020-07-052-2/+2
| | | | | | | | Most (but not all) of these were found by using codespell --builtin clear,rare,usage,informal,code,names but not everything reported by that was fixed. Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
* glx: unbreak on Unix without /usr/include/drmJan Beich2020-05-271-0/+1
| | | | | | | | | | | In file included from ../glx/glxdri2.c:35: /usr/local/include/GL/internal/dri_interface.h:43:10: fatal error: 'drm.h' file not found #include <drm.h> ^~~~~~~ In file included from ../glx/glxdriswrast.c:39: /usr/local/include/GL/internal/dri_interface.h:43:10: fatal error: 'drm.h' file not found #include <drm.h> ^~~~~~~
* glx: Require screens match for share contexts for classic CreateContextAdam Jackson2020-03-301-0/+9
| | | | | | | | | | The GLX_ARB_create_context path (with which this should all get unified, someday, sigh) already enforces this, but the classic path does not. It's effectively assumed by the implementation anyway, so let's enforce it rather than do crashy things. Reviewed-by: Michel Dänzer <mdaenzer@redhat.com> Signed-off-by: Adam Jackson <ajax@redhat.com>
* glx: fixup symbol name for get_extensions functionVasily Khoruzhick2020-03-231-0/+10
| | | | | | | | | | | | | | | | glxProbeDriver() concatenates __DRI_DRIVER_GET_EXTENSIONS with driver name to get symbol name for get_extension function. Unfortunately that doesn't work for drivers that have hyphen in their name, e.g. sun4i-drm -- get_extensions() for these uses underscore instead. As result dlsym() doesn't find get_extension() function and AIGLX initialization fails resulting in following message in Xorg.0.log: (EE) AIGLX error: sun4i-drm does not export required DRI extension Replace all non-alpha-numeric characters with underscore to fix the issue. Signed-off-by: Vasily Khoruzhick <anarsoul@gmail.com>
* Revert "dri2: Don't make reference to noClientException"Adam Jackson2020-01-281-1/+1
| | | | | | | | | | It's true that the value would always be -1, if it's not zero, but it's usually zero is the problem. As a result we return failure from otherwise successful indirect GLX paths, which isn't very nice of us. This reverts commit 7d33ab0f8c7958b205076f71e4b47c24aace77fd. Fixes: https://gitlab.freedesktop.org/xorg/xserver/issues/211
* dix: Call SourceValidate before GetImageAdam Jackson2019-10-301-0/+1
| | | | | | | | | | | | | | | | | | | | | This ensures that any prep work for the drawable we're about to read from is already done before we call down to GetImage. This should be no functional change as most of the callers with a non-trivial SourceValidate are already wrapping GetImage and doing the equivalent thing, but we'll be simplifying that shortly. More importantly this ensures that if any of that prep work would generate events - like automatic compositing flushing rendering to a parent pixmap which then triggers damage - then it happens entirely before we start writing the GetImage reply header. Note that we do not do the same for GetSpans, but that's okay. The only way to get to GetSpans is through miCopyArea or miCopyPlane - where the callers must already call SourceValidate - or miGetImage - which this commit now protects with SourceValidate. Fixes: xorg/xserver#902 Reviewed-by: Michel Dänzer <mdaenzer@redhat.com>
* meson: Apparently 1.2 is < 1.2.0Adam Jackson2019-10-091-1/+1
| | | | Siiiigh.
* meson: Fix another reference to "gl" 9.2.0Adam Jackson2019-10-091-1/+1
| | | | Previous commit e6ef2b12 missed a spot.
* build: glx: Lower gl version to work with libglvndMarvin Schmidt2019-10-081-1/+1
| | | | | | | | | | | | | | | | | | | When using mesa with libglvnd support, mesa will no longer install the gl, glx, egl pkg-config files but instead let libglvnd provide them. libglvnd maintainers decided to change the versioning as it was mesa-specific previously. Now the libraries have versions of the API they expose[1]. This causes problems when building the X server: checking for glproto >= 1.4.17 gl >= 9.2.0... no configure: error: Package requirements (glproto >= 1.4.17 gl >= 9.2.0) were not met: Requested 'gl >= 9.2.0' but version of gl is 1.2 Lower the version requirement to 1.2 to allow building against libglvnd provided libraries [1] https://github.com/NVIDIA/libglvnd/commit/0dfaea2bcb7cdcc785f95e244223bd004a2d7fba
* glx: Disable GLX_EXT_import_context if !enableIndirectGLXAdam Jackson2019-08-261-2/+6
| | | | | | | | | | | | | | | GLX_EXT_import_context allows multiple clients to share the same indirect context. If you can't create an indirect context, you're certainly not going to be able to share one. Hide the extension from the server string if we've disabled indirect contexts. This turns piglit's tests from fail to skip when indirect contexts are disabled. Since GLX_EXT_import_context has been supported in xfree86-derived servers since day 1 (it was included in the initial GLX code drop from SGI), this is now also a hint to the client that indirect contexts are unlikely to work at all. Reviewed-by: Michel Dänzer <michel@daenzer.net>
* glx: Fix previous context validation in xorgGlxMakeCurrentAdam Jackson2019-08-201-3/+1
| | | | | | | | | | | | vnd has already verified that the context tag is valid before this gets called, and we only set the context tag private data to non-null for indirect clients. Mesa happens to be buggy and doesn't send MakeCurrent requests nearly as much as it should for direct contexts, but if you fix that, then unbinding a direct context would fail here with GLXBadContextTag. Sadly Mesa will still need to carry a workaround here for broken servers, but we should still fix the server.
* GLX: Set GlxServerExports::{major,minor}VersionAaron Plattner2019-05-211-2/+2
| | | | | | | | | | Commit 56c0a71fdd94a008e5d746261f70a713c4767f93 incremented the GLXSERVER_VENDOR_ABI_MINOR_VERSION define, but this define was not actually being used to set glxServer.minorVersion. Update the initializer for glxServer to use the correct version numbers. Signed-off-by: Aaron Plattner <aplattner@nvidia.com>
* Merge commit 'refs/merge-requests/194/head' of ↵Aaron Plattner2019-05-174-11/+79
|\ | | | | | | gitlab.freedesktop.org:xorg/xserver
| * GLX: Add a function to change a clients vendor list.Kyle Brenneman2019-05-173-0/+23
| | | | | | | | | | | | | | | | | | | | | | | | | | Add a new function, GlxServerExports::setClientScreenVendor, which will change the vendor that handles GLX requests for a screen, but only for requests from a specific client. v2: Increment the GLXVND minor version number. v3: Note the GLXVND version requirement for setClientScreenVendor. Signed-off-by: Aaron Plattner <aplattner@nvidia.com> Reviewed-by: Aaron Plattner <aplattner@nvidia.com> Reviewed-by: Adam Jackson <ajax@redhat.com>
| * GLX: Use the sending client for looking up XID'sKyle Brenneman2019-05-173-6/+26
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When GlxGetXIDMap looks up an unknown XID, it will now look up a vendor based on the screen number for the XID and the client that sent the current request. In GlxGetXIDMap, if the XID is for a regular X window, then it won't be in the (XID -> vendor) mapping, so we have to look up a vendor by screen number. With this change, GlxGetXIDMap will use the (screen -> vendor) map for whichever client sent the current request, instead of using the global (screen -> vendor) map. Since GlxGetXIDMap doesn't take a ClientPtr argument, GlxDispatchRequest will store the client for the current request in a global variable. That way, the ABI for GLXVND doesn't need to change. v2: Fix an error check in GlxDispatchRequest. Signed-off-by: Aaron Plattner <aplattner@nvidia.com> Reviewed-by: Aaron Plattner <aplattner@nvidia.com> Reviewed-by: Adam Jackson <ajax@redhat.com>
| * GLX: Add a per-client vendor mapping.Kyle Brenneman2019-05-173-5/+30
| | | | | | | | | | | | | | | | | | | | | | Each client now has its own (screen, vendor) mapping. Currently, it's just a copy of the global mapping, but later changes will allow it to change. Signed-off-by: Aaron Plattner <aplattner@nvidia.com> Reviewed-by: Aaron Plattner <aplattner@nvidia.com> Reviewed-by: Adam Jackson <ajax@redhat.com>
* | glx: Fix potential crashes in glXWait{GL,X}Adam Jackson2019-05-141-2/+2
| | | | | | | | | | | | | | glxc->drawPriv will be NULL if the context is direct, or if it is current but without a bound drawable. Mesa's libGL won't normally emit protocol for direct contexts for these calls, but a malign client could still crash the server.
* | glx: Fix GLX_CONTEXT_RELEASE_BEHAVIOR_ARB handlingAdam Jackson2019-05-012-6/+5
| | | | | | | | | | | | | | None of this was getting compiled because we hadn't defined the macro (and aren't getting them from <GL/glxext.h> because reasons). Fix that. Fixes: xorg/xserver#684
* | meson: Fix value of libglxvnd in -Dglx=false buildJon Turney2019-04-301-1/+1
|/ | | | hw/vfb/meson.build:7:0: ERROR: '' is not a target.
* vnd: Fix a silly memory leakAdam Jackson2019-01-161-4/+0
| | | | | | | 'disp' was already allocated by LookupVendorPrivDispatch above, clobbering it will do no good. Signed-off-by: Adam Jackson <ajax@redhat.com>
* glx: check for indirect context in CreateContextAttribsARB()Olivier Fourdan2018-09-101-0/+12
| | | | | | | | | | | | | | | | | | | | Commit 99f0365b "Add a command line argument for disabling indirect GLX" added a test to check if indirect context are enabled in `DoCreateContext()` but `__glXDisp_CreateContextAttribsARB()` doesn't use `DoCreateContext()` and doesn't check if indirect context is enabled. As a result, clients can still manage to create indirect contexts using `glXCreateContextAttribsARB()` even if indirect contexts are disabled, which can possibly crash Xservers such as Xwayland or Xephyr when the context is destroyed. To avoid the issue, check for `enableIndirectGLX` in `__glXDisp_CreateContextAttribsARB()` as well. Fixes: 99f0365b "Add a command line argument for disabling indirect GLX" Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=107508 Signed-off-by: Olivier Fourdan <ofourdan@redhat.com>
* glx/vndcmds: Fix vendor hash table key sizeVladimir Panteleev2018-06-211-1/+1
| | | | | | | | | | The keySize parameter of the hashing/comparison functions was incorrectly specified to be sizeof(void*), even though the keys of this hashtable are CARD32. Fixes address sanitizer failure on 64-bit builds. Reviewed-by: Adam Jackson <ajax@redhat.com>
* glx: Be sure to set an error for ghost contextsAdam Jackson2018-05-081-1/+3
| | | | | | | Otherwise the caller is going to return garbage memory for the error value. Signed-off-by: Adam Jackson <ajax@redhat.com>
* glx: Require depth > 12 for GLX visualsAdam Jackson2018-04-241-2/+3
| | | | | | | | | | | | | | fb is happy to do TrueColor to 8bpp drawables, but mesa is not. Depth 12 is the biggest pseudocolor anyone ever really did, and 15 is the least truecolor. Without this Xvfb at depth 8 would "have" GLX, but no vendors would actually back any of the screens. libGL will attempt to call GLXQueryServerString to figure out the GLX version, and vnd will throw an error because there's no vendor to dispatch that to, and then clients crash. Signed-off-by: Adam Jackson <ajax@redhat.com>
* vnd: Disable GLX if no vendors successfully initializedAdam Jackson2018-04-243-3/+12
| | | | Signed-off-by: Adam Jackson <ajax@redhat.com>
* meson: Fix indenting in glx/meson.buildLyude Paul2018-04-191-2/+2
| | | | | | | No functional changes, just fixing a tabs vs. space error I noticed Signed-off-by: Lyude Paul <lyude@redhat.com> Reviewed-by: Adam Jackson <ajax@redhat.com>
* glx: Do not call into Composite if it is disabled.Michal Srb2018-04-102-41/+55
| | | | | | | | | | | Otherwise X server crashes if GLX is enabled and Composite disabled. For example the compIsAlternateVisual function will try to lookup CompScreenPtr using the CompScreenPrivateKey, but that was never initialized if Composite is disabled. Fixes: f84e59a4f4. ("glx: Duplicate relevant fbconfigs for compositing visuals") Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=104993 Signed-off-by: Michal Srb <msrb@suse.com>
* GLX: Fix a use after free error with the GLVND vendor handle.Kyle Brenneman2018-04-091-6/+7
| | | | | | | | | | | The GLVND layer will destroy all of the vendor handles at the end of each server generation, but the GLX module then tries to re-use the same (now-freed) handle in xorgGlxServerInit at the start of the next generation. In xorgGlxCloseExtension, explicitly destroy the vendor handle and set it to NULL so that the next call to xorgGlxServerInit will recreate it. Reviewed-by: Adam Jackson <ajax@redhat.com>
* meson: Distribute more SDK headersThierry Reding2018-04-021-0/+6
| | | | | | | | | | Install missing headers to the SDK directory to allow external modules to properly build against the SDK. After this commit, the list of files installed in the SDK include directory is the same as the list of files installed by the autotools-based build. Reviewed-by: Adam Jackson <ajax@redhat.com> Signed-off-by: Thierry Reding <treding@nvidia.com>
* Don't delete GLX's extensionInitCallback list during a reset.Kyle Brenneman2018-03-281-3/+12
| | | | | | | | | | | | | | | | When a callback list is initialized using CreateCallbackList via AddCallback, the list gets added to the listsToCleanup array, and as a result the list gets deleted at the end of the server generation. But, vendor libraries add themselves to that callback list only once, not once per generation, so if you delete the list, then no vendor will register itself on the next generation, and GLX breaks. Instead, use a static CallbackListRec for the extensionInitCallback list. That way, it doesn't get added to listsToCleanup, and doesn't get deleted during a reset. Reviewed-by: Adam Jackson <ajax@redhat.com>
* glx: honor LIBGL_DRIVERS_PATH when loading DRI driversNicolai Hähnle2018-03-211-4/+34
| | | | | | | | | | | | Allow switching to another driver build without a full installation. Glamor already takes LIBGL_DRIVERS_PATH into account, so this change makes sure that the same driver is used in both parts of the server. Signed-off-by: Nicolai Hähnle <nicolai.haehnle@amd.com> Reviewed-by: Ben Crocker <bcrocker@redhat.com> Reviewed-by: Antoine Martin <antoine@nagafix.co.uk> Tested-by: Ben Crocker <bcrocker@redhat.com>
* glx: Add vndserver.h to the SDKAdam Jackson2018-02-281-2/+4
| | | | | | Also unbreak 'make distcheck', sigh autotools. Signed-off-by: Adam Jackson <ajax@redhat.com>
* glx: Don't pass NULL to glxGetClientMichel Dänzer2018-02-261-2/+2
| | | | | | | | | | These guards were dropped by the commit below, but it turns out they're needed. Fixes crash on VT switch. Fixes: d8ec33fe0542 ("glx: Use vnd layer for dispatch (v4)") Bugzilla: https://bugs.freedesktop.org/105233 Signed-off-by: Michel Dänzer <michel.daenzer@amd.com> Reviewed-by: Adam Jackson <ajax@redhat.com>
* glx: Fix indirect no-config contextsAdam Jackson2018-02-261-0/+3
| | | | | | | We would throw BadValue here for the GLX_SCREEN attribute. The upper dispatch layer already checks this, we can ignore it here. Signed-off-by: Adam Jackson <ajax@redhat.com>
* glx: Enable GLX_ARB_create_context_no_error (v2)Adam Jackson2018-02-266-1/+18
| | | | | | | | | | | | This is mostly for the client library's convenience, if this extension is listed then it can know the attribute won't be rejected. Note that we don't honor this attribute for indirect contexts. That's fine, we don't want to introduce undefined behavior into a potentially privileged process. v2: Remember to ignore the attribute (Eric Anholt) Signed-off-by: Adam Jackson <ajax@redhat.com>
* glx: set the version we implement in GlxServerExportsEmil Velikov2018-02-211-2/+2
| | | | | | | | | | Set the major/minor version it's currently implemented, not the one provided by the GLXSERVER_VENDOR_ABI_{MAJOR,MINOR}_VERSION macros. Those are identical for now, but can change in the future. Signed-off-by: Emil Velikov <emil.velikov@collabora.com> Reviewed-by: Adam Jackson <ajax@redhat.com>
* glx: use C99 initializers for GlxServerExportsEmil Velikov2018-02-211-20/+20
| | | | | Signed-off-by: Emil Velikov <emil.velikov@collabora.com> Reviewed-by: Adam Jackson <ajax@redhat.com>
* glx: NULL check the correct argument in dispatch_GLXVendorPrivEmil Velikov2018-02-211-3/+4
| | | | | | | | malloc can return NULL, unlike GetVendorDispatchFunc. The latter provides DispatchBadRequest. Signed-off-by: Emil Velikov <emil.velikov@collabora.com> Reviewed-by: Adam Jackson <ajax@redhat.com>
* glx: keep glvnd_vendor a private [static] variableEmil Velikov2018-02-211-3/+5
| | | | | Signed-off-by: Emil Velikov <emil.velikov@collabora.com> Reviewed-by: Adam Jackson <ajax@redhat.com>
* dri2: warning fixAdam Jackson2018-02-141-1/+1
| | | | | | | | | | | /home/ajax/git/xserver/at/../glx/glxdri2.c: In function ‘create_driver_context’: /home/ajax/git/xserver/at/../glx/glxdri2.c:444:5: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement] const __DRIconfig *driConfig = config ? config->driConfig : NULL; I don't know why autotools has decided not to be C99 but at least it's trivial to fix. Signed-off-by: Adam Jackson <ajax@redhat.com>
* glx: Large commands are context state, not client stateAdam Jackson2018-02-145-61/+61
| | | | | | | | | There's no reason a multithreaded client shouldn't be allowed to interleave other requests (for other contexts) with a RenderLarge. Move the check into __glXForceCurrent, and store the state in the context not the client. Signed-off-by: Adam Jackson <ajax@redhat.com>
* glx: Use vnd layer for dispatch (v4)Adam Jackson2018-02-148-369/+297
| | | | | | | | | | | | | | | | | | | | | | | | | The big change here is MakeCurrent and context tag tracking. We now delegate context tags entirely to the vnd layer, and simply store a pointer to the context state as the tag data. If a context is deleted while it's current, we allocate a fake ID for the context and move the context state there, so the tag data still points to a real context. As a result we can stop trying so hard to detach the client from contexts at disconnect time and just let resource destruction handle it. Since vnd handles all the MakeCurrent protocol now, our request handlers for it can just be return BadImplementation. We also remove a bunch of LEGAL_NEW_RESOURCE, because now by the time we're called vnd has already allocated its tracking resource on that XID. v2: Update to match v2 of the vnd import, and remove more redundant work like request length checks. v3: Add/remove the XID map from the vendor private thunk, not the backend. (Kyle Brenneman) v4: Fix deletion of ghost contexts (Kyle Brenneman) Signed-off-by: Adam Jackson <ajax@redhat.com>
* glx: Import glxvnd server module (v2)Kyle Brenneman2018-02-149-1/+1816
| | | | | | | | | | | | | | | This is based on an out-of-tree module written by Kyle: https://github.com/kbrenneman/libglvnd/tree/server-libglx I (ajax) did a bunch of cosmetic fixes, ported it off xfree86 API, added request length checks, and fixed a minor bug or two. v2: Use separate functions to set/get a context tag's private data, and call the backend's MakeCurrent when a client disconnects to unbind the context. (Kyle Brenneman) Signed-off-by: Adam Jackson <ajax@redhat.com>
* glx: Only assign 8 bpc fbconfigs for composite visuals.Mario Kleiner2018-02-061-0/+3
| | | | | | | | | | | | | | | | | | | | | | Commit 91c42093b248 ("glx: Duplicate relevant fbconfigs for compositing visuals") adds many new depth 32 fbconfigs as composite visuals. On a X-Screen running at depth 24, this also adds bgra 10-10-10-2 fbconigs, as they also have config.rgbBits == 32, but these are not displayable on a depth 24 screen, leading to visually corrupted desktops under some compositors, e.g., fdo bug 104597 "Compton weird colors" when running compton with "compton --backend glx". Be more conservative for now and only select fbconfigs with 8 bpc red, green, blue components for composite visuals. Fixes: 91c42093b248 ("glx: Duplicate relevant fbconfigs for compositing visuals") Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=104597 Signed-off-by: Mario Kleiner <mario.kleiner.de@gmail.com> Reviewed-by: Thomas Hellstrom <thellstrom@vmware.com> Reviewed-by: Adam Jackson <ajax@redhat.com>