Received: by 2002:a05:7412:e794:b0:fa:551:50a7 with SMTP id o20csp3061374rdd; Sat, 13 Jan 2024 13:34:56 -0800 (PST) X-Google-Smtp-Source: AGHT+IGdHjhP5ObVByHd4eyvwMtgrhZuNCYSrgpg63kGF7ssovhASF+KWuc7EfSPXxxdTntEC/Fl X-Received: by 2002:a05:6870:470c:b0:205:c799:d2b3 with SMTP id b12-20020a056870470c00b00205c799d2b3mr5471322oaq.103.1705181696297; Sat, 13 Jan 2024 13:34:56 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1705181696; cv=none; d=google.com; s=arc-20160816; b=kakyTcVcXIervxWNhhUm2CunyIF0Z/vdJ7cefMCZ7idpgyyPoESQn/uxEueltLt6Xw j/ePIW/LSUZiJ4po1sFCHnRvyxiKolSRxhdxICv/CG8wKYE0m+tTiQWrsK4BFIluF229 FxLlItESYC2kUiD1gR/LC61GX4MV+MZy87aPGG6iIT/mWB8aesflwF2CrjRlNQxe0nQ2 cWdINW5urY+QE63uMO+kod2LIhKd0FopYejkVaZ8vkw6OPgesiOowqKA2EtEYAV70hR3 2Wii8MWAKj0uTpThL1lPQZmKicWhfCuR+oxacBKuiyxWHsADuxtbq3g0rQx5ZBsbhL8+ Fnxw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:message-id:date:subject:cc:to :from:dkim-signature:dkim-filter; bh=jA1iaioDoAtebqph2VGtTKoDOZFhOG2UxbmEz0EkRBE=; fh=bJGaarVf8UUH1EWvG23qYEV5DgRJ4wBcG3Hl3SVNpyU=; b=e0zqBUexYc2ElMaeMijcdz5B+CuptIhvz6zmrx2JoN1ZEpYwiW6/mjscO7hCah46T8 +JiH2HK3rgfoeuTDelS5sAZJzLUOiKiQw3gjuQU5rF062kkzbjuwrggbxRT5MOv7Z6bZ gPUPO8CoD261dZrgYK/2GESWtJ1/wHJW2SYO8fPRk00cEsjiS6vafC+k563FPE2Z0eEz G7AB3BQG22xAoSnTH3idT7bM2ZyCfUfDrXZ/uZSL7oBGrkBFUQCgY2AW7xmZlBlYRa1u 9KzdvWnHl7kkLI89f41IGs0+n0c7RkXwdnIEBac5mYqra9gCLfnMCUt6KzjTKczyopSD QmOw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@ispras.ru header.s=default header.b=CuUNN25x; spf=pass (google.com: domain of linux-kernel+bounces-25376-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:40f1:3f00::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-25376-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=ispras.ru Return-Path: Received: from sy.mirrors.kernel.org (sy.mirrors.kernel.org. [2604:1380:40f1:3f00::1]) by mx.google.com with ESMTPS id e15-20020a63e00f000000b005c67bf38069si5672739pgh.320.2024.01.13.13.34.55 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 13 Jan 2024 13:34:56 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-25376-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:40f1:3f00::1 as permitted sender) client-ip=2604:1380:40f1:3f00::1; Authentication-Results: mx.google.com; dkim=pass header.i=@ispras.ru header.s=default header.b=CuUNN25x; spf=pass (google.com: domain of linux-kernel+bounces-25376-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:40f1:3f00::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-25376-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=ispras.ru Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sy.mirrors.kernel.org (Postfix) with ESMTPS id 7A0DBB219AB for ; Sat, 13 Jan 2024 21:34:34 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id F36361804A; Sat, 13 Jan 2024 21:34:26 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=ispras.ru header.i=@ispras.ru header.b="CuUNN25x" Received: from mail.ispras.ru (mail.ispras.ru [83.149.199.84]) (using TLSv1.2 with cipher DHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 170141802B for ; Sat, 13 Jan 2024 21:34:21 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=ispras.ru Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ispras.ru Received: from localhost.ispras.ru (unknown [10.10.165.8]) by mail.ispras.ru (Postfix) with ESMTPSA id 04EB340F1DDD; Sat, 13 Jan 2024 21:34:17 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 mail.ispras.ru 04EB340F1DDD DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ispras.ru; s=default; t=1705181659; bh=jA1iaioDoAtebqph2VGtTKoDOZFhOG2UxbmEz0EkRBE=; h=From:To:Cc:Subject:Date:From; b=CuUNN25xkBLgDuEJKLcjth4fJwm5s0KpDHJVZ1qwcgY5rik4uP9Q73YM8eM9lY1qZ uq93Di6gnKXiXHDHMqa8eKd+CW6aJc+EW9b21HOCnBQmQLc2RIZS4xH+k1PccRtLJn DWnRHK+/ikKonlsJ6X/R8FdDIZKLr7kiDL9gMpRo= From: Fedor Pchelkin To: Christian Koenig , Rajneesh Bhardwaj Cc: Fedor Pchelkin , Huang Rui , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Daniel Vetter , Felix Kuehling , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Alexey Khoroshilov , lvc-project@linuxtesting.org Subject: [PATCH] drm/ttm: fix ttm pool initialization for no-dma-device drivers Date: Sun, 14 Jan 2024 00:33:45 +0300 Message-ID: <20240113213347.9562-1-pchelkin@ispras.ru> X-Mailer: git-send-email 2.43.0 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit QXL driver doesn't use any device for DMA mappings or allocations so dev_to_node() will panic inside ttm_device_init() on NUMA systems: general protection fault, probably for non-canonical address 0xdffffc000000007a: 0000 [#1] PREEMPT SMP KASAN NOPTI KASAN: null-ptr-deref in range [0x00000000000003d0-0x00000000000003d7] CPU: 1 PID: 1 Comm: swapper/0 Not tainted 6.7.0+ #9 Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.16.2-3-gd478f380-rebuilt.opensuse.org 04/01/2014 RIP: 0010:ttm_device_init+0x10e/0x340 Call Trace: qxl_ttm_init+0xaa/0x310 qxl_device_init+0x1071/0x2000 qxl_pci_probe+0x167/0x3f0 local_pci_probe+0xe1/0x1b0 pci_device_probe+0x29d/0x790 really_probe+0x251/0x910 __driver_probe_device+0x1ea/0x390 driver_probe_device+0x4e/0x2e0 __driver_attach+0x1e3/0x600 bus_for_each_dev+0x12d/0x1c0 bus_add_driver+0x25a/0x590 driver_register+0x15c/0x4b0 qxl_pci_driver_init+0x67/0x80 do_one_initcall+0xf5/0x5d0 kernel_init_freeable+0x637/0xb10 kernel_init+0x1c/0x2e0 ret_from_fork+0x48/0x80 ret_from_fork_asm+0x1b/0x30 Modules linked in: ---[ end trace 0000000000000000 ]--- RIP: 0010:ttm_device_init+0x10e/0x340 Fall back to NUMA_NO_NODE if there is no device for DMA. Found by Linux Verification Center (linuxtesting.org). Fixes: b0a7ce53d494 ("drm/ttm: Schedule delayed_delete worker closer") Signed-off-by: Fedor Pchelkin --- drivers/gpu/drm/ttm/ttm_device.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/ttm/ttm_device.c b/drivers/gpu/drm/ttm/ttm_device.c index f5187b384ae9..4130945052ed 100644 --- a/drivers/gpu/drm/ttm/ttm_device.c +++ b/drivers/gpu/drm/ttm/ttm_device.c @@ -195,7 +195,7 @@ int ttm_device_init(struct ttm_device *bdev, const struct ttm_device_funcs *func bool use_dma_alloc, bool use_dma32) { struct ttm_global *glob = &ttm_glob; - int ret; + int ret, nid; if (WARN_ON(vma_manager == NULL)) return -EINVAL; @@ -215,7 +215,12 @@ int ttm_device_init(struct ttm_device *bdev, const struct ttm_device_funcs *func ttm_sys_man_init(bdev); - ttm_pool_init(&bdev->pool, dev, dev_to_node(dev), use_dma_alloc, use_dma32); + if (dev) + nid = dev_to_node(dev); + else + nid = NUMA_NO_NODE; + + ttm_pool_init(&bdev->pool, dev, nid, use_dma_alloc, use_dma32); bdev->vma_manager = vma_manager; spin_lock_init(&bdev->lru_lock); -- 2.43.0