• Yonghong Song's avatar
    bpf: Implement bpf iterator for hash maps · d6c4503c
    Yonghong Song authored
    The bpf iterators for hash, percpu hash, lru hash
    and lru percpu hash are implemented. During link time,
    bpf_iter_reg->check_target() will check map type
    and ensure the program access key/value region is
    within the map defined key/value size limit.
    
    For percpu hash and lru hash maps, the bpf program
    will receive values for all cpus. The map element
    bpf iterator infrastructure will prepare value
    properly before passing the value pointer to the
    bpf program.
    
    This patch set supports readonly map keys and
    read/write map values. It does not support deleting
    map elements, e.g., from hash tables. If there is
    a user case for this, the following mechanism can
    be used to support map deletion for hashtab, etc.
      - permit a new bpf program return value, e.g., 2,
        to let bpf iterator know the map element should
        be removed.
      - since bucket lock is taken, the map element will be
        queued.
      - once bucket lock is released after all elements under
        this bucket are traversed, all to-be-deleted map
        elements can be deleted.
    Signed-off-by: default avatarYonghong Song <yhs@fb.com>
    Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
    Link: https://lore.kernel.org/bpf/20200723184114.590470-1-yhs@fb.com
    d6c4503c
map_iter.c 3.67 KB