drm/vmwgfx: Use dma-coherent memory for high-bandwidth port messaging
Thomas Hellström (VMware)
thomas_os at shipmail.org
Wed Nov 13 20:11:54 UTC 2019
Hi, Nathan,
On 11/13/19 9:01 PM, Nathan Chancellor wrote:
> On Wed, Nov 13, 2019 at 10:51:42AM +0100, Thomas Hellström (VMware) wrote:
>> From: Thomas Hellstrom <thellstrom at vmware.com>
>>
>> With AMD-SEV high-bandwidth port messaging runs into trouble since the
>> message content is encrypted using the vm-specific key, and the
>> hypervisor is unable to read it.
>>
>> So use unencrypted dma-coherent bounce buffers for temporary message
>> storage space. Allocating that memory is expensive so a future
>> optimization might include a static unencrypted memory area for messages.
>>
>> Signed-off-by: Thomas Hellstrom <thellstrom at vmware.com>
>> Reviewed-by: Brian Paul <brianp at vmware.com>
> Hi Thomas,
>
> The 0day team has been doing clang builds for us and sending the results
> to our mailing list for triage; this patch causes the following warning.
> Seems legitimate, mind taking a look at it and resolving it how you see
> fit?
>
> Cheers,
> Nathan
This should be harmless as dma_free_coherent() with reply == NULL is a
nop, but anyway I'll respin to silence the warning.
Thanks,
Thomas
> On Thu, Nov 14, 2019 at 03:36:44AM +0800, kbuild test robot wrote:
>> CC: kbuild-all at lists.01.org
>> In-Reply-To: <20191113095144.2981-1-thomas_os at shipmail.org>
>> References: <20191113095144.2981-1-thomas_os at shipmail.org>
>> TO: "Thomas Hellström (VMware)" <thomas_os at shipmail.org>
>> CC: dri-devel at lists.freedesktop.org, Thomas Hellstrom <thellstrom at vmware.com>, Brian Paul <brianp at vmware.com>, Thomas Hellstrom <thellstrom at vmware.com>, Brian Paul <brianp at vmware.com>
>> CC: Thomas Hellstrom <thellstrom at vmware.com>, Brian Paul <brianp at vmware.com>
>>
>> Hi "Thomas,
>>
>> I love your patch! Perhaps something to improve:
>>
>> [auto build test WARNING on linus/master]
>> [also build test WARNING on v5.4-rc7 next-20191113]
>> [if your patch is applied to the wrong git tree, please drop us a note to help
>> improve the system. BTW, we also suggest to use '--base' option to specify the
>> base tree in git format-patch, please see https://stackoverflow.com/a/37406982]
>>
>> url: https://github.com/0day-ci/linux/commits/Thomas-Hellstr-m-VMware/drm-vmwgfx-Use-dma-coherent-memory-for-high-bandwidth-port-messaging/20191114-020818
>> base: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 0e3f1ad80fc8cb0c517fd9a9afb22752b741fa76
>> config: x86_64-rhel-7.6 (attached as .config)
>> compiler: clang version 10.0.0 (git://gitmirror/llvm_project 335ac2eb662ce5f1888e2a50310b01fba2d40d68)
>> reproduce:
>> # save the attached .config to linux build tree
>> make ARCH=x86_64
>>
>> If you fix the issue, kindly add following tag
>> Reported-by: kbuild test robot <lkp at intel.com>
>>
>> All warnings (new ones prefixed by >>):
>>
>>>> drivers/gpu/drm/vmwgfx/vmwgfx_msg.c:441:6: warning: variable 'reply_handle' is used uninitialized whenever '||' condition is true [-Wsometimes-uninitialized]
>> if (vmw_send_msg(&channel, msg) ||
>> ^~~~~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/gpu/drm/vmwgfx/vmwgfx_msg.c:467:47: note: uninitialized use occurs here
>> dma_free_coherent(dev, reply_len + 1, reply, reply_handle);
>> ^~~~~~~~~~~~
>> drivers/gpu/drm/vmwgfx/vmwgfx_msg.c:441:6: note: remove the '||' if its condition is always false
>> if (vmw_send_msg(&channel, msg) ||
>> ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/gpu/drm/vmwgfx/vmwgfx_msg.c:421:37: note: initialize the variable 'reply_handle' to silence this warning
>> dma_addr_t req_handle, reply_handle;
>> ^
>> = 0
>> 1 warning generated.
>>
>> vim +441 drivers/gpu/drm/vmwgfx/vmwgfx_msg.c
>>
>> 89da76fde68de1 Sinclair Yeh 2016-04-27 400
>> 89da76fde68de1 Sinclair Yeh 2016-04-27 401
>> 89da76fde68de1 Sinclair Yeh 2016-04-27 402 /**
>> 89da76fde68de1 Sinclair Yeh 2016-04-27 403 * vmw_host_get_guestinfo: Gets a GuestInfo parameter
>> 89da76fde68de1 Sinclair Yeh 2016-04-27 404 *
>> 89da76fde68de1 Sinclair Yeh 2016-04-27 405 * Gets the value of a GuestInfo.* parameter. The value returned will be in
>> 89da76fde68de1 Sinclair Yeh 2016-04-27 406 * a string, and it is up to the caller to post-process.
>> 89da76fde68de1 Sinclair Yeh 2016-04-27 407 *
>> 6bdb21230a2a01 Thomas Hellstrom 2019-11-13 408 * @dev: Pointer to struct device used for coherent memory allocation
>> 89da76fde68de1 Sinclair Yeh 2016-04-27 409 * @guest_info_param: Parameter to get, e.g. GuestInfo.svga.gl3
>> 89da76fde68de1 Sinclair Yeh 2016-04-27 410 * @buffer: if NULL, *reply_len will contain reply size.
>> 89da76fde68de1 Sinclair Yeh 2016-04-27 411 * @length: size of the reply_buf. Set to size of reply upon return
>> 89da76fde68de1 Sinclair Yeh 2016-04-27 412 *
>> 89da76fde68de1 Sinclair Yeh 2016-04-27 413 * Returns: 0 on success
>> 89da76fde68de1 Sinclair Yeh 2016-04-27 414 */
>> 6bdb21230a2a01 Thomas Hellstrom 2019-11-13 415 int vmw_host_get_guestinfo(struct device *dev, const char *guest_info_param,
>> 89da76fde68de1 Sinclair Yeh 2016-04-27 416 char *buffer, size_t *length)
>> 89da76fde68de1 Sinclair Yeh 2016-04-27 417 {
>> 89da76fde68de1 Sinclair Yeh 2016-04-27 418 struct rpc_channel channel;
>> 89da76fde68de1 Sinclair Yeh 2016-04-27 419 char *msg, *reply = NULL;
>> 6073a09210e06f Himanshu Jha 2018-03-22 420 size_t reply_len = 0;
>> 6bdb21230a2a01 Thomas Hellstrom 2019-11-13 421 dma_addr_t req_handle, reply_handle;
>> 6bdb21230a2a01 Thomas Hellstrom 2019-11-13 422 int req_len = strlen("info-get ") + strlen(guest_info_param) + 1;
>> 89da76fde68de1 Sinclair Yeh 2016-04-27 423
>> 89da76fde68de1 Sinclair Yeh 2016-04-27 424 if (!vmw_msg_enabled)
>> 89da76fde68de1 Sinclair Yeh 2016-04-27 425 return -ENODEV;
>> 89da76fde68de1 Sinclair Yeh 2016-04-27 426
>> 89da76fde68de1 Sinclair Yeh 2016-04-27 427 if (!guest_info_param || !length)
>> 89da76fde68de1 Sinclair Yeh 2016-04-27 428 return -EINVAL;
>> 89da76fde68de1 Sinclair Yeh 2016-04-27 429
>> 6bdb21230a2a01 Thomas Hellstrom 2019-11-13 430 msg = dma_alloc_coherent(dev, req_len, &req_handle, GFP_KERNEL);
>> 1a4adb05632e90 Ravikant B Sharma 2016-11-08 431 if (!msg) {
>> 3fbeccf8ceb165 Thomas Hellstrom 2018-06-20 432 DRM_ERROR("Cannot allocate memory to get guest info \"%s\".",
>> 3fbeccf8ceb165 Thomas Hellstrom 2018-06-20 433 guest_info_param);
>> 89da76fde68de1 Sinclair Yeh 2016-04-27 434 return -ENOMEM;
>> 89da76fde68de1 Sinclair Yeh 2016-04-27 435 }
>> 6bdb21230a2a01 Thomas Hellstrom 2019-11-13 436 snprintf(msg, req_len, "info-get %s", guest_info_param);
>> 89da76fde68de1 Sinclair Yeh 2016-04-27 437
>> f37230c0ad4810 Thomas Hellstrom 2018-05-23 438 if (vmw_open_channel(&channel, RPCI_PROTOCOL_NUM))
>> f37230c0ad4810 Thomas Hellstrom 2018-05-23 439 goto out_open;
>> 89da76fde68de1 Sinclair Yeh 2016-04-27 440
>> f37230c0ad4810 Thomas Hellstrom 2018-05-23 @441 if (vmw_send_msg(&channel, msg) ||
>> 6bdb21230a2a01 Thomas Hellstrom 2019-11-13 442 vmw_recv_msg(dev, &channel, (void *) &reply, &reply_len,
>> 6bdb21230a2a01 Thomas Hellstrom 2019-11-13 443 &reply_handle))
>> f37230c0ad4810 Thomas Hellstrom 2018-05-23 444 goto out_msg;
>> 89da76fde68de1 Sinclair Yeh 2016-04-27 445
>> f37230c0ad4810 Thomas Hellstrom 2018-05-23 446 vmw_close_channel(&channel);
>> 89da76fde68de1 Sinclair Yeh 2016-04-27 447 if (buffer && reply && reply_len > 0) {
>> 89da76fde68de1 Sinclair Yeh 2016-04-27 448 /* Remove reply code, which are the first 2 characters of
>> 89da76fde68de1 Sinclair Yeh 2016-04-27 449 * the reply
>> 89da76fde68de1 Sinclair Yeh 2016-04-27 450 */
>> 89da76fde68de1 Sinclair Yeh 2016-04-27 451 reply_len = max(reply_len - 2, (size_t) 0);
>> 89da76fde68de1 Sinclair Yeh 2016-04-27 452 reply_len = min(reply_len, *length);
>> 89da76fde68de1 Sinclair Yeh 2016-04-27 453
>> 89da76fde68de1 Sinclair Yeh 2016-04-27 454 if (reply_len > 0)
>> 89da76fde68de1 Sinclair Yeh 2016-04-27 455 memcpy(buffer, reply + 2, reply_len);
>> 89da76fde68de1 Sinclair Yeh 2016-04-27 456 }
>> 89da76fde68de1 Sinclair Yeh 2016-04-27 457
>> 89da76fde68de1 Sinclair Yeh 2016-04-27 458 *length = reply_len;
>> 89da76fde68de1 Sinclair Yeh 2016-04-27 459
>> 6bdb21230a2a01 Thomas Hellstrom 2019-11-13 460 dma_free_coherent(dev, reply_len + 1, reply, reply_handle);
>> 6bdb21230a2a01 Thomas Hellstrom 2019-11-13 461 dma_free_coherent(dev, req_len, msg, req_handle);
>> 89da76fde68de1 Sinclair Yeh 2016-04-27 462
>> f37230c0ad4810 Thomas Hellstrom 2018-05-23 463 return 0;
>> f37230c0ad4810 Thomas Hellstrom 2018-05-23 464
>> f37230c0ad4810 Thomas Hellstrom 2018-05-23 465 out_msg:
>> f37230c0ad4810 Thomas Hellstrom 2018-05-23 466 vmw_close_channel(&channel);
>> 6bdb21230a2a01 Thomas Hellstrom 2019-11-13 467 dma_free_coherent(dev, reply_len + 1, reply, reply_handle);
>> f37230c0ad4810 Thomas Hellstrom 2018-05-23 468 out_open:
>> f37230c0ad4810 Thomas Hellstrom 2018-05-23 469 *length = 0;
>> f37230c0ad4810 Thomas Hellstrom 2018-05-23 470
>> 6bdb21230a2a01 Thomas Hellstrom 2019-11-13 471 DRM_ERROR("Failed to get guest info \"%s\".", guest_info_param);
>> 6bdb21230a2a01 Thomas Hellstrom 2019-11-13 472 dma_free_coherent(dev, req_len, msg, req_handle);
>> f37230c0ad4810 Thomas Hellstrom 2018-05-23 473 return -EINVAL;
>> 89da76fde68de1 Sinclair Yeh 2016-04-27 474 }
>> 89da76fde68de1 Sinclair Yeh 2016-04-27 475
>>
>> :::::: The code at line 441 was first introduced by commit
>> :::::: f37230c0ad481091bc136788ff8b37dc86300c6d drm/vmwgfx: Fix host logging / guestinfo reading error paths
>>
>> :::::: TO: Thomas Hellstrom <thellstrom at vmware.com>
>> :::::: CC: Thomas Hellstrom <thellstrom at vmware.com>
>>
>> ---
>> 0-DAY kernel test infrastructure Open Source Technology Center
>> https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org Intel Corporation
More information about the dri-devel
mailing list