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 <[email protected]>

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 <[email protected]>
Reviewed-by: Brian Paul <[email protected]>
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: [email protected]
In-Reply-To: <[email protected]>
References: <[email protected]>
TO: "Thomas Hellström (VMware)" <[email protected]>
CC: [email protected], Thomas Hellstrom <[email protected]>, Brian Paul 
<[email protected]>, Thomas Hellstrom <[email protected]>, Brian Paul 
<[email protected]>
CC: Thomas Hellstrom <[email protected]>, Brian Paul <[email protected]>

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 <[email protected]>

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 <[email protected]>
:::::: CC: Thomas Hellstrom <[email protected]>

---
0-DAY kernel test infrastructure                 Open Source Technology Center
https://lists.01.org/hyperkitty/list/[email protected] Intel Corporation


_______________________________________________
dri-devel mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/dri-devel

Reply via email to