All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] drm/vmwgfx: Use dma-coherent memory for high-bandwidth port messaging
@ 2019-11-13  9:51 Thomas Hellström (VMware)
  2019-11-13  9:51 ` [PATCH] drm/vmwgfx: Use coherent memory if there are dma mapping size restrictions Thomas Hellström (VMware)
                   ` (2 more replies)
  0 siblings, 3 replies; 6+ messages in thread
From: Thomas Hellström (VMware) @ 2019-11-13  9:51 UTC (permalink / raw)
  To: dri-devel; +Cc: Thomas Hellstrom, Brian Paul

From: Thomas Hellstrom <thellstrom@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@vmware.com>
Reviewed-by: Brian Paul <brianp@vmware.com>
---
 drivers/gpu/drm/vmwgfx/vmwgfx_drv.c |  4 +--
 drivers/gpu/drm/vmwgfx/vmwgfx_drv.h |  4 +--
 drivers/gpu/drm/vmwgfx/vmwgfx_msg.c | 45 +++++++++++++++++------------
 3 files changed, 31 insertions(+), 22 deletions(-)

diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
index 81a95651643f..fc0283659c41 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
@@ -908,13 +908,13 @@ static int vmw_driver_load(struct drm_device *dev, unsigned long chipset)
 
 	snprintf(host_log, sizeof(host_log), "vmwgfx: %s-%s",
 		VMWGFX_REPO, VMWGFX_GIT_VERSION);
-	vmw_host_log(host_log);
+	vmw_host_log(dev->dev, host_log);
 
 	memset(host_log, 0, sizeof(host_log));
 	snprintf(host_log, sizeof(host_log), "vmwgfx: Module Version: %d.%d.%d",
 		VMWGFX_DRIVER_MAJOR, VMWGFX_DRIVER_MINOR,
 		VMWGFX_DRIVER_PATCHLEVEL);
