From nobody Tue Sep 9 07:31:48 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 0FD03EB64DD for ; Mon, 24 Jul 2023 21:15:30 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230360AbjGXVP2 (ORCPT ); Mon, 24 Jul 2023 17:15:28 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:49204 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230433AbjGXVPY (ORCPT ); Mon, 24 Jul 2023 17:15:24 -0400 Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id ECE701704 for ; Mon, 24 Jul 2023 14:15:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1690233320; x=1721769320; h=from:to:cc:subject:date:message-id:in-reply-to: references:content-transfer-encoding:mime-version; bh=rhtNiYYVteziVFqrrQ6PoJGiyXUfob6EsfrQkEYBa3E=; b=Cv+oEJiu/L0KACFTtHdaqfDxF9DKYSCQ5DA4SM6d53d9rPIqaGlR8SvW tVzQxm0nQuMVU8kxcUqTkrB31WhMC2ZmwT47fxIQO/pMlce5XGgk7QJy5 sKeT4p/r7eGveyPT70bUyjOuf6pKE0PwEUTHiUVOv1o/8BMpCRkMjYVHc QckbZY6Tr8btsGzf0hFhR13Hb0SfX4QnrUkI8fQs7NpCyE7VEuaGt4b87 XrR2ySqPUsymEqUM7NPR2XU9qTfeRx7dlA+DUQFgRcET4J552+J6HF4XX VWnroUwE0x3MuzUK0AuFMHDwArk/b9Svlwvctm4zUXYobn5fRuNsW0YLH w==; X-IronPort-AV: E=McAfee;i="6600,9927,10781"; a="453931066" X-IronPort-AV: E=Sophos;i="6.01,228,1684825200"; d="scan'208";a="453931066" Received: from fmsmga005.fm.intel.com ([10.253.24.32]) by fmsmga105.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 24 Jul 2023 14:15:20 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10781"; a="1056569339" X-IronPort-AV: E=Sophos;i="6.01,228,1684825200"; d="scan'208";a="1056569339" Received: from orsmsx602.amr.corp.intel.com ([10.22.229.15]) by fmsmga005.fm.intel.com with ESMTP; 24 Jul 2023 14:15:19 -0700 Received: from orsmsx610.amr.corp.intel.com (10.22.229.23) by ORSMSX602.amr.corp.intel.com (10.22.229.15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.27; Mon, 24 Jul 2023 14:15:19 -0700 Received: from ORSEDG601.ED.cps.intel.com (10.7.248.6) by orsmsx610.amr.corp.intel.com (10.22.229.23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.27 via Frontend Transport; Mon, 24 Jul 2023 14:15:19 -0700 Received: from NAM10-BN7-obe.outbound.protection.outlook.com (104.47.70.108) by edgegateway.intel.com (134.134.137.102) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.27; Mon, 24 Jul 2023 14:15:19 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=dBUlf3hSNxW3ay3fAuKJMln/8y3mrAYst5TdgkurJCpom7Su0xBCcCC7KZCAw/SDjr+IpqW0NBV9AbBH98wcBtb2qo/ry2oT8/Djty+hY0hSGsy6GRBsqKT5U8CVBZb5g1Co6K+zXOz4ZxEFKpMFWNbScYL0O5XOaOhJiYUpPF5cD/J7KNL/JUkY6/LxlGvu4X0XjmFRy0BT2pv3NLtOWadYXMiONT4/d+XgDhLkQ41cMqXY4Tqso+XLsQ28mBv28/1e3jaCmukh8fff4yp3lQ2PxfLNg24WV+96tFbkGbST9XyOvCeBY/TCXQlu2ubz2SZ+DZRbNZvdhT2Vf3VwPA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=SAQjAU/oQDuqdibu8w6peKc1dtCBsSy6GPLMGiJD/a0=; b=QKGSoKo6Zb5+5BVuJU6Ch4wUcwf4e6T+jYDnpM2boWfbei2IXRR6JZpXyWblIKtofPzxombIncuQ/bFP4CpaPxDeGEm5r5kFvZ6S62p4/RgsczuBGIm7UpR7tcAL3SvaWoVc+vXuZB/LPOBk7+aiDYld0fnvSKUi/XX/4SX1KYERGofMqiZU07A3Q4hYgX3UcvgdQTTmjLhvGOt05AUhOosgySQtfmzO+CxtsvVyJc7112VY0/PLWLhtswscOzjkrBCWln0XJvUCWCjQSGvfnGSWodRQ99larSrjoe825MVQunE7+XMLgTGJ/ZKEZ6xlbNJSOErQywgy70bIIgZFVg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; Received: from DM4PR11MB5373.namprd11.prod.outlook.com (2603:10b6:5:394::7) by MW5PR11MB5809.namprd11.prod.outlook.com (2603:10b6:303:197::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6609.32; Mon, 24 Jul 2023 21:15:16 +0000 Received: from DM4PR11MB5373.namprd11.prod.outlook.com ([fe80::1127:c109:d888:f6d1]) by DM4PR11MB5373.namprd11.prod.outlook.com ([fe80::1127:c109:d888:f6d1%5]) with mapi id 15.20.6609.031; Mon, 24 Jul 2023 21:15:16 +0000 From: =?UTF-8?q?Micha=C5=82=20Winiarski?= To: , , CC: David Airlie , Daniel Vetter , "Maarten Lankhorst" , Maxime Ripard , Thomas Zimmermann , Simon Ser , Matthew Wilcox , Oded Gabbay , =?UTF-8?q?Christian=20K=C3=B6nig?= , James Zhu , Pekka Paalanen , Emil Velikov , =?UTF-8?q?Micha=C5=82=20Winiarski?= Subject: [PATCH v6 1/4] drm: Use XArray instead of IDR for minors Date: Mon, 24 Jul 2023 23:14:25 +0200 Message-ID: <20230724211428.3831636-2-michal.winiarski@intel.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20230724211428.3831636-1-michal.winiarski@intel.com> References: <20230724211428.3831636-1-michal.winiarski@intel.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: FR0P281CA0147.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:96::11) To DM4PR11MB5373.namprd11.prod.outlook.com (2603:10b6:5:394::7) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DM4PR11MB5373:EE_|MW5PR11MB5809:EE_ X-MS-Office365-Filtering-Correlation-Id: ef3ff2a9-ff21-4954-cbdc-08db8c8b13b7 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: ulmgBOlYXeBgg4WDtpKRrg69uU5vqhsZXE4SvzpBdnnamJPxtgdCwTzC/nd8v6a5fCC1ABCrYPBZcWkQs/g99tTNYWoxhfItvRNz1Up4Lq9t1d1JdhIrpjUQ4f//enjacbZmEKcWikuKSEaeMwtu77kPyhdZ9FqNGrimHiea/LGblJdxFQmD6V0gmLlT9WGnjh2Tp8i+Myrg8h0m++jqzOZu7N/QAuMFzD31gKko/aYThC8vLpWwgOj/XEd28Nnnr74UrBqvA+i+Ji8Hh3Y1Z5yoYoCBJDg4ykHyqwGKVSKMg1sCWAWdvlO5OPuUPlE3MhYXji/trL1gpcYrYdfV/NnI2GES/WYomDy/E9reHlF2InzyzN3DOUmwESUbo5HZopAa32H0gYi4oFEGAyLQsr3Q5PjaNEsmb/h23LnYBJAa5GJ73eSFH496kcvCDovFwMnf+wACntyqFs5roCNPuU8VQ3HsWRn+/x5Kf/uBQ6FKNS6G9BD19fh+KbOgkjreZLatf9E4l/Otl/efWY46fu4pMWbh/6HSuNP4DPd1vUO7H8AUGu87flmB5j3hPiP4 X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM4PR11MB5373.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230028)(136003)(346002)(376002)(39860400002)(396003)(366004)(451199021)(83380400001)(38100700002)(36756003)(82960400001)(86362001)(54906003)(2906002)(186003)(6506007)(1076003)(26005)(6666004)(6512007)(6486002)(8936002)(5660300002)(8676002)(7416002)(478600001)(316002)(41300700001)(66476007)(66946007)(66556008)(4326008)(2616005);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?cVNKS1VldHYwU1dnaExhUFZ6SEF3d01vdXdvMkRzLzBIZmorWVRyRVM4Sk9m?= =?utf-8?B?RVRjQTdJRUtCQ21GcWRicnFIdE9idEtQWWFlbDFLRStXaDhPY3NtZ3JoZWti?= =?utf-8?B?c1pTVFpJald1VDc0d0d1YVMzVmIvMTdjL2RUMU5ESVk4NFV4MjkwaVNFTWFm?= =?utf-8?B?QWRXL2o2Zno1RExaQ2FPY1BUV1UxN2cvMlpvbjBaWGZESmxUdmFKeFcwUWpy?= =?utf-8?B?RkI1Mk82TVcyRm5JeU9IZUdDeXlmc296NzIyem9OcUIzeVg5K1dUdGdTSkNM?= =?utf-8?B?bU1JamgwSmluR01wOFRVTlBhOEl3Ry9HMVdpamV1dnVZdWtidm1meWJOY2tE?= =?utf-8?B?QTBNbkZRMThEUGF3eWM0ZzJaQnNraFNodFllU2NXUExSQk5LUDNaWTlxMGtu?= =?utf-8?B?UFZNaVhhTEtYZXNHZDdJNW5XTmI1SmpaeFpPSFFMM3BLeU1udkZOM0o1YnVs?= =?utf-8?B?bHQ3UEN2UUUyU2grdkRDWmZKeHJRN3h0UFluVlpBaTYwZnJUY2dNWGptZGMy?= =?utf-8?B?TC9WNFYwd1NmZmt6RTEyRFBLSHF1VHI0SDBMcUJmMU9zTWtLRFBSK2VtMElh?= =?utf-8?B?NUwyMVgyUmdIcWE2VmNFZk5QWlFXWnhFbWZTNmRWeVVEb25EOTU5V1VqL0pk?= =?utf-8?B?TzBrQnROWldZUzlJaXBTd0pjRkhJcGlCQTdJTlVWZ1pwcElYckJjY3ZzK1lV?= =?utf-8?B?NGM3bC96TkFQdEo5OFJGcHdmMGJ6MWF5ejNKeHl3eGR4ZVkxdllLTDV3QVgr?= =?utf-8?B?RVJ4N01qSzhRNEJ4TDJPMm0wRFZRK2FQcllLT3NOOHA3NmJwamowTGNPZWNl?= =?utf-8?B?ZnVqTG15WUg3Z0c2TzhDOHV0M1FhUElCRWtvNjlic21QRDBVdVhRaWw1ZWsz?= =?utf-8?B?R1M5ZE1TWlphWnJ3TmtKd0c5WVFFdUFQbzVlUHZuMFVXdUlTVzZ6Y29TMVp1?= =?utf-8?B?QVR5aTJwaXR1d0NhZytvZ2VNUUY1UnZtVE9NR01yVmxVNUNWYmk3U3RhTHFM?= =?utf-8?B?MGZVd3BacWZGUUg4ZGtQVGN3RHFuVVBxcDEzYmc5MnM4TXlYQ3Fxc290QnRs?= =?utf-8?B?SGQwWWdCdkJZSmxSVFo4WGszSmc5ZmVsS3JxMTQzaGgwRXF2V25ld0Q1M2xN?= =?utf-8?B?bExVNUd3OW5tclBaeFlEaVdIYlo0MFJzdEtwYjZSYzQ3dDE1UnVYK1B3Q21x?= =?utf-8?B?L3FIZVd5eWRzc3k3SER2Nk9yR2hMQ0hUM3FOcHdqYWlRbmtvL3lFTExaMkpG?= =?utf-8?B?U3dMWnovRmZ2QmJQMTl6c3pPeVN0TXFFczI2SlhuZko2MnJNdGJTZ1JBVWRr?= =?utf-8?B?MW5OaXBSVFUySzRhZE4zb2pzV25NR1dqZ3BHMXNtd296UW0rbGtFWGVDYWw0?= =?utf-8?B?QUp2SkxLVTRHd1VTRUUrU1RPdDR4dnpiaURqbitvRzcrNDJUL243Q3Z6Zkkr?= =?utf-8?B?YXcvZ01KeHdJZldtc0hyNnJhcldONWFEQWVqckZFdUk0SEd3Qzd1SnJxNkc2?= =?utf-8?B?M0FjUUJnS0hpdHNPeUx0WDRGaXlhUHpRTnpyL0FVanlLbDRkK1dXL0g5RWNG?= =?utf-8?B?Rll0TndjczRWK1JNSk91WE9NRjI3cUxJLzlHUCtoeWJkQ2JtMWtMMDdtamRY?= =?utf-8?B?eVc0YllKRXJJN3FNNFp5Y04xU3pMQVJsbjJGS29HUmNuQ09FRjhlZzJsaVlY?= =?utf-8?B?V24vWUU1V2ZpZ1ZSMmc3UlpYdHhrelFjdExoYnQrb05qMlQ4Q295YjEvZjN2?= =?utf-8?B?QXhOblFXQW5xS29jc2dURTI2L2ZKK1lKVDNNbGtNL2RwTUhsclhHdkdoYXh2?= =?utf-8?B?KzZ5amxSRE9tdDJCTkVVNmhSSXFTaFUxTkJQNVVWaXV3dzJENGlqN2IwZmNt?= =?utf-8?B?ZncxeXBPVG5HdXEvZXFtaGJtNDBQOU5Ka2tsZ1dReUhLK1kvVlZya1JzL3h6?= =?utf-8?B?ZStZZGhwSm1ZRzFzd0IwZmpnaWhuV3VBZytqa1JGcEliRElJOG9pV054S1Fi?= =?utf-8?B?dWpGa2ZKLy9BRFRYSEVpSTFSRXVOcDZLNmgwYngwdlhTMnpIVDMreldyK3Za?= =?utf-8?B?MGF3T3FDa2VCZVBPMm40ZFBSQTJ5YkFORTVSSS84aFpCSG9PMHhwM205ZDRO?= =?utf-8?B?cnAwbjMxRG5XVlc1dUJkZEd4SnFxVnUvNGtQTUoyMVYxQmhDZzhob0hmRDR0?= =?utf-8?B?REE9PQ==?= X-MS-Exchange-CrossTenant-Network-Message-Id: ef3ff2a9-ff21-4954-cbdc-08db8c8b13b7 X-MS-Exchange-CrossTenant-AuthSource: DM4PR11MB5373.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Jul 2023 21:15:16.3583 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: KgjCtM807tkgDF2zkSAgfGuONWUFBOmXosXi3Zb2gtPPDhFCO6hvUwIW5SxnIxHwPG2HCLryySPIxt+ntjT0pi3yPWgeasljxW89pEWGP2w= X-MS-Exchange-Transport-CrossTenantHeadersStamped: MW5PR11MB5809 X-OriginatorOrg: intel.com Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org IDR is deprecated, and since XArray manages its own state with internal locking, it simplifies the locking on DRM side. Additionally, don't use the IRQ-safe variant, since operating on drm minor is not done in IRQ context. Signed-off-by: Micha=C5=82 Winiarski Suggested-by: Matthew Wilcox Acked-by: James Zhu for the series --- drivers/gpu/drm/drm_drv.c | 63 ++++++++++++++++----------------------- 1 file changed, 25 insertions(+), 38 deletions(-) diff --git a/drivers/gpu/drm/drm_drv.c b/drivers/gpu/drm/drm_drv.c index 3eda026ffac6..3faecb01186f 100644 --- a/drivers/gpu/drm/drm_drv.c +++ b/drivers/gpu/drm/drm_drv.c @@ -34,6 +34,7 @@ #include #include #include +#include =20 #include #include @@ -54,8 +55,7 @@ MODULE_AUTHOR("Gareth Hughes, Leif Delgass, Jos=C3=A9 Fon= seca, Jon Smirl"); MODULE_DESCRIPTION("DRM shared core routines"); MODULE_LICENSE("GPL and additional rights"); =20 -static DEFINE_SPINLOCK(drm_minor_lock); -static struct idr drm_minors_idr; +static DEFINE_XARRAY_ALLOC(drm_minors_xa); =20 /* * If the drm core fails to init for whatever reason, @@ -101,26 +101,23 @@ static struct drm_minor **drm_minor_get_slot(struct d= rm_device *dev, static void drm_minor_alloc_release(struct drm_device *dev, void *data) { struct drm_minor *minor =3D data; - unsigned long flags; =20 WARN_ON(dev !=3D minor->dev); =20 put_device(minor->kdev); =20 - if (minor->type =3D=3D DRM_MINOR_ACCEL) { + if (minor->type =3D=3D DRM_MINOR_ACCEL) accel_minor_remove(minor->index); - } else { - spin_lock_irqsave(&drm_minor_lock, flags); - idr_remove(&drm_minors_idr, minor->index); - spin_unlock_irqrestore(&drm_minor_lock, flags); - } + else + xa_erase(&drm_minors_xa, minor->index); } =20 +#define DRM_MINOR_LIMIT(t) ({ typeof(t) _t =3D (t); XA_LIMIT(64 * _t, 64 *= _t + 63); }) + static int drm_minor_alloc(struct drm_device *dev, enum drm_minor_type typ= e) { struct drm_minor *minor; - unsigned long flags; - int r; + int index, r; =20 minor =3D drmm_kzalloc(dev, sizeof(*minor), GFP_KERNEL); if (!minor) @@ -129,24 +126,17 @@ static int drm_minor_alloc(struct drm_device *dev, en= um drm_minor_type type) minor->type =3D type; minor->dev =3D dev; =20 - idr_preload(GFP_KERNEL); if (type =3D=3D DRM_MINOR_ACCEL) { r =3D accel_minor_alloc(); + index =3D r; } else { - spin_lock_irqsave(&drm_minor_lock, flags); - r =3D idr_alloc(&drm_minors_idr, - NULL, - 64 * type, - 64 * (type + 1), - GFP_NOWAIT); - spin_unlock_irqrestore(&drm_minor_lock, flags); + r =3D xa_alloc(&drm_minors_xa, &index, NULL, DRM_MINOR_LIMIT(type), GFP_= KERNEL); } - idr_preload_end(); =20 if (r < 0) return r; =20 - minor->index =3D r; + minor->index =3D index; =20 r =3D drmm_add_action_or_reset(dev, drm_minor_alloc_release, minor); if (r) @@ -163,7 +153,7 @@ static int drm_minor_alloc(struct drm_device *dev, enum= drm_minor_type type) static int drm_minor_register(struct drm_device *dev, enum drm_minor_type = type) { struct drm_minor *minor; - unsigned long flags; + void *entry; int ret; =20 DRM_DEBUG("\n"); @@ -190,9 +180,12 @@ static int drm_minor_register(struct drm_device *dev, = enum drm_minor_type type) if (minor->type =3D=3D DRM_MINOR_ACCEL) { accel_minor_replace(minor, minor->index); } else { - spin_lock_irqsave(&drm_minor_lock, flags); - idr_replace(&drm_minors_idr, minor, minor->index); - spin_unlock_irqrestore(&drm_minor_lock, flags); + entry =3D xa_store(&drm_minors_xa, minor->index, minor, GFP_KERNEL); + if (xa_is_err(entry)) { + ret =3D xa_err(entry); + goto err_debugfs; + } + WARN_ON(entry); } =20 DRM_DEBUG("new minor registered %d\n", minor->index); @@ -206,20 +199,16 @@ static int drm_minor_register(struct drm_device *dev,= enum drm_minor_type type) static void drm_minor_unregister(struct drm_device *dev, enum drm_minor_ty= pe type) { struct drm_minor *minor; - unsigned long flags; =20 minor =3D *drm_minor_get_slot(dev, type); if (!minor || !device_is_registered(minor->kdev)) return; =20 /* replace @minor with NULL so lookups will fail from now on */ - if (minor->type =3D=3D DRM_MINOR_ACCEL) { + if (minor->type =3D=3D DRM_MINOR_ACCEL) accel_minor_replace(NULL, minor->index); - } else { - spin_lock_irqsave(&drm_minor_lock, flags); - idr_replace(&drm_minors_idr, NULL, minor->index); - spin_unlock_irqrestore(&drm_minor_lock, flags); - } + else + xa_store(&drm_minors_xa, minor->index, NULL, GFP_KERNEL); =20 device_del(minor->kdev); dev_set_drvdata(minor->kdev, NULL); /* safety belt */ @@ -238,13 +227,12 @@ static void drm_minor_unregister(struct drm_device *d= ev, enum drm_minor_type typ struct drm_minor *drm_minor_acquire(unsigned int minor_id) { struct drm_minor *minor; - unsigned long flags; =20 - spin_lock_irqsave(&drm_minor_lock, flags); - minor =3D idr_find(&drm_minors_idr, minor_id); + xa_lock(&drm_minors_xa); + minor =3D xa_load(&drm_minors_xa, minor_id); if (minor) drm_dev_get(minor->dev); - spin_unlock_irqrestore(&drm_minor_lock, flags); + xa_unlock(&drm_minors_xa); =20 if (!minor) { return ERR_PTR(-ENODEV); @@ -1067,7 +1055,7 @@ static void drm_core_exit(void) unregister_chrdev(DRM_MAJOR, "drm"); debugfs_remove(drm_debugfs_root); drm_sysfs_destroy(); - idr_destroy(&drm_minors_idr); + WARN_ON(!xa_empty(&drm_minors_xa)); drm_connector_ida_destroy(); } =20 @@ -1076,7 +1064,6 @@ static int __init drm_core_init(void) int ret; =20 drm_connector_ida_init(); - idr_init(&drm_minors_idr); drm_memcpy_init_early(); =20 ret =3D drm_sysfs_init(); --=20 2.41.0 From nobody Tue Sep 9 07:31:48 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 278F7C0015E for ; Mon, 24 Jul 2023 21:15:39 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230156AbjGXVPi (ORCPT ); Mon, 24 Jul 2023 17:15:38 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:49230 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230450AbjGXVP1 (ORCPT ); Mon, 24 Jul 2023 17:15:27 -0400 Received: from mga17.intel.com (mga17.intel.com [192.55.52.151]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id DA510171B for ; Mon, 24 Jul 2023 14:15:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1690233325; x=1721769325; h=from:to:cc:subject:date:message-id:in-reply-to: references:content-transfer-encoding:mime-version; bh=xxxbPCzILB+ORtjnLQS237W707qJrozmzmmQety2tGA=; b=V1u8+GLbEo5IetJRxYiyT2042MT+2frtHQ7zwSe7OM6bwUFpXs6T2tBP BMmHPPZicnIED45v0lmRTTBNjAG7TZkceHoNnCLv+gFgsn2ZE0zz8i6eF Vd+QvTw3Jd7XeFDgR+KKPjWOzXU8KI3b0QlLHlizNfsUTANmKIrc13Eyv hp3F+V7tWLP+t0A5CyMiyCWR8D49GaqCHdpP8L6pZGsQN+TjfVrXF85M7 h+MajIrJFr5iDvdpidDamIhvMvymSk1Hv9oFoImYAhwaeyxl41rNajvLf a6G8U50rwLBNE/ZTulIHft7CaQxGO+MKLvnZh/M5xY2Hy7z30fmi4qX8X g==; X-IronPort-AV: E=McAfee;i="6600,9927,10781"; a="347830086" X-IronPort-AV: E=Sophos;i="6.01,228,1684825200"; d="scan'208";a="347830086" Received: from orsmga007.jf.intel.com ([10.7.209.58]) by fmsmga107.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 24 Jul 2023 14:15:24 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10781"; a="719815887" X-IronPort-AV: E=Sophos;i="6.01,228,1684825200"; d="scan'208";a="719815887" Received: from orsmsx601.amr.corp.intel.com ([10.22.229.14]) by orsmga007.jf.intel.com with ESMTP; 24 Jul 2023 14:15:24 -0700 Received: from orsmsx610.amr.corp.intel.com (10.22.229.23) by ORSMSX601.amr.corp.intel.com (10.22.229.14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.27; Mon, 24 Jul 2023 14:15:24 -0700 Received: from orsmsx612.amr.corp.intel.com (10.22.229.25) by ORSMSX610.amr.corp.intel.com (10.22.229.23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.27; Mon, 24 Jul 2023 14:15:24 -0700 Received: from orsedg603.ED.cps.intel.com (10.7.248.4) by orsmsx612.amr.corp.intel.com (10.22.229.25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.27 via Frontend Transport; Mon, 24 Jul 2023 14:15:23 -0700 Received: from NAM10-BN7-obe.outbound.protection.outlook.com (104.47.70.108) by edgegateway.intel.com (134.134.137.100) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.27; Mon, 24 Jul 2023 14:15:23 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=FklTcyXx9LsfuaaPQ7vfSxDnpr2oc8PZvoYZgSkQGq+tfv0w8lQBxMy6J9DLVbWhmRRmak9o2Eysj3bU8v5I7F1iNoKI22A728XEheRnIig4t+Az70vp8cS5KSCn496l8WOg01ZmuNgbDShbJ7J4ItKYiUeBbNiTlN/gXrBwQCqzKCgnNuwC/PFN7ZA6vVL2ZIfgFY91qv6zj35rWTgnJVqKO9dMVpNNNBghch/ufl5swNpDjg45LGRP56Ej1rELLdPmwmiG7sbJnCWQ5SBBVXaH/kpYuR/78wwzMlvzHdQ8HSghQj8Qu5zA967nDxglb+8mg5ALYn6iZqTM5p6kDw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=+EA3oS/E2UCW5sP165cfWbyMjvpO7ndnK3w1c7wQzx4=; b=kcSw+Ub1h3Xc5edXbHAjgFw24vsnrZkEqHlEQW3VHWPedQ8azJ6/aKqsDbE58wEFo0mHHiUPwB7k66oJlZjXKPCnxmYgDDLw3ogpaBPmfiq9ZuttJld4t00Ctg8ing0URxd3atUG5S1z5VbtnRtpd4XUz6GnSbyc+QAVJwHvnbwQVuYazJ4Msy6H7HyICboGpFbvKDFMH7iiSHDVWxszTPd4kAaYd5g14TB18vd7h7YJ16lw3TVC382pJPnta1fsG6iITJj6MEiWePaZ5YdLJ9A9iX4kHqjv9uTlWgu6GT0m2G4WC9ltxA9HCYMMvRMyQx+A+EviVSSvAvRLijsEqw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; Received: from DM4PR11MB5373.namprd11.prod.outlook.com (2603:10b6:5:394::7) by MW5PR11MB5809.namprd11.prod.outlook.com (2603:10b6:303:197::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6609.32; Mon, 24 Jul 2023 21:15:20 +0000 Received: from DM4PR11MB5373.namprd11.prod.outlook.com ([fe80::1127:c109:d888:f6d1]) by DM4PR11MB5373.namprd11.prod.outlook.com ([fe80::1127:c109:d888:f6d1%5]) with mapi id 15.20.6609.031; Mon, 24 Jul 2023 21:15:20 +0000 From: =?UTF-8?q?Micha=C5=82=20Winiarski?= To: , , CC: David Airlie , Daniel Vetter , "Maarten Lankhorst" , Maxime Ripard , Thomas Zimmermann , Simon Ser , Matthew Wilcox , Oded Gabbay , =?UTF-8?q?Christian=20K=C3=B6nig?= , James Zhu , Pekka Paalanen , Emil Velikov , =?UTF-8?q?Micha=C5=82=20Winiarski?= Subject: [PATCH v6 2/4] accel: Use XArray instead of IDR for minors Date: Mon, 24 Jul 2023 23:14:26 +0200 Message-ID: <20230724211428.3831636-3-michal.winiarski@intel.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20230724211428.3831636-1-michal.winiarski@intel.com> References: <20230724211428.3831636-1-michal.winiarski@intel.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: FR2P281CA0059.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:93::13) To DM4PR11MB5373.namprd11.prod.outlook.com (2603:10b6:5:394::7) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DM4PR11MB5373:EE_|MW5PR11MB5809:EE_ X-MS-Office365-Filtering-Correlation-Id: 9f495a29-fec7-4165-8fd7-08db8c8b1642 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: JHSnb+Gf3K2so5Ct2tasrkBwUmDOGKeuI7lGA7vCloJJ30oQNG6kFLK0UmIO+7U7nD6oAgbcuYw2p+60AHd9awkuUqqR8YIntKNpD4DBio7v+lI/3hAnEpbvnfWxxoS3ODW+WXQbzeQlN0m62RrjkqbC0UPbHCkMpclc7LTDotlWhFIMOgpJGqeDu9GiKqd+g+88aVa+wAUS3sWyILklVclH7WVeiedX3R1GTw9kUg1LZ2aQXioq2SACfEUIOwmEHpwi9NqSIrxJY13MyCA1iUXT/NITnRsgcbWl4wUNiDjCzbffniyhUbU+SRIkz+qQlgdUNLhPegylmD0cyqaBNsMviWEmRSQBk4hHaWqlxplcoS/zE0QEVgHNtNMAQI/J81WMgZEO5PK3XG2EkdSjv3gW15ChW9TEHGBpWHn/0lCQPjKJuLjsSsdfjELA7IzSOO85SnvXf4ILd7aXrmvSdGyHHZShkY5QF6L3ZmkGopo833iTg4de66zFAoFQPaH8EPTODV/owlMFL7KR3NXj5JFMRzR2qkJ5YpDXw3jE+GCXK1FHApI09LYDFCkjErQB X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM4PR11MB5373.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230028)(136003)(346002)(376002)(39860400002)(396003)(366004)(451199021)(83380400001)(38100700002)(36756003)(82960400001)(86362001)(54906003)(30864003)(2906002)(186003)(6506007)(1076003)(26005)(6512007)(6486002)(8936002)(5660300002)(8676002)(7416002)(478600001)(316002)(41300700001)(66476007)(66946007)(66556008)(4326008)(2616005);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?U2pNbXB3emw0akFYekpQaFBpSWV0U3NEL2NKUkdtNXMzNGlGbUlYOHkxVU5v?= =?utf-8?B?ZDhZQzFYT0I4akY2eDBzSDdBb3ByejRvQkJvTUNuSi9FalBpQllDUXh1b0Jt?= =?utf-8?B?K1g4ZDk2Qmczcm9Sekx3aDFhbUVmbTd0cXcrSjdMWVNaOE91b2JmSXJJWUll?= =?utf-8?B?OVducEw4SVBLUElSWkJWNlcxNHdSeFBGNjRwQVZzaTZ1SVBhd1dyNXVSY0NK?= =?utf-8?B?NExoZS8wdFBPZ0thOW14Rml0aVFVMzExSDZaNEpBQVNpWnRiQ2lFV2RSNTQ1?= =?utf-8?B?Y1JQSGJDWkVpZEhCbmNXdFc5M1NXUzM0T2tlQlJtZDE5VVREYVNhRFI4K01B?= =?utf-8?B?c0svTlVSME85dlVzZEJXQzY0VzVnbFZVZVlOOUN0bTdVR2RtcVEzbEdOL0d6?= =?utf-8?B?aVdQZlN0V2dlUUgyZ20yY09HKzd5b3VKVmdsY0Z6TEtuVEw3disrNzJiTmdk?= =?utf-8?B?K3lmR0FQVkIxc1pPRTNpRkN6c3E4b044N0w4Wk0vTGUyT3RGNk43ZCsxaXFx?= =?utf-8?B?djhtc2lyWWtJSS9Yc21iNGJoQStyWkFEdHJuV1dNelUxcllYT08yMmROR1dq?= =?utf-8?B?bEJUQXJXa2N1WDVNM3dmc1hpL0x0Zjk5QzJBSWZmd2dUNzhvcEhqRWhqblZH?= =?utf-8?B?ejRKcjBBKzhuUmtLcVhSWEp0SjR6MGExQndvMkpqMFZuQytPZ2NMb0M3RXN6?= =?utf-8?B?YWErNVlZdHNBVDNwSlRSRStoWkQ3SW5iMWhReGlBTEFoL1l1R1NZLzlyNmZy?= =?utf-8?B?UTBmNm9HSVhKeUFwK1l3eWxjMUJmWGo3THVnQVZ1TmFES1JPdnJpY0hLS1Zp?= =?utf-8?B?a2RldjdrWW53STN0M2R3MitseXJyYmd4Z09vRld1eXpWOFRVYm15ajQ5ZTli?= =?utf-8?B?YlBuWWRWWHc4dEcxYVFWSFB5S1owNElTZHBIYXZ0Y2JvMzhSOWM5citRUmdi?= =?utf-8?B?YlNFdFI1bEpDYXEyeG93Q1JOUXl0ZmxzRllWSm5zcmJXQ1Y4Ulcrei9mOTNl?= =?utf-8?B?OHJkYVplcDdjN0c3L1Vib2xCKzJvWm1NNzVSaDdGZEhrK2JzTE5VWlVaZ3JO?= =?utf-8?B?RWZXR0hwRFRCbit5SGtVeW9RZlVROFFDS2N2amtlbFA2TTg3bFVRaFZyaGFU?= =?utf-8?B?U1Q4eDY1WTVMU3VoYXRpM1E3a3FyVEhNNVY0UUNidzRrUGMvcXpsN25aQmtI?= =?utf-8?B?MkkzZFUwV3RSS1p1RkYxRDBuMjEydGc2WmwzU2ZLTWwyUnhIUGt4czhUUVV4?= =?utf-8?B?eVVQZG84N1RHenZlUkEvaEhrcUw3NVVsWjN1cFJXbWtOdGtqY0J6TG4rdWlF?= =?utf-8?B?bHNicXJkbjB3VXJPKzJQdzRDSTFLUWw3VEYyU3BLbEZWM1dHQTRYWDArdlhG?= =?utf-8?B?YjVIaUd6dzNiUTZqVjNsR0Vxd3ZRQ1BubFBlWDc0NUlJaEdRazRzRnhnT3dJ?= =?utf-8?B?YjZ0VUZsR2diK254Y3A5eGsxZml3S1dVeFRZbUxFd0wwZExLWGl6OTlXVDhx?= =?utf-8?B?QkJWWXRKWWR4bUlKWEVWS21hdmNSbDFXcExsRVp0TThhS3hnS3pvYmFOcHlC?= =?utf-8?B?eXIrdktnTVZyUm1VaDZabm1ydUtUZExHZlRNVUlWUTFGSkxrcEhFb0JBQUVF?= =?utf-8?B?dGNsWFl2T3QvVC8zZ05MSTNCVHhKNzVwTXQ0UHNuVWtoU3lGaDdhcXY1ei9v?= =?utf-8?B?VmpkYWNYMUhnVnNsdllFSTRNNmRPOGlrR2hpQUduQ0tsYTArRHNSUkhDczVz?= =?utf-8?B?ZlE2N0d3eGFzNUhiV1RDbWJTU09PNFdsY28xdlRNY2FKdjdFZWpkWHlmV1Vi?= =?utf-8?B?K1Rtcm44REVnSlN2bHpPRTB5QkFoWktDN1ZZRHRPVXJNMVpDTVFMSExVT0JD?= =?utf-8?B?R2ZkU00vZ1Y4bldNdXJDQWRCSXJZeTZiVGtPL0Q5L29wZy90dDlyNUJLUk1n?= =?utf-8?B?V0c0ejhqYlhIbkFkOU12TVZ1azUrSGUyWWVqZEVMZ1VkWFpyTjJON2ZyT2N2?= =?utf-8?B?RmtiamN0OGxBUkkvQ09xTnNWUnpQeEsyNEVGYmNmUzFZajkvaW4yZlpzTFdF?= =?utf-8?B?dGY3d1I4V1dTVXhNZUQ4anJ3dmhkVkRSRFY0Uk5PVFpRU3pVSFJobVRuMTVr?= =?utf-8?B?OUVUR3dCazN6czN1cTNSTlJ2NitjcVkrTS83eDhsNzFZK0dTaW5pcGE0Tk5Z?= =?utf-8?B?ZXc9PQ==?= X-MS-Exchange-CrossTenant-Network-Message-Id: 9f495a29-fec7-4165-8fd7-08db8c8b1642 X-MS-Exchange-CrossTenant-AuthSource: DM4PR11MB5373.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Jul 2023 21:15:20.7168 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 7MrdX5LpfXpd9nKQtAfBUegXyfO18W3Pf/WUyKVmR9DUol+giVARQwjutK059Q9kflDT0uhymK6iydkOsoNL7ItQU2DIRL1ygsoGatS+dUo= X-MS-Exchange-Transport-CrossTenantHeadersStamped: MW5PR11MB5809 X-OriginatorOrg: intel.com Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Accel minor management is based on DRM (and is also using struct drm_minor internally), since DRM is using XArray for minors, it makes sense to also convert accel. As the two implementations are identical (only difference being the underlying xarray), move the accel_minor_* functionality to DRM. Signed-off-by: Micha=C5=82 Winiarski Acked-by: James Zhu for the series --- drivers/accel/drm_accel.c | 110 +++------------------------------ drivers/gpu/drm/drm_drv.c | 66 ++++++++++---------- drivers/gpu/drm/drm_file.c | 2 +- drivers/gpu/drm/drm_internal.h | 4 -- include/drm/drm_accel.h | 18 +----- include/drm/drm_file.h | 5 ++ 6 files changed, 47 insertions(+), 158 deletions(-) diff --git a/drivers/accel/drm_accel.c b/drivers/accel/drm_accel.c index 4a9baf02439e..8827cb78ca9d 100644 --- a/drivers/accel/drm_accel.c +++ b/drivers/accel/drm_accel.c @@ -8,7 +8,7 @@ =20 #include #include -#include +#include =20 #include #include @@ -17,8 +17,7 @@ #include #include =20 -static DEFINE_SPINLOCK(accel_minor_lock); -static struct idr accel_minors_idr; +DEFINE_XARRAY_ALLOC(accel_minors_xa); =20 static struct dentry *accel_debugfs_root; static struct class *accel_class; @@ -120,99 +119,6 @@ void accel_set_device_instance_params(struct device *k= dev, int index) kdev->type =3D &accel_sysfs_device_minor; } =20 -/** - * accel_minor_alloc() - Allocates a new accel minor - * - * This function access the accel minors idr and allocates from it - * a new id to represent a new accel minor - * - * Return: A new id on success or error code in case idr_alloc failed - */ -int accel_minor_alloc(void) -{ - unsigned long flags; - int r; - - spin_lock_irqsave(&accel_minor_lock, flags); - r =3D idr_alloc(&accel_minors_idr, NULL, 0, ACCEL_MAX_MINORS, GFP_NOWAIT); - spin_unlock_irqrestore(&accel_minor_lock, flags); - - return r; -} - -/** - * accel_minor_remove() - Remove an accel minor - * @index: The minor id to remove. - * - * This function access the accel minors idr and removes from - * it the member with the id that is passed to this function. - */ -void accel_minor_remove(int index) -{ - unsigned long flags; - - spin_lock_irqsave(&accel_minor_lock, flags); - idr_remove(&accel_minors_idr, index); - spin_unlock_irqrestore(&accel_minor_lock, flags); -} - -/** - * accel_minor_replace() - Replace minor pointer in accel minors idr. - * @minor: Pointer to the new minor. - * @index: The minor id to replace. - * - * This function access the accel minors idr structure and replaces the po= inter - * that is associated with an existing id. Because the minor pointer can be - * NULL, we need to explicitly pass the index. - * - * Return: 0 for success, negative value for error - */ -void accel_minor_replace(struct drm_minor *minor, int index) -{ - unsigned long flags; - - spin_lock_irqsave(&accel_minor_lock, flags); - idr_replace(&accel_minors_idr, minor, index); - spin_unlock_irqrestore(&accel_minor_lock, flags); -} - -/* - * Looks up the given minor-ID and returns the respective DRM-minor object= . The - * refence-count of the underlying device is increased so you must release= this - * object with accel_minor_release(). - * - * The object can be only a drm_minor that represents an accel device. - * - * As long as you hold this minor, it is guaranteed that the object and the - * minor->dev pointer will stay valid! However, the device may get unplugg= ed and - * unregistered while you hold the minor. - */ -static struct drm_minor *accel_minor_acquire(unsigned int minor_id) -{ - struct drm_minor *minor; - unsigned long flags; - - spin_lock_irqsave(&accel_minor_lock, flags); - minor =3D idr_find(&accel_minors_idr, minor_id); - if (minor) - drm_dev_get(minor->dev); - spin_unlock_irqrestore(&accel_minor_lock, flags); - - if (!minor) { - return ERR_PTR(-ENODEV); - } else if (drm_dev_is_unplugged(minor->dev)) { - drm_dev_put(minor->dev); - return ERR_PTR(-ENODEV); - } - - return minor; -} - -static void accel_minor_release(struct drm_minor *minor) -{ - drm_dev_put(minor->dev); -} - /** * accel_open - open method for ACCEL file * @inode: device inode @@ -230,7 +136,7 @@ int accel_open(struct inode *inode, struct file *filp) struct drm_minor *minor; int retcode; =20 - minor =3D accel_minor_acquire(iminor(inode)); + minor =3D drm_minor_acquire(&accel_minors_xa, iminor(inode)); if (IS_ERR(minor)) return PTR_ERR(minor); =20 @@ -249,7 +155,7 @@ int accel_open(struct inode *inode, struct file *filp) =20 err_undo: atomic_dec(&dev->open_count); - accel_minor_release(minor); + drm_minor_release(minor); return retcode; } EXPORT_SYMBOL_GPL(accel_open); @@ -260,7 +166,7 @@ static int accel_stub_open(struct inode *inode, struct = file *filp) struct drm_minor *minor; int err; =20 - minor =3D accel_minor_acquire(iminor(inode)); + minor =3D drm_minor_acquire(&accel_minors_xa, iminor(inode)); if (IS_ERR(minor)) return PTR_ERR(minor); =20 @@ -277,7 +183,7 @@ static int accel_stub_open(struct inode *inode, struct = file *filp) err =3D 0; =20 out: - accel_minor_release(minor); + drm_minor_release(minor); =20 return err; } @@ -293,15 +199,13 @@ void accel_core_exit(void) unregister_chrdev(ACCEL_MAJOR, "accel"); debugfs_remove(accel_debugfs_root); accel_sysfs_destroy(); - idr_destroy(&accel_minors_idr); + WARN_ON(!xa_empty(&accel_minors_xa)); } =20 int __init accel_core_init(void) { int ret; =20 - idr_init(&accel_minors_idr); - ret =3D accel_sysfs_init(); if (ret < 0) { DRM_ERROR("Cannot create ACCEL class: %d\n", ret); diff --git a/drivers/gpu/drm/drm_drv.c b/drivers/gpu/drm/drm_drv.c index 3faecb01186f..34b60196c443 100644 --- a/drivers/gpu/drm/drm_drv.c +++ b/drivers/gpu/drm/drm_drv.c @@ -55,7 +55,7 @@ MODULE_AUTHOR("Gareth Hughes, Leif Delgass, Jos=C3=A9 Fon= seca, Jon Smirl"); MODULE_DESCRIPTION("DRM shared core routines"); MODULE_LICENSE("GPL and additional rights"); =20 -static DEFINE_XARRAY_ALLOC(drm_minors_xa); +DEFINE_XARRAY_ALLOC(drm_minors_xa); =20 /* * If the drm core fails to init for whatever reason, @@ -83,6 +83,18 @@ DEFINE_STATIC_SRCU(drm_unplug_srcu); * registered and unregistered dynamically according to device-state. */ =20 +static struct xarray *drm_minor_get_xa(enum drm_minor_type type) +{ + if (type =3D=3D DRM_MINOR_PRIMARY || type =3D=3D DRM_MINOR_RENDER) + return &drm_minors_xa; +#if IS_ENABLED(CONFIG_DRM_ACCEL) + else if (type =3D=3D DRM_MINOR_ACCEL) + return &accel_minors_xa; +#endif + else + return ERR_PTR(-EOPNOTSUPP); +} + static struct drm_minor **drm_minor_get_slot(struct drm_device *dev, enum drm_minor_type type) { @@ -106,18 +118,18 @@ static void drm_minor_alloc_release(struct drm_device= *dev, void *data) =20 put_device(minor->kdev); =20 - if (minor->type =3D=3D DRM_MINOR_ACCEL) - accel_minor_remove(minor->index); - else - xa_erase(&drm_minors_xa, minor->index); + xa_erase(drm_minor_get_xa(minor->type), minor->index); } =20 -#define DRM_MINOR_LIMIT(t) ({ typeof(t) _t =3D (t); XA_LIMIT(64 * _t, 64 *= _t + 63); }) +#define DRM_MINOR_LIMIT(t) ({ \ + typeof(t) _t =3D (t); \ + _t =3D=3D DRM_MINOR_ACCEL ? XA_LIMIT(0, ACCEL_MAX_MINORS) : XA_LIMIT(64 *= _t, 64 * _t + 63); \ +}) =20 static int drm_minor_alloc(struct drm_device *dev, enum drm_minor_type typ= e) { struct drm_minor *minor; - int index, r; + int r; =20 minor =3D drmm_kzalloc(dev, sizeof(*minor), GFP_KERNEL); if (!minor) @@ -126,18 +138,11 @@ static int drm_minor_alloc(struct drm_device *dev, en= um drm_minor_type type) minor->type =3D type; minor->dev =3D dev; =20 - if (type =3D=3D DRM_MINOR_ACCEL) { - r =3D accel_minor_alloc(); - index =3D r; - } else { - r =3D xa_alloc(&drm_minors_xa, &index, NULL, DRM_MINOR_LIMIT(type), GFP_= KERNEL); - } - + r =3D xa_alloc(drm_minor_get_xa(type), &minor->index, + NULL, DRM_MINOR_LIMIT(type), GFP_KERNEL); if (r < 0) return r; =20 - minor->index =3D index; - r =3D drmm_add_action_or_reset(dev, drm_minor_alloc_release, minor); if (r) return r; @@ -177,16 +182,12 @@ static int drm_minor_register(struct drm_device *dev,= enum drm_minor_type type) goto err_debugfs; =20 /* replace NULL with @minor so lookups will succeed from now on */ - if (minor->type =3D=3D DRM_MINOR_ACCEL) { - accel_minor_replace(minor, minor->index); - } else { - entry =3D xa_store(&drm_minors_xa, minor->index, minor, GFP_KERNEL); - if (xa_is_err(entry)) { - ret =3D xa_err(entry); - goto err_debugfs; - } - WARN_ON(entry); + entry =3D xa_store(drm_minor_get_xa(type), minor->index, minor, GFP_KERNE= L); + if (xa_is_err(entry)) { + ret =3D xa_err(entry); + goto err_debugfs; } + WARN_ON(entry); =20 DRM_DEBUG("new minor registered %d\n", minor->index); return 0; @@ -205,10 +206,7 @@ static void drm_minor_unregister(struct drm_device *de= v, enum drm_minor_type typ return; =20 /* replace @minor with NULL so lookups will fail from now on */ - if (minor->type =3D=3D DRM_MINOR_ACCEL) - accel_minor_replace(NULL, minor->index); - else - xa_store(&drm_minors_xa, minor->index, NULL, GFP_KERNEL); + xa_store(drm_minor_get_xa(type), minor->index, NULL, GFP_KERNEL); =20 device_del(minor->kdev); dev_set_drvdata(minor->kdev, NULL); /* safety belt */ @@ -224,15 +222,15 @@ static void drm_minor_unregister(struct drm_device *d= ev, enum drm_minor_type typ * minor->dev pointer will stay valid! However, the device may get unplugg= ed and * unregistered while you hold the minor. */ -struct drm_minor *drm_minor_acquire(unsigned int minor_id) +struct drm_minor *drm_minor_acquire(struct xarray *minor_xa, unsigned int = minor_id) { struct drm_minor *minor; =20 - xa_lock(&drm_minors_xa); - minor =3D xa_load(&drm_minors_xa, minor_id); + xa_lock(minor_xa); + minor =3D xa_load(minor_xa, minor_id); if (minor) drm_dev_get(minor->dev); - xa_unlock(&drm_minors_xa); + xa_unlock(minor_xa); =20 if (!minor) { return ERR_PTR(-ENODEV); @@ -1020,7 +1018,7 @@ static int drm_stub_open(struct inode *inode, struct = file *filp) =20 DRM_DEBUG("\n"); =20 - minor =3D drm_minor_acquire(iminor(inode)); + minor =3D drm_minor_acquire(&drm_minors_xa, iminor(inode)); if (IS_ERR(minor)) return PTR_ERR(minor); =20 diff --git a/drivers/gpu/drm/drm_file.c b/drivers/gpu/drm/drm_file.c index 883d83bc0e3d..20c9afe0f5a5 100644 --- a/drivers/gpu/drm/drm_file.c +++ b/drivers/gpu/drm/drm_file.c @@ -413,7 +413,7 @@ int drm_open(struct inode *inode, struct file *filp) int retcode; int need_setup =3D 0; =20 - minor =3D drm_minor_acquire(iminor(inode)); + minor =3D drm_minor_acquire(&drm_minors_xa, iminor(inode)); if (IS_ERR(minor)) return PTR_ERR(minor); =20 diff --git a/drivers/gpu/drm/drm_internal.h b/drivers/gpu/drm/drm_internal.h index d7e023bbb0d5..cb46f4c61991 100644 --- a/drivers/gpu/drm/drm_internal.h +++ b/drivers/gpu/drm/drm_internal.h @@ -77,10 +77,6 @@ void drm_prime_destroy_file_private(struct drm_prime_fil= e_private *prime_fpriv); void drm_prime_remove_buf_handle(struct drm_prime_file_private *prime_fpri= v, uint32_t handle); =20 -/* drm_drv.c */ -struct drm_minor *drm_minor_acquire(unsigned int minor_id); -void drm_minor_release(struct drm_minor *minor); - /* drm_managed.c */ void drm_managed_release(struct drm_device *dev); void drmm_add_final_kfree(struct drm_device *dev, void *container); diff --git a/include/drm/drm_accel.h b/include/drm/drm_accel.h index d4955062c77e..f93e23985f4e 100644 --- a/include/drm/drm_accel.h +++ b/include/drm/drm_accel.h @@ -51,11 +51,10 @@ =20 #if IS_ENABLED(CONFIG_DRM_ACCEL) =20 +extern struct xarray accel_minors_xa; + void accel_core_exit(void); int accel_core_init(void); -void accel_minor_remove(int index); -int accel_minor_alloc(void); -void accel_minor_replace(struct drm_minor *minor, int index); void accel_set_device_instance_params(struct device *kdev, int index); int accel_open(struct inode *inode, struct file *filp); void accel_debugfs_init(struct drm_minor *minor, int minor_id); @@ -72,19 +71,6 @@ static inline int __init accel_core_init(void) return 0; } =20 -static inline void accel_minor_remove(int index) -{ -} - -static inline int accel_minor_alloc(void) -{ - return -EOPNOTSUPP; -} - -static inline void accel_minor_replace(struct drm_minor *minor, int index) -{ -} - static inline void accel_set_device_instance_params(struct device *kdev, i= nt index) { } diff --git a/include/drm/drm_file.h b/include/drm/drm_file.h index 010239392adf..7fc09460051f 100644 --- a/include/drm/drm_file.h +++ b/include/drm/drm_file.h @@ -45,6 +45,8 @@ struct drm_printer; struct device; struct file; =20 +extern struct xarray drm_minors_xa; + /* * FIXME: Not sure we want to have drm_minor here in the end, but to avoid * header include loops we need it here for now. @@ -420,6 +422,9 @@ static inline bool drm_is_accel_client(const struct drm= _file *file_priv) return file_priv->minor->type =3D=3D DRM_MINOR_ACCEL; } =20 +struct drm_minor *drm_minor_acquire(struct xarray *minors_xa, unsigned int= minor_id); +void drm_minor_release(struct drm_minor *minor); + int drm_open(struct inode *inode, struct file *filp); int drm_open_helper(struct file *filp, struct drm_minor *minor); ssize_t drm_read(struct file *filp, char __user *buffer, --=20 2.41.0 From nobody Tue Sep 9 07:31:48 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 8FC74C001DE for ; Mon, 24 Jul 2023 21:15:42 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230478AbjGXVPl (ORCPT ); Mon, 24 Jul 2023 17:15:41 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:49354 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229829AbjGXVPf (ORCPT ); Mon, 24 Jul 2023 17:15:35 -0400 Received: from mga17.intel.com (mga17.intel.com [192.55.52.151]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E8FC9198E for ; Mon, 24 Jul 2023 14:15:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1690233328; x=1721769328; h=from:to:cc:subject:date:message-id:in-reply-to: references:content-transfer-encoding:mime-version; bh=kUXpil+EcubVXuJnN+4CExkCdaMO2sx5fW3H8oEPG/A=; b=AVEw9OEHuI/xuFQj101j6Mda+VG7dPWGgrJK7X1JJ2LlRM440OjF/sAc k7905RXE9zUOGSlZXysFHrXryZXZrsVsR5lIg4IWN+YiYoZ6ERw8QrDR9 R86H9Bf/cU7cfEWO0BoSYz5rBVsFST/Gc19C3lIgLgL+6qUiH4M5BKkg7 +y7AK1U5wv4VFL2FikC7J6uULcVlrdNYLBNROv0SEQXsS9Dh4l4Yf3vlW Oi6DTVNfdd94YKINVYz7RWf2pdyc2lSZOrfAZEaa/HaWgym/u9c53elXi jrjMFXCcBV0xWqNG8iLS+Px/dF1Acss/acYJO/Kmjv53lXYjMwHmjQdgL A==; X-IronPort-AV: E=McAfee;i="6600,9927,10781"; a="347830108" X-IronPort-AV: E=Sophos;i="6.01,228,1684825200"; d="scan'208";a="347830108" Received: from orsmga007.jf.intel.com ([10.7.209.58]) by fmsmga107.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 24 Jul 2023 14:15:27 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10781"; a="719815891" X-IronPort-AV: E=Sophos;i="6.01,228,1684825200"; d="scan'208";a="719815891" Received: from orsmsx601.amr.corp.intel.com ([10.22.229.14]) by orsmga007.jf.intel.com with ESMTP; 24 Jul 2023 14:15:27 -0700 Received: from orsmsx611.amr.corp.intel.com (10.22.229.24) by ORSMSX601.amr.corp.intel.com (10.22.229.14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.27; Mon, 24 Jul 2023 14:15:27 -0700 Received: from orsedg603.ED.cps.intel.com (10.7.248.4) by orsmsx611.amr.corp.intel.com (10.22.229.24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.27 via Frontend Transport; Mon, 24 Jul 2023 14:15:26 -0700 Received: from NAM10-BN7-obe.outbound.protection.outlook.com (104.47.70.101) by edgegateway.intel.com (134.134.137.100) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.27; Mon, 24 Jul 2023 14:15:26 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=C5vkG8uxR9l2NCCCrcOo2PLyPQC9NtAL3CKo17athrqfKtUddWTcUqcQzblVUQcAHgFcrCNfnpRvyEjCwgHfHwpvbwPte9aX1+c8V73zYCzWS3KibupQc4pMfE/b2itSIb34e9D8akUpewlSJxS+kRNJg7TrdUkkbHIzBX7zYn8f2Fn+nUYlEWwBqH/4e4+AfB/hVH9k3xLn7Q4dWXZt1ZhgclAxjR7xJ9zXC/PIZUPHCrnOUvzIj8wZThWNaWs3VDZFJIbpquEaJqxc7hMohyEExlZ/9toZpQn044msyMinssrCP3ic5GTwvZXqsc5ib9qI/9cmwLAac18TooQvfg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=UsXm8Qul64IFOWsASHDJgaS6S9yTtKU6nE/rDRuoU5Q=; b=ip8eAQvF6CulTgx9rmhTwj1YThwLItRqQ4hIgRQuG7Ut8o3OJTycvqX9uxbuGneGDKDTHE2+dIjn6BBGPlHHpWl7luKN2m6b4TrYjxJuv7j73k5wDYzOHhIfY4Igly47wLoPzN+aaFmVKVV78+uAGJLrwC6Jy9PfdKpEEV88bweSOJvB+AYSsI/0dmxcw00xxzjBQLlW5OkcWTYBj4Hw8HqiF/d4OBN9QRQQQimtrZP4Lnh/bOICbmJxPBTBMOf86csJ1eCDlTPHsMPizgjMdVg/fVLrjtNRcSS1VNP6EnL68HCUY/SByRdcKpqvBsqipE8ljYP30xF1lbO+6PDsQQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; Received: from DM4PR11MB5373.namprd11.prod.outlook.com (2603:10b6:5:394::7) by MW5PR11MB5809.namprd11.prod.outlook.com (2603:10b6:303:197::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6609.32; Mon, 24 Jul 2023 21:15:24 +0000 Received: from DM4PR11MB5373.namprd11.prod.outlook.com ([fe80::1127:c109:d888:f6d1]) by DM4PR11MB5373.namprd11.prod.outlook.com ([fe80::1127:c109:d888:f6d1%5]) with mapi id 15.20.6609.031; Mon, 24 Jul 2023 21:15:24 +0000 From: =?UTF-8?q?Micha=C5=82=20Winiarski?= To: , , CC: David Airlie , Daniel Vetter , "Maarten Lankhorst" , Maxime Ripard , Thomas Zimmermann , Simon Ser , Matthew Wilcox , Oded Gabbay , =?UTF-8?q?Christian=20K=C3=B6nig?= , James Zhu , Pekka Paalanen , Emil Velikov , =?UTF-8?q?Micha=C5=82=20Winiarski?= Subject: [PATCH v6 3/4] drm: Expand max DRM device number to full MINORBITS Date: Mon, 24 Jul 2023 23:14:27 +0200 Message-ID: <20230724211428.3831636-4-michal.winiarski@intel.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20230724211428.3831636-1-michal.winiarski@intel.com> References: <20230724211428.3831636-1-michal.winiarski@intel.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: FR2P281CA0137.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:9e::12) To DM4PR11MB5373.namprd11.prod.outlook.com (2603:10b6:5:394::7) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DM4PR11MB5373:EE_|MW5PR11MB5809:EE_ X-MS-Office365-Filtering-Correlation-Id: f78ade33-7299-44fe-f1c3-08db8c8b18ca X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: iRa+9irpUpOX/LmxBviGnEDfzDmiAhALFjmHBZ16RdY5EC4giqdt6ByjdsPk1J2F0VeGfJLcLljfzijTf15dCyuT/0J635javhLQ6y7vFhe/1GR/ZMzj/Vz9rmvp/gUKriqclpdEb6jPQ6tRQ+qCE4FAHOcdDnHICwF3y3GIEt5ojxIFKmuKEYOwvvzCiiCJI92jBUWlwVyzmI4gkuLE1UJPc3MGwirVHlzxjgbWJblQHRBTHUpUhZAefGt+/IgcbuvMrr+hIHVSalU3iwaZRSaj3PM3HjuGCw8YnqzAEieWpgnRR2MfDv2iziZLdhSGxSemrpdIsRHfdPOf4W0dMc8D66edAWVPSUqEAIBpYliOSXXUmrZHtFj2QVy1vbbYIYkJsZzqLziHix7d+181rWPAxKGFPEoep7zf2F5BQhPSUgYjUg4L6KGgiM96IkmSwpMnr+o/FJhDNgtjlcVzycn9y77SJqFEcwg3vg6bw77iPLV1hB9KjP2vpmSsOm8lQBlHIxm3yvwVU4/aE5jlVKBpxyFhn6HcPuRCHheYWwaAfq43dlC9Dj8jRbdcDU68 X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM4PR11MB5373.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230028)(136003)(346002)(376002)(39860400002)(396003)(366004)(451199021)(83380400001)(38100700002)(36756003)(82960400001)(86362001)(54906003)(2906002)(186003)(6506007)(1076003)(26005)(6512007)(6486002)(8936002)(5660300002)(8676002)(7416002)(478600001)(316002)(41300700001)(66476007)(66946007)(66556008)(4326008)(2616005);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?clpUejNwdWdFUTYrZWY0TWxqME9JdmozL0s1T3pNM1dxenQxOVF2MlR6dEF4?= =?utf-8?B?VHdiRWlsOHZhU1kxU3BXYnhwM0ZFSzVVSmdUMURaK2hCRy9RTk1iWllMRGpU?= =?utf-8?B?ZjlFc01EemdwL2poRXoxZWpVZ3dWMVJub3dBQkhIR1Y4OW9iTGtpNDRNZEhw?= =?utf-8?B?aDh2SXdObUR1a3BiUTVpVk9hTnFUU3U1TlFGYkJGdS96RFBwVVR4UzRUdnlB?= =?utf-8?B?Wm5tbmcxb2puSGNjQUxCdDRZS3hxNFkvQmdTNEk4dkxKWlhlU1VCUWE5TnF3?= =?utf-8?B?Wi9TR3hmRXh5ajdxY0RIWDhtVktoOE9obDFtN0liQlZJVjErQjBSbithSzd3?= =?utf-8?B?ZGhjTzJlTVdxcWxjT091ejQ2SUpnMWZLZkRBVEU5Qkg4SldUb0UrQndJOG1a?= =?utf-8?B?Wkl1eldwaEl1ZkMwV3VvSmtlSEUwV2J0VXdmUnI2RCs2ZjJnVldkVTRCaHRp?= =?utf-8?B?TEpoRE84YUZuZDIzbGt0all3TllGSjhDb3hWNkp2RTRGVmw1SUM5dXd6TlMr?= =?utf-8?B?dHkwTXRFRXNVbG85Rk9JRTVHRldwbTZxTTIwVDhGQ1B1SVZzcHQ4YlJucU0w?= =?utf-8?B?N3ZNWGE1a1luY0JXS0M2cGorRSs3S3BkZkJNOVhKSlN4YzhwZTdDU0huK3dM?= =?utf-8?B?RTJXbHhSbDlzY0FOWVBxSFUvaU5jYStuRGhJWjZoOFRMUFZBRVBRN0RseHds?= =?utf-8?B?cjFQck8wNjZJZEE3MGxTaDh2MGY4cGZoSExzY3RST1ZhK1RCcjlWQS9CczUw?= =?utf-8?B?NWNQQ2NONkVDSU4yNW5ua0FVcHNHUTBuOVUybkxPNUkwaFNFWkpwM3QrSWY2?= =?utf-8?B?d29ralJrbWg5ZzlkRnFpMUVUcExXY2tZY0lpRTRLeHAzL0ZkdzVwUUJ5WW9a?= =?utf-8?B?Mk9IUU5ib252amxzNDVKU2toNi9SQ0ZJaW9nV1JqT3J0MVBTekdrQXBwQ05j?= =?utf-8?B?TWlheFhTb2F3a1QyWW9tdnk1VExGRUF5OVNrbW5HazZ6MVFsU055NTVoSXd4?= =?utf-8?B?emp0RlltRG1hb2xseDl2NGRmVFhHRnFLRWt0N2M3NmhFNEI0MmlDQUxFWktQ?= =?utf-8?B?YUU5SFhkMGM0TUg0NlZ3SEh2ZVNTclJURDZoU2kxWXo1YzFqdWxCNGpId3Jx?= =?utf-8?B?Zm5tNGdWN3owZTdDNHd2S3crOGRHWXM1YmsyNm42UEZLU2c1Z0VVRGg2TG5R?= =?utf-8?B?bVlkK0lnSnBuVGx5S09RN1M5OEFMa3hlb1VaWXNUdTNOUWN4MGJ3cFloR092?= =?utf-8?B?eHY0ZmVIQjdmM3J4VS95RWNUQ2RTUG1ZVHdRNjJkcjZIbVIvZXAwaU00eWgz?= =?utf-8?B?MXZSQlBGZm5aVjhPcmN6QUFmVEhWbzBKS0ZqVCs1WExRRithRi84TWVlWldW?= =?utf-8?B?T05WOWpZK1E3OEZ4QUIxNXFMRk4ydFNXQXRqVGtMSXJiUk04dDVnRUN1V2Jp?= =?utf-8?B?aUtsRisrMFdVV0c3aDdCTDNXMWtOYm93ZUpiOWNFbElyNm40WTFaYTlJaHRu?= =?utf-8?B?SzVkZEtKNzhqT3BVK0dMcmUzQm1PbTBaQU5sYXNpK2NGa0FkZ0NQdnh0UkZx?= =?utf-8?B?S2ZCZ1ZRNnhjRWZlL1NyKzk4aFg0UnVWRm5GT3MwQjVabWZYRjZ4UmErdG9u?= =?utf-8?B?dzhSSjIvYXhkd0dtZWJhRHJqN29XQlRXSGFScGE3M3lpOU52RXhSUWliNUxm?= =?utf-8?B?VWJFdWhESlduLzNWZG16UHo3bklhU1UrWHRiNU1ERFZibXF3Wm94eDB3ZG14?= =?utf-8?B?UHVSQ1VPVVVueTNBTUIvZk1aMmFoTWVFZXYrVW9odFhURW8rWm9xNGNwbHho?= =?utf-8?B?Y2NTb1JydHBnb0tKSU44V0F5OUh0ZEFjaGZFcGZjVS8wNEFvUjlNVGZqY0Np?= =?utf-8?B?OXF0THdybDV0QTcxaVZNeTIzNTVISnhaekZ3OWFvM3F2UjdUVk8wMGFEaEty?= =?utf-8?B?dXZxR2NaR0RDVEI1eXJLVnhnQjU4S2tMcTVFZXh0VEhHSmkwdnFFVHVrTi9Y?= =?utf-8?B?SjFHTjh4WWt2clBOTTVaR2pJZGNmNytjODJJVHZYQTNIU1hHQUJCbnYydm85?= =?utf-8?B?Vm5xRnM5OGNRaFhWbFd2dDVDaUxQdW1vbURURmw1QjRrRnB1RlN5RDFFdzZD?= =?utf-8?B?L3d4NUdTZmFoM3h1dlFPZUNxWTdlbXpRbEJodEpXVENuYldtczM5OXczUnFQ?= =?utf-8?B?RWc9PQ==?= X-MS-Exchange-CrossTenant-Network-Message-Id: f78ade33-7299-44fe-f1c3-08db8c8b18ca X-MS-Exchange-CrossTenant-AuthSource: DM4PR11MB5373.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Jul 2023 21:15:24.8348 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: vCui1SnYORZj/kKIzR6zWfUC9rQJc9o+2IS1269RfITFmxYuoFcmqISGkwlpCui5JWdbNTzhEotWVVyUECTqYkXrF3PLWPLMv0/LKSyBT9I= X-MS-Exchange-Transport-CrossTenantHeadersStamped: MW5PR11MB5809 X-OriginatorOrg: intel.com Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Having a limit of 64 DRM devices is not good enough for modern world where we have multi-GPU servers, SR-IOV virtual functions and virtual devices used for testing. Let's utilize full minor range for DRM devices. To avoid regressing the existing userspace, we're still maintaining the numbering scheme where 0-63 is used for primary, 64-127 is reserved (formerly for control) and 128-191 is used for render. For minors >=3D 192, we're allocating minors dynamically on a first-come, first-served basis. Signed-off-by: Micha=C5=82 Winiarski Acked-by: James Zhu for the series --- drivers/gpu/drm/drm_drv.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/drivers/gpu/drm/drm_drv.c b/drivers/gpu/drm/drm_drv.c index 34b60196c443..c2c6e80e6b31 100644 --- a/drivers/gpu/drm/drm_drv.c +++ b/drivers/gpu/drm/drm_drv.c @@ -121,10 +121,19 @@ static void drm_minor_alloc_release(struct drm_device= *dev, void *data) xa_erase(drm_minor_get_xa(minor->type), minor->index); } =20 +/* + * DRM used to support 64 devices, for backwards compatibility we need to = maintain the + * minor allocation scheme where minors 0-63 are primary nodes, 64-127 are= control nodes, + * and 128-191 are render nodes. + * After reaching the limit, we're allocating minors dynamically - first-c= ome, first-serve. + * Accel nodes are using a distinct major, so the minors are allocated in = continuous 0-MAX + * range. + */ #define DRM_MINOR_LIMIT(t) ({ \ typeof(t) _t =3D (t); \ _t =3D=3D DRM_MINOR_ACCEL ? XA_LIMIT(0, ACCEL_MAX_MINORS) : XA_LIMIT(64 *= _t, 64 * _t + 63); \ }) +#define DRM_EXTENDED_MINOR_LIMIT XA_LIMIT(192, (1 << MINORBITS) - 1) =20 static int drm_minor_alloc(struct drm_device *dev, enum drm_minor_type typ= e) { @@ -140,6 +149,9 @@ static int drm_minor_alloc(struct drm_device *dev, enum= drm_minor_type type) =20 r =3D xa_alloc(drm_minor_get_xa(type), &minor->index, NULL, DRM_MINOR_LIMIT(type), GFP_KERNEL); + if (r =3D=3D -EBUSY && (type =3D=3D DRM_MINOR_PRIMARY || type =3D=3D DRM_= MINOR_RENDER)) + r =3D xa_alloc(&drm_minors_xa, &minor->index, + NULL, DRM_EXTENDED_MINOR_LIMIT, GFP_KERNEL); if (r < 0) return r; =20 --=20 2.41.0 From nobody Tue Sep 9 07:31:48 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 21547C0015E for ; Mon, 24 Jul 2023 21:15:59 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230472AbjGXVP5 (ORCPT ); Mon, 24 Jul 2023 17:15:57 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:49622 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231129AbjGXVPw (ORCPT ); Mon, 24 Jul 2023 17:15:52 -0400 Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 8A7B71BD1 for ; Mon, 24 Jul 2023 14:15:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1690233333; x=1721769333; h=from:to:cc:subject:date:message-id:in-reply-to: references:content-transfer-encoding:mime-version; bh=ObQZPnTgYJctsRRFRwsoPbyiHauT+kzDucv7KMJN27k=; b=OQBXO8TIp4IU+aiCcxhXMHx8UzUj/ezh+CQjZ1He2CkVOB8KFZKhcKQS MQAJnYKn2C/QGNu2yWysESBVAFnTkCL3xDOwPAtuFUfApt5wxkz+OPI5N EMt2Jly8WAr7j8+oJfHDMr2YsfgQDbR9PbSlLRT+Z4I7jxy4TVIATzgc/ 4roXJdK00jnPWIK2dfpVBPz+NkLQrnrDUWUcVyn1xs40NQqK8xVVNTmLl slr3gj5XEoHGERDQGRbkAOly+OHjLHz2f9dLuTonvyPX2GywXDEbe7IYL sxlBJi7usparvadHC8moQb0Xm3Cd/SlKQqWKKRl0LSaRviG1R/yLV5o1S w==; X-IronPort-AV: E=McAfee;i="6600,9927,10781"; a="365014834" X-IronPort-AV: E=Sophos;i="6.01,228,1684825200"; d="scan'208";a="365014834" Received: from orsmga005.jf.intel.com ([10.7.209.41]) by fmsmga102.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 24 Jul 2023 14:15:32 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10781"; a="899660532" X-IronPort-AV: E=Sophos;i="6.01,228,1684825200"; d="scan'208";a="899660532" Received: from orsmsx603.amr.corp.intel.com ([10.22.229.16]) by orsmga005.jf.intel.com with ESMTP; 24 Jul 2023 14:15:32 -0700 Received: from orsmsx603.amr.corp.intel.com (10.22.229.16) by ORSMSX603.amr.corp.intel.com (10.22.229.16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.27; Mon, 24 Jul 2023 14:15:31 -0700 Received: from ORSEDG601.ED.cps.intel.com (10.7.248.6) by orsmsx603.amr.corp.intel.com (10.22.229.16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.27 via Frontend Transport; Mon, 24 Jul 2023 14:15:31 -0700 Received: from NAM10-BN7-obe.outbound.protection.outlook.com (104.47.70.103) by edgegateway.intel.com (134.134.137.102) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.27; Mon, 24 Jul 2023 14:15:31 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=oA9rcH3JA8NnjP0JNMNfW6OJ0RmtLTLIUN+raHJoKOlfx3K3p97O6E0ucODaAxzePSb8on73FPve7QXPosqT3LFYVZ8yIy9R2u2aht90XRCze0SfJCaO2VcIaCk+5KpfPXIHVQ/c/x78pGBsIjsKYZvZv8sck7s2MnvR+Ufg2y3rrt9mI9qa7ZJidezyfOTIEcjqqMh2eYpis5DiI/A0MTmQC6JN4Da3vQnBjbKMOzpIuv/cHJNqBiZLsxQhz/MCBd62r/RiHeH8A/MD300hLqG8pADO33i4L7PLMBmPGjNAIqpsqBhjsXIyvzJL95HlkUR32vcOPoBNSANLrgbFQA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=p0RJm4ACZ5sQ7/Kawds8GvOcxSjjtxeRPVodKaexpq0=; b=DnXr948wRYYCzCCtr7F0WfPev+LjoSUctlpOOlwGwRG04kJ3ukKXpnDq6vfkKEsq0NfNjpfDEoTGOl5Tavo9eJp59dZg7taJerC+oxQH6qqRFTMd/+fIH7IQW6FQ58GY48W8JKusFZ2PPGr0/mGduXOAM71RdrDBFxqO/x8sWfBAWDMrulylew/ZeQvHVodZSp/ypYjGY3l9XYpm8fpbA2JhyIjcGef8hfP6N8iXNsddME2Y14FLwfP+AN3vYG1TJ9CSf8I45jG90F8KDdHzWQmKjLkjedBHKQcxyOCv5fdWLYDR/rdXnwo4gf+hkXBpKoofxK6js85vbI3HMvqkLw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; Received: from DM4PR11MB5373.namprd11.prod.outlook.com (2603:10b6:5:394::7) by MW5PR11MB5809.namprd11.prod.outlook.com (2603:10b6:303:197::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6609.32; Mon, 24 Jul 2023 21:15:29 +0000 Received: from DM4PR11MB5373.namprd11.prod.outlook.com ([fe80::1127:c109:d888:f6d1]) by DM4PR11MB5373.namprd11.prod.outlook.com ([fe80::1127:c109:d888:f6d1%5]) with mapi id 15.20.6609.031; Mon, 24 Jul 2023 21:15:29 +0000 From: =?UTF-8?q?Micha=C5=82=20Winiarski?= To: , , CC: David Airlie , Daniel Vetter , "Maarten Lankhorst" , Maxime Ripard , Thomas Zimmermann , Simon Ser , Matthew Wilcox , Oded Gabbay , =?UTF-8?q?Christian=20K=C3=B6nig?= , James Zhu , Pekka Paalanen , Emil Velikov , =?UTF-8?q?Micha=C5=82=20Winiarski?= Subject: [PATCH v6 4/4] drm: Introduce force_extended_minors modparam Date: Mon, 24 Jul 2023 23:14:28 +0200 Message-ID: <20230724211428.3831636-5-michal.winiarski@intel.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20230724211428.3831636-1-michal.winiarski@intel.com> References: <20230724211428.3831636-1-michal.winiarski@intel.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: FR2P281CA0132.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:9e::6) To DM4PR11MB5373.namprd11.prod.outlook.com (2603:10b6:5:394::7) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DM4PR11MB5373:EE_|MW5PR11MB5809:EE_ X-MS-Office365-Filtering-Correlation-Id: f9106c75-42f6-481f-0320-08db8c8b1b64 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 460Li8QNaRhIJlVVYiATDiKjl/mPbHsjsyopBhK+tkMbQm7crmN7p/gxqjuSdyEv3pT9IUJJcsVFjZBdFiMJnHNP9zJMFeECl7zs1Ycve8EVNjYIXgFBpznxHMuHM/gte8gnHRK5e4WGpQBiPKH7pKbvDDK2gnLXPW+bx8cxjreoIgYsIos8iNQ/q+91NhZ0LjYgvWYL3BeqjQJ9vA04qXIcwIzykufacw3R184gC8m3L3FDAK3n+f9gS1XEgP6G9mfQH9aykQPHVJQCr/xddVdFvV1jC3sg/bKo1bguczZ8eQ/vPvbhq/OdFT03uO8pOPwNSCS8J3Y3/Wi/06E0occ+vfLc43U4eeYujs3ZsogidLBt4uKKwWfVP8EF+mrqBss6rDjGFYJ1YsAAsE1NVyM8p7fXsvH54LnIrILubG0nMTLSACGvbheh1eM6S0IvJyhLh2MlIEDCsSdz3+ucnEzFauQ6YvrqsxouEgDDbOAt60VdVQxMqB8YdIDBBZQcpjP8tKShybk2dGja87vCUsfPYKn5Nypaw+FbmhVh131FhuM3CvICP46YX9iTo0ND X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM4PR11MB5373.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230028)(136003)(346002)(376002)(39860400002)(396003)(366004)(451199021)(83380400001)(38100700002)(36756003)(82960400001)(86362001)(54906003)(2906002)(186003)(6506007)(1076003)(26005)(6512007)(6486002)(8936002)(5660300002)(8676002)(7416002)(478600001)(316002)(41300700001)(66476007)(66946007)(66556008)(4326008)(2616005);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?YVdQK1c4NFR5NWgrZTJWbDNGRXN5UTFQVDcrZWkzSXd5NUpELzJyczR6ODA4?= =?utf-8?B?UFhHMjVXb1NabnZvUmNnNG5FbENGSE1zak40Y3N5eGJ6TVNyQkVPMEpJWm5J?= =?utf-8?B?MHhJSmtBV2VDSURiVjNWcjhGZEFOUC92ZDdxRmc5T0hIWlpYdU0zOGRaWUIv?= =?utf-8?B?RUVrekFNMDdUOTVwaEF0SDlnZk1ReUhHVGRFYTdlTFhSbHdCRFdqbFl4K2g3?= =?utf-8?B?TGNudjEzVW0yZWNodVdmUEdBWDJ6cVRyU2cxNGxYLyt1K2dWVVdSN1g3YmRC?= =?utf-8?B?TUIxYU5PdlVWaGI0eWR3ajZ1M0w1U1RjMEI5bjZ2cFN1YXVwV0FsbDZYcjFJ?= =?utf-8?B?WTBrS1NMZHpHaW1HR1ZNVUF5L3dDU21EOEhoQ1pjWEZqekFzaGo3cVl4YVpV?= =?utf-8?B?UDJLbytCYk0rU1BaWHdXVGVyazZXcjN6b3RSYml2bzBDb0JDMnRqUXdjVXhk?= =?utf-8?B?anBVQVcweW1hcElNRG5iWlU1MVp6aWJWajhTbHdEUU9IRmd5VVFlYytGWEJo?= =?utf-8?B?VUZOdGVMdENsUzFDbmVpQVpUeXlIbXJwQkZ3OFZHN1VLNFRoVVI4OUVwTjR1?= =?utf-8?B?dnd5SnlWYzBiZzZSdE4vZEcvaUJIbExMb1NXVnozYWk2LzFFMlkzMWs0c3Jz?= =?utf-8?B?SS9pdjhUMTZiZmZja2pIb21JZU1hZ0EvVnVMTWVTTEk5bi9XTXIzdDJpKzQz?= =?utf-8?B?ZzBuVW1wTENtMlkvbTY5Um1wY2ljbmMxbnFCcHZiQjBLa254ZStmNEVQZ1BQ?= =?utf-8?B?RGFWQndKcFp2YjFUS1ZLUkpFNmhIekRhTzRQclRIMVpLQ2UvcmJZN2ZTUW1s?= =?utf-8?B?N2IwckpIU0NIVTRPOVp5STdwQjVsSG83VmQyeW9VY09aWTdaZVZpZ2Q0RFR5?= =?utf-8?B?bXhqaldHaW90N0I3dzJ3VGNUNHNobzl2KzFPRUNMRnpqbkxsbUUxTk1tdWlG?= =?utf-8?B?d09DSHFVSE5SQWg4WUgxbkdyZkRhelJmaTZrcE52S1AxQkdnVXpyL1IwYnAv?= =?utf-8?B?NHQrOGM5OHdaQy8zT1VDU2ZHcDBWZXRtMHJDaVNwMGpXQVVSbmt5Qk5CWXFx?= =?utf-8?B?RVg3d1lVYzV1bitWdkI0TFlZaWMyMHBvaGxoTEFnZEtoRlBBQUxxYjQwbHJx?= =?utf-8?B?bFNKL3grNVlWbHl3eXNNc3NsUzdqNjNHaCszTHY3RmlleGMwa2RJSFBHK3Ay?= =?utf-8?B?aUdYZUh2OEs5bGZ2V1pBV0lMbzNwZ21Bd2hiRjR4elNuczBEcFM1VnBENEdE?= =?utf-8?B?bHZqcUFmNXJpZDVzellyR1hCWFhGclhIa2YxeTRRNDlZTW5iaUhrTzNnNWxW?= =?utf-8?B?ZE9WRWZld1h1TnV3djJISnUybGlGdEYvNkpBYnp5TE80cVV1YWlQeHlSRG5B?= =?utf-8?B?QUtrZjRkNlc3cGlqNlZ0bWRXaExBN2VhUnhhRkV2ZGZkYWJuN1Q1a0NpRnFD?= =?utf-8?B?YzBCc2RmZ1dKeE1mU2NYdllwS2JEOFRqbjJFYUE1QzlIaW05cGtXcW9DL0Rp?= =?utf-8?B?aTdhTmR4UzBNaC9UaHlYbU52U2NIekZ6eXZMeXFOUDNjQmo3WG94YzU4REZP?= =?utf-8?B?VzlNRHY3NjgrN2I1ZndzV0U5b2gycjdkcjFBbDFDZEhHOEdJQnlWc0g0OFUx?= =?utf-8?B?cDlKMVNCRjBEemRmS0w2Ukg4eThnR3ZVS05OK3NVV2hhWm1tQnBPRmtxV3Vs?= =?utf-8?B?MHp3U3YyQVN4UmQ3bTloc2g3am0vYjBkaHhSTUxqaVUzRmRGblp2NnIrR2l3?= =?utf-8?B?azQzUEdhWUlRVVBDYitkUVlzRlgvblJ2Q3lZUFFqcDNNUTYxRnowZVBCR29M?= =?utf-8?B?bGlUWmtLcUVYSG1tVFJKVlI4SUdsMllMUGQ5dGNQQVhMUUM2OUJ5MjU3dEZ6?= =?utf-8?B?eGRBbmFPVTVrM3lEVmRSdG9pUjlJQ2J3SkVFK3FzTDR2STAxRG5YSzVOakdp?= =?utf-8?B?RkJTWVFFeWM0YnNFZm9YSk91cXIvZDFFNXA1ZmQ1S3VOeG9JQzlzSmllRVQ5?= =?utf-8?B?YUxKc0ZMcHNJT1FxRlliYlcvQWZ1MktaRUxjWENLa1Q3ajk1Z0VTeHYxMzFw?= =?utf-8?B?TjN0SFJJMlBmK3lkK1A3YklJMEYrcGZHbWRiaFRwenluUnB1TVJERnYwczB2?= =?utf-8?B?VUtac0VIa0tLWnM3bTlhNlJPN0RzM3c4Q1NhcnlaN0x1MlhZRG04Smw3TVlh?= =?utf-8?B?ZkE9PQ==?= X-MS-Exchange-CrossTenant-Network-Message-Id: f9106c75-42f6-481f-0320-08db8c8b1b64 X-MS-Exchange-CrossTenant-AuthSource: DM4PR11MB5373.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Jul 2023 21:15:29.2023 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: UA/g8e58F49tcl/CsOVYBMorCL2mo3kzePvE0frBw5NNXnrGFixDsOn75g5nOzDNbzqkkXTvkQ8lmXJFeV9Um8ugr9LI7I4lGBtF+RYuYv4= X-MS-Exchange-Transport-CrossTenantHeadersStamped: MW5PR11MB5809 X-OriginatorOrg: intel.com Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org While there is support for >64 DRM devices on kernel side, existing userspace may still have some hardcoded assumptions and it's possible that it will require changes to be able to use more than 64 devices. Add a modparam to simplify testing and development of >64 devices support on userspace side by allocating minors from the >=3D192 range (without the need of having >64 physical devices connected). Signed-off-by: Micha=C5=82 Winiarski Acked-by: James Zhu for the series --- drivers/gpu/drm/drm_drv.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/drm/drm_drv.c b/drivers/gpu/drm/drm_drv.c index c2c6e80e6b31..ef6d7b498784 100644 --- a/drivers/gpu/drm/drm_drv.c +++ b/drivers/gpu/drm/drm_drv.c @@ -57,6 +57,11 @@ MODULE_LICENSE("GPL and additional rights"); =20 DEFINE_XARRAY_ALLOC(drm_minors_xa); =20 +static bool force_extended_minors; +module_param_unsafe(force_extended_minors, bool, 0400); +MODULE_PARM_DESC(force_extended_minors, + "Don't allocate minors in 0-192 range. This can be used for testing use= rspace support for >64 drm devices (default: false)"); + /* * If the drm core fails to init for whatever reason, * we should prevent any drivers from registering with it. @@ -138,7 +143,7 @@ static void drm_minor_alloc_release(struct drm_device *= dev, void *data) static int drm_minor_alloc(struct drm_device *dev, enum drm_minor_type typ= e) { struct drm_minor *minor; - int r; + int r =3D -EBUSY; =20 minor =3D drmm_kzalloc(dev, sizeof(*minor), GFP_KERNEL); if (!minor) @@ -147,8 +152,9 @@ static int drm_minor_alloc(struct drm_device *dev, enum= drm_minor_type type) minor->type =3D type; minor->dev =3D dev; =20 - r =3D xa_alloc(drm_minor_get_xa(type), &minor->index, - NULL, DRM_MINOR_LIMIT(type), GFP_KERNEL); + if (type =3D=3D DRM_MINOR_ACCEL || !force_extended_minors) + r =3D xa_alloc(drm_minor_get_xa(type), &minor->index, + NULL, DRM_MINOR_LIMIT(type), GFP_KERNEL); if (r =3D=3D -EBUSY && (type =3D=3D DRM_MINOR_PRIMARY || type =3D=3D DRM_= MINOR_RENDER)) r =3D xa_alloc(&drm_minors_xa, &minor->index, NULL, DRM_EXTENDED_MINOR_LIMIT, GFP_KERNEL); --=20 2.41.0