Received: by 2002:a05:6902:102b:0:0:0:0 with SMTP id x11csp1134359ybt; Tue, 7 Jul 2020 08:30:53 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwdUadX43ccCK4tkKOFC/at5+Qcy7EOUGFlWP54z0ZBOSJFSrAghClq4iDyjalshIg1ETIE X-Received: by 2002:a17:907:10d4:: with SMTP id rv20mr33719017ejb.413.1594135853228; Tue, 07 Jul 2020 08:30:53 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1594135853; cv=none; d=google.com; s=arc-20160816; b=mrbjLlXlzMeLE3rcwf8vsdmREi4yh2W3up30h23mr5Uilyo5kNStmWzfmtDY6cvBFV ox6fIpN74bFNCE11R6Vaer7dHLU6+Oiwf0xP+5IbljaNzaB7ZyRH1aicYEiKC1rFLG1n SxP1ddbP/1tGtb09+vkxdDMGbveOLpuW1nqyg5iUjqAeH34eAn0XL3wPRIuXAUrn9ih4 z3AJmIZr3QZRqUXDmX6a1+AMH3xuXYpHimg4zhDOiPN/A+LE8g/bxG0oeYiShqldJJKN VYYAVgMw7X5tNu32b9dBVvwR1d2ul/k/DbEw1z0AdSI4W7H33WzU45Ahtr9UbksGPTc2 rpGg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=r65PTSjHgY2h2xXakdsd3qU89B0ovx3QsEFvsX1rbXk=; b=dnU7eaXu4qcVbEC8fIFQCjsEBg+2sLEpsCHycr3AxIIpLZPj9ZWqQsbBPO77G7nYwV QFqV41SFKdJU+0OlfngEZ5J+eIFX5fa1HRe5cRIoCjh4ARbTwemKsDEx0tEcWWmR9tLB Kc28IerX+1wuPSz6cS2+OvwKJlR6V0s0QYYAI4GlVpMQT1y0fbV1KRAVrkikzLldeHp9 4i0fONjHqW3uVCyf0FcA+6GGSQxW6n/ih4lmxGIncBApWhuyTZFEqjl1leT7OmnW0EIE 3ZaxFTk30jY6vkDglrQ2CtDIG14BEFt34BXQSFt0ATRrBC5sTK9CCocu6r+0CVQI3n9Q 6kkw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=fEUICqB4; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id g12si15152065edn.412.2020.07.07.08.30.30; Tue, 07 Jul 2020 08:30:53 -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=@kernel.org header.s=default header.b=fEUICqB4; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729621AbgGGP0x (ORCPT + 99 others); Tue, 7 Jul 2020 11:26:53 -0400 Received: from mail.kernel.org ([198.145.29.99]:41178 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730293AbgGGP0v (ORCPT ); Tue, 7 Jul 2020 11:26:51 -0400 Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (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 E6C482083B; Tue, 7 Jul 2020 15:26:49 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1594135610; bh=8AF14UblYs3ptHNxNzaQdjEKUMpZrRcDcrOJjLDL8Is=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=fEUICqB4agQQTC2M9DMJHLaGWYjObKncJiRjlgyujlT2MVerzGloXqlV1co2McN/+ slYSIcYQ6T74KeUMtiZcowXIHfclzQFUIw6LfecqNFSv0nwN6Ty8IUzOhP3VtS2nYt tjtmZucdMWj9H/KAQu5b9qdef5ULL6jsPViXhrsI= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Marc Zyngier Subject: [PATCH 5.7 108/112] irqchip/gic: Atomically update affinity Date: Tue, 7 Jul 2020 17:17:53 +0200 Message-Id: <20200707145806.109095757@linuxfoundation.org> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20200707145800.925304888@linuxfoundation.org> References: <20200707145800.925304888@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Marc Zyngier commit 005c34ae4b44f085120d7f371121ec7ded677761 upstream. The GIC driver uses a RMW sequence to update the affinity, and relies on the gic_lock_irqsave/gic_unlock_irqrestore sequences to update it atomically. But these sequences only expand into anything meaningful if the BL_SWITCHER option is selected, which almost never happens. It also turns out that using a RMW and locks is just as silly, as the GIC distributor supports byte accesses for the GICD_TARGETRn registers, which when used make the update atomic by definition. Drop the terminally broken code and replace it by a byte write. Fixes: 04c8b0f82c7d ("irqchip/gic: Make locking a BL_SWITCHER only feature") Cc: stable@vger.kernel.org Signed-off-by: Marc Zyngier Signed-off-by: Greg Kroah-Hartman --- drivers/irqchip/irq-gic.c | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) --- a/drivers/irqchip/irq-gic.c +++ b/drivers/irqchip/irq-gic.c @@ -329,10 +329,8 @@ static int gic_irq_set_vcpu_affinity(str static int gic_set_affinity(struct irq_data *d, const struct cpumask *mask_val, bool force) { - void __iomem *reg = gic_dist_base(d) + GIC_DIST_TARGET + (gic_irq(d) & ~3); - unsigned int cpu, shift = (gic_irq(d) % 4) * 8; - u32 val, mask, bit; - unsigned long flags; + void __iomem *reg = gic_dist_base(d) + GIC_DIST_TARGET + gic_irq(d); + unsigned int cpu; if (!force) cpu = cpumask_any_and(mask_val, cpu_online_mask); @@ -342,13 +340,7 @@ static int gic_set_affinity(struct irq_d if (cpu >= NR_GIC_CPU_IF || cpu >= nr_cpu_ids) return -EINVAL; - gic_lock_irqsave(flags); - mask = 0xff << shift; - bit = gic_cpu_map[cpu] << shift; - val = readl_relaxed(reg) & ~mask; - writel_relaxed(val | bit, reg); - gic_unlock_irqrestore(flags); - + writeb_relaxed(gic_cpu_map[cpu], reg); irq_data_update_effective_affinity(d, cpumask_of(cpu)); return IRQ_SET_MASK_OK_DONE;