Quellcodebibliothek Statistik Leitseite products/sources/formale Sprachen/C/Linux/tools/testing/selftests/bpf/progs/   (Open Source Betriebssystem Version 6.17.9©)  Datei vom 24.10.2025 mit Größe 1 kB image not shown  

Quelle  cgrp_kfunc_common.h   Sprache: C

 
/* SPDX-License-Identifier: GPL-2.0 */
/* Copyright (c) 2022 Meta Platforms, Inc. and affiliates. */

#ifndef _CGRP_KFUNC_COMMON_H
#define _CGRP_KFUNC_COMMON_H

#include <errno.h>
#include <vmlinux.h>
#include <bpf/bpf_helpers.h>
#include <bpf/bpf_tracing.h>

struct __cgrps_kfunc_map_value {
 struct cgroup __kptr * cgrp;
};

struct {
 __uint(type, BPF_MAP_TYPE_HASH);
 __type(key, int);
 __type(value, struct __cgrps_kfunc_map_value);
 __uint(max_entries, 1);
} __cgrps_kfunc_map SEC(".maps");

struct cgroup *bpf_cgroup_acquire(struct cgroup *p) __ksym;
void bpf_cgroup_release(struct cgroup *p) __ksym;
struct cgroup *bpf_cgroup_ancestor(struct cgroup *cgrp, int level) __ksym;
struct cgroup *bpf_cgroup_from_id(u64 cgid) __ksym;
void bpf_rcu_read_lock(void) __ksym;
void bpf_rcu_read_unlock(void) __ksym;

static inline struct __cgrps_kfunc_map_value *cgrps_kfunc_map_value_lookup(struct cgroup *cgrp)
{
 s32 id;
 long status;

 status = bpf_probe_read_kernel(&id, sizeof(id), &cgrp->self.id);
 if (status)
  return NULL;

 return bpf_map_lookup_elem(&__cgrps_kfunc_map, &id);
}

static inline int cgrps_kfunc_map_insert(struct cgroup *cgrp)
{
 struct __cgrps_kfunc_map_value local, *v;
 long status;
 struct cgroup *acquired, *old;
 s32 id;

 status = bpf_probe_read_kernel(&id, sizeof(id), &cgrp->self.id);
 if (status)
  return status;

 local.cgrp = NULL;
 status = bpf_map_update_elem(&__cgrps_kfunc_map, &id, &local, BPF_NOEXIST);
 if (status)
  return status;

 v = bpf_map_lookup_elem(&__cgrps_kfunc_map, &id);
 if (!v) {
  bpf_map_delete_elem(&__cgrps_kfunc_map, &id);
  return -ENOENT;
 }

 acquired = bpf_cgroup_acquire(cgrp);
 if (!acquired) {
  bpf_map_delete_elem(&__cgrps_kfunc_map, &id);
  return -ENOENT;
 }

 old = bpf_kptr_xchg(&v->cgrp, acquired);
 if (old) {
  bpf_cgroup_release(old);
  return -EEXIST;
 }

 return 0;
}

#endif /* _CGRP_KFUNC_COMMON_H */

Messung V0.5
C=97 H=100 G=98

¤ Dauer der Verarbeitung: 0.9 Sekunden  (vorverarbeitet)  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.