Received: by 2002:a25:ab43:0:0:0:0:0 with SMTP id u61csp275145ybi; Wed, 29 May 2019 21:10:32 -0700 (PDT) X-Google-Smtp-Source: APXvYqyEzgV2W/5Hm8aPaLOAqlGC/mkz/UvIklUAqr/dFHTsuhGt2/yBUeeQTSKwvgq6gfy1g/GX X-Received: by 2002:a63:555a:: with SMTP id f26mr1789883pgm.197.1559189431871; Wed, 29 May 2019 21:10:31 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1559189431; cv=none; d=google.com; s=arc-20160816; b=Xfuh2OKeDycbtxYYAW2zNa7ijGy/zDpCQ3j4t0UKmdkIfMsqPoWbfwB4GY34GxLhnd ONa4tC7tdnRuKbf7jylbGTJy2hSQ6pqgYfLUTnC2dn/XVPCuMXy5PmG+GR1om1ABvx/y X/YUaBZQ37pJk5gdCTne3G+oDkhddwfIbWI6dNkGkBJl6jqKxw+XiAJzHNJHEDyViw27 7gFew/dWWw/lEdrOjIfLow4KB5x78Lm+v7N0dfQoZ2NRxu8R4wTpTyDntRmX/73eBj1+ 7O30IBEnZrRpKdG6996jiIyXSTF8iuRMeOir0yfzMc6S/f9ifucubtG0xWaFoMBhwZ2o q/XA== 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=/SM4Yanbp7gbRjMMXxkqa/rOgrO2ZCjoAJKcVCiQQhA=; b=LFNPv4MSyqisyd3GWNMmfnh5UXwu2sOxkycl4tE8l1/FVRo2wfQRTKzjVki+aX/Z6h tNLORDyE0Ie2W5rCWdgID+6jrvBTEk1q+TCZWYsCEEWmL9x3NjDKFkOQ4C+udS0+j5Yx KNu5UWdtb2qucD2diznz00Ki5rrVSFc4MXvjDUZ6q4jbQpPG2J0KymP/+CynxhtXzX04 YpJvOQsya5wJ6DxJ3nXscyBAH64NvUw0ooP8lmnP3/z6bnI0qLXDtWzwd200QgW6YD2w EkytS1Zakaw9Y7UKNZuzFKoc/OVpSfLHX2yRhmH+NXne8AGsR0/P1BUmI5iQnnnEpipy JAiQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=scksEpJy; 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 cj1si2080767plb.373.2019.05.29.21.10.16; Wed, 29 May 2019 21:10:31 -0700 (PDT) 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=scksEpJy; 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 S1727339AbfE3EIR (ORCPT + 99 others); Thu, 30 May 2019 00:08:17 -0400 Received: from mail.kernel.org ([198.145.29.99]:46034 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729621AbfE3DRU (ORCPT ); Wed, 29 May 2019 23:17:20 -0400 Received: from localhost (ip67-88-213-2.z213-88-67.customer.algx.net [67.88.213.2]) (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 AF3412469E; Thu, 30 May 2019 03:17:19 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1559186239; bh=UFh/zJ1gijS7gMSPqAyLNEYVNc/ARSAND5iI9zLBZgw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=scksEpJys201TQbs9qjEokUF8Qmaui57+AwZNnCIafcLNqBxbXq4oldrESc1azD28 P6J+3VkFFf3ef6kK6hrP2AU1531zgo0YV0acmiD3sA42tLoTIbBk9yKUitbzzy33Ey rDBCp9OXOg9rJy903Af/hjuLkyvYRsHQkAp5ZwVI= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Lorenzo Pieralisi , Kefeng Wang , Will Deacon , Sasha Levin Subject: [PATCH 4.19 151/276] ACPI/IORT: Reject platform device creation on NUMA node mapping failure Date: Wed, 29 May 2019 20:05:09 -0700 Message-Id: <20190530030535.028955066@linuxfoundation.org> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190530030523.133519668@linuxfoundation.org> References: <20190530030523.133519668@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 [ Upstream commit 36a2ba07757df790b4a874efb1a105b9330a9ae7 ] In a system where, through IORT firmware mappings, the SMMU device is mapped to a NUMA node that is not online, the kernel bootstrap results in the following crash: Unable to handle kernel paging request at virtual address 0000000000001388 Mem abort info: ESR = 0x96000004 Exception class = DABT (current EL), IL = 32 bits SET = 0, FnV = 0 EA = 0, S1PTW = 0 Data abort info: ISV = 0, ISS = 0x00000004 CM = 0, WnR = 0 [0000000000001388] user address but active_mm is swapper Internal error: Oops: 96000004 [#1] SMP Modules linked in: CPU: 5 PID: 1 Comm: swapper/0 Not tainted 5.0.0 #15 pstate: 80c00009 (Nzcv daif +PAN +UAO) pc : __alloc_pages_nodemask+0x13c/0x1068 lr : __alloc_pages_nodemask+0xdc/0x1068 ... Process swapper/0 (pid: 1, stack limit = 0x(____ptrval____)) Call trace: __alloc_pages_nodemask+0x13c/0x1068 new_slab+0xec/0x570 ___slab_alloc+0x3e0/0x4f8 __slab_alloc+0x60/0x80 __kmalloc_node_track_caller+0x10c/0x478 devm_kmalloc+0x44/0xb0 pinctrl_bind_pins+0x4c/0x188 really_probe+0x78/0x2b8 driver_probe_device+0x64/0x110 device_driver_attach+0x74/0x98 __driver_attach+0x9c/0xe8 bus_for_each_dev+0x84/0xd8 driver_attach+0x30/0x40 bus_add_driver+0x170/0x218 driver_register+0x64/0x118 __platform_driver_register+0x54/0x60 arm_smmu_driver_init+0x24/0x2c do_one_initcall+0xbc/0x328 kernel_init_freeable+0x304/0x3ac kernel_init+0x18/0x110 ret_from_fork+0x10/0x1c Code: f90013b5 b9410fa1 1a9f0694 b50014c2 (b9400804) ---[ end trace dfeaed4c373a32da ]-- Change the dev_set_proximity() hook prototype so that it returns a value and make it return failure if the PXM->NUMA-node mapping corresponds to an offline node, fixing the crash. Acked-by: Lorenzo Pieralisi Signed-off-by: Kefeng Wang Link: https://lore.kernel.org/linux-arm-kernel/20190315021940.86905-1-wangkefeng.wang@huawei.com/ Signed-off-by: Will Deacon Signed-off-by: Sasha Levin --- drivers/acpi/arm64/iort.c | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/drivers/acpi/arm64/iort.c b/drivers/acpi/arm64/iort.c index e48eebc27b81b..43c2615434b48 100644 --- a/drivers/acpi/arm64/iort.c +++ b/drivers/acpi/arm64/iort.c @@ -1231,18 +1231,24 @@ static bool __init arm_smmu_v3_is_coherent(struct acpi_iort_node *node) /* * set numa proximity domain for smmuv3 device */ -static void __init arm_smmu_v3_set_proximity(struct device *dev, +static int __init arm_smmu_v3_set_proximity(struct device *dev, struct acpi_iort_node *node) { struct acpi_iort_smmu_v3 *smmu; smmu = (struct acpi_iort_smmu_v3 *)node->node_data; if (smmu->flags & ACPI_IORT_SMMU_V3_PXM_VALID) { - set_dev_node(dev, acpi_map_pxm_to_node(smmu->pxm)); + int node = acpi_map_pxm_to_node(smmu->pxm); + + if (node != NUMA_NO_NODE && !node_online(node)) + return -EINVAL; + + set_dev_node(dev, node); pr_info("SMMU-v3[%llx] Mapped to Proximity domain %d\n", smmu->base_address, smmu->pxm); } + return 0; } #else #define arm_smmu_v3_set_proximity NULL @@ -1317,7 +1323,7 @@ struct iort_dev_config { int (*dev_count_resources)(struct acpi_iort_node *node); void (*dev_init_resources)(struct resource *res, struct acpi_iort_node *node); - void (*dev_set_proximity)(struct device *dev, + int (*dev_set_proximity)(struct device *dev, struct acpi_iort_node *node); }; @@ -1368,8 +1374,11 @@ static int __init iort_add_platform_device(struct acpi_iort_node *node, if (!pdev) return -ENOMEM; - if (ops->dev_set_proximity) - ops->dev_set_proximity(&pdev->dev, node); + if (ops->dev_set_proximity) { + ret = ops->dev_set_proximity(&pdev->dev, node); + if (ret) + goto dev_put; + } count = ops->dev_count_resources(node); -- 2.20.1