Skip to content

Commit 67f4fe8

Browse files
committed
drm/vmwgfx: Optimize initial sizes of cotables
jira VULN-8161 cve CVE-2023-5633 commit-author Zack Rusin <zackr@vmware.com> commit 148e5f5 It's important to get the initial size of cotables right because otherwise every app needs to start with a synchronous cotable resize. This has an measurable impact on system wide performance but is not relevant for long running single full screen apps for which the cotable resizes will happen early in the lifecycle and will continue running just fine. To eliminate the initial cotable resizes match the initial sizes to what the userspace expects. The actual result of the patch is simply setting the initial size of two of the cotables to a size that will align them to two pages instead of one. For a piglit run, before: name | total | per frame | per sec vmw_cotable_resize | 1405 | 0.12 | 1.58 vmw_execbuf_ioctl | 290805 | 25.43 | 326.05 After: name | total | per frame | per sec vmw_cotable_resize | 4 | 0.00 | 0.00 vmw_execbuf_ioctl | 281673 | 25.10 | 274.68 Signed-off-by: Zack Rusin <zackr@vmware.com> Reviewed-by: Michael Banack <banackm@vmware.com> Link: https://patchwork.freedesktop.org/patch/msgid/20221022040236.616490-17-zack@kde.org (cherry picked from commit 148e5f5) Signed-off-by: Sultan Alsawaf <sultan@ciq.com>
1 parent 4bca7f9 commit 67f4fe8

File tree

1 file changed

+14
-2
lines changed

1 file changed

+14
-2
lines changed

drivers/gpu/drm/vmwgfx/vmwgfx_cotable.c

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,12 +73,24 @@ struct vmw_cotable_info {
7373
bool);
7474
};
7575

76+
77+
/*
78+
* Getting the initial size right is difficult because it all depends
79+
* on what the userspace is doing. The sizes will be aligned up to
80+
* a PAGE_SIZE so we just want to make sure that for majority of apps
81+
* the initial number of entries doesn't require an immediate resize.
82+
* For all cotables except SVGACOTableDXElementLayoutEntry and
83+
* SVGACOTableDXBlendStateEntry the initial number of entries fits
84+
* within the PAGE_SIZE. For SVGACOTableDXElementLayoutEntry and
85+
* SVGACOTableDXBlendStateEntry we want to reserve two pages,
86+
* because that's what all apps will require initially.
87+
*/
7688
static const struct vmw_cotable_info co_info[] = {
7789
{1, sizeof(SVGACOTableDXRTViewEntry), &vmw_view_cotable_list_destroy},
7890
{1, sizeof(SVGACOTableDXDSViewEntry), &vmw_view_cotable_list_destroy},
7991
{1, sizeof(SVGACOTableDXSRViewEntry), &vmw_view_cotable_list_destroy},
80-
{1, sizeof(SVGACOTableDXElementLayoutEntry), NULL},
81-
{1, sizeof(SVGACOTableDXBlendStateEntry), NULL},
92+
{PAGE_SIZE/sizeof(SVGACOTableDXElementLayoutEntry) + 1, sizeof(SVGACOTableDXElementLayoutEntry), NULL},
93+
{PAGE_SIZE/sizeof(SVGACOTableDXBlendStateEntry) + 1, sizeof(SVGACOTableDXBlendStateEntry), NULL},
8294
{1, sizeof(SVGACOTableDXDepthStencilEntry), NULL},
8395
{1, sizeof(SVGACOTableDXRasterizerStateEntry), NULL},
8496
{1, sizeof(SVGACOTableDXSamplerEntry), NULL},

0 commit comments

Comments
 (0)