From mboxrd@z Thu Jan 1 00:00:00 1970 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 gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 9A0C3EE021A for ; Fri, 15 Sep 2023 04:36:43 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 5431C10E0AD; Fri, 15 Sep 2023 04:36:43 +0000 (UTC) Received: from mgamail.intel.com (mgamail.intel.com [192.55.52.88]) by gabe.freedesktop.org (Postfix) with ESMTPS id B759010E0AD for ; Fri, 15 Sep 2023 04:36:41 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1694752601; x=1726288601; h=message-id:date:subject:to:cc:references:from: in-reply-to:mime-version; bh=PAx13pem2qC47ykA1Aa7o2MeXCT7+fWMgCdRi221MXo=; b=IlzPSZr8MXapa71NF6pcujwYzlU4J0u7ZkNgbHVz6Ny2PyI+Do5ZXKTU 0ev6rUwT1ztTKh9bBCkO0b8eEfg9Dz2cwGIgSkjIaZcJu7goE0wHhn4xV m3GLyuPenfrwQtQuf7PWDGp+Nm5lO1xBmBSEYM+j+8+yOaPqGmv3iw5OO xXAkKXD1MB9Kk2JGeWz2emzr1BKK3dhd4U6nfLv7+I+tj8KOHc5cqU8T4 3bRrf/Nz4V7JH52nxDtOT4e76V0MlCts6+u8kRBD8cRzXWrV0vPZodn1s NK+vSv7C6s57aLFaNkpnPGc/Y18KkR2i8L/FYgbqSzLemhZ+kRqjBH6Uq Q==; X-IronPort-AV: E=McAfee;i="6600,9927,10833"; a="410094148" X-IronPort-AV: E=Sophos;i="6.02,148,1688454000"; d="scan'208,217";a="410094148" Received: from orsmga005.jf.intel.com ([10.7.209.41]) by fmsmga101.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 14 Sep 2023 21:36:40 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10833"; a="918508631" X-IronPort-AV: E=Sophos;i="6.02,148,1688454000"; d="scan'208,217";a="918508631" Received: from fmsmsx601.amr.corp.intel.com ([10.18.126.81]) by orsmga005.jf.intel.com with ESMTP/TLS/AES256-GCM-SHA384; 14 Sep 2023 21:36:40 -0700 Received: from fmsmsx610.amr.corp.intel.com (10.18.126.90) by fmsmsx601.amr.corp.intel.com (10.18.126.81) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.32; Thu, 14 Sep 2023 21:36:39 -0700 Received: from fmsmsx611.amr.corp.intel.com (10.18.126.91) by fmsmsx610.amr.corp.intel.com (10.18.126.90) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.32; Thu, 14 Sep 2023 21:36:39 -0700 Received: from fmsedg601.ED.cps.intel.com (10.1.192.135) by fmsmsx611.amr.corp.intel.com (10.18.126.91) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.32 via Frontend Transport; Thu, 14 Sep 2023 21:36:39 -0700 Received: from NAM12-MW2-obe.outbound.protection.outlook.com (104.47.66.44) by edgegateway.intel.com (192.55.55.70) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.32; Thu, 14 Sep 2023 21:36:39 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=On/5RSGTZV0EgQrZL5sScJZASpIaJJktyVTVdBrqtUF4RjbzuATLeVH4t9aG7F+R1EHK7O3sJ6MXrR+6QhN+ipekBAh7MrjhsQJGMxinoZL/kidOm3nLqwv4zEJVTfUMul4dIM+Eq+Dg/kFWFBGkzaxwZb82fPqniRr5LLM0zlwZsPqH1kpFswHq5kHPS1L0gsxh5URWZiJpv7RBH6xpC1Jz8aeD4A54P9VHn647FHch2ZCiQAMhvF4FOVtPvb6urLao2DT/IYoErjfpWet5i3Ppo0+hDcvrYTFIG13KUfAVo+8QOEvBf/lLXtpLzko9uD8mjI/ccR0N5OHQH3tu/A== 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=fzPopJ+2KoNx39Ntc3C8F8DPLEV33hgWL2dTvzFzCag=; b=JLaZ5HF6fGY1kYKTwDK0TIqxChosOmQl1Ny2kHnCY3pVJ5tv5+5dJy733wR+1dLFWpWHRWVuoO1FC7bfP+WDaIN9ksq9Q1GuUp7YdqCwD3k4LjLY7ZINnMhgEw91aXCqpnGMh7VqdC/6ZHFHW8scWkMrdjVQmFJl7KfS3h8RPMlgrJLdnzCFeNF2YB5sTDHDLIsoKfZHYwp+MaeUdkp3EvKcSoVMV706MGS7unFxLMIt2n2z5ViKqMEQdyJGmN1zt612eY1/hYY+uE6JZZobMEOQX/ql9agkzLaDeODX+mZLTyRx+q3ljiHJIKdvW37UgAzASDHUsw1aBZJnx0w3Lw== 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 MW4PR11MB7056.namprd11.prod.outlook.com (2603:10b6:303:21a::12) by BY1PR11MB7981.namprd11.prod.outlook.com (2603:10b6:a03:52f::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6792.20; Fri, 15 Sep 2023 04:36:37 +0000 Received: from MW4PR11MB7056.namprd11.prod.outlook.com ([fe80::1ed2:437d:1d6c:da25]) by MW4PR11MB7056.namprd11.prod.outlook.com ([fe80::1ed2:437d:1d6c:da25%6]) with mapi id 15.20.6792.021; Fri, 15 Sep 2023 04:36:37 +0000 Content-Type: multipart/alternative; boundary="------------bE0H07WtDBbsLOrhciTUujwu" Message-ID: <394f1906-bf6e-4cdf-80fb-6c21bd5f0058@intel.com> Date: Fri, 15 Sep 2023 10:05:46 +0530 User-Agent: Mozilla Thunderbird Content-Language: en-US To: Tejas Upadhyay , References: <20230914121909.3860392-1-tejas.upadhyay@intel.com> <20230914121909.3860392-4-tejas.upadhyay@intel.com> From: "Ghimiray, Himal Prasad" In-Reply-To: <20230914121909.3860392-4-tejas.upadhyay@intel.com> X-ClientProxiedBy: BM1PR01CA0143.INDPRD01.PROD.OUTLOOK.COM (2603:1096:b00:68::13) To MW4PR11MB7056.namprd11.prod.outlook.com (2603:10b6:303:21a::12) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: MW4PR11MB7056:EE_|BY1PR11MB7981:EE_ X-MS-Office365-Filtering-Correlation-Id: f4b8784b-3f9e-4401-b6fb-08dbb5a558a3 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: ABAObSkqC1l84kejf6LjCQs/eFXN8kKPcHmIFHtB1WSI60c+ko/r9YcFtLwabFhKtIPpI+n2FuJnRJp3vVWa2zkfoMBQN9cdmZaJ+IERlVvbJoq3irN97S22VgvrMA8wcniCfjJgqQhH/roRThJGlju2Nmx2BUXikolfBM/0bC2cAITDvrXm2xdXpE+u2NtX+F/KuyP6xfm/ggLCH6ID4Uh26DoNpzfYARNC7Q7qmPUJyp+Z/iTPZP8SAXdUo2tykb50A9gGmBv1pI+eJxTUVic1tspgXYFs/z3tkL7ffv7GDU87QLhf9mtqONBHpe0O0bPxmhyzc3yFj5kWnnB9EZVW7haf0RDGLZsr74kaDqtY7uJ2l2fEkRKrt6GiXDvOamE0SvBf6Ug95tEYsaoIsyZRU3mWpUJn7Bv2u4TafssmfRshcBvf3DsqtZDa1I4re6uN5oHzxDEG6k5VYOzS5MV2CH0AowSJJgaVWNzz9nfLeVide1vgr6LN4F4CC++GmwOhZ1KEP5/a2nYtaK1M4BHo7H4dDOegz0wfR3qAqCOD/i5tFKaZ9gjWXGy91rHUKztAdzXh2I2jshioQF/XvSMWnE9CRze1SNNQH9Yh7hvRxqECertoPcHXKbuIc2CdB3wuXYPqJKHMFQdWV07Hvg== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:MW4PR11MB7056.namprd11.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230031)(136003)(346002)(376002)(39860400002)(366004)(396003)(186009)(451199024)(1800799009)(31696002)(30864003)(31686004)(83380400001)(6486002)(6506007)(33964004)(6666004)(82960400001)(4326008)(86362001)(8676002)(8936002)(5660300002)(2906002)(26005)(66476007)(66946007)(107886003)(66556008)(6512007)(478600001)(53546011)(38100700002)(41300700001)(316002)(36756003)(2616005)(45980500001)(43740500002)(579004); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?MFpaYVRPS2VMdEdtYVhUM09BMkxVSVdWZ1oySFhPNytHbFFTenk4U3hPL3F5?= =?utf-8?B?NXp2Nms2Tk85V253Rk1uTW11ZEYzT2tPYkZKN2FFWUkzVnFDdkxoTmxVSG1N?= =?utf-8?B?ZEpaUHR3YUxpS21obnVQQkR3R3NiNEM5Y1lYQTdvTjNnOXM1S0FhL1drMTdX?= =?utf-8?B?WnlaZnFBeC9xM0lUNlc5U2Rka1hUZWVzVlM4STJFaVVVZUFqOThTcXZWWWZP?= =?utf-8?B?OUtydDFYYUZ2a2dIem1icDBPTklUb0kyMkE2ZmxnQis5akFSSy9qd2M4dHBU?= =?utf-8?B?V2RhV3dleXMzTlNnNkFjQzJUR293K3ZYYUNaWVhNemxIZVNPYWNaK1Mxamxs?= =?utf-8?B?VmJ0UTQraElheEd4dnY2djNjbndVUnNvZHZJZmlZY09IUWRyanpsc0l3NUtQ?= =?utf-8?B?dW5FWVVXbTl1dHJPV290elV1czIxSFY0bm5USW53QkkzL3FId0xsZ1d3Uno0?= =?utf-8?B?NEN2L3laTVRDa0ZNMjBqY0o3U1JOMmxDek1Qdjd5NWNxeEhSbDEzdWFIV1Ez?= =?utf-8?B?c2V6d2gzeTZoa21GZkd5KzlGd0RSQTlWbmdEVk5MNFdhSW1CZExMcHVMRmUz?= =?utf-8?B?ek5CbzdHaWRYYnB2YWVpU3pnK3NhRWw1MllxR2dLMzdHWDNCS1FWNGUzS3B5?= =?utf-8?B?S3NsL1ZXNkpqU2tlU1hHQjFRa3M4NFpteFE4Z256MVFXM3hka3U1L0ZmZjF3?= =?utf-8?B?UDdyeWZaQkx0cURRUEVEZjRDa0NSaWpXaG4xYjdqWTdvNmcxMi9TSEdiQVVJ?= =?utf-8?B?bzNyNEk4VGlBNXpVM2tRN2MwYjNPZzZGSjZxTkRyTG96L09aM0x1UDRFUDFa?= =?utf-8?B?RGRnVUxKT2dkSklnN1hjc0h5SjgrZVc4ZHgwWWt3RGJObWsrUzhWY1hJQ0FO?= =?utf-8?B?bWV3L0JHK3liM3lFWkU1SHFMTUxXQlpyM3ZKT0RCeDAxR3lvOENsYkhJVHA4?= =?utf-8?B?OWxLcmJOOWJKNVdpSGZHamQzaEVWcHNhd2hCclRySEppLzE5Wko5U0hFUmc1?= =?utf-8?B?S0M2d2VPNklsVjNlVXFyQkV1bTQrR0ZpdHZqMGU5cHAzUGF1LzRvM3JaVWlW?= =?utf-8?B?NU9RQmNpdnUwdGNxUnJ2T3VpS3Z5dDgxRUs1c2RSV0poYVRyb3lhcmUxRTlR?= =?utf-8?B?UktQUjlWZkwvVmVpNjBvV0pLV2IvK0RDRHFkWXpiZGlCN0MvbElCNGYyMmdp?= =?utf-8?B?bExMZGYvMzF2Wk1QRXZzVllVNDV5VmUvMU50N1VLWFNXWSthZUxHaW1GMDVN?= =?utf-8?B?RElyaFhXcDdMOE5RWUlISTZaMnZZZStPbmZ0WUNoY05jSjlNazAwZWdDOGQ4?= =?utf-8?B?OVl2a1pwQjZiZmI4aklQZHNFT0wrZ0R2Qnhmd0xzam12VWtOMFVOWHhtVW5L?= =?utf-8?B?emJaTmN3ditSdjJWN3ZUa0JjczdaYVhDdThoSlNaemlpSzRhNTFjR005YSts?= =?utf-8?B?Rm1BQnFZUUEzNXc1aG9YekdNTDRmbXFvS2J4TWk4Ylo1bzgreisydkpBS2FL?= =?utf-8?B?R3NxZGQ0Z2NUVThnYTU2RUJtc0oycjkxRWdGR0pSMlEzZWNxZnlMbDZJY0Rn?= =?utf-8?B?Q3F5WnVBdFhFdGNaVVhSVXNDcTZ0TE13M1F6V2cwT3lPY1hLZG9DUUU3RHJq?= =?utf-8?B?OENiRElyR0xWdnZMeHNqcU8xQVZrUDh4NzJ6UTNRSWhLU0Q4M3BZOXBBQmJF?= =?utf-8?B?MURkaDMxKzR2Ty9VY2N2QURlcUVrQUZrRkJQUk8xZXVOYko2Yjdjc2w0YjJV?= =?utf-8?B?Z2t2WTcrSWcxd1VGcXNZSDVGMjlkWHRXNW5VYWpJOFd6U3RMaGZaUDlOVHg0?= =?utf-8?B?S0lZRnVJbG9wQ1Qxb3UrKzVoWmJKWjhvV3c5RVdWbVNCME1ZNGZXSkFRblNa?= =?utf-8?B?eSszMnlzK0VnWG9qTVltUTk5MmRzSmc3NzlOam5SbHRtUnJRVzd2cUlXL3BO?= =?utf-8?B?dmJDbWcrNDd0TDVIM2RFR01zWW0zb1hSQlRSZUhteTd3RmVYSDhqY20rMlNy?= =?utf-8?B?TlRGVDJadlkzcmxYcFZKb04vQWRDS0xnMTg5S3lhRm4rdU4vNHRsWk9veTNs?= =?utf-8?B?a0ZsWE83VUpFa1ZMc1dTMGJwVE9kVytKczgxczZZT0YxamVXYVB3VExocnFG?= =?utf-8?B?dFBQb2MwM0tIMHlkdG9uN1RjQWZjaWtRNjFmMU40eTJGK1NDMjdQdXQ4QTRj?= =?utf-8?Q?lPMv9CfpiMfD3RubY96ytxM=3D?= X-MS-Exchange-CrossTenant-Network-Message-Id: f4b8784b-3f9e-4401-b6fb-08dbb5a558a3 X-MS-Exchange-CrossTenant-AuthSource: MW4PR11MB7056.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Sep 2023 04:36:37.1009 (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: IWxEBvBlMX1Kb1xzkPvAaQn4kLbmX7du1tQcuYE0IujNGdncunZDcHsR8Yik9ghLVF83iXfb/CjiuumogTjYEzmUow2Kjnwrro+tBJT1mtA= X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY1PR11MB7981 X-OriginatorOrg: intel.com Subject: Re: [Intel-xe] [PATCH V3 3/7] drm/xe: Add tracking support for bos per client X-BeenThere: intel-xe@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Intel Xe graphics driver List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-xe-bounces@lists.freedesktop.org Sender: "Intel-xe" --------------bE0H07WtDBbsLOrhciTUujwu Content-Type: text/plain; charset="UTF-8"; format=flowed Content-Transfer-Encoding: 7bit On 14-09-2023 17:49, Tejas Upadhyay wrote: > In order to show per client memory consumption, we > need tracking support APIs to add at every bo consumption > and removal. Adding APIs here to add tracking calls at > places wherever it is applicable. > > V3: > - update .h to return xe_drm_client_remove_bo void > - protect xe_drm_client_remove_bo under CONFIG_PROC_FS check - Himal > - Fixed Checkpatch error - CI > V2: > - make xe_drm_client_remove_bo return void - Himal > > Signed-off-by: Tejas Upadhyay > --- > drivers/gpu/drm/xe/xe_bo.c | 9 ++++++ > drivers/gpu/drm/xe/xe_bo_types.h | 10 ++++++ > drivers/gpu/drm/xe/xe_drm_client.c | 51 ++++++++++++++++++++++++++++++ > drivers/gpu/drm/xe/xe_drm_client.h | 26 +++++++++++++++ > 4 files changed, 96 insertions(+) > > diff --git a/drivers/gpu/drm/xe/xe_bo.c b/drivers/gpu/drm/xe/xe_bo.c > index 27726d4f3423..040117213ac8 100644 > --- a/drivers/gpu/drm/xe/xe_bo.c > +++ b/drivers/gpu/drm/xe/xe_bo.c > @@ -16,6 +16,7 @@ > > #include "xe_device.h" > #include "xe_dma_buf.h" > +#include "xe_drm_client.h" > #include "xe_ggtt.h" > #include "xe_gt.h" > #include "xe_map.h" > @@ -1054,6 +1055,11 @@ static void xe_ttm_bo_destroy(struct ttm_buffer_object *ttm_bo) > if (bo->vm && xe_bo_is_user(bo)) > xe_vm_put(bo->vm); > > +#ifdef CONFIG_PROC_FS > + if (bo->client) > + xe_drm_client_remove_bo(bo); > +#endif > + > kfree(bo); > } > > @@ -1231,6 +1237,9 @@ struct xe_bo *__xe_bo_create_locked(struct xe_device *xe, struct xe_bo *bo, > bo->ttm.priority = DRM_XE_VMA_PRIORITY_NORMAL; > INIT_LIST_HEAD(&bo->vmas); > INIT_LIST_HEAD(&bo->pinned_link); > +#ifdef CONFIG_PROC_FS > + INIT_LIST_HEAD(&bo->client_link); > +#endif > > drm_gem_private_object_init(&xe->drm, &bo->ttm.base, size); > > diff --git a/drivers/gpu/drm/xe/xe_bo_types.h b/drivers/gpu/drm/xe/xe_bo_types.h > index 2ea9ad423170..1a898528deeb 100644 > --- a/drivers/gpu/drm/xe/xe_bo_types.h > +++ b/drivers/gpu/drm/xe/xe_bo_types.h > @@ -45,6 +45,16 @@ struct xe_bo { > struct ttm_bo_kmap_obj kmap; > /** @pinned_link: link to present / evicted list of pinned BO */ > struct list_head pinned_link; > +#ifdef CONFIG_PROC_FS > + /** > + * @client: @xe_drm_client which created the bo > + */ > + struct xe_drm_client *client; > + /** > + * @client_link: Link into @xe_drm_client.objects_list > + */ > + struct list_head client_link; > +#endif > /** @props: BO user controlled properties */ > struct { > /** @preferred_mem: preferred memory class for this BO */ > diff --git a/drivers/gpu/drm/xe/xe_drm_client.c b/drivers/gpu/drm/xe/xe_drm_client.c > index 98c8a0cf2f56..7abc1db1dc9c 100644 > --- a/drivers/gpu/drm/xe/xe_drm_client.c > +++ b/drivers/gpu/drm/xe/xe_drm_client.c > @@ -8,8 +8,10 @@ > #include > #include > > +#include "xe_bo_types.h" > #include "xe_device_types.h" > #include "xe_drm_client.h" > +#include "xe_trace.h" > > /** > * xe_drm_client_alloc() - Allocate drm client > @@ -31,6 +33,10 @@ struct xe_drm_client *xe_drm_client_alloc(void) > > kref_init(&client->kref); > > +#ifdef CONFIG_PROC_FS > + spin_lock_init(&client->bos_lock); > + INIT_LIST_HEAD(&client->bos_list); > +#endif > return client; > } > > @@ -52,6 +58,51 @@ void __xe_drm_client_free(struct kref *kref) > } > > #ifdef CONFIG_PROC_FS > +/** > + * xe_drm_client_add_bo() - Add BO for tracking client mem usage > + * @client: The drm client ptr > + * @bo: The xe BO ptr > + * > + * Add all BO created by individual drm client by calling this function. > + * This helps in tracking client memory usage. > + * > + * Return: void > + */ > +void xe_drm_client_add_bo(struct xe_drm_client *client, > + struct xe_bo *bo) > +{ > + unsigned long flags; > + > + XE_WARN_ON(bo->client); > + XE_WARN_ON(!list_empty(&bo->client_link)); > + > + spin_lock_irqsave(&client->bos_lock, flags); > + bo->client = xe_drm_client_get(client); > + list_add_tail_rcu(&bo->client_link, &client->bos_list); > + spin_unlock_irqrestore(&client->bos_lock, flags); > +} > + > +/** > + * xe_drm_client_remove_bo() - Remove BO for tracking client mem usage > + * @bo: The xe BO ptr > + * > + * Remove all BO removed by individual drm client by calling this function. > + * This helps in tracking client memory usage. > + * > + * Return: void > + */ > +void xe_drm_client_remove_bo(struct xe_bo *bo) > +{ > + struct xe_drm_client *client = bo->client; > + unsigned long flags; > + > + spin_lock_irqsave(&client->bos_lock, flags); > + list_del_rcu(&bo->client_link); > + spin_unlock_irqrestore(&client->bos_lock, flags); > + > + xe_drm_client_put(client); > +} > + > /** > * xe_drm_client_fdinfo() - Callback for fdinfo interface > * @p: The drm_printer ptr > diff --git a/drivers/gpu/drm/xe/xe_drm_client.h b/drivers/gpu/drm/xe/xe_drm_client.h > index dbe3a083c9df..20c0f4b6c2af 100644 > --- a/drivers/gpu/drm/xe/xe_drm_client.h > +++ b/drivers/gpu/drm/xe/xe_drm_client.h > @@ -15,10 +15,23 @@ > > struct drm_file; > struct drm_printer; > +struct xe_bo; > > struct xe_drm_client { > struct kref kref; > unsigned int id; > +#ifdef CONFIG_PROC_FS > + /** > + * @bos_lock: lock protecting @bos_list > + */ > + spinlock_t bos_lock; > + /** > + * @bos_list: list of bos created by this client > + * > + * Protected by @bos_lock. > + */ > + struct list_head bos_list; > +#endif > }; > > static inline struct xe_drm_client * > @@ -41,5 +54,18 @@ xe_drm_client_get(struct xe_drm_client *client); > static inline void xe_drm_client_put(struct xe_drm_client *client); > #ifdef CONFIG_PROC_FS > void xe_drm_client_fdinfo(struct drm_printer *p, struct drm_file *file); > +void xe_drm_client_add_bo(struct xe_drm_client *client, > + struct xe_bo *bo); > +void xe_drm_client_remove_bo(struct xe_bo *bo); > +#else > +static inline void xe_drm_client_add_bo(struct xe_drm_client *client, > + struct xe_bo *bo) > +{ > +} > + > +static inline void xe_drm_client_remove_bo(struct xe_bo *bo) > +{ > +} > #endif > + LGTM. Reviewed-by: Himal Prasad Ghimiray > #endif --------------bE0H07WtDBbsLOrhciTUujwu Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: 7bit


