Received: by 10.223.185.116 with SMTP id b49csp1012058wrg; Wed, 21 Feb 2018 10:32:41 -0800 (PST) X-Google-Smtp-Source: AH8x226jLFgcrzpAq3VhU81bc+L6GtJvs+HW7ezIMbE/4eDUtb84hj5cGp8fj9XR74EfB7PGGC2x X-Received: by 10.99.191.78 with SMTP id i14mr3497972pgo.9.1519237960901; Wed, 21 Feb 2018 10:32:40 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1519237960; cv=none; d=google.com; s=arc-20160816; b=fQ+1CR5+8oX06CX2nlpneH0y/uA7Jxac64acU/Szp0Q4Tmsr7WRriyTBmC9SpmaTbH PDRgPhxd6jE/iKWZSvPg1tAiNdbR+E3QDy+UKnIYac4ARoancApWiauqrcRnZQaEUX4h qBAhEnLERuSzDMQsD5mJVh6QLUpDRqs3A8+c0eqF7Bituo6PVjf/LCYt/jWCTmpeHBj3 BdCwrBHpIRU3n0jD8erH79WMgQEc7lSw5p2lWq+gl+70fdJH3hd35e0U9yZ8+MJDXCMp yTV+7Qu48c+P5dJUgAg6b8Ynm/EFKPgIg+qj0Bsl9ooiatoYxmgM6UALZRZvqGvwOyEk 6DzQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:user-agent:references :in-reply-to:message-id:date:subject:cc:to:from :arc-authentication-results; bh=KtNNQhcyP0rBNL3sDNc4g0QSSKhxfWdNiuoE3KmlCpY=; b=XwumVJrppC0M31cCHebN3IMtNKMCaRBrv/2wQNJ5f4JiOU9wRuHcMz8djr7hcH2I90 6U4u9GFoxEatwgt/4IdODwiVdEtf+HSHei7GjDQqD78FFevjPcv7tJQfCrR8mTk0zHe5 dyL10cg7tz3+AevDV/3pO7ktnv0oehRDBAAufwrPHj462kGnSQmUzoYSkM/p2GBW7Lmw d+hGlZsZiMhL8ChnaFVvv/WPp664LZINZaRVRoayQ45ci5sfQbBA2I2mvmK58wPzwoOn xGUssI/vdTFVstCWZUp+jKbcjOaVswmbRQjaV2MldCXDnjuUp+TWwlfXRdvV1kBnqcTq 0kxQ== ARC-Authentication-Results: i=1; mx.google.com; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id f9-v6si1936887plk.94.2018.02.21.10.32.26; Wed, 21 Feb 2018 10:32: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; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S965117AbeBUNHP (ORCPT + 99 others); Wed, 21 Feb 2018 08:07:15 -0500 Received: from mail.linuxfoundation.org ([140.211.169.12]:41498 "EHLO mail.linuxfoundation.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S965068AbeBUNHM (ORCPT ); Wed, 21 Feb 2018 08:07:12 -0500 Received: from localhost (LFbn-1-12258-90.w90-92.abo.wanadoo.fr [90.92.71.90]) by mail.linuxfoundation.org (Postfix) with ESMTPSA id 41F96F99; Wed, 21 Feb 2018 13:07:11 +0000 (UTC) From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Sukadev Bhattiprolu , Michael Ellerman Subject: [PATCH 4.15 020/163] powerpc/kernel: Block interrupts when updating TIDR Date: Wed, 21 Feb 2018 13:47:29 +0100 Message-Id: <20180221124531.267932292@linuxfoundation.org> X-Mailer: git-send-email 2.16.2 In-Reply-To: <20180221124529.931834518@linuxfoundation.org> References: <20180221124529.931834518@linuxfoundation.org> User-Agent: quilt/0.65 X-stable: review MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 4.15-stable review patch. If anyone has any objections, please let me know. ------------------ From: Sukadev Bhattiprolu commit 384dfd627f1ee67d028e6f14c6e9bf5a1e2a7a24 upstream. clear_thread_tidr() is called in interrupt context as a part of delayed put of the task structure (i.e as a part of timer interrupt). To prevent a deadlock, block interrupts when holding vas_thread_id_lock to set/ clear TIDR for a task. Fixes: ec233ede4c86 ("powerpc: Add support for setting SPRN_TIDR") Cc: stable@vger.kernel.org # v4.15+ Signed-off-by: Sukadev Bhattiprolu Signed-off-by: Michael Ellerman Signed-off-by: Greg Kroah-Hartman --- arch/powerpc/kernel/process.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) --- a/arch/powerpc/kernel/process.c +++ b/arch/powerpc/kernel/process.c @@ -1509,14 +1509,15 @@ static int assign_thread_tidr(void) { int index; int err; + unsigned long flags; again: if (!ida_pre_get(&vas_thread_ida, GFP_KERNEL)) return -ENOMEM; - spin_lock(&vas_thread_id_lock); + spin_lock_irqsave(&vas_thread_id_lock, flags); err = ida_get_new_above(&vas_thread_ida, 1, &index); - spin_unlock(&vas_thread_id_lock); + spin_unlock_irqrestore(&vas_thread_id_lock, flags); if (err == -EAGAIN) goto again; @@ -1524,9 +1525,9 @@ again: return err; if (index > MAX_THREAD_CONTEXT) { - spin_lock(&vas_thread_id_lock); + spin_lock_irqsave(&vas_thread_id_lock, flags); ida_remove(&vas_thread_ida, index); - spin_unlock(&vas_thread_id_lock); + spin_unlock_irqrestore(&vas_thread_id_lock, flags); return -ENOMEM; } @@ -1535,9 +1536,11 @@ again: static void free_thread_tidr(int id) { - spin_lock(&vas_thread_id_lock); + unsigned long flags; + + spin_lock_irqsave(&vas_thread_id_lock, flags); ida_remove(&vas_thread_ida, id); - spin_unlock(&vas_thread_id_lock); + spin_unlock_irqrestore(&vas_thread_id_lock, flags); } /*