-	vmw_host_log(host_log);
+	vmw_host_log(dev->dev, host_log);
 
 	if (dev_priv->enable_fb) {
 		vmw_fifo_resource_inc(dev_priv);
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h
index b18842f73081..a77bf72cb9ac 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h
@@ -1389,9 +1389,9 @@ int vmw_bo_cpu_blit(struct ttm_buffer_object *dst,
 		    struct vmw_diff_cpy *diff);
 
 /* Host messaging -vmwgfx_msg.c: */
-int vmw_host_get_guestinfo(const char *guest_info_param,
+int vmw_host_get_guestinfo(struct device *dev, const char *guest_info_param,
 			   char *buffer, size_t *length);
-int vmw_host_log(const char *log);
+int vmw_host_log(struct device *dev, const char *log);
 
 /* VMW logging */
 
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_msg.c b/drivers/gpu/drm/vmwgfx/vmwgfx_msg.c
index b6c5e4c2ac3c..f439b7afa3a5 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_msg.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_msg.c
@@ -304,8 +304,8 @@ STACK_FRAME_NON_STANDARD(vmw_send_msg);
  * @msg:  [OUT] message received from the host
  * @msg_len: message length
  */
-static int vmw_recv_msg(struct rpc_channel *channel, void **msg,
-			size_t *msg_len)
+static int vmw_recv_msg(struct device *dev, struct rpc_channel *channel,
+			void **msg, size_t *msg_len, dma_addr_t *dma_handle)
 {
 	unsigned long eax, ebx, ecx, edx, si, di;
 	char *reply;
@@ -339,7 +339,8 @@ static int vmw_recv_msg(struct rpc_channel *channel, void **msg,
 			return 0;
 
 		reply_len = ebx;
-		reply     = kzalloc(reply_len + 1, GFP_KERNEL);
+		reply = dma_alloc_coherent(dev, reply_len + 1, dma_handle,
+					   GFP_KERNEL);
 		if (!reply) {
 			DRM_ERROR("Cannot allocate memory for host message reply.\n");
 			return -ENOMEM;
@@ -350,7 +351,7 @@ static int vmw_recv_msg(struct rpc_channel *channel, void **msg,
 		ebx = vmw_port_hb_in(channel, reply, reply_len,
 				     !!(HIGH_WORD(ecx) & MESSAGE_STATUS_HB));
 		if ((HIGH_WORD(ebx) & MESSAGE_STATUS_SUCCESS) == 0) {
-			kfree(reply);
+			dma_free_coherent(dev, reply_len + 1, reply, *dma_handle);
 			reply = NULL;
 			if ((HIGH_WORD(ebx) & MESSAGE_STATUS_CPT) != 0) {
 				/* A checkpoint occurred. Retry. */
@@ -374,7 +375,7 @@ static int vmw_recv_msg(struct rpc_channel *channel, void **msg,
 			eax, ebx, ecx, edx, si, di);
 
 		if ((HIGH_WORD(ecx) & MESSAGE_STATUS_SUCCESS) == 0) {
-			kfree(reply);
+			dma_free_coherent(dev, reply_len + 1, reply, *dma_handle);
 			reply = NULL;
 			if ((HIGH_WORD(ecx) & MESSAGE_STATUS_CPT) != 0) {
 				/* A checkpoint occurred. Retry. */
@@ -404,18 +405,21 @@ STACK_FRAME_NON_STANDARD(vmw_recv_msg);
  * Gets the value of a  GuestInfo.* parameter.  The value returned will be in
  * a string, and it is up to the caller to post-process.
  *
+ * @dev: Pointer to struct device used for coherent memory allocation
  * @guest_info_param:  Parameter to get, e.g. GuestInfo.svga.gl3
  * @buffer: if NULL, *reply_len will contain reply size.
  * @length: size of the reply_buf.  Set to size of reply upon return
  *
  * Returns: 0 on success
  */
-int vmw_host_get_guestinfo(const char *guest_info_param,
+int vmw_host_get_guestinfo(struct device *dev, const char *guest_info_param,
 			   char *buffer, size_t *length)
 {
 	struct rpc_channel channel;
 	char *msg, *reply = NULL;
 	size_t reply_len = 0;
+	dma_addr_t req_handle, reply_handle;
+	int req_len = strlen("info-get ") + strlen(guest_info_param) + 1;
 
 	if (!vmw_msg_enabled)
 		return -ENODEV;
@@ -423,18 +427,20 @@ int vmw_host_get_guestinfo(const char *guest_info_param,
 	if (!guest_info_param || !length)
 		return -EINVAL;
 
-	msg = kasprintf(GFP_KERNEL, "info-get %s", guest_info_param);
+	msg = dma_alloc_coherent(dev, req_len, &req_handle, GFP_KERNEL);
 	if (!msg) {
 		DRM_ERROR("Cannot allocate memory to get guest info \"%s\".",
 			  guest_info_param);
 		return -ENOMEM;
 	}
+	snprintf(msg, req_len, "info-get %s", guest_info_param);
 
 	if (vmw_open_channel(&channel, RPCI_PROTOCOL_NUM))
 		goto out_open;
 
 	if (vmw_send_msg(&channel, msg) ||
-	    vmw_recv_msg(&channel, (void *) &reply, &reply_len))
+	    vmw_recv_msg(dev, &channel, (void *) &reply, &reply_len,
+			 &reply_handle))
 		goto out_msg;
 
 	vmw_close_channel(&channel);
@@ -451,19 +457,19 @@ int vmw_host_get_guestinfo(const char *guest_info_param,
 
 	*length = reply_len;
 
-	kfree(reply);
-	kfree(msg);
+	dma_free_coherent(dev, reply_len + 1, reply, reply_handle);
+	dma_free_coherent(dev, req_len, msg, req_handle);
 
 	return 0;
 
 out_msg:
 	vmw_close_channel(&channel);
-	kfree(reply);
+	dma_free_coherent(dev, reply_len + 1, reply, reply_handle);
 out_open:
 	*length = 0;
-	kfree(msg);
-	DRM_ERROR("Failed to get guest info \"%s\".", guest_info_param);
 
+	DRM_ERROR("Failed to get guest info \"%s\".", guest_info_param);
+	dma_free_coherent(dev, req_len, msg, req_handle);
 	return -EINVAL;
 }
 
@@ -472,16 +478,18 @@ int vmw_host_get_guestinfo(const char *guest_info_param,
 /**
  * vmw_host_log: Sends a log message to the host
  *
+ * @dev: Pointer to struct device used for coherent memory allocation
  * @log: NULL terminated string
  *
  * Returns: 0 on success
  */
-int vmw_host_log(const char *log)
+int vmw_host_log(struct device *dev, const char *log)
 {
 	struct rpc_channel channel;
 	char *msg;
 	int ret = 0;
-
+	dma_addr_t log_handle;
+	int log_len = strlen("log ") + strlen(log) + 1;
 
 	if (!vmw_msg_enabled)
 		return -ENODEV;
@@ -489,11 +497,12 @@ int vmw_host_log(const char *log)
 	if (!log)
 		return ret;
 
-	msg = kasprintf(GFP_KERNEL, "log %s", log);
+	msg = dma_alloc_coherent(dev, log_len, &log_handle, GFP_KERNEL);
 	if (!msg) {
 		DRM_ERROR("Cannot allocate memory for host log message.\n");
 		return -ENOMEM;
 	}
+	snprintf(msg, log_len, "log %s", log);
 
 	if (vmw_open_channel(&channel, RPCI_PROTOCOL_NUM))
 		goto out_open;
@@ -502,14 +511,14 @@ int vmw_host_log(const char *log)
 		goto out_msg;
 
 	vmw_close_channel(&channel);
-	kfree(msg);
+	dma_free_coherent(dev, log_len, msg, log_handle);
 
 	return 0;
 
 out_msg:
 	vmw_close_channel(&channel);
 out_open:
-	kfree(msg);
+	dma_free_coherent(dev, log_len, msg, log_handle);
 	DRM_ERROR("Failed to send host log message.\n");
 
 	return -EINVAL;
-- 
2.21.0

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH] drm/vmwgfx: Use coherent memory if there are dma mapping size restrictions
  2019-11-13  9:51 [PATCH] drm/vmwgfx: Use dma-coherent memory for high-bandwidth port messaging Thomas Hellström (VMware)
@ 2019-11-13  9:51 ` Thomas Hellström (VMware)
       [not found]   ` <20191113141610.GA12585@infradead.org>
  2019-11-13  9:51 ` [PATCH] drm/vmwgfx: remove set but not used variable 'srf' Thomas Hellström (VMware)
  2019-11-13 20:01 ` drm/vmwgfx: Use dma-coherent memory for high-bandwidth port messaging Nathan Chancellor
  2 siblings, 1 reply; 6+ messages in thread
From: Thomas Hellström (VMware) @ 2019-11-13  9:51 UTC (permalink / raw)
  To: dri-devel; +Cc: Christoph Hellwig, Thomas Hellstrom, Brian Paul

From: Thomas Hellstrom <thellstrom@vmware.com>

We're gradually moving towards using DMA coherent memory in most
situations, although TTM interactions with the DMA layers is still a
work-in-progress. Meanwhile, use coherent memory when there are size
restrictions meaning that there is a chance that streaming dma mapping
of large buffer objects may fail.
Also move DMA mask settings to the vmw_dma_select_mode function, since
it's important that we set the correct DMA masks before calling the
dma_max_mapping_size() function.

Cc: Christoph Hellwig <hch@infradead.org>
Signed-off-by: Thomas Hellstrom <thellstrom@vmware.com>
Reviewed-by: Brian Paul <brianp@vmware.com>
---
 drivers/gpu/drm/vmwgfx/vmwgfx_drv.c | 31 +++++++----------------------
 1 file changed, 7 insertions(+), 24 deletions(-)

diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
index fc0283659c41..1e1de83908fe 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
@@ -569,7 +569,10 @@ static int vmw_dma_select_mode(struct vmw_private *dev_priv)
 		[vmw_dma_map_populate] = "Caching DMA mappings.",
 		[vmw_dma_map_bind] = "Giving up DMA mappings early."};
 
-	if (vmw_force_coherent)
+	(void) dma_set_mask_and_coherent(dev_priv->dev->dev, DMA_BIT_MASK(64));
+
+	if (vmw_force_coherent ||
+	    dma_max_mapping_size(dev_priv->dev->dev) != SIZE_MAX)
 		dev_priv->map_mode = vmw_dma_alloc_coherent;
 	else if (vmw_restrict_iommu)
 		dev_priv->map_mode = vmw_dma_map_bind;
@@ -582,30 +585,15 @@ static int vmw_dma_select_mode(struct vmw_private *dev_priv)
 		return -EINVAL;
 
 	DRM_INFO("DMA map mode: %s\n", names[dev_priv->map_mode]);
-	return 0;
-}
 
-/**
- * vmw_dma_masks - set required page- and dma masks
- *
- * @dev: Pointer to struct drm-device
- *
- * With 32-bit we can only handle 32 bit PFNs. Optionally set that
- * restriction also for 64-bit systems.
- */
-static int vmw_dma_masks(struct vmw_private *dev_priv)
-{
-	struct drm_device *dev = dev_priv->dev;
-	int ret = 0;
-
-	ret = dma_set_mask_and_coherent(dev->dev, DMA_BIT_MASK(64));
 	if (dev_priv->map_mode != vmw_dma_phys &&
 	    (sizeof(unsigned long) == 4 || vmw_restrict_dma_mask)) {
 		DRM_INFO("Restricting DMA addresses to 44 bits.\n");
-		return dma_set_mask_and_coherent(dev->dev, DMA_BIT_MASK(44));
+		return dma_set_mask_and_coherent(dev_priv->dev->dev,
+						 DMA_BIT_MASK(44));
 	}
 
-	return ret;
+	return 0;
 }
 
 static int vmw_driver_load(struct drm_device *dev, unsigned long chipset)
@@ -674,7 +662,6 @@ static int vmw_driver_load(struct drm_device *dev, unsigned long chipset)
 		dev_priv->capabilities2 = vmw_read(dev_priv, SVGA_REG_CAP2);
 	}
 
-
 	ret = vmw_dma_select_mode(dev_priv);
 	if (unlikely(ret != 0)) {
 		DRM_INFO("Restricting capabilities due to IOMMU setup.\n");
@@ -746,10 +733,6 @@ static int vmw_driver_load(struct drm_device *dev, unsigned long chipset)
 	if (dev_priv->capabilities & SVGA_CAP_CAP2_REGISTER)
 		vmw_print_capabilities2(dev_priv->capabilities2);
 
-	ret = vmw_dma_masks(dev_priv);
-	if (unlikely(ret != 0))
-		goto out_err0;
-
 	dma_set_max_seg_size(dev->dev, min_t(unsigned int, U32_MAX & PAGE_MASK,
 					     SCATTERLIST_MAX_SEGMENT));
 
-- 
2.21.0

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH] drm/vmwgfx: remove set but not used variable 'srf'
  2019-11-13  9:51 [PATCH] drm/vmwgfx: Use dma-coherent memory for high-bandwidth port messaging Thomas Hellström (VMware)
  2019-11-13  9:51 ` [PATCH] drm/vmwgfx: Use coherent memory if there are dma mapping size restrictions Thomas Hellström (VMware)
@ 2019-11-13  9:51 ` Thomas Hellström (VMware)
  2019-11-13 20:01 ` drm/vmwgfx: Use dma-coherent memory for high-bandwidth port messaging Nathan Chancellor
  2 siblings, 0 replies; 6+ messages in thread
From: Thomas Hellström (VMware) @ 2019-11-13  9:51 UTC (permalink / raw)
  To: dri-devel; +Cc: Thomas Hellstrom, YueHaibing

From: YueHaibing <yuehaibing@huawei.com>

drivers/gpu/drm/vmwgfx/vmwgfx_surface.c:339:22:
 warning: variable srf set but not used [-Wunused-but-set-variable]

'srf' is never used, so can be removed.

Signed-off-by: YueHaibing <yuehaibing@huawei.com>
Reviewed-by: Thomas Hellstrom <thellstrom@vmware.com>
---
 drivers/gpu/drm/vmwgfx/vmwgfx_surface.c | 2 --
 1 file changed, 2 deletions(-)

diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_surface.c b/drivers/gpu/drm/vmwgfx/vmwgfx_surface.c
index 29d8794f0421..de0530b4dc1b 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_surface.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_surface.c
@@ -336,7 +336,6 @@ static void vmw_hw_surface_destroy(struct vmw_resource *res)
 {
 
 	struct vmw_private *dev_priv = res->dev_priv;
-	struct vmw_surface *srf;
 	void *cmd;
 
 	if (res->func->destroy == vmw_gb_surface_destroy) {
@@ -360,7 +359,6 @@ static void vmw_hw_surface_destroy(struct vmw_resource *res)
 		 */
 
 		mutex_lock(&dev_priv->cmdbuf_mutex);
-		srf = vmw_res_to_srf(res);
 		dev_priv->used_memory_size -= res->backup_size;
 		mutex_unlock(&dev_priv->cmdbuf_mutex);
 	}
-- 
2.21.0

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH] drm/vmwgfx: Use coherent memory if there are dma mapping size restrictions
       [not found]   ` <20191113141610.GA12585@infradead.org>
@ 2019-11-13 17:18     ` Thomas Hellström (VMware)
  0 siblings, 0 replies; 6+ messages in thread
From: Thomas Hellström (VMware) @ 2019-11-13 17:18 UTC (permalink / raw)
  To: Christoph Hellwig; +Cc: Thomas Hellstrom, Brian Paul, dri-devel

Hi,

On 11/13/19 3:16 PM, Christoph Hellwig wrote:
> On Wed, Nov 13, 2019 at 10:51:43AM +0100, Thomas Hellström (VMware) wrote:
>> From: Thomas Hellstrom <thellstrom@vmware.com>
>>
>> We're gradually moving towards using DMA coherent memory in most
>> situations, although TTM interactions with the DMA layers is still a
>> work-in-progress. Meanwhile, use coherent memory when there are size
>> restrictions meaning that there is a chance that streaming dma mapping
>> of large buffer objects may fail.
>> Also move DMA mask settings to the vmw_dma_select_mode function, since
>> it's important that we set the correct DMA masks before calling the
>> dma_max_mapping_size() function.
>>
>> Cc: Christoph Hellwig <hch@infradead.org>
>> Signed-off-by: Thomas Hellstrom <thellstrom@vmware.com>
>> Reviewed-by: Brian Paul <brianp@vmware.com>
>> ---
>>   drivers/gpu/drm/vmwgfx/vmwgfx_drv.c | 31 +++++++----------------------
>>   1 file changed, 7 insertions(+), 24 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
>> index fc0283659c41..1e1de83908fe 100644
>> --- a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
>> +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
>> @@ -569,7 +569,10 @@ static int vmw_dma_select_mode(struct vmw_private *dev_priv)
>>   		[vmw_dma_map_populate] = "Caching DMA mappings.",
>>   		[vmw_dma_map_bind] = "Giving up DMA mappings early."};
>>   
>> -	if (vmw_force_coherent)
>> +	(void) dma_set_mask_and_coherent(dev_priv->dev->dev, DMA_BIT_MASK(64));
> Please don't use void cast on returns.  Also this genercally can't
> fail, so if it fails anyway it is fatal, and you should actually
> return an error.

OK. Will fix.

>
>> +	if (vmw_force_coherent ||
>> +	    dma_max_mapping_size(dev_priv->dev->dev) != SIZE_MAX)
> I don't think this is the right check to see if swiotlb would be
> used.  You probably want to call dma_addressing_limited().  Please
> also add a comment explaining the call here.

If I understand things correctly, dma_addressing_limited() would always 
return false on vmwgfx, at least if the "restrict to 44 bit" option is 
removed. The "odd" modes we want to catch is someone setting 
swiotlb=force, or someone enabling SEV. In both cases, vmwgfx would 
break down due to limited DMA space even if streaming DMA was fixed with 
appropriate sync calls.

The same holds for vmw_pvscsi (which we discussed before) where the 
large queue depth will typically fill the SWIOTLB causing excessive 
non-fatal error logging.
dma_max_mapping_size() currently catch these modes, but best I guess 
would be dma_swiotlb_forced() function that could be used in cases like 
this?

>
>
>>   	if (dev_priv->map_mode != vmw_dma_phys &&
> AFAIK vmw_dma_phys can't even be set in current mainline and is dead
> code.  Can you check if I'm missing something?  Certainly all three
> branches above don't set it.

I'll remove that dead code for v2.

>
>>   	    (sizeof(unsigned long) == 4 || vmw_restrict_dma_mask)) {
>>   		DRM_INFO("Restricting DMA addresses to 44 bits.\n");
>> -		return dma_set_mask_and_coherent(dev->dev, DMA_BIT_MASK(44));
>> +		return dma_set_mask_and_coherent(dev_priv->dev->dev,
>> +						 DMA_BIT_MASK(44));
> Can you keep setting the DMA mask together?
>
>
> E.g. make the whole thing something like:
>
> static int vmw_dma_select_mode(struct vmw_private *dev_priv)
> {
> 	if (dma_addressing_limited(dev_priv->dev->dev) || vmw_force_coherent) {
> 		/*
> 		 * XXX: what about AMD iommu?  virtio-iommu?  Also
> 		 * swiotlb should be always available where we can
> 		 * address more than 32-bit of memory..
> 		 */
> 		if (!IS_ENABLED(CONFIG_SWIOTLB) &&
> 		    !IS_ENABLED(CONFIG_INTEL_IOMMU))
> 			return -EINVAL;

The above check is only to see if coherent memory functionality is 
really compiled in into TTM. We have a patchset that got lost in the 
last merge window to fix this properly and avoid confusion about this. 
I'll rebase on that.

> 		dev_priv->map_mode = vmw_dma_alloc_coherent;
> 	} else if (vmw_restrict_iommu) {
> 		dev_priv->map_mode = vmw_dma_map_bind;
> 	} else {
> 		dev_priv->map_mode = vmw_dma_map_populate;
> 	}
>
> 	/*
> 	 * On 32-bit systems we can only handle 32 bit PFNs. Optionally set
> 	 * that restriction also for 64-bit systems.
> 	 */
> 	return dma_set_mask_and_coherent(dev->dev,
> 			(IS_ENABLED(CONFIG_64BIT) && !vmw_restrict_dma_mask) ?
> 			64 : 44);
> }

Thanks,

Thomas

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: drm/vmwgfx: Use dma-coherent memory for high-bandwidth port messaging
  2019-11-13  9:51 [PATCH] drm/vmwgfx: Use dma-coherent memory for high-bandwidth port messaging Thomas Hellström (VMware)
  2019-11-13  9:51 ` [PATCH] drm/vmwgfx: Use coherent memory if there are dma mapping size restrictions Thomas Hellström (VMware)
  2019-11-13  9:51 ` [PATCH] drm/vmwgfx: remove set but not used variable 'srf' Thomas Hellström (VMware)
@ 2019-11-13 20:01 ` Nathan Chancellor
  2019-11-13 20:11   ` Thomas Hellström (VMware)
  2 siblings, 1 reply; 6+ messages in thread
From: Nathan Chancellor @ 2019-11-13 20:01 UTC (permalink / raw)
  To: Thomas Hellström (VMware)
  Cc: clang-built-linux, Thomas Hellstrom, Brian Paul, dri-devel

On Wed, Nov 13, 2019 at 10:51:42AM +0100, Thomas Hellström (VMware) wrote:
> From: Thomas Hellstrom <thellstrom@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@vmware.com>
> Reviewed-by: Brian Paul <brianp@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

On Thu, Nov 14, 2019 at 03:36:44AM +0800, kbuild test robot wrote:
> CC: kbuild-all@lists.01.org
> In-Reply-To: <20191113095144.2981-1-thomas_os@shipmail.org>
> References: <20191113095144.2981-1-thomas_os@shipmail.org>
> TO: "Thomas Hellström (VMware)" <thomas_os@shipmail.org>
> CC: dri-devel@lists.freedesktop.org, Thomas Hellstrom <thellstrom@vmware.com>, Brian Paul <brianp@vmware.com>, Thomas Hellstrom <thellstrom@vmware.com>, Brian Paul <brianp@vmware.com>
> CC: Thomas Hellstrom <thellstrom@vmware.com>, Brian Paul <brianp@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@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@vmware.com>
> :::::: CC: Thomas Hellstrom <thellstrom@vmware.com>
> 
> ---
> 0-DAY kernel test infrastructure                 Open Source Technology Center
> https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org Intel Corporation
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: drm/vmwgfx: Use dma-coherent memory for high-bandwidth port messaging
  2019-11-13 20:01 ` drm/vmwgfx: Use dma-coherent memory for high-bandwidth port messaging Nathan Chancellor
@ 2019-11-13 20:11   ` Thomas Hellström (VMware)
  0 siblings, 0 replies; 6+ messages in thread
From: Thomas Hellström (VMware) @ 2019-11-13 20:11 UTC (permalink / raw)
  To: Nathan Chancellor
  Cc: clang-built-linux, Thomas Hellstrom, Brian Paul, dri-devel

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@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@vmware.com>
>> Reviewed-by: Brian Paul <brianp@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@lists.01.org
>> In-Reply-To: <20191113095144.2981-1-thomas_os@shipmail.org>
>> References: <20191113095144.2981-1-thomas_os@shipmail.org>
>> TO: "Thomas Hellström (VMware)" <thomas_os@shipmail.org>
>> CC: dri-devel@lists.freedesktop.org, Thomas Hellstrom <thellstrom@vmware.com>, Brian Paul <brianp@vmware.com>, Thomas Hellstrom <thellstrom@vmware.com>, Brian Paul <brianp@vmware.com>
>> CC: Thomas Hellstrom <thellstrom@vmware.com>, Brian Paul <brianp@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@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@vmware.com>
>> :::::: CC: Thomas Hellstrom <thellstrom@vmware.com>
>>
>> ---
>> 0-DAY kernel test infrastructure                 Open Source Technology Center
>> https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org Intel Corporation


_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2019-11-13 20:12 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-11-13  9:51 [PATCH] drm/vmwgfx: Use dma-coherent memory for high-bandwidth port messaging Thomas Hellström (VMware)
2019-11-13  9:51 ` [PATCH] drm/vmwgfx: Use coherent memory if there are dma mapping size restrictions Thomas Hellström (VMware)
     [not found]   ` <20191113141610.GA12585@infradead.org>
2019-11-13 17:18     ` Thomas Hellström (VMware)
2019-11-13  9:51 ` [PATCH] drm/vmwgfx: remove set but not used variable 'srf' Thomas Hellström (VMware)
2019-11-13 20:01 ` drm/vmwgfx: Use dma-coherent memory for high-bandwidth port messaging Nathan Chancellor
2019-11-13 20:11   ` Thomas Hellström (VMware)

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.