Received: by 2002:a05:6a10:1a4d:0:0:0:0 with SMTP id nk13csp6055855pxb; Mon, 14 Feb 2022 14:14:09 -0800 (PST) X-Google-Smtp-Source: ABdhPJxiEWT20JV8/cXBCsJQDr96xUtRYUBPV8oh56hnxJSkPug5al04sNllAIeO50DiThYVo1Pj X-Received: by 2002:a17:902:e844:: with SMTP id t4mr1078173plg.22.1644876849714; Mon, 14 Feb 2022 14:14:09 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1644876849; cv=none; d=google.com; s=arc-20160816; b=auWn5OLAxqKP7G7kcq0TXwD30fvFHy3TwceMo5y9Vu/OQqDGLNE/IAkErJa02Vzhvi FDWsA4hVbRzg2T1V4XbNwh2MG/qV9sdwWKKRA3poZQZFn3iyemdmvWzOC6uD0M/9uKCn wX2wBGywyUbiXrCgxjWVKMX0WFs12V4jxaP8yoKBdXLbtIwmb62Mcptf4EZGXfncif27 ipq0obeIhxD6NHp7813Gan/YuKmqd4MarInXCichILVut9gc0AXM1CG0nRGZP7M+7dmf ECO2uVct+zt4oL/QKlV+W5/JKyglM/xBuUSzESv384ZfAiZtFbGrwC+wWKab7JDyyJlX uW2Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:cc:to:subject :message-id:date:from:in-reply-to:references:mime-version :dkim-signature; bh=xB7MDihYGx4nWu/GuBF27GgwlKh3zzMd7sng4PC9OAg=; b=H7I3JmFgm5DkBNOD8mBAehKt0WkQ21ejc6vASJ9xB6gqmDCQhgfHCmJyT05ohT2nWI ATutSuND5O0rpSRu81A35Z+5YNy4NvE5WLSu9EHGM8wys39WlhrZ1zvYnTMagQj8dTIY l22ePspeiQOPLF0sGD08+tdqxGPjcE3320Tj5p0FowhBP/Fc/jrw2ijMTBhbgWafvOFJ pjszUHd13yZZhDiu1wH3BrCZVJEpM9QTZztqTmfmCXYJhZUYpcyTk5E8aIEieWbITNUO XsX5BFGW/bBjCl68pXcenlW6bUjdIxEpropM7FQ/FLAhFt09pEOyTS6t+CfHMWVkTUFi 5SSg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=AlVXfUdq; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id ot12si6128812pjb.66.2022.02.14.14.13.54; Mon, 14 Feb 2022 14:14:09 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=AlVXfUdq; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231225AbiBNV0V (ORCPT + 99 others); Mon, 14 Feb 2022 16:26:21 -0500 Received: from mxb-00190b01.gslb.pphosted.com ([23.128.96.19]:35220 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231194AbiBNV0T (ORCPT ); Mon, 14 Feb 2022 16:26:19 -0500 Received: from mail-lf1-x12b.google.com (mail-lf1-x12b.google.com [IPv6:2a00:1450:4864:20::12b]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 267D1710DD for ; Mon, 14 Feb 2022 13:26:10 -0800 (PST) Received: by mail-lf1-x12b.google.com with SMTP id u20so4621509lff.2 for ; Mon, 14 Feb 2022 13:26:10 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=xB7MDihYGx4nWu/GuBF27GgwlKh3zzMd7sng4PC9OAg=; b=AlVXfUdq3X/vSQj1QADxlefqzYOIxjNWuIGVTNcQd90bTzHdMLXt1diiYfHcXmfDuo Aih+Ei5sv53Rvnfwr6T+Giffv/hPnsONKFFuY2MDaby2I/Gm/wkOK3W25ZFOa3QTswJK etjN6hFfrsFB0uHvKeOLdTbOErJPlMDj409uuOgjaLBCd7DDEDWC89ZjaA+b9qyZ40kj s0vZ3yX4ID2jYqbVwwVsaHm/Vvm4t/enqPFSc5JTB/j4R1JzwarD/mLvPFiGLs27GTHY OzNCXT4ZuoxDbUdaDSQpUyuqB1ItZusqu95/zc54s7Tn3oSLSHXezYPdHrPXDjs96Thu gSQA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=xB7MDihYGx4nWu/GuBF27GgwlKh3zzMd7sng4PC9OAg=; b=4bw7QA0F3R0zGw/gX9iPiemnYblB9pIBF1BF67pEgxibS2M7TeLGK1vo+c5XyNY2HQ YMrVVPIK7Q7j0IzYKWJ1/sECO1Q3Sjjvr5Sy8eXDl5prbkPGyhQ3bU033MxKxYmizVqx PwiZrZFzq24F8OLWQoDoyzvFPbF/bgfQdkp/xv+KnhCKmVfEXEELQseEwOdEMlTYEvLB uNTayi+bgZPZF6DsDVaJH+SC3Jnas5FUFBNKytARwEyVlIRPXF2p1oWuODp+03aJvZgq ECeQdTBOpLpq/XtiklDA0FJIGAsHoCN/rOLSiF5+qG3WRpO8DecqjXKY/bEQCz5Wo2aH On/g== X-Gm-Message-State: AOAM5330V47C48kY3GNg9WGiaGvVjHm6n7d5BJ1JAwAMddsW6+OSyfzz njZQinrhPgH1ygxwyXEMOlxibiyZd6Vt9HOFZ+Chrw== X-Received: by 2002:a05:6512:1699:: with SMTP id bu25mr695407lfb.403.1644873968216; Mon, 14 Feb 2022 13:26:08 -0800 (PST) MIME-Version: 1.0 References: <20220211161831.3493782-1-tjmercier@google.com> <20220211161831.3493782-7-tjmercier@google.com> In-Reply-To: <20220211161831.3493782-7-tjmercier@google.com> From: Todd Kjos Date: Mon, 14 Feb 2022 13:25:55 -0800 Message-ID: Subject: Re: [RFC v2 6/6] android: binder: Add a buffer flag to relinquish ownership of fds To: "T.J. Mercier" Cc: Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Daniel Vetter , Jonathan Corbet , Greg Kroah-Hartman , =?UTF-8?B?QXJ2ZSBIasO4bm5ldsOlZw==?= , Todd Kjos , Martijn Coenen , Joel Fernandes , Christian Brauner , Hridya Valsaraju , Suren Baghdasaryan , Sumit Semwal , =?UTF-8?Q?Christian_K=C3=B6nig?= , Liam Mark , Brian Starkey , John Stultz , Tejun Heo , Zefan Li , Johannes Weiner , kaleshsingh@google.com, Kenny.Ho@amd.com, dri-devel@lists.freedesktop.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, linux-media@vger.kernel.org, linaro-mm-sig@lists.linaro.org, cgroups@vger.kernel.org Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Spam-Status: No, score=-17.6 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF, ENV_AND_HDR_SPF_MATCH,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS, T_SCC_BODY_TEXT_LINE,USER_IN_DEF_DKIM_WL,USER_IN_DEF_SPF_WL autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Fri, Feb 11, 2022 at 8:19 AM T.J. Mercier wrote: > > This patch introduces a buffer flag BINDER_BUFFER_FLAG_SENDER_NO_NEED > that a process sending an fd array to another process over binder IPC > can set to relinquish ownership of the fds being sent for memory > accounting purposes. If the flag is found to be set during the fd array > translation and the fd is for a DMA-BUF, the buffer is uncharged from > the sender's cgroup and charged to the receiving process's cgroup > instead. > > It is up to the sending process to ensure that it closes the fds > regardless of whether the transfer failed or succeeded. > > Most graphics shared memory allocations in Android are done by the > graphics allocator HAL process. On requests from clients, the HAL process > allocates memory and sends the fds to the clients over binder IPC. > The graphics allocator HAL will not retain any references to the > buffers. When the HAL sets the BINDER_BUFFER_FLAG_SENDER_NO_NEED for fd > arrays holding DMA-BUF fds, the gpu cgroup controller will be able to > correctly charge the buffers to the client processes instead of the > graphics allocator HAL. > > From: Hridya Valsaraju > Signed-off-by: Hridya Valsaraju > Co-developed-by: T.J. Mercier > Signed-off-by: T.J. Mercier > --- > changes in v2 > - Move dma-buf cgroup charge transfer from a dma_buf_op defined by every > heap to a single dma-buf function for all heaps per Daniel Vetter and > Christian K=C3=B6nig. > > drivers/android/binder.c | 26 ++++++++++++++++++++++++++ > include/uapi/linux/android/binder.h | 1 + > 2 files changed, 27 insertions(+) > > diff --git a/drivers/android/binder.c b/drivers/android/binder.c > index 8351c5638880..f50d88ded188 100644 > --- a/drivers/android/binder.c > +++ b/drivers/android/binder.c > @@ -42,6 +42,7 @@ > > #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt > > +#include > #include > #include > #include > @@ -2482,8 +2483,10 @@ static int binder_translate_fd_array(struct list_h= ead *pf_head, Is this only needed for the BINDER_TYPE_FDA case (multiple fds)? This never needs to be done in the BINDER_TYPE_FD case (single fd)? > { > binder_size_t fdi, fd_buf_size; > binder_size_t fda_offset; > + bool transfer_gpu_charge =3D false; > const void __user *sender_ufda_base; > struct binder_proc *proc =3D thread->proc; > + struct binder_proc *target_proc =3D t->to_proc; > int ret; > > fd_buf_size =3D sizeof(u32) * fda->num_fds; > @@ -2521,8 +2524,15 @@ static int binder_translate_fd_array(struct list_h= ead *pf_head, > if (ret) > return ret; > > + if (IS_ENABLED(CONFIG_CGROUP_GPU) && > + parent->flags & BINDER_BUFFER_FLAG_SENDER_NO_NEED) > + transfer_gpu_charge =3D true; > + > for (fdi =3D 0; fdi < fda->num_fds; fdi++) { > u32 fd; > + struct dma_buf *dmabuf; > + struct gpucg *gpucg; > + > binder_size_t offset =3D fda_offset + fdi * sizeof(fd); > binder_size_t sender_uoffset =3D fdi * sizeof(fd); > > @@ -2532,6 +2542,22 @@ static int binder_translate_fd_array(struct list_h= ead *pf_head, > in_reply_to); > if (ret) > return ret > 0 ? -EINVAL : ret; > + > + if (!transfer_gpu_charge) > + continue; > + > + dmabuf =3D dma_buf_get(fd); > + if (IS_ERR(dmabuf)) > + continue; > + > + gpucg =3D gpucg_get(target_proc->tsk); > + ret =3D dma_buf_charge_transfer(dmabuf, gpucg); > + if (ret) { > + pr_warn("%d:%d Unable to transfer DMA-BUF fd char= ge to %d", > + proc->pid, thread->pid, target_proc->pid)= ; > + gpucg_put(gpucg); > + } > + dma_buf_put(dmabuf); > } > return 0; > } > diff --git a/include/uapi/linux/android/binder.h b/include/uapi/linux/and= roid/binder.h > index 3246f2c74696..169fd5069a1a 100644 > --- a/include/uapi/linux/android/binder.h > +++ b/include/uapi/linux/android/binder.h > @@ -137,6 +137,7 @@ struct binder_buffer_object { > > enum { > BINDER_BUFFER_FLAG_HAS_PARENT =3D 0x01, > + BINDER_BUFFER_FLAG_SENDER_NO_NEED =3D 0x02, > }; > > /* struct binder_fd_array_object - object describing an array of fds in = a buffer > -- > 2.35.1.265.g69c8d7142f-goog >