Received: by 2002:a05:7412:419a:b0:f3:1519:9f41 with SMTP id i26csp4896049rdh; Wed, 29 Nov 2023 14:03:44 -0800 (PST) X-Google-Smtp-Source: AGHT+IEd4Gug5MCLwBzWJglvDKqqpfA6h25Lp0ZplMjiiFDg/4OltYskAzThTR5uyxR9z3WncGG6 X-Received: by 2002:a05:6a00:ad5:b0:6b1:c1c4:ae98 with SMTP id c21-20020a056a000ad500b006b1c1c4ae98mr25190108pfl.18.1701295424036; Wed, 29 Nov 2023 14:03:44 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1701295424; cv=none; d=google.com; s=arc-20160816; b=CqnUUvG/qVfqcLlmGl2FaHrvdn85nTOshiPKCKwOVshoYmyjIJJxVFgCRTRdPFgacb npqlStvjD5ozPOcv3/g3YzMUxm9o38Z6WHPcEaE2duI9z6NnPD9lrm8E+Bn0fCVDbSwt LOKVTlYWIgPVRxdi06aBGEHCrfUa3UNA/bKgAZQ8vYtOs/y65MqW718f5P+FXH0ZYuzO Ipll854q4Ft0L1cDL5XBtSI8WvmZ5V9bj7cYlrc6W8HnxMtxT8Dj3xqMcQSUQAG6gYT0 qiDAjYiuGe8L9eKv9WYUW61HIT5KmIzKT0gWPq30gc40V7FWaXFVSLKE8wS3/j+doXss 823w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=nvac7PhaM1GRGQ76fQVcnZz6907yJQ8rBP6W5BUVeyY=; fh=WmhC2oVIsMCdMRN16uKJYFh61wcxZsWGU5cNOiei0lo=; b=HXLsQUuRG5FABtIwifxWUoH+8h8QHORs1Y9cvBaz/uRqBX1kd0P2CWBL11Z2bp5phn 0j3/Ui2dSwhpjrNTfwmlvaFijFoqNAMntAyN+kstig173c8lgCpJO+I1KoT37TCQXift Ix+D1X9578ebVAo3GnFO13OPjx+/wqCDeAp50OU/WpTWm4cSVhAP1R4Yc4/XHYX3hAx3 apFaXtffWqrdIhrRoaw3liB8j6phgTfYREoHt2Oy9/3YP52WI4aUJUAOKGupkJOLCZxd Lhp34w0FgmBhHTZi254+zG34wiUQFsulc12nWN4jot+x3ZY2S5pwhd2I1ywUPskzT7v2 nA/Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linux.dev header.s=key1 header.b=M4jjERuG; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:8 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linux.dev Return-Path: Received: from fry.vger.email (fry.vger.email. [2620:137:e000::3:8]) by mx.google.com with ESMTPS id d20-20020aa78e54000000b006cd84368e8dsi8660778pfr.190.2023.11.29.14.03.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 29 Nov 2023 14:03:44 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:8 as permitted sender) client-ip=2620:137:e000::3:8; Authentication-Results: mx.google.com; dkim=pass header.i=@linux.dev header.s=key1 header.b=M4jjERuG; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:8 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linux.dev Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by fry.vger.email (Postfix) with ESMTP id EA82F80B9FA3; Wed, 29 Nov 2023 14:03:37 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at fry.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234581AbjK2WCk (ORCPT + 99 others); Wed, 29 Nov 2023 17:02:40 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36798 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234559AbjK2WCi (ORCPT ); Wed, 29 Nov 2023 17:02:38 -0500 Received: from out-170.mta0.migadu.com (out-170.mta0.migadu.com [91.218.175.170]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B8256A8 for ; Wed, 29 Nov 2023 14:02:44 -0800 (PST) X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1701295363; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=nvac7PhaM1GRGQ76fQVcnZz6907yJQ8rBP6W5BUVeyY=; b=M4jjERuGOhgryt6z926ul8CpufUhBacxXlZRbuqWg7n3jrI4ripiP9bBqnW7S31rWCCLLS etH3zCAAafFKLs2BvG9pUWNsfg38gXmIJ4z7gYkKyu7G1VTa7H8rqALhycl1QJLbarYOqE 3qjsZpLIvaDt9tk13XDlYB0r6wn6EX8= From: Sui Jingfeng To: Lucas Stach Cc: Christian Gmeiner , dri-devel@lists.freedesktop.org, etnaviv@lists.freedesktop.org, linux-kernel@vger.kernel.org, Sui Jingfeng Subject: [etnaviv-next v12 2/8] drm/etnaviv: Add constructor and destructor for struct etnaviv_drm_private Date: Thu, 30 Nov 2023 06:02:25 +0800 Message-Id: <20231129220231.12763-3-sui.jingfeng@linux.dev> In-Reply-To: <20231129220231.12763-1-sui.jingfeng@linux.dev> References: <20231129220231.12763-1-sui.jingfeng@linux.dev> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Migadu-Flow: FLOW_OUT X-Spam-Status: No, score=-0.9 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on fry.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (fry.vger.email [0.0.0.0]); Wed, 29 Nov 2023 14:03:38 -0800 (PST) From: Sui Jingfeng Noticed that there are a lot of members in the struct etnaviv_drm_private, which are intended to be shared by all GPU cores. Introduces two helpers for construction and destruction purpose for it. The benefit is that error handling get simplified a lot. Signed-off-by: Sui Jingfeng --- drivers/gpu/drm/etnaviv/etnaviv_drv.c | 70 +++++++++++++++++---------- 1 file changed, 44 insertions(+), 26 deletions(-) diff --git a/drivers/gpu/drm/etnaviv/etnaviv_drv.c b/drivers/gpu/drm/etnaviv/etnaviv_drv.c index a9a1659840ec..41ef7a8b7839 100644 --- a/drivers/gpu/drm/etnaviv/etnaviv_drv.c +++ b/drivers/gpu/drm/etnaviv/etnaviv_drv.c @@ -41,6 +41,43 @@ static struct device_node *etnaviv_of_first_available_node(void) return NULL; } +static struct etnaviv_drm_private *etnaviv_alloc_private(struct device *dev) +{ + struct etnaviv_drm_private *priv; + + priv = kzalloc(sizeof(*priv), GFP_KERNEL); + if (!priv) + return ERR_PTR(-ENOMEM); + + xa_init_flags(&priv->active_contexts, XA_FLAGS_ALLOC); + + mutex_init(&priv->gem_lock); + INIT_LIST_HEAD(&priv->gem_list); + priv->num_gpus = 0; + priv->shm_gfp_mask = GFP_HIGHUSER | __GFP_RETRY_MAYFAIL | __GFP_NOWARN; + + priv->cmdbuf_suballoc = etnaviv_cmdbuf_suballoc_new(dev); + if (IS_ERR(priv->cmdbuf_suballoc)) { + kfree(priv); + dev_err(dev, "Failed to create cmdbuf suballocator\n"); + return ERR_PTR(-ENOMEM); + } + + return priv; +} + +static void etnaviv_free_private(struct etnaviv_drm_private *priv) +{ + if (!priv) + return; + + etnaviv_cmdbuf_suballoc_destroy(priv->cmdbuf_suballoc); + + xa_destroy(&priv->active_contexts); + + kfree(priv); +} + static void load_gpu(struct drm_device *dev) { struct etnaviv_drm_private *priv = dev->dev_private; @@ -521,35 +558,21 @@ static int etnaviv_bind(struct device *dev) if (IS_ERR(drm)) return PTR_ERR(drm); - priv = kzalloc(sizeof(*priv), GFP_KERNEL); - if (!priv) { - dev_err(dev, "failed to allocate private data\n"); - ret = -ENOMEM; + priv = etnaviv_alloc_private(dev); + if (IS_ERR(priv)) { + ret = PTR_ERR(priv); goto out_put; } + drm->dev_private = priv; dma_set_max_seg_size(dev, SZ_2G); - xa_init_flags(&priv->active_contexts, XA_FLAGS_ALLOC); - - mutex_init(&priv->gem_lock); - INIT_LIST_HEAD(&priv->gem_list); - priv->num_gpus = 0; - priv->shm_gfp_mask = GFP_HIGHUSER | __GFP_RETRY_MAYFAIL | __GFP_NOWARN; - - priv->cmdbuf_suballoc = etnaviv_cmdbuf_suballoc_new(drm->dev); - if (IS_ERR(priv->cmdbuf_suballoc)) { - dev_err(drm->dev, "Failed to create cmdbuf suballocator\n"); - ret = PTR_ERR(priv->cmdbuf_suballoc); - goto out_free_priv; - } - dev_set_drvdata(dev, drm); ret = component_bind_all(dev, drm); if (ret < 0) - goto out_destroy_suballoc; + goto out_free_priv; load_gpu(drm); @@ -561,10 +584,8 @@ static int etnaviv_bind(struct device *dev) out_unbind: component_unbind_all(dev, drm); -out_destroy_suballoc: - etnaviv_cmdbuf_suballoc_destroy(priv->cmdbuf_suballoc); out_free_priv: - kfree(priv); + etnaviv_free_private(priv); out_put: drm_dev_put(drm); @@ -580,12 +601,9 @@ static void etnaviv_unbind(struct device *dev) component_unbind_all(dev, drm); - etnaviv_cmdbuf_suballoc_destroy(priv->cmdbuf_suballoc); - - xa_destroy(&priv->active_contexts); + etnaviv_free_private(priv); drm->dev_private = NULL; - kfree(priv); drm_dev_put(drm); } -- 2.34.1