On 14-09-2023 17:49, Tejas Upadhyay wrote:
In order to show per client memory consumption, we
need tracking support APIs to add at every bo consumption
and removal. Adding APIs here to add tracking calls at
places wherever it is applicable.

V3:
  - update .h to return xe_drm_client_remove_bo void
  - protect xe_drm_client_remove_bo under CONFIG_PROC_FS check - Himal
  - Fixed Checkpatch error - CI
V2:
  - make xe_drm_client_remove_bo return void - Himal

Signed-off-by: Tejas Upadhyay <tejas.upadhyay@intel.com>
---
 drivers/gpu/drm/xe/xe_bo.c         |  9 ++++++
 drivers/gpu/drm/xe/xe_bo_types.h   | 10 ++++++
 drivers/gpu/drm/xe/xe_drm_client.c | 51 ++++++++++++++++++++++++++++++
 drivers/gpu/drm/xe/xe_drm_client.h | 26 +++++++++++++++
 4 files changed, 96 insertions(+)

diff --git a/drivers/gpu/drm/xe/xe_bo.c b/drivers/gpu/drm/xe/xe_bo.c
index 27726d4f3423..040117213ac8 100644
--- a/drivers/gpu/drm/xe/xe_bo.c
+++ b/drivers/gpu/drm/xe/xe_bo.c
@@ -16,6 +16,7 @@
 
 #include "xe_device.h"
 #include "xe_dma_buf.h"
