Received: by 2002:ab2:3350:0:b0:1f4:6588:b3a7 with SMTP id o16csp841055lqe; Sun, 7 Apr 2024 06:29:32 -0700 (PDT) X-Forwarded-Encrypted: i=3; AJvYcCUdPTmhwRfPkQlyEm3oJN2zESJ16lkPH7GRHPhetjHtfFr4IY6q0csNf58Zy1A4DVfReh7fPNr+lnOGQe2koyvzbnFQnZqKCdk7yL3KAg== X-Google-Smtp-Source: AGHT+IFn5btQ+uD87n6gZyXa+rWfpdJCJzPDv7ktdiZDmVH6xtLPoe/3P1J7tacX8Ge/6icIgX+i X-Received: by 2002:a05:620a:7f3:b0:78d:63b7:83fc with SMTP id k19-20020a05620a07f300b0078d63b783fcmr981864qkk.73.1712496572669; Sun, 07 Apr 2024 06:29:32 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1712496572; cv=pass; d=google.com; s=arc-20160816; b=V09DwJtyUTuyrxQMiWHpDJOfoGVCFEmRIMAdFcrz2c+ZGKeBiuIJTF5mZj0ap9mRdP 398R4FOpZiVkoHJCjwoLBOLVgasJZ9lNLI0AFh/MLUnEpMYuY6X5DJLNYV/Fygklet/z GCe66uPTG3LWfYA3ORH1uKwm2htSR0grLZkuzbjfWc/w1kxeAlmDBnm0yYhof8IUcDb+ vZ/w4GHMkUOYhUUAbTQJ+yr07eGjHf/fZkWsBMCsyUUYjh6lsN0s/h2lpSpgCOEFdkhF 31QpfWIUIShtUMTgtHBH4UHiFZx66OEgPItGcrMEXqhuWYv2rdKfaviXmbM9c7e2PGCl 6Vtg== ARC-Message-Signature: i=2; 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:references:in-reply-to:message-id :date:subject:cc:to:from:dkim-signature; bh=6evcPtLThLpe0kTtaN+ctLRnQKxwdeNVP72B/6CH2qU=; fh=BPAfUKxiJa6w1Bpv6cNaBRgxe5PH7qe7RAeaWcwNaPo=; b=0qBDKbCtG97IfVNfw6bS+rFov68Rmo0BDO0CAgQBXc81eyG6iieqIqdNOtVjk7lsjz 47jqrUOJ5YySsG5YrdtysClreEETRilV/gUHHAQ9IcYbUKBVyW6dYm5x7nFQKzwapAsy XHOSImNhx1W7/Nf9Ix4cLJxzJYHOla3xmBHX2EQH/x4scaG6/tVMKUYfKNIHrNy7kIRq bKetddX1yDr+OvaZYNV3NiDcPaxpESIpDC9JI8XQXiAPjwnex6HLeJ3CR7B5tcNfSkqu JC45tBe/BqURG859SX9rNZSbaz9PtfndCQIUeWlvZfjkbaUuzDjkZ6wG1CWZgyd4jPTb QEIA==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=Nuv96dqY; arc=pass (i=1 dkim=pass dkdomain=kernel.org); spf=pass (google.com: domain of linux-kernel+bounces-134454-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.199.223 as permitted sender) smtp.mailfrom="linux-kernel+bounces-134454-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org. [147.75.199.223]) by mx.google.com with ESMTPS id bp41-20020a05620a45a900b0078d564fe5easi3488773qkb.753.2024.04.07.06.29.32 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 07 Apr 2024 06:29:32 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel+bounces-134454-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.199.223 as permitted sender) client-ip=147.75.199.223; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=Nuv96dqY; arc=pass (i=1 dkim=pass dkdomain=kernel.org); spf=pass (google.com: domain of linux-kernel+bounces-134454-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.199.223 as permitted sender) smtp.mailfrom="linux-kernel+bounces-134454-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org 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 ny.mirrors.kernel.org (Postfix) with ESMTPS id 56E0C1C20E4A for ; Sun, 7 Apr 2024 13:29:32 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id DE3E33D97A; Sun, 7 Apr 2024 13:13:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="Nuv96dqY" Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id EAB5485C44; Sun, 7 Apr 2024 13:13:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1712495585; cv=none; b=Q6CG/AnhFsl5CQP4Au9U12MiXnLvscvtEuaaw1HUMGtCseTFTZgpq3//LTH6uB7VmeWjLBy8KBuVYOgFXtMuiCy5xA+FJ6tmiFzPde+c5eUeXEpIWoKXjnfgEKT3Clo9TM0J/Gqmaed1KsASVKob5qmZgFWo8WBuXzotQEx0y+w= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1712495585; c=relaxed/simple; bh=oWCzXN+vCCpyVNvZ5+D/zJUDwJXHUttz1Y7S2CW20QA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=MyPBE0iqBLTHb98cqGwv+OsvIKNaXJMUQ8ovB8NboZ5Nu8D59BgD6WQk5rpG5w+ZkI+egaIhm3LzALf0Ey3hXnOII0/XM6MKt6vTqI71VL42U2p8EQJvSevMQz6pOERCGP9yR1ftATKfNvJt7oZzprFn9fxvI8UyuUScGF/ErbQ= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=Nuv96dqY; arc=none smtp.client-ip=10.30.226.201 Received: by smtp.kernel.org (Postfix) with ESMTPSA id 4F14EC43390; Sun, 7 Apr 2024 13:13:03 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1712495584; bh=oWCzXN+vCCpyVNvZ5+D/zJUDwJXHUttz1Y7S2CW20QA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Nuv96dqYDUMBjFLenYi3+hNkO8RbpZayPFxsoCGbGOfw0gZoGKuyiNssoOnnVs13b Tpo4LB1bYJVoYFePIzKY0My65PtxldWt8UqZRzRRKRBaeAjsc/f+UZzAg+Wm1AMVI8 9158ECT6WaWMoDPujaoejQ8UK90zcq02R7v/KhJRrsUI5qaASyYNTiH90AwxDQhzpj m5Xqrlupn5q9CCE8yFlOcbunODsoOPEDMdBas5FP3U/77nbIrXLMWvemItStQEQPdI RQTWTe0S7hM1Jh0/CL1qEbfAlJwRh1zL2xAax14cdAkTc88yaeJ9bA+YOPEqAr8Eg6 f58jN06aUD8aQ== From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Jonathan Kim , Jonathan Kim , Jesse Zhang , Felix Kuehling , Alex Deucher , Sasha Levin , Felix.Kuehling@amd.com, christian.koenig@amd.com, Xinhui.Pan@amd.com, airlied@gmail.com, daniel@ffwll.ch, amd-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org Subject: [PATCH AUTOSEL 6.6 19/22] drm/amdkfd: range check cp bad op exception interrupts Date: Sun, 7 Apr 2024 09:12:18 -0400 Message-ID: <20240407131231.1051652-19-sashal@kernel.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240407131231.1051652-1-sashal@kernel.org> References: <20240407131231.1051652-1-sashal@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-stable: review X-Patchwork-Hint: Ignore X-stable-base: Linux 6.6.25 Content-Transfer-Encoding: 8bit From: Jonathan Kim [ Upstream commit 0cac183b98d8a8c692c98e8dba37df15a9e9210d ] Due to a CP interrupt bug, bad packet garbage exception codes are raised. Do a range check so that the debugger and runtime do not receive garbage codes. Update the user api to guard exception code type checking as well. Signed-off-by: Jonathan Kim Tested-by: Jesse Zhang Reviewed-by: Felix Kuehling Signed-off-by: Alex Deucher Signed-off-by: Sasha Levin --- .../gpu/drm/amd/amdkfd/kfd_int_process_v10.c | 3 ++- .../gpu/drm/amd/amdkfd/kfd_int_process_v11.c | 3 ++- drivers/gpu/drm/amd/amdkfd/kfd_int_process_v9.c | 3 ++- include/uapi/linux/kfd_ioctl.h | 17 ++++++++++++++--- 4 files changed, 20 insertions(+), 6 deletions(-) diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_int_process_v10.c b/drivers/gpu/drm/amd/amdkfd/kfd_int_process_v10.c index a7697ec8188e0..f85ca6cb90f56 100644 --- a/drivers/gpu/drm/amd/amdkfd/kfd_int_process_v10.c +++ b/drivers/gpu/drm/amd/amdkfd/kfd_int_process_v10.c @@ -336,7 +336,8 @@ static void event_interrupt_wq_v10(struct kfd_node *dev, break; } kfd_signal_event_interrupt(pasid, context_id0 & 0x7fffff, 23); - } else if (source_id == SOC15_INTSRC_CP_BAD_OPCODE) { + } else if (source_id == SOC15_INTSRC_CP_BAD_OPCODE && + KFD_DBG_EC_TYPE_IS_PACKET(KFD_DEBUG_CP_BAD_OP_ECODE(context_id0))) { kfd_set_dbg_ev_from_interrupt(dev, pasid, KFD_DEBUG_DOORBELL_ID(context_id0), KFD_EC_MASK(KFD_DEBUG_CP_BAD_OP_ECODE(context_id0)), diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_int_process_v11.c b/drivers/gpu/drm/amd/amdkfd/kfd_int_process_v11.c index 2a65792fd1162..3ca9c160da7c2 100644 --- a/drivers/gpu/drm/amd/amdkfd/kfd_int_process_v11.c +++ b/drivers/gpu/drm/amd/amdkfd/kfd_int_process_v11.c @@ -325,7 +325,8 @@ static void event_interrupt_wq_v11(struct kfd_node *dev, /* CP */ if (source_id == SOC15_INTSRC_CP_END_OF_PIPE) kfd_signal_event_interrupt(pasid, context_id0, 32); - else if (source_id == SOC15_INTSRC_CP_BAD_OPCODE) + else if (source_id == SOC15_INTSRC_CP_BAD_OPCODE && + KFD_DBG_EC_TYPE_IS_PACKET(KFD_CTXID0_CP_BAD_OP_ECODE(context_id0))) kfd_set_dbg_ev_from_interrupt(dev, pasid, KFD_CTXID0_DOORBELL_ID(context_id0), KFD_EC_MASK(KFD_CTXID0_CP_BAD_OP_ECODE(context_id0)), diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_int_process_v9.c b/drivers/gpu/drm/amd/amdkfd/kfd_int_process_v9.c index 27cdaea405017..8a6729939ae55 100644 --- a/drivers/gpu/drm/amd/amdkfd/kfd_int_process_v9.c +++ b/drivers/gpu/drm/amd/amdkfd/kfd_int_process_v9.c @@ -385,7 +385,8 @@ static void event_interrupt_wq_v9(struct kfd_node *dev, break; } kfd_signal_event_interrupt(pasid, sq_int_data, 24); - } else if (source_id == SOC15_INTSRC_CP_BAD_OPCODE) { + } else if (source_id == SOC15_INTSRC_CP_BAD_OPCODE && + KFD_DBG_EC_TYPE_IS_PACKET(KFD_DEBUG_CP_BAD_OP_ECODE(context_id0))) { kfd_set_dbg_ev_from_interrupt(dev, pasid, KFD_DEBUG_DOORBELL_ID(context_id0), KFD_EC_MASK(KFD_DEBUG_CP_BAD_OP_ECODE(context_id0)), diff --git a/include/uapi/linux/kfd_ioctl.h b/include/uapi/linux/kfd_ioctl.h index eeb2fdcbdcb70..cd924c959d732 100644 --- a/include/uapi/linux/kfd_ioctl.h +++ b/include/uapi/linux/kfd_ioctl.h @@ -909,14 +909,25 @@ enum kfd_dbg_trap_exception_code { KFD_EC_MASK(EC_DEVICE_NEW)) #define KFD_EC_MASK_PROCESS (KFD_EC_MASK(EC_PROCESS_RUNTIME) | \ KFD_EC_MASK(EC_PROCESS_DEVICE_REMOVE)) +#define KFD_EC_MASK_PACKET (KFD_EC_MASK(EC_QUEUE_PACKET_DISPATCH_DIM_INVALID) | \ + KFD_EC_MASK(EC_QUEUE_PACKET_DISPATCH_GROUP_SEGMENT_SIZE_INVALID) | \ + KFD_EC_MASK(EC_QUEUE_PACKET_DISPATCH_CODE_INVALID) | \ + KFD_EC_MASK(EC_QUEUE_PACKET_RESERVED) | \ + KFD_EC_MASK(EC_QUEUE_PACKET_UNSUPPORTED) | \ + KFD_EC_MASK(EC_QUEUE_PACKET_DISPATCH_WORK_GROUP_SIZE_INVALID) | \ + KFD_EC_MASK(EC_QUEUE_PACKET_DISPATCH_REGISTER_INVALID) | \ + KFD_EC_MASK(EC_QUEUE_PACKET_VENDOR_UNSUPPORTED)) /* Checks for exception code types for KFD search */ +#define KFD_DBG_EC_IS_VALID(ecode) (ecode > EC_NONE && ecode < EC_MAX) #define KFD_DBG_EC_TYPE_IS_QUEUE(ecode) \ - (!!(KFD_EC_MASK(ecode) & KFD_EC_MASK_QUEUE)) + (KFD_DBG_EC_IS_VALID(ecode) && !!(KFD_EC_MASK(ecode) & KFD_EC_MASK_QUEUE)) #define KFD_DBG_EC_TYPE_IS_DEVICE(ecode) \ - (!!(KFD_EC_MASK(ecode) & KFD_EC_MASK_DEVICE)) + (KFD_DBG_EC_IS_VALID(ecode) && !!(KFD_EC_MASK(ecode) & KFD_EC_MASK_DEVICE)) #define KFD_DBG_EC_TYPE_IS_PROCESS(ecode) \ - (!!(KFD_EC_MASK(ecode) & KFD_EC_MASK_PROCESS)) + (KFD_DBG_EC_IS_VALID(ecode) && !!(KFD_EC_MASK(ecode) & KFD_EC_MASK_PROCESS)) +#define KFD_DBG_EC_TYPE_IS_PACKET(ecode) \ + (KFD_DBG_EC_IS_VALID(ecode) && !!(KFD_EC_MASK(ecode) & KFD_EC_MASK_PACKET)) /* Runtime enable states */ -- 2.43.0