Received: by 2002:a25:8b91:0:0:0:0:0 with SMTP id j17csp6469153ybl; Mon, 23 Dec 2019 06:25:27 -0800 (PST) X-Google-Smtp-Source: APXvYqx/kXsC9Krm4Vdqd3dJysQwIUGOQK9IUa4DjSdSGnFRuCEPCI5yaGlQU/SMeO/8+/xvKIyz X-Received: by 2002:aca:b703:: with SMTP id h3mr5727087oif.148.1577111127863; Mon, 23 Dec 2019 06:25:27 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1577111127; cv=none; d=google.com; s=arc-20160816; b=mrEEzufBmZW5XnumXDkj2AQOsHtbcE1Ix6EXvmc/7qwuMu9Zeef2p4mneXKG6gJoSG Q2lSbbB3sgYKyFylZ76ysD69evmTqhu1jaDMDPAfnXe8FRVWcOWqTZvfSA2HF9uKTM3f yUo/LLQyTVktL2npV3M97UzgjQ5WLmvZ1PtDLU8k3LLv/WCXywzW/JMqEaVDO32hSnwD jj5D8nyVjlrysLHysgEwuMi5YRxmrbI2BzVXcaPYMeOa7XEHTfDNGwlQPKskdA/aE+Nj Ypy0wMdqimO2kFlWvm5pU6c2o6CvC1pHDmAt7tetGJc1RDW9SB+eJD7D28UVDNk6cNBU eaoQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:message-id:date:subject:cc:to:from; bh=8b96eQ2PJu7VEmY+ap9dVhB5iZWFxE13ww4IR8sAmw4=; b=Im6c8POUz2zhw1dePlTEEj3KVGBWapNIOA4ygLm87oKIiwgZUOFZ9hQqaUzFZucIWt 4d41y6+Qj1xwXXybZgqwQCTJ16O9JbSglW2lRGTpZomK1IKSM4FDyfodyXuhTXhWKNgg 6eAKrZ7BTkSU8VWqLPdvJvy+onDds2ay6CYa3Kq1N1USIN+EzlFHa8987x8Y8xXe6Sfa KpKkTbBSFyAAbKYwDZ/MsEAYWZJ61k9dUmXs2CMVerY19sl+yyef1kt4asvZK9A8EU/t VMA9pEHEFmGzaqKTWnhStayfYsfjgGp1nC8lBe+zqXPlapxO4EQuhhN9r/jH/4wlFs/y igZQ== 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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=alibaba.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id n139si9667638oig.121.2019.12.23.06.25.15; Mon, 23 Dec 2019 06:25:27 -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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=alibaba.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726994AbfLWOXY (ORCPT + 99 others); Mon, 23 Dec 2019 09:23:24 -0500 Received: from out30-54.freemail.mail.aliyun.com ([115.124.30.54]:59913 "EHLO out30-54.freemail.mail.aliyun.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726798AbfLWOXW (ORCPT ); Mon, 23 Dec 2019 09:23:22 -0500 X-Alimail-AntiSpam: AC=PASS;BC=-1|-1;BR=01201311R891e4;CH=green;DM=||false|;DS=||;FP=0|-1|-1|-1|0|-1|-1|-1;HT=e01e07487;MF=zhangliguang@linux.alibaba.com;NM=1;PH=DS;RN=4;SR=0;TI=SMTPD_---0TlkllZi_1577110976; Received: from localhost(mailfrom:zhangliguang@linux.alibaba.com fp:SMTPD_---0TlkllZi_1577110976) by smtp.aliyun-inc.com(127.0.0.1); Mon, 23 Dec 2019 22:23:05 +0800 From: luanshi To: James Morse Cc: linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Liguang Zhang Subject: [PATCH 1/3] firmware: arm_sdei: fix possible deadlock Date: Mon, 23 Dec 2019 22:22:53 +0800 Message-Id: <1577110975-54782-1-git-send-email-zhangliguang@linux.alibaba.com> X-Mailer: git-send-email 1.8.3.1 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Liguang Zhang We call sdei_reregister_event() with sdei_list_lock held but _sdei_event_register() and sdei_event_destroy() also acquires sdei_list_lock thus creating A-A deadlock. Fixes: da351827240e ("firmware: arm_sdei: Add support for CPU and system power states") Signed-off-by: Liguang Zhang --- drivers/firmware/arm_sdei.c | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/drivers/firmware/arm_sdei.c b/drivers/firmware/arm_sdei.c index a479023..b122927 100644 --- a/drivers/firmware/arm_sdei.c +++ b/drivers/firmware/arm_sdei.c @@ -651,20 +651,19 @@ static int sdei_reregister_event(struct sdei_event *event) lockdep_assert_held(&sdei_events_lock); - err = _sdei_event_register(event); + err = sdei_api_event_register(event->event_num, + sdei_entry_point, + event->registered, + SDEI_EVENT_REGISTER_RM_ANY, 0); if (err) { pr_err("Failed to re-register event %u\n", event->event_num); - sdei_event_destroy(event); + list_del(&event->list); + kfree(event->registered); return err; } - if (event->reenable) { - if (event->type == SDEI_EVENT_TYPE_SHARED) - err = sdei_api_event_enable(event->event_num); - else - err = sdei_do_cross_call(_local_event_enable, event); - } - + if (event->reenable) + err = sdei_api_event_enable(event->event_num); if (err) pr_err("Failed to re-enable event %u\n", event->event_num); -- 1.8.3.1