+#include "xe_drm_client.h"
 #include "xe_ggtt.h"
 #include "xe_gt.h"
 #include "xe_map.h"
@@ -1054,6 +1055,11 @@ static void xe_ttm_bo_destroy(struct ttm_buffer_object *ttm_bo)
 	if (bo->vm && xe_bo_is_user(bo))
 		xe_vm_put(bo->vm);
 
+#ifdef CONFIG_PROC_FS
+	if (bo->client)
+		xe_drm_client_remove_bo(bo);
+#endif
+
 	kfree(bo);
 }
 
@@ -1231,6 +1237,9 @@ struct xe_bo *__xe_bo_create_locked(struct xe_device *xe, struct xe_bo *bo,
 	bo->ttm.priority = DRM_XE_VMA_PRIORITY_NORMAL;
 	INIT_LIST_HEAD(&bo->vmas);
 	INIT_LIST_HEAD(&bo->pinned_link);
+#ifdef CONFIG_PROC_FS
+	INIT_LIST_HEAD(&bo->client_link);
+#endif
 
 	drm_gem_private_object_init(&xe->drm, &bo->ttm.base, size);
 
diff --git a/drivers/gpu/drm/xe/xe_bo_types.h b/drivers/gpu/drm/xe/xe_bo_types.h
index 2ea9ad423170..1a898528deeb 100644
--- a/drivers/gpu/drm/xe/xe_bo_types.h
+++ b/drivers/gpu/drm/xe/xe_bo_types.h
@@ -45,6 +45,16 @@ struct xe_bo {
 	struct ttm_bo_kmap_obj kmap;
 	/** @pinned_link: link to present / evicted list of pinned BO */
 	struct list_head pinned_link;
+#ifdef CONFIG_PROC_FS
+	/**
+	 * @client: @xe_drm_client which created the bo
+	 */
+	struct xe_drm_client *client;
+	/**
+	 * @client_link: Link into @xe_drm_client.objects_list
+	 */
+	struct list_head client_link;
+#endif
 	/** @props: BO user controlled properties */
 	struct {
 		/** @preferred_mem: preferred memory class for this BO */
diff --git a/drivers/gpu/drm/xe/xe_drm_client.c b/drivers/gpu/drm/xe/xe_drm_client.c
index 98c8a0cf2f56..7abc1db1dc9c 100644
--- a/drivers/gpu/drm/xe/xe_drm_client.c
+++ b/drivers/gpu/drm/xe/xe_drm_client.c
@@ -8,8 +8,10 @@
 #include <linux/slab.h>
 #include <linux/types.h>
 
+#include "xe_bo_types.h"
 #include "xe_device_types.h"
 #include "xe_drm_client.h"
+#include "xe_trace.h"
 
 /**
  * xe_drm_client_alloc() - Allocate drm client
@@ -31,6 +33,10 @@ struct xe_drm_client *xe_drm_client_alloc(void)
 
 	kref_init(&client->kref);
 
+#ifdef CONFIG_PROC_FS
+	spin_lock_init(&client->bos_lock);
+	INIT_LIST_HEAD(&client->bos_list);
+#endif
 	return client;
 }
 
@@ -52,6 +58,51 @@ void __xe_drm_client_free(struct kref *kref)
 }
 
 #ifdef CONFIG_PROC_FS
+/**
+ * xe_drm_client_add_bo() - Add BO for tracking client mem usage
+ * @client: The drm client ptr
+ * @bo: The xe BO ptr
+ *
+ * Add all BO created by individual drm client by calling this function.
+ * This helps in tracking client memory usage.
+ *
+ * Return: void
+ */
+void xe_drm_client_add_bo(struct xe_drm_client *client,
+			  struct xe_bo *bo)
+{
+	unsigned long flags;
+
+	XE_WARN_ON(bo->client);
+	XE_WARN_ON(!list_empty(&bo->client_link));
+
+	spin_lock_irqsave(&client->bos_lock, flags);
+	bo->client = xe_drm_client_get(client);
+	list_add_tail_rcu(&bo->client_link, &client->bos_list);
+	spin_unlock_irqrestore(&client->bos_lock, flags);
+}
+
+/**
+ * xe_drm_client_remove_bo() - Remove BO for tracking client mem usage
+ * @bo: The xe BO ptr
+ *
+ * Remove all BO removed by individual drm client by calling this function.
+ * This helps in tracking client memory usage.
+ *
+ * Return: void
+ */
+void xe_drm_client_remove_bo(struct xe_bo *bo)
+{
+	struct xe_drm_client *client = bo->client;
+	unsigned long flags;
+
+	spin_lock_irqsave(&client->bos_lock, flags);
+	list_del_rcu(&bo->client_link);
+	spin_unlock_irqrestore(&client->bos_lock, flags);
+
+	xe_drm_client_put(client);
+}
+
 /**
  * xe_drm_client_fdinfo() - Callback for fdinfo interface
  * @p: The drm_printer ptr
diff --git a/drivers/gpu/drm/xe/xe_drm_client.h b/drivers/gpu/drm/xe/xe_drm_client.h
index dbe3a083c9df..20c0f4b6c2af 100644
--- a/drivers/gpu/drm/xe/xe_drm_client.h
+++ b/drivers/gpu/drm/xe/xe_drm_client.h
@@ -15,10 +15,23 @@
 
 struct drm_file;
 struct drm_printer;
+struct xe_bo;
 
 struct xe_drm_client {
 	struct kref kref;
 	unsigned int id;
+#ifdef CONFIG_PROC_FS
+	/**
+	 * @bos_lock: lock protecting @bos_list
+	 */
+	spinlock_t bos_lock;
+	/**
+	 * @bos_list: list of bos created by this client
+	 *
+	 * Protected by @bos_lock.
+	 */
+	struct list_head bos_list;
+#endif
 };
 
 	static inline struct xe_drm_client *
@@ -41,5 +54,18 @@ xe_drm_client_get(struct xe_drm_client *client);
 static inline void xe_drm_client_put(struct xe_drm_client *client);
 #ifdef CONFIG_PROC_FS
 void xe_drm_client_fdinfo(struct drm_printer *p, struct drm_file *file);
+void xe_drm_client_add_bo(struct xe_drm_client *client,
+			  struct xe_bo *bo);
+void xe_drm_client_remove_bo(struct xe_bo *bo);
+#else
+static inline void xe_drm_client_add_bo(struct xe_drm_client *client,
+					struct xe_bo *bo)
+{
+}
+
+static inline void xe_drm_client_remove_bo(struct xe_bo *bo)
+{
+}
 #endif
+

LGTM.

Reviewed-by: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com>
 #endif
--------------bE0H07WtDBbsLOrhciTUujwu--