lkml.org 
[lkml]   [2014]   [Nov]   [4]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH net-next 1/7] bpf: add 'flags' attribute to BPF_MAP_UPDATE_ELEM command
    On 11/04/2014 03:54 AM, Alexei Starovoitov wrote:
    > the current meaning of BPF_MAP_UPDATE_ELEM syscall command is:
    > either update existing map element or create a new one.
    > Initially the plan was to add a new command to handle the case of
    > 'create new element if it didn't exist', but 'flags' style looks
    > cleaner and overall diff is much smaller (more code reused), so add 'flags'
    > attribute to BPF_MAP_UPDATE_ELEM command with the following meaning:
    > enum {
    > BPF_MAP_UPDATE_OR_CREATE = 0, /* add new element or update existing */
    > BPF_MAP_CREATE_ONLY, /* add new element if it didn't exist */
    > BPF_MAP_UPDATE_ONLY /* update existing element */
    > };

    From you commit message/code I currently don't see an explanation why
    it cannot be done in typical ``flags style'' as various syscalls do,
    i.e. BPF_MAP_UPDATE_OR_CREATE rather represented as ...

    BPF_MAP_CREATE | BPF_MAP_UPDATE

    Do you expect more than 64 different flags to be passed from user space
    for BPF_MAP?

    > BPF_MAP_CREATE_ONLY can fail with EEXIST if element already exists.
    > BPF_MAP_UPDATE_ONLY can fail with ENOENT if element doesn't exist.
    >
    > Userspace will call it as:
    > int bpf_update_elem(int fd, void *key, void *value, __u64 flags)
    > {
    > union bpf_attr attr = {
    > .map_fd = fd,
    > .key = ptr_to_u64(key),
    > .value = ptr_to_u64(value),
    > .flags = flags;
    > };
    >
    > return bpf(BPF_MAP_UPDATE_ELEM, &attr, sizeof(attr));
    > }
    >
    > Signed-off-by: Alexei Starovoitov <ast@plumgrid.com>


    \
     
     \ /
      Last update: 2014-11-04 10:41    [W:4.117 / U:0.064 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site