Messages in this thread |  | | Subject | Re: [PATCH 1/7] xen/events: reset affinity of 2-level event initially | From | Julien Grall <> | Date | Sat, 6 Feb 2021 12:19:22 +0000 |
| |
On 06/02/2021 12:09, Jürgen Groß wrote: > On 06.02.21 12:20, Julien Grall wrote: >> Hi Juergen, >> >> On 06/02/2021 10:49, Juergen Gross wrote: >>> When creating a new event channel with 2-level events the affinity >>> needs to be reset initially in order to avoid using an old affinity >>> from earlier usage of the event channel port. >>> >>> The same applies to the affinity when onlining a vcpu: all old >>> affinity settings for this vcpu must be reset. As percpu events get >>> initialized before the percpu event channel hook is called, >>> resetting of the affinities happens after offlining a vcpu (this is >>> working, as initial percpu memory is zeroed out). >>> >>> Cc: stable@vger.kernel.org >>> Reported-by: Julien Grall <julien@xen.org> >>> Signed-off-by: Juergen Gross <jgross@suse.com> >>> --- >>> drivers/xen/events/events_2l.c | 20 ++++++++++++++++++++ >>> 1 file changed, 20 insertions(+) >>> >>> diff --git a/drivers/xen/events/events_2l.c >>> b/drivers/xen/events/events_2l.c >>> index da87f3a1e351..23217940144a 100644 >>> --- a/drivers/xen/events/events_2l.c >>> +++ b/drivers/xen/events/events_2l.c >>> @@ -47,6 +47,16 @@ static unsigned evtchn_2l_max_channels(void) >>> return EVTCHN_2L_NR_CHANNELS; >>> } >>> +static int evtchn_2l_setup(evtchn_port_t evtchn) >>> +{ >>> + unsigned int cpu; >>> + >>> + for_each_online_cpu(cpu) >>> + clear_bit(evtchn, BM(per_cpu(cpu_evtchn_mask, cpu))); >> >> The bit corresponding to the event channel can only be set on a single >> CPU. Could we avoid the loop and instead clear the bit while closing >> the port? > > This would need another callback.
Right, this seems to be better than walking over all the CPUs every time just for cleaning one bit.
Cheers,
-- Julien Grall
|  |