Received: by 2002:a25:1506:0:0:0:0:0 with SMTP id 6csp4028824ybv; Tue, 25 Feb 2020 11:45:38 -0800 (PST) X-Google-Smtp-Source: APXvYqx+rvRwUdRaZ7jTzDJlFRmjsHZ48rp3UPZKaFjGUHYjA/w66hl6oTrO6xsbbjBr0SddJvBs X-Received: by 2002:a9d:730e:: with SMTP id e14mr179810otk.62.1582659938458; Tue, 25 Feb 2020 11:45:38 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1582659938; cv=none; d=google.com; s=arc-20160816; b=NWpfMnJv0Pxmv127VXVCGUqfIaSX/Cf5txj3vJSJ+SVn5j1bYkU22lrCKzyIUJCL0u IRFLkeIGgBFwqI1jcQofiL7AxxsLKb/25PMV01Rwi8Jh+4VVmK2tcab/98B/2xfj+wVJ MXWxu276Ir0UhjO4ebPC8MXrrq4yI/gMOmE9F8onAis3QbZRo5nsHdUziSApGIf5heQh P42AoxkRG2p5emZR+sggyXrHZof3JYYRBXdzvfjNndJhwHOsaxHwxMP/i1YJsuEWF8M8 QDPS8oQRbx76Z6+gsNGXC4SOQAxdrPmh3M6iMComGDGqzMaDv/f/OnmMDZE43UyGC2Or 3DtA== 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=Y5ARqS8fOu7y2q4SAuOpYODGl1uxlFkaNgKkeNk4CgU=; b=JMLlHxVgcfLaZVA5xqgYTZWyK1+XvVlwv5B55Wds+O/iDyvy0Z3IaRfCW9HO5SkyZf rzcZwZnpCVgifs49MDZMur9p8pA6/EgQ01FJKzr+sj3+w0/7pVjpbNcdrleWwy8scd4c hGbYvbvH4pINwQgFHaXy84pN5SihVv7hvTWnv5WvhBPoAthx2g9wtn80aUPmeQGFrlze xlcIzqSfevTiAa7ql45e4gzk97szT3Vz0Nf/E1BLg8HfP43i+K5DXEkJ53rZ41U3/Anz ltRebrSBHO8NjRx1TPMugabbJbhh0nHva8173whmviwBuYG9xYgItSh9zO1lnjfE6D+1 UGGw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=IlAG4Obz; 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 12si91021oir.69.2020.02.25.11.45.25; Tue, 25 Feb 2020 11:45:38 -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=IlAG4Obz; 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 S1731425AbgBYTpK (ORCPT + 99 others); Tue, 25 Feb 2020 14:45:10 -0500 Received: from mail.kernel.org ([198.145.29.99]:49502 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730841AbgBYTpI (ORCPT ); Tue, 25 Feb 2020 14:45:08 -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 D6E1F2084E; Tue, 25 Feb 2020 19:45:07 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1582659908; bh=Nj5eGcXxyq9FnFZMfH7juRDhSHO1VgSMIrQjWtUxLn8=; h=Date:From:To:Cc:Subject:In-Reply-To:References:From; b=IlAG4Obz3PchfypDD708rExwBwE8cN7Zb9TRW43BV8yBwUbOw1SG3pVS4jKhcUEfs Zq8EsYhwA62Wkl862PGh5g3ox767G98NOPHNJ+jTL4s8KzmRdkSWWsdoTEjlq0IZQN XJ/aF0pQe0zMPC/F0O/4v9baF14IWkzC4VdPyCwo= 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 1j6g8g-007uWl-5Q; Tue, 25 Feb 2020 19:45:06 +0000 MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII; format=flowed Content-Transfer-Encoding: 7bit Date: Tue, 25 Feb 2020 19:45:06 +0000 From: Marc Zyngier To: Zenghui Yu Cc: kvmarm@lists.cs.columbia.edu, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, wanghaibin.wang@huawei.com, Yanlei Jia Subject: Re: [PATCH] irqchip/gic-v3-its: Clear Valid before writing any bits else in VPENDBASER In-Reply-To: <6ce5c751-6d17-b9ee-4054-edad7de075bf@huawei.com> References: <20200224025029.92-1-yuzenghui@huawei.com> <6ce5c751-6d17-b9ee-4054-edad7de075bf@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, kvmarm@lists.cs.columbia.edu, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, wanghaibin.wang@huawei.com, jiayanlei@huawei.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 Hi Zenghui, On 2020-02-25 02:06, Zenghui Yu wrote: > Hi Marc, > > On 2020/2/25 7:47, Marc Zyngier wrote: >> Hi Zenghui, >> >> On 2020-02-24 02:50, Zenghui Yu wrote: >>> The Valid bit must be cleared before changing anything else when >>> writing >>> GICR_VPENDBASER to avoid the UNPREDICTABLE behavior. This is exactly >>> what >>> we've done on 32bit arm, but not on arm64. >> >> I'm not quite sure how you decide that Valid must be cleared before >> changing >> anything else. The reason why we do it on 32bit is that we cannot >> update >> the full 64bit register at once, so we start by clearing Valid so that >> we can update the rest. arm64 doesn't require that. > > The problem came out from discussions with our GIC engineers and what > we > talked about at that time was IHI 0069E 9.11.36 - the description of > the > Valid field: > > "Writing a new value to any bit of GICR_VPENDBASER, other than > GICR_VPENDBASER.Valid, when GICR_VPENDBASER.Valid==1 is UNPREDICTABLE." > > It looks like we should first clear the Valid and then write something > else. We might have some mis-understanding about this statement.. So that's the v4.0 version of VPENDBASER. On v4.0, you start by clearing Valid, not changing any other bit. Subsequent polling of the leads to the PendingLast bit once Dirty clears. The current code follows this principle. >> For the rest of discussion, let's ignore GICv4.1 32bit support (I'm >> pretty sure nobody cares about that). >> >>> This works fine on GICv4 where we only clear Valid for a vPE >>> deschedule. >>> With the introduction of GICv4.1, we might also need to talk >>> something else >>> (e.g., PendingLast, Doorbell) to the redistributor when clearing the >>> Valid. >>> Let's port the 32bit gicr_write_vpendbaser() to arm64 so that >>> hardware can >>> do the right thing after descheduling the vPE. >> >> The spec says that: >> >> "For a write that writes GICR_VPENDBASER.Valid from 1 to 0, if >> GICR_VPENDBASER.PendingLast is written as 1 then >> GICR_VPENDBASER.PendingLast >> takes an UNKNOWN value and GICR_VPENDBASER.Doorbell is treated as >> being 0." >> >> and >> >> "When GICR_VPENDBASER.Valid is written from 1 to 0, if there are >> outstanding >> enabled pending interrupts GICR_VPENDBASER.Doorbell is treated as 0." >> >> which indicate that PendingLast/Doorbell have to be written at the >> same time >> as we clear Valid. > > Yes. I obviously missed these two points when writing this patch. > >> Can you point me to the bit of the v4.1 spec that makes >> this "clear Valid before doing anything else" requirement explicit? > > No, nothing in v4.1 spec supports me :-( The above has been forwarded > to Hisilicon and I will confirm these with them. It would be easy for > hardware to handle the PendingLast/DB when clearing Valid, I think. v4.1 changes the way VPENDBASER works in a number of way. Clearing Valid allows a "handshake": At the point of making the vPE non-resident, to specify the expected behaviour of the redistributor once the residency has been completed. This includes requesting the doorbell or telling the GIC that we don't care to know about PendingLast. This is effectively a relaxation of the v4.0 behaviour. I believe the current state of the driver matches both specs (not using common code though). Thanks, M. -- Jazz is not dead. It just smells funny...