public inbox for bpf@vger.kernel.org
 help / color / mirror / Atom feed
From: Martin KaFai Lau <martin.lau@linux.dev>
To: Andrii Nakryiko <andrii.nakryiko@gmail.com>
Cc: bpf@vger.kernel.org, Alexei Starovoitov <ast@kernel.org>,
	Andrii Nakryiko <andrii@kernel.org>,
	Daniel Borkmann <daniel@iogearbox.net>,
	kernel-team@meta.com, Yonghong Song <yhs@fb.com>
Subject: Re: [PATCH v2 bpf-next] bpf: Reduce smap->elem_size
Date: Tue, 20 Dec 2022 17:22:11 -0800	[thread overview]
Message-ID: <1d04bc36-38f8-cda7-1ed9-ef0be31197e5@linux.dev> (raw)
In-Reply-To: <CAEf4BzZq5cHGP=e+F1vue4L1kgUwz3Hw_bZ9GMtr9gA75rvT1A@mail.gmail.com>

On 12/20/22 5:17 PM, Andrii Nakryiko wrote:
> On Tue, Dec 20, 2022 at 5:15 PM Martin KaFai Lau <martin.lau@linux.dev> wrote:
>>
>> From: Martin KaFai Lau <martin.lau@kernel.org>
>>
>> 'struct bpf_local_storage_elem' has an unused 56 byte padding at the
>> end due to struct's cache-line alignment requirement. This padding
>> space is overlapped by storage value contents, so if we use sizeof()
>> to calculate the total size, we overinflate it by 56 bytes. Use
>> offsetofend() instead to calculate more exact memory use.
>>
>> Acked-by: Yonghong Song <yhs@fb.com>
>> Signed-off-by: Martin KaFai Lau <martin.lau@kernel.org>
>> ---
>> v2:
>>    Rephrase the commit message (Andrii and Yonghong)
>>    Use offsetofend instead of offsetof (Andrii)
>>
>>   kernel/bpf/bpf_local_storage.c | 4 ++--
>>   1 file changed, 2 insertions(+), 2 deletions(-)
>>
>> diff --git a/kernel/bpf/bpf_local_storage.c b/kernel/bpf/bpf_local_storage.c
>> index b39a46e8fb08..e73fc70071b0 100644
>> --- a/kernel/bpf/bpf_local_storage.c
>> +++ b/kernel/bpf/bpf_local_storage.c
>> @@ -580,8 +580,8 @@ static struct bpf_local_storage_map *__bpf_local_storage_map_alloc(union bpf_att
>>                  raw_spin_lock_init(&smap->buckets[i].lock);
>>          }
>>
>> -       smap->elem_size =
>> -               sizeof(struct bpf_local_storage_elem) + attr->value_size;
>> +       smap->elem_size = offsetofend(struct bpf_local_storage_elem, sdata) +
>> +               attr->value_size;
> 
> Heh, we raced down to a minute. Copy/pasting my latest reply from
> original thread.

lol.  email is more parallel than most people thought :)

> 
> it just occurred to me
> that your change can be written equivalently (but now I do think it's
> cleaner) as:
> 
> smap->elem_size = offsetof(struct bpf_local_storage_elem,
> sdata.data[attr->value_size]);

Sure. will post v3.

> 
> 
> sdata is embedded struct, no pointer dereference, so single offsetof()
> should be enough to peer inside it
> 
> 
> Whichever you prefer, both versions work for me:
> 
> Acked-by: Andrii Nakryiko <andrii@kernel.org>

Thanks for the review.


      reply	other threads:[~2022-12-21  1:22 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-12-21  1:15 [PATCH v2 bpf-next] bpf: Reduce smap->elem_size Martin KaFai Lau
2022-12-21  1:17 ` Andrii Nakryiko
2022-12-21  1:22   ` Martin KaFai Lau [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1d04bc36-38f8-cda7-1ed9-ef0be31197e5@linux.dev \
    --to=martin.lau@linux.dev \
    --cc=andrii.nakryiko@gmail.com \
    --cc=andrii@kernel.org \
    --cc=ast@kernel.org \
    --cc=bpf@vger.kernel.org \
    --cc=daniel@iogearbox.net \
    --cc=kernel-team@meta.com \
    --cc=yhs@fb.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox