Re: [PATCH v2 bpf-next 1/2] bpf: introduce BPF_F_PRESERVE_ELEMS for perf event array

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 9/29/20 11:56 PM, Song Liu wrote:
[...]
+static void bpf_fd_array_map_clear(struct bpf_map *map);
+
+static void perf_event_fd_array_map_free(struct bpf_map *map)
+{
+	if (map->map_flags & BPF_F_PRESERVE_ELEMS)
+		bpf_fd_array_map_clear(map);
+	fd_array_map_free(map);
+}

Not quite sure why you place that here and added the fwd declaration? If you
place perf_event_fd_array_map_free() near perf_event_array_map_ops, then you
also don't need the additional bpf_fd_array_map_clear declaration.

  static void *prog_fd_array_get_ptr(struct bpf_map *map,
  				   struct file *map_file, int fd)
  {
@@ -1134,6 +1148,9 @@ static void perf_event_fd_array_release(struct bpf_map *map,
  	struct bpf_event_entry *ee;
  	int i;
+ if (map->map_flags & BPF_F_PRESERVE_ELEMS)
+		return;
+
  	rcu_read_lock();
  	for (i = 0; i < array->map.max_entries; i++) {
  		ee = READ_ONCE(array->ptrs[i]);
@@ -1148,7 +1165,7 @@ const struct bpf_map_ops perf_event_array_map_ops = {
  	.map_meta_equal = bpf_map_meta_equal,
  	.map_alloc_check = fd_array_map_alloc_check,
  	.map_alloc = array_map_alloc,
-	.map_free = fd_array_map_free,
+	.map_free = perf_event_fd_array_map_free,
  	.map_get_next_key = array_map_get_next_key,
  	.map_lookup_elem = fd_array_map_lookup_elem,
  	.map_delete_elem = fd_array_map_delete_elem,
diff --git a/tools/include/uapi/linux/bpf.h b/tools/include/uapi/linux/bpf.h
index 82522f05c0213..ea78eb89f8d67 100644
--- a/tools/include/uapi/linux/bpf.h
+++ b/tools/include/uapi/linux/bpf.h
@@ -414,6 +414,9 @@ enum {
/* Enable memory-mapping BPF map */
  	BPF_F_MMAPABLE		= (1U << 10),
+
+/* Share perf_event among processes */
+	BPF_F_PRESERVE_ELEMS	= (1U << 11),
  };
/* Flags for BPF_PROG_QUERY. */





[Index of Archives]     [Linux Samsung SoC]     [Linux Rockchip SoC]     [Linux Actions SoC]     [Linux for Synopsys ARC Processors]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]


  Powered by Linux