Received: by 2002:a05:6a10:9848:0:0:0:0 with SMTP id x8csp3525487pxf; Mon, 15 Mar 2021 11:30:08 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzgvwtNjJBbi/cFA4AY5bXWSZvitBLuDkn9jQMbCZlN6rAdvFna7f4XWUHRiumciX3e05OB X-Received: by 2002:a05:6402:5252:: with SMTP id t18mr18129465edd.258.1615833008168; Mon, 15 Mar 2021 11:30:08 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1615833008; cv=none; d=google.com; s=arc-20160816; b=iEGe8QTTEY5WK2LxNksBkLCFBftVhwrdpGq0XVQpKohGGmnBydFGms0wEimUpBzt5r ujQIrzPBKFUr0RgXZIaIfNKDm/zykgJFFsEsL0SFkZpVRwlYHSw7jN5B5KmhCp9P0oTN Ff1TuU2x1xHC44peRjIQsXi1U514GzpCYnyjQQSagQPRJU1XIynf+Y+gUAUEj3Iw91uw X+Sc5e28MlpGp0wTOCqm5kIfWdeCA4Zq+aFLl+5I9DLtfo3lf+l2LQPw2E0RplN7f5wW V0cYdOTA/2jUcWkfJ+QpwKxPF+QQto8c/csvcJT+nKTlJI3FrpItrqc01F9GFGVpDMdq mmhA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=S+MXfhLv7JRmde4DTYKAwzAdAuFfJCP+Alhu7HvVUSM=; b=jS+S6aZSJPd/yZooYtZwHiMECknK7SBY+B2ub/fJ0oBxORurVNi7OSgYPrbJIG481p uXvdqh1RfbZaVjKFpFYegTMs9SI1oRk4X6J8cJYNg4WocehoKUE7diQMbD220PlOtqNV 6s/geaej0A21AENxCudu+cw+l5c9h0ZXzFuCyR1OcSenYKj2LGn+g0/708hiNSohzXnm zJBIkpczwjwEBCOCiosPvm2FCrvXq6W0gf+9rZ0YnxWx2Y7EVBdmB9TbvfScCSDdeMB9 lr21rmlfFvYF0gX8R9PjdNo2gzfnWKV/shGqjr48sgCl57N6/Qw2vRlwWv0s4WpMaHkQ JMGg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=QRzPWLbI; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id qh20si11124002ejb.749.2021.03.15.11.29.46; Mon, 15 Mar 2021 11:30:08 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=QRzPWLbI; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236442AbhCOOfn (ORCPT + 99 others); Mon, 15 Mar 2021 10:35:43 -0400 Received: from mail.kernel.org ([198.145.29.99]:37522 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231638AbhCOOBm (ORCPT ); Mon, 15 Mar 2021 10:01:42 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 9413464F13; Mon, 15 Mar 2021 14:01:31 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1615816892; bh=RARTWRmMCeWFgmqKMl0uq7OGgRtFjymUTajyhit0Rk8=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=QRzPWLbIzYRQ10DpoT/YCV/JY0fytTuascrelkYu1cVgcQEHd4BRwnEYTRGoeDY2M wbsErgFxKCZ5JOwpyszpkId9DfpvEMZoxDu3JVmIqObc4bn/U/yUWW24WZWC4EWUk3 zm7q06+9qDLlLYAyu92RfjEwxlaMMpeNyxaDcJ/c= From: gregkh@linuxfoundation.org To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Julien Grall , Juergen Gross , Julien Grall , Boris Ostrovsky Subject: [PATCH 5.11 186/306] xen/events: reset affinity of 2-level event when tearing it down Date: Mon, 15 Mar 2021 14:54:09 +0100 Message-Id: <20210315135513.901188003@linuxfoundation.org> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20210315135507.611436477@linuxfoundation.org> References: <20210315135507.611436477@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Greg Kroah-Hartman From: Juergen Gross commit 9e77d96b8e2724ed00380189f7b0ded61113b39f upstream. 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. So when tearing an event channel down reset all affinity bits. 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 Signed-off-by: Juergen Gross Reviewed-by: Julien Grall Link: https://lore.kernel.org/r/20210306161833.4552-2-jgross@suse.com Signed-off-by: Boris Ostrovsky Signed-off-by: Greg Kroah-Hartman --- drivers/xen/events/events_2l.c | 15 +++++++++++++++ drivers/xen/events/events_base.c | 1 + drivers/xen/events/events_internal.h | 8 ++++++++ 3 files changed, 24 insertions(+) --- a/drivers/xen/events/events_2l.c +++ b/drivers/xen/events/events_2l.c @@ -47,6 +47,11 @@ static unsigned evtchn_2l_max_channels(v return EVTCHN_2L_NR_CHANNELS; } +static void evtchn_2l_remove(evtchn_port_t evtchn, unsigned int cpu) +{ + clear_bit(evtchn, BM(per_cpu(cpu_evtchn_mask, cpu))); +} + static void evtchn_2l_bind_to_cpu(evtchn_port_t evtchn, unsigned int cpu, unsigned int old_cpu) { @@ -355,9 +360,18 @@ static void evtchn_2l_resume(void) EVTCHN_2L_NR_CHANNELS/BITS_PER_EVTCHN_WORD); } +static int evtchn_2l_percpu_deinit(unsigned int cpu) +{ + memset(per_cpu(cpu_evtchn_mask, cpu), 0, sizeof(xen_ulong_t) * + EVTCHN_2L_NR_CHANNELS/BITS_PER_EVTCHN_WORD); + + return 0; +} + static const struct evtchn_ops evtchn_ops_2l = { .max_channels = evtchn_2l_max_channels, .nr_channels = evtchn_2l_max_channels, + .remove = evtchn_2l_remove, .bind_to_cpu = evtchn_2l_bind_to_cpu, .clear_pending = evtchn_2l_clear_pending, .set_pending = evtchn_2l_set_pending, @@ -367,6 +381,7 @@ static const struct evtchn_ops evtchn_op .unmask = evtchn_2l_unmask, .handle_events = evtchn_2l_handle_events, .resume = evtchn_2l_resume, + .percpu_deinit = evtchn_2l_percpu_deinit, }; void __init xen_evtchn_2l_init(void) --- a/drivers/xen/events/events_base.c +++ b/drivers/xen/events/events_base.c @@ -368,6 +368,7 @@ static int xen_irq_info_pirq_setup(unsig static void xen_irq_info_cleanup(struct irq_info *info) { set_evtchn_to_irq(info->evtchn, -1); + xen_evtchn_port_remove(info->evtchn, info->cpu); info->evtchn = 0; channels_on_cpu_dec(info); } --- a/drivers/xen/events/events_internal.h +++ b/drivers/xen/events/events_internal.h @@ -14,6 +14,7 @@ struct evtchn_ops { unsigned (*nr_channels)(void); int (*setup)(evtchn_port_t port); + void (*remove)(evtchn_port_t port, unsigned int cpu); void (*bind_to_cpu)(evtchn_port_t evtchn, unsigned int cpu, unsigned int old_cpu); @@ -54,6 +55,13 @@ static inline int xen_evtchn_port_setup( return 0; } +static inline void xen_evtchn_port_remove(evtchn_port_t evtchn, + unsigned int cpu) +{ + if (evtchn_ops->remove) + evtchn_ops->remove(evtchn, cpu); +} + static inline void xen_evtchn_port_bind_to_cpu(evtchn_port_t evtchn, unsigned int cpu, unsigned int old_cpu)