Received: by 2002:a25:c205:0:0:0:0:0 with SMTP id s5csp992766ybf; Fri, 28 Feb 2020 11:38:40 -0800 (PST) X-Google-Smtp-Source: APXvYqzVTvFbDDfEJrqMfLyT6YTqdapPohQbRUU7FtkXAMU122UtinAbCz8k0Z0Fd2/RNDA+ZFwR X-Received: by 2002:aca:2412:: with SMTP id n18mr4298665oic.134.1582918720538; Fri, 28 Feb 2020 11:38:40 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1582918720; cv=none; d=google.com; s=arc-20160816; b=p9XMlZZTTcJYo+Prp0cHkxv9FlMxuzAqbaKvNRkGCcAHNWepmlq80x/Ej2/9WJbiOL 94UnhhrwzJdbOrCh1x3YRZdWnuomirgufjEr4Cujg293J0zjWWyXeTHe/Ngx70BhuUYf 4tO8GDCqSjLOLMgHomXY0xWk0yRNbs+Ft+puHk9b4XF6axk9IzZnLiw2ERx2fzPfknBJ Gs+IquxkOdJ4df64nQnbQd5xorwzpmNSHuwKzdvmCYOPiUpm0zTmlRxegiAQG2rg7J1y Y++v1tgqXym+Q/7PfaouTE9j/T12vCYdd76KCbna9YzgBLJgxGhzABP2uo2IuZ2pzkjp 9g0Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:user-agent:message-id:references :in-reply-to:subject:cc:to:from:date:content-transfer-encoding :mime-version:dkim-signature; bh=s5sGSBJ4W0IBZxuF7rD9zJXH1xzQHXOhWUMB6K6EEt4=; b=PmjC8wunThXGNrreEyM9p7KS4dFR/4KJ8JQjQhWq8Vdl6nDMb0V8AwCdXaoKx/hx91 D+0aDzxgvgYl68KpkApiUI/NeqQfKPwiLLY7gWM5hT6eDC3WRiKqL85EO085SsHDxl/y FZHX0V7BJFAuE27UDiYm3NiIOcZswWvZtZIPdTPj/lzeD/MXwoQ4wkl6FKYbOLQqTIl2 dGuIRe7Soay2uE+sIxaKGVCYoTPEszvJAD1jXckBbn8Oa+UxFTg5UY1zxueyF8BhiDCd kvW5QJM6e9V+b3IXTjZmsmc64GZDW0H1O8kRv0YK7xAv4jH140ZgZ8AYgLURfJKxVZb2 j6rg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=MDC+EaNm; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id y73si2502737oia.246.2020.02.28.11.38.28; Fri, 28 Feb 2020 11:38:40 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=MDC+EaNm; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726890AbgB1Thw (ORCPT + 99 others); Fri, 28 Feb 2020 14:37:52 -0500 Received: from mail.kernel.org ([198.145.29.99]:56282 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726046AbgB1Thv (ORCPT ); Fri, 28 Feb 2020 14:37:51 -0500 Received: from disco-boy.misterjones.org (disco-boy.misterjones.org [51.254.78.96]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 2B5062468E; Fri, 28 Feb 2020 19:37:50 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1582918670; bh=GR2XIlY7VhwIG2Z0tuLnjCZ9twVNAAlxyjR6cCpLapc=; h=Date:From:To:Cc:Subject:In-Reply-To:References:From; b=MDC+EaNmqCEkJ+97BWWShMEb2fNu+dKrf+uEr314pT30XDXvN51eMNGx0x1pj7zcA j6PJ/803E6x7Gg2YjNyPEG/yDRG9A4lM4u+9tXLSxCxUkDE7pF1AMx7bjx5KR1jK17 WhtaHaUWTauLUqNFuf/i1VYPRpA0A/RxsDQNnIC0= Received: from disco-boy.misterjones.org ([51.254.78.96] helo=www.loen.fr) by disco-boy.misterjones.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1j7lSG-008q14-CA; Fri, 28 Feb 2020 19:37:48 +0000 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Date: Fri, 28 Feb 2020 19:37:48 +0000 From: Marc Zyngier To: Zenghui Yu Cc: linux-arm-kernel@lists.infradead.org, kvmarm@lists.cs.columbia.edu, kvm@vger.kernel.org, linux-kernel@vger.kernel.org, Lorenzo Pieralisi , Jason Cooper , Robert Richter , Thomas Gleixner , Eric Auger , James Morse , Julien Thierry , Suzuki K Poulose Subject: Re: [PATCH v4 08/20] irqchip/gic-v4.1: Plumb get/set_irqchip_state SGI callbacks In-Reply-To: <3d725ede-6631-59fb-1a10-9fb9890f3df6@huawei.com> References: <20200214145736.18550-1-maz@kernel.org> <20200214145736.18550-9-maz@kernel.org> <4b7f71f1-5e7f-e6af-f47d-7ed0d3a8739f@huawei.com> <75597af0d2373ac4d92d8162a1338cbb@kernel.org> <19a7c193f0e4b97343e822a35f0911ed@kernel.org> <3d725ede-6631-59fb-1a10-9fb9890f3df6@huawei.com> Message-ID: X-Sender: maz@kernel.org User-Agent: Roundcube Webmail/1.3.10 X-SA-Exim-Connect-IP: 51.254.78.96 X-SA-Exim-Rcpt-To: yuzenghui@huawei.com, linux-arm-kernel@lists.infradead.org, kvmarm@lists.cs.columbia.edu, kvm@vger.kernel.org, linux-kernel@vger.kernel.org, lorenzo.pieralisi@arm.com, jason@lakedaemon.net, rrichter@marvell.com, tglx@linutronix.de, eric.auger@redhat.com, james.morse@arm.com, julien.thierry.kdev@gmail.com, suzuki.poulose@arm.com X-SA-Exim-Mail-From: maz@kernel.org X-SA-Exim-Scanned: No (on disco-boy.misterjones.org); SAEximRunCond expanded to false Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 2020-02-20 03:11, Zenghui Yu wrote: > Hi Marc, > > On 2020/2/18 23:31, Marc Zyngier wrote: >> diff --git a/drivers/irqchip/irq-gic-v3-its.c >> b/drivers/irqchip/irq-gic-v3-its.c >> index 7656b353a95f..0ed286dba827 100644 >> --- a/drivers/irqchip/irq-gic-v3-its.c >> +++ b/drivers/irqchip/irq-gic-v3-its.c >> @@ -144,7 +144,7 @@ struct event_lpi_map { >>      u16            *col_map; >>      irq_hw_number_t        lpi_base; >>      int            nr_lpis; >> -    raw_spinlock_t        vlpi_lock; >> +    raw_spinlock_t        map_lock; > > So we use map_lock to protect both LPI's and VLPI's mapping affinity of > a device, and use vpe_lock to protect vPE's affinity, OK. > >>      struct its_vm        *vm; >>      struct its_vlpi_map    *vlpi_maps; >>      int            nr_vlpis; >> @@ -240,15 +240,33 @@ static struct its_vlpi_map *get_vlpi_map(struct >> irq_data *d) >>      return NULL; >>  } >> >> -static int irq_to_cpuid(struct irq_data *d) >> +static int irq_to_cpuid_lock(struct irq_data *d, unsigned long >> *flags) >>  { >> -    struct its_device *its_dev = irq_data_get_irq_chip_data(d); >>      struct its_vlpi_map *map = get_vlpi_map(d); >> +    int cpu; >> >> -    if (map) >> -        return map->vpe->col_idx; >> +    if (map) { >> +        raw_spin_lock_irqsave(&map->vpe->vpe_lock, *flags); >> +        cpu = map->vpe->col_idx; >> +    } else { >> +        struct its_device *its_dev = irq_data_get_irq_chip_data(d); >> +        raw_spin_lock_irqsave(&its_dev->event_map.map_lock, *flags); >> +        cpu = its_dev->event_map.col_map[its_get_event_id(d)]; >> +    } >> >> -    return its_dev->event_map.col_map[its_get_event_id(d)]; >> +    return cpu; >> +} > > This helper is correct for normal LPIs and VLPIs, but wrong for per-vPE > IRQ (doorbell) and vSGIs. irq_data_get_irq_chip_data() gets confused by > both of them. Yes, I've fixed that in the current state of the tree last week. Do have a look if you can, but it seems to survive on both the model with v4.1 and my D05. [...] >> -        rdbase = per_cpu_ptr(gic_rdists->rdist, >> vpe->col_idx)->rd_base; >> +        cpu = irq_to_cpuid_lock(d, &flags); >> +        rdbase = per_cpu_ptr(gic_rdists->rdist, cpu)->rd_base; >>          gic_write_lpir(d->parent_data->hwirq, rdbase + >> GICR_INVLPIR); >>          wait_for_syncr(rdbase); >> +        irq_to_cpuid_unlock(d, flags); >>      } else { >>          its_vpe_send_cmd(vpe, its_send_inv); >>      } > > Do we really need to grab the vpe_lock for those which are belong to > the same irqchip with its_vpe_set_affinity()? The IRQ core code should > already ensure the mutual exclusion among them, wrong? I've been trying to think about that, but jet-lag keeps getting in the way. I empirically think that you are right, but I need to go and check the various code paths to be sure. Hopefully I'll have a bit more brain space next week. For sure this patch tries to do too many things at once... M. -- Jazz is not dead. It just smells funny...