[v2,02/17] vhost: fix return code of messages requiring replies

Message ID 20181002093651.24795-3-maxime.coquelin@redhat.com (mailing list archive)
State Superseded, archived
Delegated to: Maxime Coquelin
Headers
Series vhost: add postcopy live-migration support |

Checks

Context Check Description
ci/Intel-compilation success Compilation OK

Commit Message

Maxime Coquelin Oct. 2, 2018, 9:36 a.m. UTC
  VHOST_USER_GET_PROTOCOL_FEATURES, VHOST_USER_GET_VRING_BASE
and VHOST_USER_SET_LOG_BASE require replies, so their handlers
should return VH_RESULT_REPLY, not VH_RESULT_OK.

Fixes: 2cfbbb86c62a ("vhost: unify message handling function signature")

Signed-off-by: Maxime Coquelin <maxime.coquelin@redhat.com>
---
 lib/librte_vhost/vhost_user.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)
  

Comments

Ilya Maximets Oct. 3, 2018, 1:26 p.m. UTC | #1
On 02.10.2018 12:36, Maxime Coquelin wrote:
> VHOST_USER_GET_PROTOCOL_FEATURES, VHOST_USER_GET_VRING_BASE
> and VHOST_USER_SET_LOG_BASE require replies, so their handlers
> should return VH_RESULT_REPLY, not VH_RESULT_OK.
> 
> Fixes: 2cfbbb86c62a ("vhost: unify message handling function signature")
> 
> Signed-off-by: Maxime Coquelin <maxime.coquelin@redhat.com>
> ---
>  lib/librte_vhost/vhost_user.c | 6 +++---
>  1 file changed, 3 insertions(+), 3 deletions(-)
> 
> diff --git a/lib/librte_vhost/vhost_user.c b/lib/librte_vhost/vhost_user.c
> index 060b41893..ce0ac0098 100644
> --- a/lib/librte_vhost/vhost_user.c
> +++ b/lib/librte_vhost/vhost_user.c
> @@ -1161,7 +1161,7 @@ vhost_user_get_vring_base(struct virtio_net **pdev,
>  
>  	msg->size = sizeof(msg->payload.state);
>  
> -	return VH_RESULT_OK;
> +	return VH_RESULT_REPLY;
>  }
>  
>  /*
> @@ -1218,7 +1218,7 @@ vhost_user_get_protocol_features(struct virtio_net **pdev,
>  	msg->payload.u64 = protocol_features;
>  	msg->size = sizeof(msg->payload.u64);
>  
> -	return VH_RESULT_OK;
> +	return VH_RESULT_REPLY;
>  }
>  
>  static int
> @@ -1298,7 +1298,7 @@ vhost_user_set_log_base(struct virtio_net **pdev, struct VhostUserMsg *msg)
>  
>  	msg->size = sizeof(msg->payload.u64);

Maybe we need to set size to zero? This message should not have
"Slave payload" according to docs and QEMU does not check it.

>  
> -	return VH_RESULT_OK;
> +	return VH_RESULT_REPLY;
>  }
>  
>  static int vhost_user_set_log_fd(struct virtio_net **pdev __rte_unused,
>
  
Maxime Coquelin Oct. 3, 2018, 2:49 p.m. UTC | #2
On 10/03/2018 03:26 PM, Ilya Maximets wrote:
> On 02.10.2018 12:36, Maxime Coquelin wrote:
>> VHOST_USER_GET_PROTOCOL_FEATURES, VHOST_USER_GET_VRING_BASE
>> and VHOST_USER_SET_LOG_BASE require replies, so their handlers
>> should return VH_RESULT_REPLY, not VH_RESULT_OK.
>>
>> Fixes: 2cfbbb86c62a ("vhost: unify message handling function signature")
>>
>> Signed-off-by: Maxime Coquelin <maxime.coquelin@redhat.com>
>> ---
>>   lib/librte_vhost/vhost_user.c | 6 +++---
>>   1 file changed, 3 insertions(+), 3 deletions(-)
>>
>> diff --git a/lib/librte_vhost/vhost_user.c b/lib/librte_vhost/vhost_user.c
>> index 060b41893..ce0ac0098 100644
>> --- a/lib/librte_vhost/vhost_user.c
>> +++ b/lib/librte_vhost/vhost_user.c
>> @@ -1161,7 +1161,7 @@ vhost_user_get_vring_base(struct virtio_net **pdev,
>>   
>>   	msg->size = sizeof(msg->payload.state);
>>   
>> -	return VH_RESULT_OK;
>> +	return VH_RESULT_REPLY;
>>   }
>>   
>>   /*
>> @@ -1218,7 +1218,7 @@ vhost_user_get_protocol_features(struct virtio_net **pdev,
>>   	msg->payload.u64 = protocol_features;
>>   	msg->size = sizeof(msg->payload.u64);
>>   
>> -	return VH_RESULT_OK;
>> +	return VH_RESULT_REPLY;
>>   }
>>   
>>   static int
>> @@ -1298,7 +1298,7 @@ vhost_user_set_log_base(struct virtio_net **pdev, struct VhostUserMsg *msg)
>>   
>>   	msg->size = sizeof(msg->payload.u64);
> 
> Maybe we need to set size to zero? This message should not have
> "Slave payload" according to docs and QEMU does not check it.

I agree with the fix, but it's here since the beginning, not related to
this series. I will add it at the beginning of the series though.

I think the spec could also be updated, to clarify what payload is
expected when VHOST_USER_PROTOCOL_F_LOG_SHMFD is negotiated.

> 
>>   
>> -	return VH_RESULT_OK;
>> +	return VH_RESULT_REPLY;
>>   }
>>   
>>   static int vhost_user_set_log_fd(struct virtio_net **pdev __rte_unused,
>>
  
Ilya Maximets Oct. 4, 2018, 5:49 a.m. UTC | #3
On 03.10.2018 17:49, Maxime Coquelin wrote:
> 
> 
> On 10/03/2018 03:26 PM, Ilya Maximets wrote:
>> On 02.10.2018 12:36, Maxime Coquelin wrote:
>>> VHOST_USER_GET_PROTOCOL_FEATURES, VHOST_USER_GET_VRING_BASE
>>> and VHOST_USER_SET_LOG_BASE require replies, so their handlers
>>> should return VH_RESULT_REPLY, not VH_RESULT_OK.
>>>
>>> Fixes: 2cfbbb86c62a ("vhost: unify message handling function signature")
>>>
>>> Signed-off-by: Maxime Coquelin <maxime.coquelin@redhat.com>
>>> ---
>>>   lib/librte_vhost/vhost_user.c | 6 +++---
>>>   1 file changed, 3 insertions(+), 3 deletions(-)
>>>
>>> diff --git a/lib/librte_vhost/vhost_user.c b/lib/librte_vhost/vhost_user.c
>>> index 060b41893..ce0ac0098 100644
>>> --- a/lib/librte_vhost/vhost_user.c
>>> +++ b/lib/librte_vhost/vhost_user.c
>>> @@ -1161,7 +1161,7 @@ vhost_user_get_vring_base(struct virtio_net **pdev,
>>>         msg->size = sizeof(msg->payload.state);
>>>   -    return VH_RESULT_OK;
>>> +    return VH_RESULT_REPLY;
>>>   }
>>>     /*
>>> @@ -1218,7 +1218,7 @@ vhost_user_get_protocol_features(struct virtio_net **pdev,
>>>       msg->payload.u64 = protocol_features;
>>>       msg->size = sizeof(msg->payload.u64);
>>>   -    return VH_RESULT_OK;
>>> +    return VH_RESULT_REPLY;
>>>   }
>>>     static int
>>> @@ -1298,7 +1298,7 @@ vhost_user_set_log_base(struct virtio_net **pdev, struct VhostUserMsg *msg)
>>>         msg->size = sizeof(msg->payload.u64);
>>
>> Maybe we need to set size to zero? This message should not have
>> "Slave payload" according to docs and QEMU does not check it.
> 
> I agree with the fix, but it's here since the beginning, not related to
> this series. I will add it at the beginning of the series though.

OK.

> 
> I think the spec could also be updated, to clarify what payload is
> expected when VHOST_USER_PROTOCOL_F_LOG_SHMFD is negotiated.

Yeah. There was an attempt few years ago, but it wasn't merged because of
code changes, I guess:
    https://lists.gnu.org/archive/html/qemu-devel/2015-11/msg03526.html

> 
>>
>>>   -    return VH_RESULT_OK;
>>> +    return VH_RESULT_REPLY;
>>>   }
>>>     static int vhost_user_set_log_fd(struct virtio_net **pdev __rte_unused,
>>>
  

Patch

diff --git a/lib/librte_vhost/vhost_user.c b/lib/librte_vhost/vhost_user.c
index 060b41893..ce0ac0098 100644
--- a/lib/librte_vhost/vhost_user.c
+++ b/lib/librte_vhost/vhost_user.c
@@ -1161,7 +1161,7 @@  vhost_user_get_vring_base(struct virtio_net **pdev,
 
 	msg->size = sizeof(msg->payload.state);
 
-	return VH_RESULT_OK;
+	return VH_RESULT_REPLY;
 }
 
 /*
@@ -1218,7 +1218,7 @@  vhost_user_get_protocol_features(struct virtio_net **pdev,
 	msg->payload.u64 = protocol_features;
 	msg->size = sizeof(msg->payload.u64);
 
-	return VH_RESULT_OK;
+	return VH_RESULT_REPLY;
 }
 
 static int
@@ -1298,7 +1298,7 @@  vhost_user_set_log_base(struct virtio_net **pdev, struct VhostUserMsg *msg)
 
 	msg->size = sizeof(msg->payload.u64);
 
-	return VH_RESULT_OK;
+	return VH_RESULT_REPLY;
 }
 
 static int vhost_user_set_log_fd(struct virtio_net **pdev __rte_unused,