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 X-Spam-Level: X-Spam-Status: No, score=-6.6 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 46CE9C32771 for ; Sun, 19 Jan 2020 02:47:25 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id D150A2469D for ; Sun, 19 Jan 2020 02:47:24 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="PnMv387G" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org D150A2469D Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=owner-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix) id 6EBDB6B054E; Sat, 18 Jan 2020 21:47:24 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 674CC6B054F; Sat, 18 Jan 2020 21:47:24 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 53DA36B0550; Sat, 18 Jan 2020 21:47:24 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0187.hostedemail.com [216.40.44.187]) by kanga.kvack.org (Postfix) with ESMTP id 348C96B054E for ; Sat, 18 Jan 2020 21:47:24 -0500 (EST) Received: from smtpin15.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay02.hostedemail.com (Postfix) with SMTP id CC7012C06 for ; Sun, 19 Jan 2020 02:47:23 +0000 (UTC) X-FDA: 76392847566.15.songs22_64da737ace2d X-HE-Tag: songs22_64da737ace2d X-Filterd-Recvd-Size: 10877 Received: from mail-vk1-f193.google.com (mail-vk1-f193.google.com [209.85.221.193]) by imf15.hostedemail.com (Postfix) with ESMTP for ; Sun, 19 Jan 2020 02:47:23 +0000 (UTC) Received: by mail-vk1-f193.google.com with SMTP id o187so7704220vka.2 for ; Sat, 18 Jan 2020 18:47:23 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=toJ/dnCaKUSYfpH7tLiOydB3QUX8Gl8IYduDGUuWEgM=; b=PnMv387GbmMOGujE1lDwixDkYb4ixdfXzDrv2X6l5ZcYUl0I5vxsJeAUrMQbeNwkac A71NTX+4Pv76cdrabckoePKN1bx3hhnmfgEzMp8Fe4T1a75MpHY3CD/Ysu4rxVRO7J5I NT0/60FeNRS+5DzjZQpbbntsTqzOQeYiULNa1ldeGZJfpXGKNgVoYRG5e12qSxpz/xpj vN7HYTNo0xLEXLcxx3PB5r1SvycuYRQn199WTJpsy322n+mSPdReOUPxRkOy2Om/JRjM UC19iCH4hBSqrjYPdrPAIRiVMdihp1+YMTgHaVpkaGEXC75ccV0404uS1iKtV1401G7T gfFg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=toJ/dnCaKUSYfpH7tLiOydB3QUX8Gl8IYduDGUuWEgM=; b=LynywExc0ofd6/eunJeEZ18zzeIqbei707sKT05NbnTmO4T0RHroL14QHSlH7XUZr3 jebhndJLSIFZjTYWzkG5+BKhKFwgP1OEqpPxXiehFyvnfIxvlB6fR1xu23jlhiPQiC96 /5cfZNZNHtMwan/8apm/niH6gaHOsQd5vZG9DC0QN9UxqULRp7MKoQxUdQI3WGJb900T 9jamSQ0EHqTBExo4aPzLgKDbSBz94qSsHEsQ51AMgGD3hLHaT8M3htJ9s5dLm2aPD3Cj l+mrLlddX3Wx1ANKKQW400TNbUhoButEIaTLEUs59CxJcOOa0O66/Hhvs/yEg8OKerP5 IzeA== X-Gm-Message-State: APjAAAXOGPrrPHLyQUxxlw2Tpe/eHwpp6ohmemklfAR6hVpF3ZO6Y1gQ jJUVCjddIPDiltht0pvWFvqO+HcXzU/Xiq/SCjw= X-Google-Smtp-Source: APXvYqwGG6ncU/DsmC8PKCzZb+17/D+wcLK8GRPL5vs0sLXHwXUSBA6llHcXMMVV6d/ckr21GKacOYh9/x/4SYS0J1I= X-Received: by 2002:a1f:db81:: with SMTP id s123mr25585681vkg.45.1579402042030; Sat, 18 Jan 2020 18:47:22 -0800 (PST) MIME-Version: 1.0 References: <20200113153543.24957-1-qiang.yu@amd.com> <20200113153543.24957-4-qiang.yu@amd.com> In-Reply-To: From: Qiang Yu Date: Sun, 19 Jan 2020 10:47:10 +0800 Message-ID: Subject: Re: [PATCH RFC 3/3] drm/ttm: support memcg for ttm_tt To: =?UTF-8?Q?Christian_K=C3=B6nig?= Cc: Qiang Yu , Linux Memory Management List , cgroups@vger.kernel.org, dri-devel , David Airlie , Kenny Ho , Michal Hocko , Huang Rui , Johannes Weiner , Tejun Heo , Andrew Morton Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: On Mon, Jan 13, 2020 at 11:56 PM Christian K=C3=B6nig wrote: > > Am 13.01.20 um 16:35 schrieb Qiang Yu: > > Charge TTM allocated system memory to memory cgroup which will > > limit the memory usage of a group of processes. > > NAK to the whole approach. This belongs into the GEM or driver layer, > but not into TTM. > Sorry for responding late. GEM layer seems not a proper place to handle this as: 1. it is not aware of the back storage (system mem or device mem) unless we add this information up to GEM which I think is not appropriate 2. system memory allocated by GEM with drm_gem_get_pages() is already charged to memcg, it's only the ttm system memory not charged to memcg Implement in driver like amdgpu is an option. But seems the problem is insi= de TTM which does not charge pages allocated by itself to memcg, won't it be better to solve it in TTM so that all drivers using it can benefit? Or you = just think we should not rely on memcg for GPU system memory limitation? > > The memory is always charged to the control group of task which > > create this buffer object and when it's created. For example, > > when a buffer is created by process A and exported to process B, > > then process B populate this buffer, the memory is still charged > > to process A's memcg; if a buffer is created by process A when in > > memcg B, then A is moved to memcg C and populate this buffer, it > > will charge memcg B. > > This is actually the most common use case for graphics application where > the X server allocates most of the backing store. > > So we need a better handling than just accounting the memory to whoever > allocated it first. > You mean the application based on DRI2 and X11 protocol draw? I think this is still reasonable to charge xserver for the memory, because xserver alloc= ate the buffer and share to application which is its design and implementation nature. With DRI3, the buffer is allocated by application, also suitable for this approach. Regards, Qiang > Regards, > Christian. > > > > > Signed-off-by: Qiang Yu > > --- > > drivers/gpu/drm/ttm/ttm_bo.c | 10 ++++++++++ > > drivers/gpu/drm/ttm/ttm_page_alloc.c | 18 +++++++++++++++++- > > drivers/gpu/drm/ttm/ttm_tt.c | 3 +++ > > include/drm/ttm/ttm_bo_api.h | 5 +++++ > > include/drm/ttm/ttm_tt.h | 4 ++++ > > 5 files changed, 39 insertions(+), 1 deletion(-) > > > > diff --git a/drivers/gpu/drm/ttm/ttm_bo.c b/drivers/gpu/drm/ttm/ttm_bo.= c > > index 8d91b0428af1..4e64846ee523 100644 > > --- a/drivers/gpu/drm/ttm/ttm_bo.c > > +++ b/drivers/gpu/drm/ttm/ttm_bo.c > > @@ -42,6 +42,7 @@ > > #include > > #include > > #include > > +#include > > > > static void ttm_bo_global_kobj_release(struct kobject *kobj); > > > > @@ -162,6 +163,10 @@ static void ttm_bo_release_list(struct kref *list_= kref) > > if (!ttm_bo_uses_embedded_gem_object(bo)) > > dma_resv_fini(&bo->base._resv); > > mutex_destroy(&bo->wu_mutex); > > +#ifdef CONFIG_MEMCG > > + if (bo->memcg) > > + css_put(&bo->memcg->css); > > +#endif > > bo->destroy(bo); > > ttm_mem_global_free(&ttm_mem_glob, acc_size); > > } > > @@ -1330,6 +1335,11 @@ int ttm_bo_init_reserved(struct ttm_bo_device *b= dev, > > } > > atomic_inc(&ttm_bo_glob.bo_count); > > > > +#ifdef CONFIG_MEMCG > > + if (bo->type =3D=3D ttm_bo_type_device) > > + bo->memcg =3D mem_cgroup_driver_get_from_current(); > > +#endif > > + > > /* > > * For ttm_bo_type_device buffers, allocate > > * address space from the device. > > diff --git a/drivers/gpu/drm/ttm/ttm_page_alloc.c b/drivers/gpu/drm/ttm= /ttm_page_alloc.c > > index b40a4678c296..ecd1831a1d38 100644 > > --- a/drivers/gpu/drm/ttm/ttm_page_alloc.c > > +++ b/drivers/gpu/drm/ttm/ttm_page_alloc.c > > @@ -42,7 +42,7 @@ > > #include /* for seq_printf */ > > #include > > #include > > - > > +#include > > #include > > > > #include > > @@ -1045,6 +1045,11 @@ ttm_pool_unpopulate_helper(struct ttm_tt *ttm, u= nsigned mem_count_update) > > ttm_put_pages(ttm->pages, ttm->num_pages, ttm->page_flags, > > ttm->caching_state); > > ttm->state =3D tt_unpopulated; > > + > > +#ifdef CONFIG_MEMCG > > + if (ttm->memcg) > > + mem_cgroup_uncharge_drvmem(ttm->memcg, ttm->num_pages); > > +#endif > > } > > > > int ttm_pool_populate(struct ttm_tt *ttm, struct ttm_operation_ctx *c= tx) > > @@ -1059,6 +1064,17 @@ int ttm_pool_populate(struct ttm_tt *ttm, struct= ttm_operation_ctx *ctx) > > if (ttm_check_under_lowerlimit(mem_glob, ttm->num_pages, ctx)) > > return -ENOMEM; > > > > +#ifdef CONFIG_MEMCG > > + if (ttm->memcg) { > > + gfp_t gfp_flags =3D GFP_USER; > > + if (ttm->page_flags & TTM_PAGE_FLAG_NO_RETRY) > > + gfp_flags |=3D __GFP_RETRY_MAYFAIL; > > + ret =3D mem_cgroup_charge_drvmem(ttm->memcg, gfp_flags, t= tm->num_pages); > > + if (ret) > > + return ret; > > + } > > +#endif > > + > > ret =3D ttm_get_pages(ttm->pages, ttm->num_pages, ttm->page_flags= , > > ttm->caching_state); > > if (unlikely(ret !=3D 0)) { > > diff --git a/drivers/gpu/drm/ttm/ttm_tt.c b/drivers/gpu/drm/ttm/ttm_tt.= c > > index e0e9b4f69db6..1acb153084e1 100644 > > --- a/drivers/gpu/drm/ttm/ttm_tt.c > > +++ b/drivers/gpu/drm/ttm/ttm_tt.c > > @@ -233,6 +233,9 @@ void ttm_tt_init_fields(struct ttm_tt *ttm, struct = ttm_buffer_object *bo, > > ttm->state =3D tt_unpopulated; > > ttm->swap_storage =3D NULL; > > ttm->sg =3D bo->sg; > > +#ifdef CONFIG_MEMCG > > + ttm->memcg =3D bo->memcg; > > +#endif > > } > > > > int ttm_tt_init(struct ttm_tt *ttm, struct ttm_buffer_object *bo, > > diff --git a/include/drm/ttm/ttm_bo_api.h b/include/drm/ttm/ttm_bo_api.= h > > index 65e399d280f7..95a08e81a73e 100644 > > --- a/include/drm/ttm/ttm_bo_api.h > > +++ b/include/drm/ttm/ttm_bo_api.h > > @@ -54,6 +54,8 @@ struct ttm_place; > > > > struct ttm_lru_bulk_move; > > > > +struct mem_cgroup; > > + > > /** > > * struct ttm_bus_placement > > * > > @@ -180,6 +182,9 @@ struct ttm_buffer_object { > > void (*destroy) (struct ttm_buffer_object *); > > unsigned long num_pages; > > size_t acc_size; > > +#ifdef CONFIG_MEMCG > > + struct mem_cgroup *memcg; > > +#endif > > > > /** > > * Members not needing protection. > > diff --git a/include/drm/ttm/ttm_tt.h b/include/drm/ttm/ttm_tt.h > > index c0e928abf592..10fb5a557b95 100644 > > --- a/include/drm/ttm/ttm_tt.h > > +++ b/include/drm/ttm/ttm_tt.h > > @@ -33,6 +33,7 @@ struct ttm_tt; > > struct ttm_mem_reg; > > struct ttm_buffer_object; > > struct ttm_operation_ctx; > > +struct mem_cgroup; > > > > #define TTM_PAGE_FLAG_WRITE (1 << 3) > > #define TTM_PAGE_FLAG_SWAPPED (1 << 4) > > @@ -116,6 +117,9 @@ struct ttm_tt { > > tt_unbound, > > tt_unpopulated, > > } state; > > +#ifdef CONFIG_MEMCG > > + struct mem_cgroup *memcg; > > +#endif > > }; > > > > /** > > _______________________________________________ > dri-devel mailing list > dri-devel@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/dri-devel 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 X-Spam-Level: X-Spam-Status: No, score=-6.3 required=3.0 tests=DKIM_ADSP_CUSTOM_MED, DKIM_INVALID,DKIM_SIGNED,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id AEA1EC33CB7 for ; Sun, 19 Jan 2020 02:47:25 +0000 (UTC) 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 mail.kernel.org (Postfix) with ESMTPS id 7E25B246AA for ; Sun, 19 Jan 2020 02:47:25 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="PnMv387G" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 7E25B246AA Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id E84696E1B8; Sun, 19 Jan 2020 02:47:24 +0000 (UTC) Received: from mail-vk1-xa41.google.com (mail-vk1-xa41.google.com [IPv6:2607:f8b0:4864:20::a41]) by gabe.freedesktop.org (Postfix) with ESMTPS id AB80D6E1B8 for ; Sun, 19 Jan 2020 02:47:23 +0000 (UTC) Received: by mail-vk1-xa41.google.com with SMTP id t129so7702198vkg.6 for ; Sat, 18 Jan 2020 18:47:23 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=toJ/dnCaKUSYfpH7tLiOydB3QUX8Gl8IYduDGUuWEgM=; b=PnMv387GbmMOGujE1lDwixDkYb4ixdfXzDrv2X6l5ZcYUl0I5vxsJeAUrMQbeNwkac A71NTX+4Pv76cdrabckoePKN1bx3hhnmfgEzMp8Fe4T1a75MpHY3CD/Ysu4rxVRO7J5I NT0/60FeNRS+5DzjZQpbbntsTqzOQeYiULNa1ldeGZJfpXGKNgVoYRG5e12qSxpz/xpj vN7HYTNo0xLEXLcxx3PB5r1SvycuYRQn199WTJpsy322n+mSPdReOUPxRkOy2Om/JRjM UC19iCH4hBSqrjYPdrPAIRiVMdihp1+YMTgHaVpkaGEXC75ccV0404uS1iKtV1401G7T gfFg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=toJ/dnCaKUSYfpH7tLiOydB3QUX8Gl8IYduDGUuWEgM=; b=qKqCDaGgufxmd9dAPZ93ZAjv6a9tgK8LKJdNitZQC8LGrIGaj6bU2YYqySFAAfhcE9 NnzrzoXXuPaLsxlUoLRoBQgvcFRDLNwCpHcrfNX/xLZuXgIiLug/ZmM1o44iXMHr8zO7 x5mhenk/a3Bn4K4Pqq1ZwgmhFkVvXj4iucPyMw9HLJh1EVBAxCeB+IsYgwren14fFJ+m HHHXP1X3iDwBKhjWz/9mWYcWqeT6dH0Wgz9/cqMa4486JyiwFiDJLSelXgqUZ7J8M9me QS0fimycAEAW/CIaUM3selcfkopcN1PppjZba+c5ZGAcNoygHVfF+BOXhNEbnY0/9CX9 TSUQ== X-Gm-Message-State: APjAAAVNtHyURM45uzDvw94yoYuEqwJZJCvqsmYc6AUbozbj0MpQuCha XgNF32NhM3b3sdtOT8eVNAOw2V/g06FG0M+Y22U= X-Google-Smtp-Source: APXvYqwGG6ncU/DsmC8PKCzZb+17/D+wcLK8GRPL5vs0sLXHwXUSBA6llHcXMMVV6d/ckr21GKacOYh9/x/4SYS0J1I= X-Received: by 2002:a1f:db81:: with SMTP id s123mr25585681vkg.45.1579402042030; Sat, 18 Jan 2020 18:47:22 -0800 (PST) MIME-Version: 1.0 References: <20200113153543.24957-1-qiang.yu@amd.com> <20200113153543.24957-4-qiang.yu@amd.com> In-Reply-To: From: Qiang Yu Date: Sun, 19 Jan 2020 10:47:10 +0800 Message-ID: Subject: Re: [PATCH RFC 3/3] drm/ttm: support memcg for ttm_tt To: =?UTF-8?Q?Christian_K=C3=B6nig?= X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Linux Memory Management List , David Airlie , Kenny Ho , dri-devel , Michal Hocko , Qiang Yu , Huang Rui , Johannes Weiner , Tejun Heo , cgroups@vger.kernel.org, Andrew Morton Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" T24gTW9uLCBKYW4gMTMsIDIwMjAgYXQgMTE6NTYgUE0gQ2hyaXN0aWFuIEvDtm5pZwo8Y2hyaXN0 aWFuLmtvZW5pZ0BhbWQuY29tPiB3cm90ZToKPgo+IEFtIDEzLjAxLjIwIHVtIDE2OjM1IHNjaHJp ZWIgUWlhbmcgWXU6Cj4gPiBDaGFyZ2UgVFRNIGFsbG9jYXRlZCBzeXN0ZW0gbWVtb3J5IHRvIG1l bW9yeSBjZ3JvdXAgd2hpY2ggd2lsbAo+ID4gbGltaXQgdGhlIG1lbW9yeSB1c2FnZSBvZiBhIGdy b3VwIG9mIHByb2Nlc3Nlcy4KPgo+IE5BSyB0byB0aGUgd2hvbGUgYXBwcm9hY2guIFRoaXMgYmVs b25ncyBpbnRvIHRoZSBHRU0gb3IgZHJpdmVyIGxheWVyLAo+IGJ1dCBub3QgaW50byBUVE0uCj4K U29ycnkgZm9yIHJlc3BvbmRpbmcgbGF0ZS4KCkdFTSBsYXllciBzZWVtcyBub3QgYSBwcm9wZXIg cGxhY2UgdG8gaGFuZGxlIHRoaXMgYXM6CjEuIGl0IGlzIG5vdCBhd2FyZSBvZiB0aGUgYmFjayBz dG9yYWdlIChzeXN0ZW0gbWVtIG9yIGRldmljZSBtZW0pIHVubGVzcwp3ZSBhZGQgdGhpcyBpbmZv cm1hdGlvbiB1cCB0byBHRU0gd2hpY2ggSSB0aGluayBpcyBub3QgYXBwcm9wcmlhdGUKMi4gc3lz dGVtIG1lbW9yeSBhbGxvY2F0ZWQgYnkgR0VNIHdpdGggZHJtX2dlbV9nZXRfcGFnZXMoKSBpcyBh bHJlYWR5CmNoYXJnZWQgdG8gbWVtY2csIGl0J3Mgb25seSB0aGUgdHRtIHN5c3RlbSBtZW1vcnkg bm90IGNoYXJnZWQgdG8gbWVtY2cKCkltcGxlbWVudCBpbiBkcml2ZXIgbGlrZSBhbWRncHUgaXMg YW4gb3B0aW9uLiBCdXQgc2VlbXMgdGhlIHByb2JsZW0gaXMgaW5zaWRlClRUTSB3aGljaCBkb2Vz IG5vdCBjaGFyZ2UgcGFnZXMgYWxsb2NhdGVkIGJ5IGl0c2VsZiB0byBtZW1jZywgd29uJ3QgaXQg YmUKYmV0dGVyIHRvIHNvbHZlIGl0IGluIFRUTSBzbyB0aGF0IGFsbCBkcml2ZXJzIHVzaW5nIGl0 IGNhbiBiZW5lZml0PyBPciB5b3UganVzdAp0aGluayB3ZSBzaG91bGQgbm90IHJlbHkgb24gbWVt Y2cgZm9yIEdQVSBzeXN0ZW0gbWVtb3J5IGxpbWl0YXRpb24/Cgo+ID4gVGhlIG1lbW9yeSBpcyBh bHdheXMgY2hhcmdlZCB0byB0aGUgY29udHJvbCBncm91cCBvZiB0YXNrIHdoaWNoCj4gPiBjcmVh dGUgdGhpcyBidWZmZXIgb2JqZWN0IGFuZCB3aGVuIGl0J3MgY3JlYXRlZC4gRm9yIGV4YW1wbGUs Cj4gPiB3aGVuIGEgYnVmZmVyIGlzIGNyZWF0ZWQgYnkgcHJvY2VzcyBBIGFuZCBleHBvcnRlZCB0 byBwcm9jZXNzIEIsCj4gPiB0aGVuIHByb2Nlc3MgQiBwb3B1bGF0ZSB0aGlzIGJ1ZmZlciwgdGhl IG1lbW9yeSBpcyBzdGlsbCBjaGFyZ2VkCj4gPiB0byBwcm9jZXNzIEEncyBtZW1jZzsgaWYgYSBi dWZmZXIgaXMgY3JlYXRlZCBieSBwcm9jZXNzIEEgd2hlbiBpbgo+ID4gbWVtY2cgQiwgdGhlbiBB IGlzIG1vdmVkIHRvIG1lbWNnIEMgYW5kIHBvcHVsYXRlIHRoaXMgYnVmZmVyLCBpdAo+ID4gd2ls bCBjaGFyZ2UgbWVtY2cgQi4KPgo+IFRoaXMgaXMgYWN0dWFsbHkgdGhlIG1vc3QgY29tbW9uIHVz ZSBjYXNlIGZvciBncmFwaGljcyBhcHBsaWNhdGlvbiB3aGVyZQo+IHRoZSBYIHNlcnZlciBhbGxv Y2F0ZXMgbW9zdCBvZiB0aGUgYmFja2luZyBzdG9yZS4KPgo+IFNvIHdlIG5lZWQgYSBiZXR0ZXIg aGFuZGxpbmcgdGhhbiBqdXN0IGFjY291bnRpbmcgdGhlIG1lbW9yeSB0byB3aG9ldmVyCj4gYWxs b2NhdGVkIGl0IGZpcnN0Lgo+CllvdSBtZWFuIHRoZSBhcHBsaWNhdGlvbiBiYXNlZCBvbiBEUkky IGFuZCBYMTEgcHJvdG9jb2wgZHJhdz8gSSB0aGluayB0aGlzCmlzIHN0aWxsIHJlYXNvbmFibGUg dG8gY2hhcmdlIHhzZXJ2ZXIgZm9yIHRoZSBtZW1vcnksIGJlY2F1c2UgeHNlcnZlciBhbGxvY2F0 ZQp0aGUgYnVmZmVyIGFuZCBzaGFyZSB0byBhcHBsaWNhdGlvbiB3aGljaCBpcyBpdHMgZGVzaWdu IGFuZCBpbXBsZW1lbnRhdGlvbgpuYXR1cmUuIFdpdGggRFJJMywgdGhlIGJ1ZmZlciBpcyBhbGxv Y2F0ZWQgYnkgYXBwbGljYXRpb24sIGFsc28Kc3VpdGFibGUgZm9yIHRoaXMKYXBwcm9hY2guCgpS ZWdhcmRzLApRaWFuZwoKPiBSZWdhcmRzLAo+IENocmlzdGlhbi4KPgo+ID4KPiA+IFNpZ25lZC1v ZmYtYnk6IFFpYW5nIFl1IDxxaWFuZy55dUBhbWQuY29tPgo+ID4gLS0tCj4gPiAgIGRyaXZlcnMv Z3B1L2RybS90dG0vdHRtX2JvLmMgICAgICAgICB8IDEwICsrKysrKysrKysKPiA+ICAgZHJpdmVy cy9ncHUvZHJtL3R0bS90dG1fcGFnZV9hbGxvYy5jIHwgMTggKysrKysrKysrKysrKysrKystCj4g PiAgIGRyaXZlcnMvZ3B1L2RybS90dG0vdHRtX3R0LmMgICAgICAgICB8ICAzICsrKwo+ID4gICBp bmNsdWRlL2RybS90dG0vdHRtX2JvX2FwaS5oICAgICAgICAgfCAgNSArKysrKwo+ID4gICBpbmNs dWRlL2RybS90dG0vdHRtX3R0LmggICAgICAgICAgICAgfCAgNCArKysrCj4gPiAgIDUgZmlsZXMg Y2hhbmdlZCwgMzkgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQo+ID4KPiA+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9iby5jIGIvZHJpdmVycy9ncHUvZHJtL3R0bS90 dG1fYm8uYwo+ID4gaW5kZXggOGQ5MWIwNDI4YWYxLi40ZTY0ODQ2ZWU1MjMgMTAwNjQ0Cj4gPiAt LS0gYS9kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9iby5jCj4gPiArKysgYi9kcml2ZXJzL2dwdS9k cm0vdHRtL3R0bV9iby5jCj4gPiBAQCAtNDIsNiArNDIsNyBAQAo+ID4gICAjaW5jbHVkZSA8bGlu dXgvbW9kdWxlLmg+Cj4gPiAgICNpbmNsdWRlIDxsaW51eC9hdG9taWMuaD4KPiA+ICAgI2luY2x1 ZGUgPGxpbnV4L2RtYS1yZXN2Lmg+Cj4gPiArI2luY2x1ZGUgPGxpbnV4L21lbWNvbnRyb2wuaD4K PiA+Cj4gPiAgIHN0YXRpYyB2b2lkIHR0bV9ib19nbG9iYWxfa29ial9yZWxlYXNlKHN0cnVjdCBr b2JqZWN0ICprb2JqKTsKPiA+Cj4gPiBAQCAtMTYyLDYgKzE2MywxMCBAQCBzdGF0aWMgdm9pZCB0 dG1fYm9fcmVsZWFzZV9saXN0KHN0cnVjdCBrcmVmICpsaXN0X2tyZWYpCj4gPiAgICAgICBpZiAo IXR0bV9ib191c2VzX2VtYmVkZGVkX2dlbV9vYmplY3QoYm8pKQo+ID4gICAgICAgICAgICAgICBk bWFfcmVzdl9maW5pKCZiby0+YmFzZS5fcmVzdik7Cj4gPiAgICAgICBtdXRleF9kZXN0cm95KCZi by0+d3VfbXV0ZXgpOwo+ID4gKyNpZmRlZiBDT05GSUdfTUVNQ0cKPiA+ICsgICAgIGlmIChiby0+ bWVtY2cpCj4gPiArICAgICAgICAgICAgIGNzc19wdXQoJmJvLT5tZW1jZy0+Y3NzKTsKPiA+ICsj ZW5kaWYKPiA+ICAgICAgIGJvLT5kZXN0cm95KGJvKTsKPiA+ICAgICAgIHR0bV9tZW1fZ2xvYmFs X2ZyZWUoJnR0bV9tZW1fZ2xvYiwgYWNjX3NpemUpOwo+ID4gICB9Cj4gPiBAQCAtMTMzMCw2ICsx MzM1LDExIEBAIGludCB0dG1fYm9faW5pdF9yZXNlcnZlZChzdHJ1Y3QgdHRtX2JvX2RldmljZSAq YmRldiwKPiA+ICAgICAgIH0KPiA+ICAgICAgIGF0b21pY19pbmMoJnR0bV9ib19nbG9iLmJvX2Nv dW50KTsKPiA+Cj4gPiArI2lmZGVmIENPTkZJR19NRU1DRwo+ID4gKyAgICAgaWYgKGJvLT50eXBl ID09IHR0bV9ib190eXBlX2RldmljZSkKPiA+ICsgICAgICAgICAgICAgYm8tPm1lbWNnID0gbWVt X2Nncm91cF9kcml2ZXJfZ2V0X2Zyb21fY3VycmVudCgpOwo+ID4gKyNlbmRpZgo+ID4gKwo+ID4g ICAgICAgLyoKPiA+ICAgICAgICAqIEZvciB0dG1fYm9fdHlwZV9kZXZpY2UgYnVmZmVycywgYWxs b2NhdGUKPiA+ICAgICAgICAqIGFkZHJlc3Mgc3BhY2UgZnJvbSB0aGUgZGV2aWNlLgo+ID4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX3BhZ2VfYWxsb2MuYyBiL2RyaXZlcnMv Z3B1L2RybS90dG0vdHRtX3BhZ2VfYWxsb2MuYwo+ID4gaW5kZXggYjQwYTQ2NzhjMjk2Li5lY2Qx ODMxYTFkMzggMTAwNjQ0Cj4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9wYWdlX2Fs bG9jLmMKPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX3BhZ2VfYWxsb2MuYwo+ID4g QEAgLTQyLDcgKzQyLDcgQEAKPiA+ICAgI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+IC8qIGZv ciBzZXFfcHJpbnRmICovCj4gPiAgICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Cj4gPiAgICNpbmNs dWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgo+ID4gLQo+ID4gKyNpbmNsdWRlIDxsaW51eC9tZW1j b250cm9sLmg+Cj4gPiAgICNpbmNsdWRlIDxsaW51eC9hdG9taWMuaD4KPiA+Cj4gPiAgICNpbmNs dWRlIDxkcm0vdHRtL3R0bV9ib19kcml2ZXIuaD4KPiA+IEBAIC0xMDQ1LDYgKzEwNDUsMTEgQEAg dHRtX3Bvb2xfdW5wb3B1bGF0ZV9oZWxwZXIoc3RydWN0IHR0bV90dCAqdHRtLCB1bnNpZ25lZCBt ZW1fY291bnRfdXBkYXRlKQo+ID4gICAgICAgdHRtX3B1dF9wYWdlcyh0dG0tPnBhZ2VzLCB0dG0t Pm51bV9wYWdlcywgdHRtLT5wYWdlX2ZsYWdzLAo+ID4gICAgICAgICAgICAgICAgICAgICB0dG0t PmNhY2hpbmdfc3RhdGUpOwo+ID4gICAgICAgdHRtLT5zdGF0ZSA9IHR0X3VucG9wdWxhdGVkOwo+ ID4gKwo+ID4gKyNpZmRlZiBDT05GSUdfTUVNQ0cKPiA+ICsgICAgIGlmICh0dG0tPm1lbWNnKQo+ ID4gKyAgICAgICAgICAgICBtZW1fY2dyb3VwX3VuY2hhcmdlX2Rydm1lbSh0dG0tPm1lbWNnLCB0 dG0tPm51bV9wYWdlcyk7Cj4gPiArI2VuZGlmCj4gPiAgIH0KPiA+Cj4gPiAgIGludCB0dG1fcG9v bF9wb3B1bGF0ZShzdHJ1Y3QgdHRtX3R0ICp0dG0sIHN0cnVjdCB0dG1fb3BlcmF0aW9uX2N0eCAq Y3R4KQo+ID4gQEAgLTEwNTksNiArMTA2NCwxNyBAQCBpbnQgdHRtX3Bvb2xfcG9wdWxhdGUoc3Ry dWN0IHR0bV90dCAqdHRtLCBzdHJ1Y3QgdHRtX29wZXJhdGlvbl9jdHggKmN0eCkKPiA+ICAgICAg IGlmICh0dG1fY2hlY2tfdW5kZXJfbG93ZXJsaW1pdChtZW1fZ2xvYiwgdHRtLT5udW1fcGFnZXMs IGN0eCkpCj4gPiAgICAgICAgICAgICAgIHJldHVybiAtRU5PTUVNOwo+ID4KPiA+ICsjaWZkZWYg Q09ORklHX01FTUNHCj4gPiArICAgICBpZiAodHRtLT5tZW1jZykgewo+ID4gKyAgICAgICAgICAg ICBnZnBfdCBnZnBfZmxhZ3MgPSBHRlBfVVNFUjsKPiA+ICsgICAgICAgICAgICAgaWYgKHR0bS0+ cGFnZV9mbGFncyAmIFRUTV9QQUdFX0ZMQUdfTk9fUkVUUlkpCj4gPiArICAgICAgICAgICAgICAg ICAgICAgZ2ZwX2ZsYWdzIHw9IF9fR0ZQX1JFVFJZX01BWUZBSUw7Cj4gPiArICAgICAgICAgICAg IHJldCA9IG1lbV9jZ3JvdXBfY2hhcmdlX2Rydm1lbSh0dG0tPm1lbWNnLCBnZnBfZmxhZ3MsIHR0 bS0+bnVtX3BhZ2VzKTsKPiA+ICsgICAgICAgICAgICAgaWYgKHJldCkKPiA+ICsgICAgICAgICAg ICAgICAgICAgICByZXR1cm4gcmV0Owo+ID4gKyAgICAgfQo+ID4gKyNlbmRpZgo+ID4gKwo+ID4g ICAgICAgcmV0ID0gdHRtX2dldF9wYWdlcyh0dG0tPnBhZ2VzLCB0dG0tPm51bV9wYWdlcywgdHRt LT5wYWdlX2ZsYWdzLAo+ID4gICAgICAgICAgICAgICAgICAgICAgICAgICB0dG0tPmNhY2hpbmdf c3RhdGUpOwo+ID4gICAgICAgaWYgKHVubGlrZWx5KHJldCAhPSAwKSkgewo+ID4gZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX3R0LmMgYi9kcml2ZXJzL2dwdS9kcm0vdHRtL3R0 bV90dC5jCj4gPiBpbmRleCBlMGU5YjRmNjlkYjYuLjFhY2IxNTMwODRlMSAxMDA2NDQKPiA+IC0t LSBhL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX3R0LmMKPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2Ry bS90dG0vdHRtX3R0LmMKPiA+IEBAIC0yMzMsNiArMjMzLDkgQEAgdm9pZCB0dG1fdHRfaW5pdF9m aWVsZHMoc3RydWN0IHR0bV90dCAqdHRtLCBzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmJvLAo+ ID4gICAgICAgdHRtLT5zdGF0ZSA9IHR0X3VucG9wdWxhdGVkOwo+ID4gICAgICAgdHRtLT5zd2Fw X3N0b3JhZ2UgPSBOVUxMOwo+ID4gICAgICAgdHRtLT5zZyA9IGJvLT5zZzsKPiA+ICsjaWZkZWYg Q09ORklHX01FTUNHCj4gPiArICAgICB0dG0tPm1lbWNnID0gYm8tPm1lbWNnOwo+ID4gKyNlbmRp Zgo+ID4gICB9Cj4gPgo+ID4gICBpbnQgdHRtX3R0X2luaXQoc3RydWN0IHR0bV90dCAqdHRtLCBz dHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmJvLAo+ID4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJt L3R0bS90dG1fYm9fYXBpLmggYi9pbmNsdWRlL2RybS90dG0vdHRtX2JvX2FwaS5oCj4gPiBpbmRl eCA2NWUzOTlkMjgwZjcuLjk1YTA4ZTgxYTczZSAxMDA2NDQKPiA+IC0tLSBhL2luY2x1ZGUvZHJt L3R0bS90dG1fYm9fYXBpLmgKPiA+ICsrKyBiL2luY2x1ZGUvZHJtL3R0bS90dG1fYm9fYXBpLmgK PiA+IEBAIC01NCw2ICs1NCw4IEBAIHN0cnVjdCB0dG1fcGxhY2U7Cj4gPgo+ID4gICBzdHJ1Y3Qg dHRtX2xydV9idWxrX21vdmU7Cj4gPgo+ID4gK3N0cnVjdCBtZW1fY2dyb3VwOwo+ID4gKwo+ID4g ICAvKioKPiA+ICAgICogc3RydWN0IHR0bV9idXNfcGxhY2VtZW50Cj4gPiAgICAqCj4gPiBAQCAt MTgwLDYgKzE4Miw5IEBAIHN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCB7Cj4gPiAgICAgICB2b2lk ICgqZGVzdHJveSkgKHN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqKTsKPiA+ICAgICAgIHVuc2ln bmVkIGxvbmcgbnVtX3BhZ2VzOwo+ID4gICAgICAgc2l6ZV90IGFjY19zaXplOwo+ID4gKyNpZmRl ZiBDT05GSUdfTUVNQ0cKPiA+ICsgICAgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZzsKPiA+ICsj ZW5kaWYKPiA+Cj4gPiAgICAgICAvKioKPiA+ICAgICAgICogTWVtYmVycyBub3QgbmVlZGluZyBw cm90ZWN0aW9uLgo+ID4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL3R0bS90dG1fdHQuaCBiL2lu Y2x1ZGUvZHJtL3R0bS90dG1fdHQuaAo+ID4gaW5kZXggYzBlOTI4YWJmNTkyLi4xMGZiNWE1NTdi OTUgMTAwNjQ0Cj4gPiAtLS0gYS9pbmNsdWRlL2RybS90dG0vdHRtX3R0LmgKPiA+ICsrKyBiL2lu Y2x1ZGUvZHJtL3R0bS90dG1fdHQuaAo+ID4gQEAgLTMzLDYgKzMzLDcgQEAgc3RydWN0IHR0bV90 dDsKPiA+ICAgc3RydWN0IHR0bV9tZW1fcmVnOwo+ID4gICBzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmpl Y3Q7Cj4gPiAgIHN0cnVjdCB0dG1fb3BlcmF0aW9uX2N0eDsKPiA+ICtzdHJ1Y3QgbWVtX2Nncm91 cDsKPiA+Cj4gPiAgICNkZWZpbmUgVFRNX1BBR0VfRkxBR19XUklURSAgICAgICAgICAgKDEgPDwg MykKPiA+ICAgI2RlZmluZSBUVE1fUEFHRV9GTEFHX1NXQVBQRUQgICAgICAgICAoMSA8PCA0KQo+ ID4gQEAgLTExNiw2ICsxMTcsOSBAQCBzdHJ1Y3QgdHRtX3R0IHsKPiA+ICAgICAgICAgICAgICAg dHRfdW5ib3VuZCwKPiA+ICAgICAgICAgICAgICAgdHRfdW5wb3B1bGF0ZWQsCj4gPiAgICAgICB9 IHN0YXRlOwo+ID4gKyNpZmRlZiBDT05GSUdfTUVNQ0cKPiA+ICsgICAgIHN0cnVjdCBtZW1fY2dy b3VwICptZW1jZzsKPiA+ICsjZW5kaWYKPiA+ICAgfTsKPiA+Cj4gPiAgIC8qKgo+Cj4gX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KPiBkcmktZGV2ZWwgbWFp bGluZyBsaXN0Cj4gZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwo+IGh0dHBzOi8vbGlz dHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCl9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxp c3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNr dG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo= From mboxrd@z Thu Jan 1 00:00:00 1970 From: Qiang Yu Subject: Re: [PATCH RFC 3/3] drm/ttm: support memcg for ttm_tt Date: Sun, 19 Jan 2020 10:47:10 +0800 Message-ID: References: <20200113153543.24957-1-qiang.yu@amd.com> <20200113153543.24957-4-qiang.yu@amd.com> Mime-Version: 1.0 Content-Transfer-Encoding: quoted-printable Return-path: DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=toJ/dnCaKUSYfpH7tLiOydB3QUX8Gl8IYduDGUuWEgM=; b=PnMv387GbmMOGujE1lDwixDkYb4ixdfXzDrv2X6l5ZcYUl0I5vxsJeAUrMQbeNwkac A71NTX+4Pv76cdrabckoePKN1bx3hhnmfgEzMp8Fe4T1a75MpHY3CD/Ysu4rxVRO7J5I NT0/60FeNRS+5DzjZQpbbntsTqzOQeYiULNa1ldeGZJfpXGKNgVoYRG5e12qSxpz/xpj vN7HYTNo0xLEXLcxx3PB5r1SvycuYRQn199WTJpsy322n+mSPdReOUPxRkOy2Om/JRjM UC19iCH4hBSqrjYPdrPAIRiVMdihp1+YMTgHaVpkaGEXC75ccV0404uS1iKtV1401G7T gfFg== In-Reply-To: Sender: cgroups-owner-u79uwXL29TY76Z2rM5mHXA@public.gmane.org List-ID: Content-Type: text/plain; charset="iso-8859-1" To: =?UTF-8?Q?Christian_K=C3=B6nig?= Cc: Qiang Yu , Linux Memory Management List , cgroups-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, dri-devel , David Airlie , Kenny Ho , Michal Hocko , Huang Rui , Johannes Weiner , Tejun Heo , Andrew Morton On Mon, Jan 13, 2020 at 11:56 PM Christian K=C3=B6nig wrote: > > Am 13.01.20 um 16:35 schrieb Qiang Yu: > > Charge TTM allocated system memory to memory cgroup which will > > limit the memory usage of a group of processes. > > NAK to the whole approach. This belongs into the GEM or driver layer, > but not into TTM. > Sorry for responding late. GEM layer seems not a proper place to handle this as: 1. it is not aware of the back storage (system mem or device mem) unless we add this information up to GEM which I think is not appropriate 2. system memory allocated by GEM with drm_gem_get_pages() is already charged to memcg, it's only the ttm system memory not charged to memcg Implement in driver like amdgpu is an option. But seems the problem is insi= de TTM which does not charge pages allocated by itself to memcg, won't it be better to solve it in TTM so that all drivers using it can benefit? Or you = just think we should not rely on memcg for GPU system memory limitation? > > The memory is always charged to the control group of task which > > create this buffer object and when it's created. For example, > > when a buffer is created by process A and exported to process B, > > then process B populate this buffer, the memory is still charged > > to process A's memcg; if a buffer is created by process A when in > > memcg B, then A is moved to memcg C and populate this buffer, it > > will charge memcg B. > > This is actually the most common use case for graphics application where > the X server allocates most of the backing store. > > So we need a better handling than just accounting the memory to whoever > allocated it first. > You mean the application based on DRI2 and X11 protocol draw? I think this is still reasonable to charge xserver for the memory, because xserver alloc= ate the buffer and share to application which is its design and implementation nature. With DRI3, the buffer is allocated by application, also suitable for this approach. Regards, Qiang > Regards, > Christian. > > > > > Signed-off-by: Qiang Yu > > --- > > drivers/gpu/drm/ttm/ttm_bo.c | 10 ++++++++++ > > drivers/gpu/drm/ttm/ttm_page_alloc.c | 18 +++++++++++++++++- > > drivers/gpu/drm/ttm/ttm_tt.c | 3 +++ > > include/drm/ttm/ttm_bo_api.h | 5 +++++ > > include/drm/ttm/ttm_tt.h | 4 ++++ > > 5 files changed, 39 insertions(+), 1 deletion(-) > > > > diff --git a/drivers/gpu/drm/ttm/ttm_bo.c b/drivers/gpu/drm/ttm/ttm_bo.= c > > index 8d91b0428af1..4e64846ee523 100644 > > --- a/drivers/gpu/drm/ttm/ttm_bo.c > > +++ b/drivers/gpu/drm/ttm/ttm_bo.c > > @@ -42,6 +42,7 @@ > > #include > > #include > > #include > > +#include > > > > static void ttm_bo_global_kobj_release(struct kobject *kobj); > > > > @@ -162,6 +163,10 @@ static void ttm_bo_release_list(struct kref *list_= kref) > > if (!ttm_bo_uses_embedded_gem_object(bo)) > > dma_resv_fini(&bo->base._resv); > > mutex_destroy(&bo->wu_mutex); > > +#ifdef CONFIG_MEMCG > > + if (bo->memcg) > > + css_put(&bo->memcg->css); > > +#endif > > bo->destroy(bo); > > ttm_mem_global_free(&ttm_mem_glob, acc_size); > > } > > @@ -1330,6 +1335,11 @@ int ttm_bo_init_reserved(struct ttm_bo_device *b= dev, > > } > > atomic_inc(&ttm_bo_glob.bo_count); > > > > +#ifdef CONFIG_MEMCG > > + if (bo->type =3D=3D ttm_bo_type_device) > > + bo->memcg =3D mem_cgroup_driver_get_from_current(); > > +#endif > > + > > /* > > * For ttm_bo_type_device buffers, allocate > > * address space from the device. > > diff --git a/drivers/gpu/drm/ttm/ttm_page_alloc.c b/drivers/gpu/drm/ttm= /ttm_page_alloc.c > > index b40a4678c296..ecd1831a1d38 100644 > > --- a/drivers/gpu/drm/ttm/ttm_page_alloc.c > > +++ b/drivers/gpu/drm/ttm/ttm_page_alloc.c > > @@ -42,7 +42,7 @@ > > #include /* for seq_printf */ > > #include > > #include > > - > > +#include > > #include > > > > #include > > @@ -1045,6 +1045,11 @@ ttm_pool_unpopulate_helper(struct ttm_tt *ttm, u= nsigned mem_count_update) > > ttm_put_pages(ttm->pages, ttm->num_pages, ttm->page_flags, > > ttm->caching_state); > > ttm->state =3D tt_unpopulated; > > + > > +#ifdef CONFIG_MEMCG > > + if (ttm->memcg) > > + mem_cgroup_uncharge_drvmem(ttm->memcg, ttm->num_pages); > > +#endif > > } > > > > int ttm_pool_populate(struct ttm_tt *ttm, struct ttm_operation_ctx *c= tx) > > @@ -1059,6 +1064,17 @@ int ttm_pool_populate(struct ttm_tt *ttm, struct= ttm_operation_ctx *ctx) > > if (ttm_check_under_lowerlimit(mem_glob, ttm->num_pages, ctx)) > > return -ENOMEM; > > > > +#ifdef CONFIG_MEMCG > > + if (ttm->memcg) { > > + gfp_t gfp_flags =3D GFP_USER; > > + if (ttm->page_flags & TTM_PAGE_FLAG_NO_RETRY) > > + gfp_flags |=3D __GFP_RETRY_MAYFAIL; > > + ret =3D mem_cgroup_charge_drvmem(ttm->memcg, gfp_flags, t= tm->num_pages); > > + if (ret) > > + return ret; > > + } > > +#endif > > + > > ret =3D ttm_get_pages(ttm->pages, ttm->num_pages, ttm->page_flags= , > > ttm->caching_state); > > if (unlikely(ret !=3D 0)) { > > diff --git a/drivers/gpu/drm/ttm/ttm_tt.c b/drivers/gpu/drm/ttm/ttm_tt.= c > > index e0e9b4f69db6..1acb153084e1 100644 > > --- a/drivers/gpu/drm/ttm/ttm_tt.c > > +++ b/drivers/gpu/drm/ttm/ttm_tt.c > > @@ -233,6 +233,9 @@ void ttm_tt_init_fields(struct ttm_tt *ttm, struct = ttm_buffer_object *bo, > > ttm->state =3D tt_unpopulated; > > ttm->swap_storage =3D NULL; > > ttm->sg =3D bo->sg; > > +#ifdef CONFIG_MEMCG > > + ttm->memcg =3D bo->memcg; > > +#endif > > } > > > > int ttm_tt_init(struct ttm_tt *ttm, struct ttm_buffer_object *bo, > > diff --git a/include/drm/ttm/ttm_bo_api.h b/include/drm/ttm/ttm_bo_api.= h > > index 65e399d280f7..95a08e81a73e 100644 > > --- a/include/drm/ttm/ttm_bo_api.h > > +++ b/include/drm/ttm/ttm_bo_api.h > > @@ -54,6 +54,8 @@ struct ttm_place; > > > > struct ttm_lru_bulk_move; > > > > +struct mem_cgroup; > > + > > /** > > * struct ttm_bus_placement > > * > > @@ -180,6 +182,9 @@ struct ttm_buffer_object { > > void (*destroy) (struct ttm_buffer_object *); > > unsigned long num_pages; > > size_t acc_size; > > +#ifdef CONFIG_MEMCG > > + struct mem_cgroup *memcg; > > +#endif > > > > /** > > * Members not needing protection. > > diff --git a/include/drm/ttm/ttm_tt.h b/include/drm/ttm/ttm_tt.h > > index c0e928abf592..10fb5a557b95 100644 > > --- a/include/drm/ttm/ttm_tt.h > > +++ b/include/drm/ttm/ttm_tt.h > > @@ -33,6 +33,7 @@ struct ttm_tt; > > struct ttm_mem_reg; > > struct ttm_buffer_object; > > struct ttm_operation_ctx; > > +struct mem_cgroup; > > > > #define TTM_PAGE_FLAG_WRITE (1 << 3) > > #define TTM_PAGE_FLAG_SWAPPED (1 << 4) > > @@ -116,6 +117,9 @@ struct ttm_tt { > > tt_unbound, > > tt_unpopulated, > > } state; > > +#ifdef CONFIG_MEMCG > > + struct mem_cgroup *memcg; > > +#endif > > }; > > > > /** > > _______________________________________________ > dri-devel mailing list > dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org > https://lists.freedesktop.org/mailman/listinfo/dri-devel