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 kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 127B6EB64D9 for ; Sat, 17 Jun 2023 22:02:33 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 7AB436B0071; Sat, 17 Jun 2023 18:02:32 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 75B836B0072; Sat, 17 Jun 2023 18:02:32 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 6227D6B0075; Sat, 17 Jun 2023 18:02:32 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0011.hostedemail.com [216.40.44.11]) by kanga.kvack.org (Postfix) with ESMTP id 4EA1B6B0071 for ; Sat, 17 Jun 2023 18:02:32 -0400 (EDT) Received: from smtpin12.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id 1B7EC16024B for ; Sat, 17 Jun 2023 22:02:32 +0000 (UTC) X-FDA: 80913614544.12.64D210B Received: from mail-io1-f52.google.com (mail-io1-f52.google.com [209.85.166.52]) by imf04.hostedemail.com (Postfix) with ESMTP id 3C9CE40007 for ; Sat, 17 Jun 2023 22:02:30 +0000 (UTC) Authentication-Results: imf04.hostedemail.com; dkim=pass header.d=gmail.com header.s=20221208 header.b=G1DiiroJ; spf=pass (imf04.hostedemail.com: domain of aravind.pub@gmail.com designates 209.85.166.52 as permitted sender) smtp.mailfrom=aravind.pub@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1687039350; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding:in-reply-to: references:dkim-signature; bh=xJf7mco65KOSHvliak4wqtEhSJglYTckL5brhNhFuQs=; b=eEYXOdVOKzgqghfe78jzUPjTxvWazYm5ey5sMwmTf9A9PnDPkukU19EoFpVX51Kd4QI7u5 plV7fk3IhTTx9/WxWxaXrEZ7cZx417Tp1svlV9MFzSHKnnKORWHFofyNYe9AQ0WbX98UqZ yhmMGR6grYIeybL6iU6Tovp/t+thnnI= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1687039350; a=rsa-sha256; cv=none; b=PFpjUihYI8ZhDjZg3KVNthZolxRvLdnyP6bo35DBtumqSiiCjXGJc3DivvONm1IvcfcObf 33yEUGae8NFsKF0xwZgwtTarArWj0iOsDjulxiA4tdka+/wZ+1t4R44onRTzVuIA3x2Hzs K8vmIxvDWVy31uUcWtrVrAOZ9n20u7k= ARC-Authentication-Results: i=1; imf04.hostedemail.com; dkim=pass header.d=gmail.com header.s=20221208 header.b=G1DiiroJ; spf=pass (imf04.hostedemail.com: domain of aravind.pub@gmail.com designates 209.85.166.52 as permitted sender) smtp.mailfrom=aravind.pub@gmail.com; dmarc=pass (policy=none) header.from=gmail.com Received: by mail-io1-f52.google.com with SMTP id ca18e2360f4ac-77acb04309dso98679039f.2 for ; Sat, 17 Jun 2023 15:02:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1687039349; x=1689631349; h=content-transfer-encoding:subject:from:cc:to:content-language :user-agent:mime-version:date:message-id:from:to:cc:subject:date :message-id:reply-to; bh=xJf7mco65KOSHvliak4wqtEhSJglYTckL5brhNhFuQs=; b=G1DiiroJoOwppVVTaaFHc53HxiRSgDGJW3vZRRPjdudLHdhV8KyuK/LcMdAWiyy69E C0n9jDoToDh03oRa8FVVEOZc4K5CA00423EG3Pk7Kvx//vGnOR4y1zetUoAYK9vShiV/ o/d6Oq+hUKLHgOpcPoSd9ZxRMb7Ul9DwSJ6rh+63yyvRDcMrnjFtrAES/YPQyrQTxEaq vc57ivfv3cSQR654XGB+3eRvD2l0WhnFESfJjw3CVeNIij+OZuyKnER3P5TkSSP7Ud8U dD8dfBTFlN/nEopEzP3VBF+xgHTFIaj+aZoZ7ZDzjk483OYUu5OD8IlXHPsnK3r5/631 efzA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1687039349; x=1689631349; h=content-transfer-encoding:subject:from:cc:to:content-language :user-agent:mime-version:date:message-id:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=xJf7mco65KOSHvliak4wqtEhSJglYTckL5brhNhFuQs=; b=U2O5JCxml4BcsXxLO2EnBYYYozTclMgeCnDnxmHKySkMs2DhEYa0UaWqx1OzCHYxqR l7BN6pKGPcRi8fDHMS+OtzB/mjSL3oUqxmYsoajblbzuOw20NqXWChHwP47iLQB0Jht2 WQ/D4zVTWb1rNocpXk6IGQOke9ZM6tKkfhwCUG5Fk4whLWP/xkGpu5mbRzZ2Oz6NKPQI 1OYQkZHu2TeMIfKzTEbUUpAzdaHLHRTvNwigAYGcz+9nPOvv8Fge12fjmnkN6wjPuvsP mIp9qiL7/+k8RlTq7q4BHY1y6mORGhc9PcR2RlKEDtIPL71ttY6SIt0QknA4m+j+jFAe wXGA== X-Gm-Message-State: AC+VfDyaz/53jXJCxA/W/Nl9746SGTmon1cndLQZFQQAD5I1VKYYcKCb eJQYIbZE7sCwhHq6Th701g9SeziziQU8zQ== X-Google-Smtp-Source: ACHHUZ7jx3Inb+OwjEFy8y6ThjPo8PcqE3Z4xMuBYpiN5AE9CgxXep8EwJW9QCNty7khAlMcs3GpvA== X-Received: by 2002:a05:6602:424e:b0:775:5f74:f4c7 with SMTP id cc14-20020a056602424e00b007755f74f4c7mr3641810iob.17.1687039349164; Sat, 17 Jun 2023 15:02:29 -0700 (PDT) Received: from [192.168.43.16] ([199.7.157.10]) by smtp.gmail.com with ESMTPSA id g20-20020a0566380c5400b0041f5a0b7fa1sm7226438jal.144.2023.06.17.15.02.28 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sat, 17 Jun 2023 15:02:28 -0700 (PDT) Message-ID: <77f98dae-815f-2191-0a1d-63e2a0886d9e@gmail.com> Date: Sat, 17 Jun 2023 18:02:24 -0400 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.10.1 Content-Language: en-US To: linux-mm@kvack.org Cc: linux-kernel@vger.kernel.org From: Aravind Ceyardass Subject: reference counting gcc plugin Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Rspamd-Queue-Id: 3C9CE40007 X-Rspam-User: X-Rspamd-Server: rspam11 X-Stat-Signature: 1uddwo13cew93f5aijz3bf4y3jjmphug X-HE-Tag: 1687039349-40374 X-HE-Meta: U2FsdGVkX19AYo5qkEflf4VF8fGmrqxGr2X9g0G1c188SkEphEYNWUk6izuApEmyqHA6T3wHPIYrBJW3AqLZX3gGQG1arpQ3FdwVkLOMuqpfXwfqWYF5uy4niQKMlS8agOnW8t8rPWXJJdESl/otCy7x9QGikGYBF25BP5BnWVbGFTXXER9wFwCg0FopCAvyfSsXMybLDMPJaXf4BiAJhQdWncF2fpBXSEW4gDDP0/fxV8sZjvipL2ZAkBobxj8c5c/dURtKGMJFTVRvZZmqc5XANfRnfoBSz0pxgBEL7YKpfMaCz2YwtAHg1m6swi3PGkEqIPjPigMnRFDSr+rd+tCCTzqyer/KA4JU5dppf3rDIJiV62V+PmUASvR4VdQP2IhMN/VDjbj2pMObcoy6ifv5idklfz9K5R3r4MlSEQ36j8hWC5gXzMX0IvTJwPXc5L7PXo8fwTe8NtaMrC4TuklMgvYSqrOgOPRYaNcj+bzkDopyBoZq+ebeGhaRSaTiehwXeFCC8qioDTanIzvSJetmwj6ClDImNL6uNJXXHijijjJ6UUPfNZXEYCMznUIFm6nXBjrQ7jrX+atonqQ8JzAsupn+dpBEIrMEhUwHhZAnNZa3YI5dgbSR9fU9BEY/UYHZ/YxnC5seP74XhPZlrOXH48+98eYyrXVAzjGWCkCy74kMUzHDyM7ggKSq+WsQgLXrvP9Yowl7ctxQ0sqE03j81FdpHuHsshsycwe7TVGHr5dAB4RMlZSYvy4MAkzVUsPTxDRABdNlUvAS5lBbY5PchoZsqO35wYZ4kIBJBHGAyqrklNSTX9sAabf0bizgWcY0QosOKuUQoQB574pkaG40BrjufYxpKG6erKNwr//klWl3gnBzjRzg2HdD8CWJiES8SZ4DlR1e5zgxWuVHWCLLgNcXHIDW1KBRFVUuen6N6SKqOYi80zpGikznRob8DrxGZdaHv+Y8/cxsFPv stkjsNzH SUuZlHpcWkxkI3YH4iO2mupF++hf69lFfb2vMTdYZNyiWxXaOjb/UzI2bXTIWK8rXTO8PuKSTkAKUcnexQNDIhwD5yB8enmPwvASIdPEFgMd48Lq+rgZjTqxaLApn21eseiHZvxXYfBqkdcbSusbgQwiT7esL44iqMRRlo1hX7XXfR1t2HvgKSEomj1gs/xsHRNIXMLvSe29FD9IXn5Q59Ssy1gyQhKd7VIVYvGNdiTz6Vaag5ZPf/0XAXp6oN2WYrGKHh3ErF4oAZEyr4UP6pMp65SZ9FYcCLtGQZ60ZCzfYOXjGaDosMgdghNgkRY9ntARAafxdSYfoMxvy74bqNkBTfh0kQMrkyzit3Kwj8ovBxBn0DpkCZGAtARHnvPTDcZNitx1d2yW13rhPmG07ekVxgkNRxgi0S7j+fx4212zRg3bGi5q5mBWokJ3FBVd4PmqSwTTQJAT4ZzM= 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: 2nd attempt. I hope this is the right mailing list. :-) Hello Kernel People, I have developed a gcc plugin for implementing reference counting. I see that the kernel has implemented many different techniques over the years, but I couldn't find any with compiler support. I would like your ideas, inputs before I release the plugin for everyone hoping that it would benefit the Linux kernel. Here is a sample code to give you an idea of usage and the code transformation done by the plugin. #include "hrcmm.h" /* REFTRACK_STRUCT macro defines the following declarations struct foo; void foo_addref(const struct foo *const); void foo_removeref(const struct foo *const); void foo_destroy(struct foo *const); */ REFTRACK_STRUCT(foo){ int bar; }; /* REFTRACK_EPILOG_WITH_DTOR macro calls foo_destroy when reference count is zero. This is optional, if there is no special cleanup to be done, use REFTRACK_EPILOG. */ REFTRACK_EPILOG_WITH_DTOR(foo); // This function is called when the reference count for object pointed to by p is zero void foo_destroy(struct foo *p){ if (p) printf("foo destroyed:%p\n", p); } typedef struct foo foo; // statements commented out are injected by the plugin void baz(foo *p){ printf("%d\n", p->bar); // foo_removeref(p); } int main(int argc, char *argv[]){ foo *p = rc_malloc(sizeof(foo)); // rc_malloc is a default wrapper provided // foo_addref(p); p->bar = 123; // foo_addref(p); foo *q = p; // foo_addref(q); baz(q); // foo_removeref(p); // foo_removeref(q); } Aravind