Message ID | 20210825075620.2607-3-longpeng2@huawei.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | optimize the downtime for vfio migration | expand |
On 8/25/21 9:56 AM, Longpeng(Mike) wrote: > 'msix_function_masked' is kept pace with the device's config, > we can use it to replace the complex conditional in > msix_set/unset_vector_notifiers. Typo 'simplfy' -> 'simplify' in this/previous patch subject. > poll_notifier should be reset to NULL in the error path in > msix_set_vector_notifiers, fix it incidentally. I'd rather see this fix in a different patch, being unrelated to the msix_function_masked optimization. > Signed-off-by: Longpeng(Mike) <longpeng2@huawei.com> > --- > hw/pci/msix.c | 7 +++---- > 1 file changed, 3 insertions(+), 4 deletions(-) > > diff --git a/hw/pci/msix.c b/hw/pci/msix.c > index ae9331c..8057709 100644 > --- a/hw/pci/msix.c > +++ b/hw/pci/msix.c > @@ -592,8 +592,7 @@ int msix_set_vector_notifiers(PCIDevice *dev, > dev->msix_vector_release_notifier = release_notifier; > dev->msix_vector_poll_notifier = poll_notifier; > > - if ((dev->config[dev->msix_cap + MSIX_CONTROL_OFFSET] & > - (MSIX_ENABLE_MASK | MSIX_MASKALL_MASK)) == MSIX_ENABLE_MASK) { > + if (!dev->msix_function_masked) { > for (vector = 0; vector < dev->msix_entries_nr; vector++) { > ret = msix_set_notifier_for_vector(dev, vector); > if (ret < 0) { > @@ -612,6 +611,7 @@ undo: > } > dev->msix_vector_use_notifier = NULL; > dev->msix_vector_release_notifier = NULL; > + dev->msix_vector_poll_notifier = NULL; > return ret; > } > > @@ -622,8 +622,7 @@ void msix_unset_vector_notifiers(PCIDevice *dev) > assert(dev->msix_vector_use_notifier && > dev->msix_vector_release_notifier); > > - if ((dev->config[dev->msix_cap + MSIX_CONTROL_OFFSET] & > - (MSIX_ENABLE_MASK | MSIX_MASKALL_MASK)) == MSIX_ENABLE_MASK) { > + if (!dev->msix_function_masked) { > for (vector = 0; vector < dev->msix_entries_nr; vector++) { > msix_unset_notifier_for_vector(dev, vector); > } >
在 2021/8/25 17:52, Philippe Mathieu-Daudé 写道: > On 8/25/21 9:56 AM, Longpeng(Mike) wrote: >> 'msix_function_masked' is kept pace with the device's config, >> we can use it to replace the complex conditional in >> msix_set/unset_vector_notifiers. > > Typo 'simplfy' -> 'simplify' in this/previous patch subject. > Ok. >> poll_notifier should be reset to NULL in the error path in >> msix_set_vector_notifiers, fix it incidentally. > > I'd rather see this fix in a different patch, being > unrelated to the msix_function_masked optimization. > Ok, will split in next version. Thanks. >> Signed-off-by: Longpeng(Mike) <longpeng2@huawei.com> >> --- >> hw/pci/msix.c | 7 +++---- >> 1 file changed, 3 insertions(+), 4 deletions(-) >> >> diff --git a/hw/pci/msix.c b/hw/pci/msix.c >> index ae9331c..8057709 100644 >> --- a/hw/pci/msix.c >> +++ b/hw/pci/msix.c >> @@ -592,8 +592,7 @@ int msix_set_vector_notifiers(PCIDevice *dev, >> dev->msix_vector_release_notifier = release_notifier; >> dev->msix_vector_poll_notifier = poll_notifier; >> >> - if ((dev->config[dev->msix_cap + MSIX_CONTROL_OFFSET] & >> - (MSIX_ENABLE_MASK | MSIX_MASKALL_MASK)) == MSIX_ENABLE_MASK) { >> + if (!dev->msix_function_masked) { >> for (vector = 0; vector < dev->msix_entries_nr; vector++) { >> ret = msix_set_notifier_for_vector(dev, vector); >> if (ret < 0) { >> @@ -612,6 +611,7 @@ undo: >> } >> dev->msix_vector_use_notifier = NULL; >> dev->msix_vector_release_notifier = NULL; >> + dev->msix_vector_poll_notifier = NULL; >> return ret; >> } >> >> @@ -622,8 +622,7 @@ void msix_unset_vector_notifiers(PCIDevice *dev) >> assert(dev->msix_vector_use_notifier && >> dev->msix_vector_release_notifier); >> >> - if ((dev->config[dev->msix_cap + MSIX_CONTROL_OFFSET] & >> - (MSIX_ENABLE_MASK | MSIX_MASKALL_MASK)) == MSIX_ENABLE_MASK) { >> + if (!dev->msix_function_masked) { >> for (vector = 0; vector < dev->msix_entries_nr; vector++) { >> msix_unset_notifier_for_vector(dev, vector); >> } >> > > . >
On Wed, 25 Aug 2021 15:56:17 +0800 "Longpeng(Mike)" <longpeng2@huawei.com> wrote: > 'msix_function_masked' is kept pace with the device's config, s/pace/synchronized/? > we can use it to replace the complex conditional in > msix_set/unset_vector_notifiers. > > poll_notifier should be reset to NULL in the error path in > msix_set_vector_notifiers, fix it incidentally. Agree with Philippe, separate patch. > Signed-off-by: Longpeng(Mike) <longpeng2@huawei.com> > --- > hw/pci/msix.c | 7 +++---- > 1 file changed, 3 insertions(+), 4 deletions(-) > > diff --git a/hw/pci/msix.c b/hw/pci/msix.c > index ae9331c..8057709 100644 > --- a/hw/pci/msix.c > +++ b/hw/pci/msix.c > @@ -592,8 +592,7 @@ int msix_set_vector_notifiers(PCIDevice *dev, > dev->msix_vector_release_notifier = release_notifier; > dev->msix_vector_poll_notifier = poll_notifier; > > - if ((dev->config[dev->msix_cap + MSIX_CONTROL_OFFSET] & > - (MSIX_ENABLE_MASK | MSIX_MASKALL_MASK)) == MSIX_ENABLE_MASK) { > + if (!dev->msix_function_masked) { > for (vector = 0; vector < dev->msix_entries_nr; vector++) { > ret = msix_set_notifier_for_vector(dev, vector); > if (ret < 0) { > @@ -612,6 +611,7 @@ undo: > } > dev->msix_vector_use_notifier = NULL; > dev->msix_vector_release_notifier = NULL; > + dev->msix_vector_poll_notifier = NULL; > return ret; > } > > @@ -622,8 +622,7 @@ void msix_unset_vector_notifiers(PCIDevice *dev) > assert(dev->msix_vector_use_notifier && > dev->msix_vector_release_notifier); > > - if ((dev->config[dev->msix_cap + MSIX_CONTROL_OFFSET] & > - (MSIX_ENABLE_MASK | MSIX_MASKALL_MASK)) == MSIX_ENABLE_MASK) { > + if (!dev->msix_function_masked) { > for (vector = 0; vector < dev->msix_entries_nr; vector++) { > msix_unset_notifier_for_vector(dev, vector); > }
diff --git a/hw/pci/msix.c b/hw/pci/msix.c index ae9331c..8057709 100644 --- a/hw/pci/msix.c +++ b/hw/pci/msix.c @@ -592,8 +592,7 @@ int msix_set_vector_notifiers(PCIDevice *dev, dev->msix_vector_release_notifier = release_notifier; dev->msix_vector_poll_notifier = poll_notifier; - if ((dev->config[dev->msix_cap + MSIX_CONTROL_OFFSET] & - (MSIX_ENABLE_MASK | MSIX_MASKALL_MASK)) == MSIX_ENABLE_MASK) { + if (!dev->msix_function_masked) { for (vector = 0; vector < dev->msix_entries_nr; vector++) { ret = msix_set_notifier_for_vector(dev, vector); if (ret < 0) { @@ -612,6 +611,7 @@ undo: } dev->msix_vector_use_notifier = NULL; dev->msix_vector_release_notifier = NULL; + dev->msix_vector_poll_notifier = NULL; return ret; } @@ -622,8 +622,7 @@ void msix_unset_vector_notifiers(PCIDevice *dev) assert(dev->msix_vector_use_notifier && dev->msix_vector_release_notifier); - if ((dev->config[dev->msix_cap + MSIX_CONTROL_OFFSET] & - (MSIX_ENABLE_MASK | MSIX_MASKALL_MASK)) == MSIX_ENABLE_MASK) { + if (!dev->msix_function_masked) { for (vector = 0; vector < dev->msix_entries_nr; vector++) { msix_unset_notifier_for_vector(dev, vector); }
'msix_function_masked' is kept pace with the device's config, we can use it to replace the complex conditional in msix_set/unset_vector_notifiers. poll_notifier should be reset to NULL in the error path in msix_set_vector_notifiers, fix it incidentally. Signed-off-by: Longpeng(Mike) <longpeng2@huawei.com> --- hw/pci/msix.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-)