From nobody Mon Apr 6 10:42:03 2026 Received: from mail-wr1-f51.google.com (mail-wr1-f51.google.com [209.85.221.51]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5E8AD402437 for ; Thu, 19 Mar 2026 20:26:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.51 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773951974; cv=none; b=GQNBgiBr6kgIDrSdcJuHsgzNSj96E65Rs6uhIhksyolGO61f00NICVQ4QPXvFoLtnipQbxzyR4yi+siAqcUO8Acn10CJhA33aRFT1lEezB8Dkte4j9KLDXh98kFUyKolWLf2WB85+eHFLi3NranmQNU1LCLH8az6xYiO4S3yqic= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773951974; c=relaxed/simple; bh=outTnRIBQAyg28okb66wf80x45Mq14FYSPhGHqeYDkw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=bCVdMMKlSIkT2kInR/TupEBqTh6D7LCmiFj5TPc+qD6wu4ZIOboYAdJSbiFc7UcSsF43iywBtSnqhtIlRccBkCg4k7Waux09Kws4pGwhYftv5QCsXv1h35omadNvrb9jNmhDHa64/n2bMQyBhc8hipovb94wP55ezcnzwZ0eoLE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=RcgHMAuy; arc=none smtp.client-ip=209.85.221.51 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="RcgHMAuy" Received: by mail-wr1-f51.google.com with SMTP id ffacd0b85a97d-43b4d734678so1373484f8f.1 for ; Thu, 19 Mar 2026 13:26:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1773951971; x=1774556771; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=XZHA0FJqnrMUZiDF+/x51qEC2Ygiwx2MeXeyqpq00vs=; b=RcgHMAuyJ8YvIZIq+2P28HVdGFD6nmf2vvZ5VMckttp9d38qdL6LB8t+UVJc5kYSS3 CTaX6ph9Po40Kou7I4kEEN7DeDjEclynwT3wgQ6LZD9pUGuoa9H8jJq8re2v7nDxEby6 pBsXdg14a1kaut+xfe8xiVHW7DFaiUOwhusg0D/vkqPZPve8oX+EmH1oPDjngo527RlM YLfEW2eemq7fqGmBMmdcPULngCrKhmvAQGltpMwoRDmQqrw4W3YLVvA6rx+mrP9/HUa5 eF5KHeUacMz9wphgA0zqI8YUjWGFFs9LLsAW5vPuZvZIQi37DPoD16vB0R7k3gOiK+Ym JHlQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1773951971; x=1774556771; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=XZHA0FJqnrMUZiDF+/x51qEC2Ygiwx2MeXeyqpq00vs=; b=aZGQI2mfl58Jt5vhlBNwgQNMtYjdCvm7y3bUTp3YWJN+kM2+Ei4AdtJV3EVg1l4Hub WrdPtW60nS4JJcWiv8NCKT75iXHnn/yIutLQ79aEFfp3VuIxzrn346efFopCmsLAWwe/ oYHj+rde430GR3kUHOqTNeKTJYDrvmkq6Qk+L+ZY3rVEZu76NBTGh7ZBnYCI2uU5AIUN 8tfedpAGX63RXDRDYP+Hg94h08JZrv8PXh74G6ris/qd9T6XRdmUd5S80IOQAxk4+xGb ExFbTSCOCqB+GAqe4bMntQF5qlWcQI2aiN36MLtugT97t9n2NLeM3WQn4w++Ydi+SbFt RJBg== X-Gm-Message-State: AOJu0YwzjuoKF5Zi5Qpj1IpBaByMpzvgurThel46w0TphLc40cKU/ZTd 3By9ES3CGCUma8jK2c+UW/qkUa7FJbRTR/Jd5iZP0fzRpFVNw24CjLPh X-Gm-Gg: ATEYQzxdYWVzDc4Y3ZKiXDBmfpJ4FIw6DDviOfdJVosAgpiOSIhb+G1ceGHB4qd+wAS j7qSJKVwYr7tOM0Xum/cAKwrJ9t3+US3MrpELPZOvWVllvO5ASMDKw/r7HCZSSO9Q/GV8iYuq4J 4kcd2D/jr+xxSLOietxpdE+eO/aM6n3BLWm8MIdcjiIbpOO8oOjj10Aqma2YuKPezyH2U1nHHiI BlH4e/gtdjs/y5xtZECh7ymebBSwN9NReeQ8mrhB2YuGUB3ILrvLZAxj4rZ+I1kjV4O50G+k2CA 0p9shSX0ljzy2nWiXXD4Vvl6x7obnOprpeaGEX60og87gUHMwCjy9mZsC5Vr+dg9gA0Amw9PLXN 26HUoN1BDRQH7vz51KpPk7EhHXi7A1GK8vWV3DFoQM/kNe69nJAbyRK06eambACHDMP9/PQ/0Kq H7KTkhsMZ1clHVCEAeKiddbLOo48pOG4gYaXFGbkJjHNKh6VMc X-Received: by 2002:a05:6000:24c4:b0:43b:45d1:f449 with SMTP id ffacd0b85a97d-43b6427cde9mr1224789f8f.51.1773951970522; Thu, 19 Mar 2026 13:26:10 -0700 (PDT) Received: from LQ5W56KC4T ([2001:8a0:672f:7800:e0e1:55cd:f0b:b1e5]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-43b644ae16fsm1347544f8f.8.2026.03.19.13.26.09 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Thu, 19 Mar 2026 13:26:10 -0700 (PDT) From: Eric Curtin X-Google-Original-From: Eric Curtin To: linux-hyperv@vger.kernel.org Cc: linux-kernel@vger.kernel.org, iourit@linux.microsoft.com, wei.liu@kernel.org, decui@microsoft.com, haiyangz@microsoft.com Subject: [PATCH 51/55] drivers: hv: dxgkrnl: Implement D3DKMTEnumProcesses to match the Windows implementation Date: Thu, 19 Mar 2026 20:25:05 +0000 Message-ID: <20260319202509.63802-52-eric.curtin@docker.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260319202509.63802-1-eric.curtin@docker.com> References: <20260319202509.63802-1-eric.curtin@docker.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Iouri Tarassov The behavior of D3DKMTEnumProcesses on Windows is that when buffer_count is= 0 or input buffer is NULL, the number of active processes is returned. The Linux= implemenation is updated to match this. Signed-off-by: Iouri Tarassov --- drivers/hv/dxgkrnl/dxgmodule.c | 2 +- drivers/hv/dxgkrnl/ioctl.c | 29 ++++++++++++++++++----------- 2 files changed, 19 insertions(+), 12 deletions(-) diff --git a/drivers/hv/dxgkrnl/dxgmodule.c b/drivers/hv/dxgkrnl/dxgmodule.c index e3ac70df1b6f..8f5d6db256a3 100644 --- a/drivers/hv/dxgkrnl/dxgmodule.c +++ b/drivers/hv/dxgkrnl/dxgmodule.c @@ -965,4 +965,4 @@ module_exit(dxg_drv_exit); =20 MODULE_LICENSE("GPL"); MODULE_DESCRIPTION("Microsoft Dxgkrnl virtual compute device Driver"); -MODULE_VERSION("2.0.2"); +MODULE_VERSION("2.0.3"); diff --git a/drivers/hv/dxgkrnl/ioctl.c b/drivers/hv/dxgkrnl/ioctl.c index f8f116a7f87f..42f3de31a63c 100644 --- a/drivers/hv/dxgkrnl/ioctl.c +++ b/drivers/hv/dxgkrnl/ioctl.c @@ -5373,7 +5373,7 @@ dxgkio_enum_processes(struct dxgprocess *process, voi= d *__user inargs) struct dxgprocess_adapter *pentry; int nump =3D 0; /* Current number of processes*/ struct ntstatus status; - int ret; + int ret, ret1; =20 ret =3D copy_from_user(&args, inargs, sizeof(args)); if (ret) { @@ -5382,12 +5382,6 @@ dxgkio_enum_processes(struct dxgprocess *process, vo= id *__user inargs) goto cleanup; } =20 - if (args.buffer_count =3D=3D 0) { - DXG_ERR("Invalid buffer count"); - ret =3D -EINVAL; - goto cleanup; - } - dxgglobal_acquire_adapter_list_lock(DXGLOCK_SHARED); dxgglobal_acquire_process_adapter_lock(); =20 @@ -5405,6 +5399,19 @@ dxgkio_enum_processes(struct dxgprocess *process, vo= id *__user inargs) goto cleanup_locks; } =20 + list_for_each_entry(pentry, &adapter->adapter_process_list_head, + adapter_process_list_entry) { + if (pentry->process->nspid =3D=3D task_active_pid_ns(current)) + nump++; + } + + if (nump > args.buffer_count || args.buffer =3D=3D NULL) { + status.v =3D STATUS_BUFFER_TOO_SMALL; + ret =3D ntstatus2int(status); + goto cleanup_locks; + } + + nump =3D 0; list_for_each_entry(pentry, &adapter->adapter_process_list_head, adapter_process_list_entry) { if (pentry->process->nspid !=3D task_active_pid_ns(current)) @@ -5429,10 +5436,10 @@ dxgkio_enum_processes(struct dxgprocess *process, v= oid *__user inargs) dxgglobal_release_process_adapter_lock(); dxgglobal_release_adapter_list_lock(DXGLOCK_SHARED); =20 - if (ret =3D=3D 0) { - ret =3D copy_to_user(&input->buffer_count, &nump, sizeof(u32)); - if (ret) - DXG_ERR("failed to copy buffer count to user"); + ret1 =3D copy_to_user(&input->buffer_count, &nump, sizeof(u32)); + if (ret1) { + DXG_ERR("failed to copy buffer count to user"); + ret =3D -EFAULT; } =20 cleanup: