In some situations, when a virtual machine is starting, vring_state_changed can be called while there was no change in the queue state. This fix makes sure that there was really a change in the queue state before calling the callback for EVENT_QUEUE_STATE. Fixes: ee584e9710b9 ("vhost: add driver on top of the library") Cc: stable@dpdk.org Reviewed-by: Matan Azrad <matan@mellanox.com> --- drivers/net/vhost/rte_eth_vhost.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/drivers/net/vhost/rte_eth_vhost.c b/drivers/net/vhost/rte_eth_vhost.c index cad1e5c..fbe7a37 100644 --- a/drivers/net/vhost/rte_eth_vhost.c +++ b/drivers/net/vhost/rte_eth_vhost.c @@ -855,6 +855,10 @@ struct vhost_xstats_name_off { /* won't be NULL */ state = vring_states[eth_dev->data->port_id]; rte_spinlock_lock(&state->lock); + if (state->cur[vring] == enable) { + rte_spinlock_unlock(&state->lock); + return 0; + } state->cur[vring] = enable; state->max_vring = RTE_MAX(vring, state->max_vring); -- 1.8.3.1
In some situations, when a virtual machine is starting, vring_state_changed can be called while there was no change in the queue state. This fix makes sure that there was really a change in the queue state before calling the callback for EVENT_QUEUE_STATE. Fixes: ee584e9710b9 ("vhost: add driver on top of the library") Cc: stable@dpdk.org Signed-off-by: Noa Ezra <noae@mellanox.com> Reviewed-by: Matan Azrad <matan@mellanox.com> --- v2 remove checkpatch warnings --- drivers/net/vhost/rte_eth_vhost.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/drivers/net/vhost/rte_eth_vhost.c b/drivers/net/vhost/rte_eth_vhost.c index cad1e5c..fbe7a37 100644 --- a/drivers/net/vhost/rte_eth_vhost.c +++ b/drivers/net/vhost/rte_eth_vhost.c @@ -855,6 +855,10 @@ struct vhost_xstats_name_off { /* won't be NULL */ state = vring_states[eth_dev->data->port_id]; rte_spinlock_lock(&state->lock); + if (state->cur[vring] == enable) { + rte_spinlock_unlock(&state->lock); + return 0; + } state->cur[vring] = enable; state->max_vring = RTE_MAX(vring, state->max_vring); -- 1.8.3.1
Hi,
What do you think about this patch?
Thanks,
Noa.
> -----Original Message-----
> From: Noa Ezra [mailto:noae@mellanox.com]
> Sent: Wednesday, June 19, 2019 9:16 AM
> To: maxime.coquelin@redhat.com
> Cc: Matan Azrad <matan@mellanox.com>; dev@dpdk.org; Noa Ezra
> <noae@mellanox.com>; stable@dpdk.org
> Subject: [Suspected-Phishing][PATCH] net/vhost: fix redundant queue state
> event
>
> In some situations, when a virtual machine is starting, vring_state_changed
> can be called while there was no change in the queue state. This fix makes
> sure that there was really a change in the queue state before calling the
> callback for EVENT_QUEUE_STATE.
>
> Fixes: ee584e9710b9 ("vhost: add driver on top of the library")
> Cc: stable@dpdk.org
> Reviewed-by: Matan Azrad <matan@mellanox.com>
> ---
> drivers/net/vhost/rte_eth_vhost.c | 4 ++++
> 1 file changed, 4 insertions(+)
>
> diff --git a/drivers/net/vhost/rte_eth_vhost.c
> b/drivers/net/vhost/rte_eth_vhost.c
> index cad1e5c..fbe7a37 100644
> --- a/drivers/net/vhost/rte_eth_vhost.c
> +++ b/drivers/net/vhost/rte_eth_vhost.c
> @@ -855,6 +855,10 @@ struct vhost_xstats_name_off {
> /* won't be NULL */
> state = vring_states[eth_dev->data->port_id];
> rte_spinlock_lock(&state->lock);
> + if (state->cur[vring] == enable) {
> + rte_spinlock_unlock(&state->lock);
> + return 0;
> + }
>
> state->cur[vring] = enable;
> state->max_vring = RTE_MAX(vring, state->max_vring);
> --
> 1.8.3.1
On 6/25/19 9:04 AM, Noa Ezra wrote: > Hi, > What do you think about this patch? > > Thanks, > Noa. > >> -----Original Message----- >> From: Noa Ezra [mailto:noae@mellanox.com] >> Sent: Wednesday, June 19, 2019 9:16 AM >> To: maxime.coquelin@redhat.com >> Cc: Matan Azrad <matan@mellanox.com>; dev@dpdk.org; Noa Ezra >> <noae@mellanox.com>; stable@dpdk.org >> Subject: [Suspected-Phishing][PATCH] net/vhost: fix redundant queue state >> event >> >> In some situations, when a virtual machine is starting, vring_state_changed >> can be called while there was no change in the queue state. This fix makes >> sure that there was really a change in the queue state before calling the >> callback for EVENT_QUEUE_STATE. >> >> Fixes: ee584e9710b9 ("vhost: add driver on top of the library") >> Cc: stable@dpdk.org >> Reviewed-by: Matan Azrad <matan@mellanox.com> >> --- >> drivers/net/vhost/rte_eth_vhost.c | 4 ++++ >> 1 file changed, 4 insertions(+) >> >> diff --git a/drivers/net/vhost/rte_eth_vhost.c >> b/drivers/net/vhost/rte_eth_vhost.c >> index cad1e5c..fbe7a37 100644 >> --- a/drivers/net/vhost/rte_eth_vhost.c >> +++ b/drivers/net/vhost/rte_eth_vhost.c >> @@ -855,6 +855,10 @@ struct vhost_xstats_name_off { >> /* won't be NULL */ >> state = vring_states[eth_dev->data->port_id]; >> rte_spinlock_lock(&state->lock); >> + if (state->cur[vring] == enable) { >> + rte_spinlock_unlock(&state->lock); >> + return 0; >> + } >> >> state->cur[vring] = enable; >> state->max_vring = RTE_MAX(vring, state->max_vring); Maybe the application would want to be notified a new queue is available, even if it is disabled? >> -- >> 1.8.3.1 >
Hi, > -----Original Message----- > From: Maxime Coquelin [mailto:maxime.coquelin@redhat.com] > Sent: Tuesday, June 25, 2019 11:24 AM > To: Noa Ezra <noae@mellanox.com> > Cc: Matan Azrad <matan@mellanox.com>; dev@dpdk.org; stable@dpdk.org > Subject: Re: [Suspected-Phishing][PATCH] net/vhost: fix redundant queue > state event > > > > On 6/25/19 9:04 AM, Noa Ezra wrote: > > Hi, > > What do you think about this patch? > > > > Thanks, > > Noa. > > > >> -----Original Message----- > >> From: Noa Ezra [mailto:noae@mellanox.com] > >> Sent: Wednesday, June 19, 2019 9:16 AM > >> To: maxime.coquelin@redhat.com > >> Cc: Matan Azrad <matan@mellanox.com>; dev@dpdk.org; Noa Ezra > >> <noae@mellanox.com>; stable@dpdk.org > >> Subject: [Suspected-Phishing][PATCH] net/vhost: fix redundant queue > >> state event > >> > >> In some situations, when a virtual machine is starting, > >> vring_state_changed can be called while there was no change in the > >> queue state. This fix makes sure that there was really a change in > >> the queue state before calling the callback for EVENT_QUEUE_STATE. > >> > >> Fixes: ee584e9710b9 ("vhost: add driver on top of the library") > >> Cc: stable@dpdk.org > >> Reviewed-by: Matan Azrad <matan@mellanox.com> > >> --- > >> drivers/net/vhost/rte_eth_vhost.c | 4 ++++ > >> 1 file changed, 4 insertions(+) > >> > >> diff --git a/drivers/net/vhost/rte_eth_vhost.c > >> b/drivers/net/vhost/rte_eth_vhost.c > >> index cad1e5c..fbe7a37 100644 > >> --- a/drivers/net/vhost/rte_eth_vhost.c > >> +++ b/drivers/net/vhost/rte_eth_vhost.c > >> @@ -855,6 +855,10 @@ struct vhost_xstats_name_off { > >> /* won't be NULL */ > >> state = vring_states[eth_dev->data->port_id]; > >> rte_spinlock_lock(&state->lock); > >> + if (state->cur[vring] == enable) { > >> + rte_spinlock_unlock(&state->lock); > >> + return 0; > >> + } > >> > >> state->cur[vring] = enable; > >> state->max_vring = RTE_MAX(vring, state->max_vring); > > Maybe the application would want to be notified a new queue is available, > even if it is disabled? Can you please look again? As I understand it, "enable" is the "new state" parameter (can be enable/disable). In this fix I make sure that there was really a change in the state before calling EVENT_QUEUE_STATE (with no change in the state). > > >> -- > >> 1.8.3.1 > >
On 6/26/19 8:37 AM, Noa Ezra wrote: > Hi, > >> -----Original Message----- >> From: Maxime Coquelin [mailto:maxime.coquelin@redhat.com] >> Sent: Tuesday, June 25, 2019 11:24 AM >> To: Noa Ezra <noae@mellanox.com> >> Cc: Matan Azrad <matan@mellanox.com>; dev@dpdk.org; stable@dpdk.org >> Subject: Re: [Suspected-Phishing][PATCH] net/vhost: fix redundant queue >> state event >> >> >> >> On 6/25/19 9:04 AM, Noa Ezra wrote: >>> Hi, >>> What do you think about this patch? >>> >>> Thanks, >>> Noa. >>> >>>> -----Original Message----- >>>> From: Noa Ezra [mailto:noae@mellanox.com] >>>> Sent: Wednesday, June 19, 2019 9:16 AM >>>> To: maxime.coquelin@redhat.com >>>> Cc: Matan Azrad <matan@mellanox.com>; dev@dpdk.org; Noa Ezra >>>> <noae@mellanox.com>; stable@dpdk.org >>>> Subject: [Suspected-Phishing][PATCH] net/vhost: fix redundant queue >>>> state event >>>> >>>> In some situations, when a virtual machine is starting, >>>> vring_state_changed can be called while there was no change in the >>>> queue state. This fix makes sure that there was really a change in >>>> the queue state before calling the callback for EVENT_QUEUE_STATE. >>>> >>>> Fixes: ee584e9710b9 ("vhost: add driver on top of the library") >>>> Cc: stable@dpdk.org >>>> Reviewed-by: Matan Azrad <matan@mellanox.com> >>>> --- >>>> drivers/net/vhost/rte_eth_vhost.c | 4 ++++ >>>> 1 file changed, 4 insertions(+) >>>> >>>> diff --git a/drivers/net/vhost/rte_eth_vhost.c >>>> b/drivers/net/vhost/rte_eth_vhost.c >>>> index cad1e5c..fbe7a37 100644 >>>> --- a/drivers/net/vhost/rte_eth_vhost.c >>>> +++ b/drivers/net/vhost/rte_eth_vhost.c >>>> @@ -855,6 +855,10 @@ struct vhost_xstats_name_off { >>>> /* won't be NULL */ >>>> state = vring_states[eth_dev->data->port_id]; >>>> rte_spinlock_lock(&state->lock); >>>> + if (state->cur[vring] == enable) { >>>> + rte_spinlock_unlock(&state->lock); >>>> + return 0; >>>> + } >>>> >>>> state->cur[vring] = enable; >>>> state->max_vring = RTE_MAX(vring, state->max_vring); >> >> Maybe the application would want to be notified a new queue is available, >> even if it is disabled? > > Can you please look again? As I understand it, "enable" is the "new state" parameter (can be enable/disable). > In this fix I make sure that there was really a change in the state before calling EVENT_QUEUE_STATE (with no change in the state). Ok, I get it. Maybe we would want to update state->max_vring even if we don't sent the event? Thanks, Maxime >> >>>> -- >>>> 1.8.3.1 >>>
> -----Original Message----- > From: Maxime Coquelin [mailto:maxime.coquelin@redhat.com] > Sent: Wednesday, June 26, 2019 10:01 AM > To: Noa Ezra <noae@mellanox.com> > Cc: Matan Azrad <matan@mellanox.com>; dev@dpdk.org; stable@dpdk.org > Subject: Re: [Suspected-Phishing][PATCH] net/vhost: fix redundant queue > state event > > > > On 6/26/19 8:37 AM, Noa Ezra wrote: > > Hi, > > > >> -----Original Message----- > >> From: Maxime Coquelin [mailto:maxime.coquelin@redhat.com] > >> Sent: Tuesday, June 25, 2019 11:24 AM > >> To: Noa Ezra <noae@mellanox.com> > >> Cc: Matan Azrad <matan@mellanox.com>; dev@dpdk.org; > stable@dpdk.org > >> Subject: Re: [Suspected-Phishing][PATCH] net/vhost: fix redundant > >> queue state event > >> > >> > >> > >> On 6/25/19 9:04 AM, Noa Ezra wrote: > >>> Hi, > >>> What do you think about this patch? > >>> > >>> Thanks, > >>> Noa. > >>> > >>>> -----Original Message----- > >>>> From: Noa Ezra [mailto:noae@mellanox.com] > >>>> Sent: Wednesday, June 19, 2019 9:16 AM > >>>> To: maxime.coquelin@redhat.com > >>>> Cc: Matan Azrad <matan@mellanox.com>; dev@dpdk.org; Noa Ezra > >>>> <noae@mellanox.com>; stable@dpdk.org > >>>> Subject: [Suspected-Phishing][PATCH] net/vhost: fix redundant queue > >>>> state event > >>>> > >>>> In some situations, when a virtual machine is starting, > >>>> vring_state_changed can be called while there was no change in the > >>>> queue state. This fix makes sure that there was really a change in > >>>> the queue state before calling the callback for EVENT_QUEUE_STATE. > >>>> > >>>> Fixes: ee584e9710b9 ("vhost: add driver on top of the library") > >>>> Cc: stable@dpdk.org > >>>> Reviewed-by: Matan Azrad <matan@mellanox.com> > >>>> --- > >>>> drivers/net/vhost/rte_eth_vhost.c | 4 ++++ > >>>> 1 file changed, 4 insertions(+) > >>>> > >>>> diff --git a/drivers/net/vhost/rte_eth_vhost.c > >>>> b/drivers/net/vhost/rte_eth_vhost.c > >>>> index cad1e5c..fbe7a37 100644 > >>>> --- a/drivers/net/vhost/rte_eth_vhost.c > >>>> +++ b/drivers/net/vhost/rte_eth_vhost.c > >>>> @@ -855,6 +855,10 @@ struct vhost_xstats_name_off { > >>>> /* won't be NULL */ > >>>> state = vring_states[eth_dev->data->port_id]; > >>>> rte_spinlock_lock(&state->lock); > >>>> + if (state->cur[vring] == enable) { > >>>> + rte_spinlock_unlock(&state->lock); > >>>> + return 0; > >>>> + } > >>>> > >>>> state->cur[vring] = enable; > >>>> state->max_vring = RTE_MAX(vring, state->max_vring); > >> > >> Maybe the application would want to be notified a new queue is > >> available, even if it is disabled? > > > > Can you please look again? As I understand it, "enable" is the "new state" > parameter (can be enable/disable). > > In this fix I make sure that there was really a change in the state before > calling EVENT_QUEUE_STATE (with no change in the state). > > Ok, I get it. > > Maybe we would want to update state->max_vring even if we don't sent the > event? Ok, so do you think we should move the check (if there was a change) to after we update the max_vring? > Thanks, > Maxime > >> > >>>> -- > >>>> 1.8.3.1 > >>>
On 6/26/19 10:03 AM, Noa Ezra wrote: > > >> -----Original Message----- >> From: Maxime Coquelin [mailto:maxime.coquelin@redhat.com] >> Sent: Wednesday, June 26, 2019 10:01 AM >> To: Noa Ezra <noae@mellanox.com> >> Cc: Matan Azrad <matan@mellanox.com>; dev@dpdk.org; stable@dpdk.org >> Subject: Re: [Suspected-Phishing][PATCH] net/vhost: fix redundant queue >> state event >> >> >> >> On 6/26/19 8:37 AM, Noa Ezra wrote: >>> Hi, >>> >>>> -----Original Message----- >>>> From: Maxime Coquelin [mailto:maxime.coquelin@redhat.com] >>>> Sent: Tuesday, June 25, 2019 11:24 AM >>>> To: Noa Ezra <noae@mellanox.com> >>>> Cc: Matan Azrad <matan@mellanox.com>; dev@dpdk.org; >> stable@dpdk.org >>>> Subject: Re: [Suspected-Phishing][PATCH] net/vhost: fix redundant >>>> queue state event >>>> >>>> >>>> >>>> On 6/25/19 9:04 AM, Noa Ezra wrote: >>>>> Hi, >>>>> What do you think about this patch? >>>>> >>>>> Thanks, >>>>> Noa. >>>>> >>>>>> -----Original Message----- >>>>>> From: Noa Ezra [mailto:noae@mellanox.com] >>>>>> Sent: Wednesday, June 19, 2019 9:16 AM >>>>>> To: maxime.coquelin@redhat.com >>>>>> Cc: Matan Azrad <matan@mellanox.com>; dev@dpdk.org; Noa Ezra >>>>>> <noae@mellanox.com>; stable@dpdk.org >>>>>> Subject: [Suspected-Phishing][PATCH] net/vhost: fix redundant queue >>>>>> state event >>>>>> >>>>>> In some situations, when a virtual machine is starting, >>>>>> vring_state_changed can be called while there was no change in the >>>>>> queue state. This fix makes sure that there was really a change in >>>>>> the queue state before calling the callback for EVENT_QUEUE_STATE. >>>>>> >>>>>> Fixes: ee584e9710b9 ("vhost: add driver on top of the library") >>>>>> Cc: stable@dpdk.org >>>>>> Reviewed-by: Matan Azrad <matan@mellanox.com> >>>>>> --- >>>>>> drivers/net/vhost/rte_eth_vhost.c | 4 ++++ >>>>>> 1 file changed, 4 insertions(+) >>>>>> >>>>>> diff --git a/drivers/net/vhost/rte_eth_vhost.c >>>>>> b/drivers/net/vhost/rte_eth_vhost.c >>>>>> index cad1e5c..fbe7a37 100644 >>>>>> --- a/drivers/net/vhost/rte_eth_vhost.c >>>>>> +++ b/drivers/net/vhost/rte_eth_vhost.c >>>>>> @@ -855,6 +855,10 @@ struct vhost_xstats_name_off { >>>>>> /* won't be NULL */ >>>>>> state = vring_states[eth_dev->data->port_id]; >>>>>> rte_spinlock_lock(&state->lock); >>>>>> + if (state->cur[vring] == enable) { >>>>>> + rte_spinlock_unlock(&state->lock); >>>>>> + return 0; >>>>>> + } >>>>>> >>>>>> state->cur[vring] = enable; >>>>>> state->max_vring = RTE_MAX(vring, state->max_vring); >>>> >>>> Maybe the application would want to be notified a new queue is >>>> available, even if it is disabled? >>> >>> Can you please look again? As I understand it, "enable" is the "new state" >> parameter (can be enable/disable). >>> In this fix I make sure that there was really a change in the state before >> calling EVENT_QUEUE_STATE (with no change in the state). >> >> Ok, I get it. >> >> Maybe we would want to update state->max_vring even if we don't sent the >> event? > > Ok, so do you think we should move the check (if there was a change) to after we update the max_vring? Yes, that's what I meant. Looking at the code, it seems it does not change much the behavior, but I think it is cleaner. What we want with the patch is only to not send the event. Thanks, Maxime >> Thanks, >> Maxime >>>> >>>>>> -- >>>>>> 1.8.3.1 >>>>>
On 6/20/19 8:33 AM, Noa Ezra wrote:
> In some situations, when a virtual machine is starting,
> vring_state_changed can be called while there was no change in the
> queue state. This fix makes sure that there was really a change in the
> queue state before calling the callback for EVENT_QUEUE_STATE.
>
> Fixes: ee584e9710b9 ("vhost: add driver on top of the library")
> Cc: stable@dpdk.org
>
> Signed-off-by: Noa Ezra <noae@mellanox.com>
> Reviewed-by: Matan Azrad <matan@mellanox.com>
> ---
> v2 remove checkpatch warnings
> ---
> drivers/net/vhost/rte_eth_vhost.c | 4 ++++
> 1 file changed, 4 insertions(+)
>
> diff --git a/drivers/net/vhost/rte_eth_vhost.c b/drivers/net/vhost/rte_eth_vhost.c
> index cad1e5c..fbe7a37 100644
> --- a/drivers/net/vhost/rte_eth_vhost.c
> +++ b/drivers/net/vhost/rte_eth_vhost.c
> @@ -855,6 +855,10 @@ struct vhost_xstats_name_off {
> /* won't be NULL */
> state = vring_states[eth_dev->data->port_id];
> rte_spinlock_lock(&state->lock);
> + if (state->cur[vring] == enable) {
> + rte_spinlock_unlock(&state->lock);
> + return 0;
> + }
>
> state->cur[vring] = enable;
> state->max_vring = RTE_MAX(vring, state->max_vring);
>
Reviewed-by: Maxime Coquelin <maxime.coquelin@redhat.com>
Thanks,
Maxime
On 9/27/19 10:49 AM, Maxime Coquelin wrote:
>
>
> On 6/20/19 8:33 AM, Noa Ezra wrote:
>> In some situations, when a virtual machine is starting,
>> vring_state_changed can be called while there was no change in the
>> queue state. This fix makes sure that there was really a change in the
>> queue state before calling the callback for EVENT_QUEUE_STATE.
>>
>> Fixes: ee584e9710b9 ("vhost: add driver on top of the library")
>> Cc: stable@dpdk.org
>>
>> Signed-off-by: Noa Ezra <noae@mellanox.com>
>> Reviewed-by: Matan Azrad <matan@mellanox.com>
>> ---
>> v2 remove checkpatch warnings
>> ---
>> drivers/net/vhost/rte_eth_vhost.c | 4 ++++
>> 1 file changed, 4 insertions(+)
>>
>> diff --git a/drivers/net/vhost/rte_eth_vhost.c b/drivers/net/vhost/rte_eth_vhost.c
>> index cad1e5c..fbe7a37 100644
>> --- a/drivers/net/vhost/rte_eth_vhost.c
>> +++ b/drivers/net/vhost/rte_eth_vhost.c
>> @@ -855,6 +855,10 @@ struct vhost_xstats_name_off {
>> /* won't be NULL */
>> state = vring_states[eth_dev->data->port_id];
>> rte_spinlock_lock(&state->lock);
>> + if (state->cur[vring] == enable) {
>> + rte_spinlock_unlock(&state->lock);
>> + return 0;
>> + }
>>
>> state->cur[vring] = enable;
>> state->max_vring = RTE_MAX(vring, state->max_vring);
>>
>
> Reviewed-by: Maxime Coquelin <maxime.coquelin@redhat.com>
>
> Thanks,
> Maxime
>
Applied to dpdk-next-virtio/master.
Thanks,
Maxime