Skip to content

Helper function bpf_spin_unlock

v5.1

Release the lock previously locked by a call to bpf_spin_lock(lock).

Definition

Copyright (c) 2015 The Libbpf Authors. All rights reserved.

static long (* const bpf_spin_unlock)(struct bpf_spin_lock *lock) = (void *) 94;

Usage

Program types

This helper call can be used in the following program types:

Example

// SPDX-License-Identifier: GPL-2.0
// Copyright (c) 2020 Facebook

#include <linux/ptrace.h>
#include <linux/bpf.h>
#include <bpf/bpf_helpers.h>
#include <bpf/bpf_tracing.h>

#define VAR_NUM 2

struct hmap_elem {
    struct bpf_spin_lock lock;
    int var[VAR_NUM];
};

struct {
    __uint(type, BPF_MAP_TYPE_HASH);
    __uint(max_entries, 1);
    __type(key, __u32);
    __type(value, struct hmap_elem);
} hash_map SEC(".maps");

SEC("freplace/handle_kprobe")
int new_handle_kprobe(struct pt_regs *ctx)
{
    struct hmap_elem *val;
    int key = 0;

    val = bpf_map_lookup_elem(&hash_map, &key);
    if (!val)
        return 1;
    /* spin_lock in hash map */
    bpf_spin_lock(&val->lock);
    val->var[0] = 99;
    bpf_spin_unlock(&val->lock);

    return 0;
}

char _license[] SEC("license") = "GPL";