[congwang:sch_bpf 3/3] kernel/bpf/priority_queue_map.c:77:11: error: 'struct bpf_priority_queue' has no member named 'size'

From: kernel test robot
Date: Sat Sep 11 2021 - 17:11:43 EST


tree: https://github.com/congwang/linux.git sch_bpf
head: f69c4127564dd6abacf52f9e5e2479de874493d9
commit: f69c4127564dd6abacf52f9e5e2479de874493d9 [3/3] bpf: introduce priority queue based map
config: powerpc-ppc64_defconfig (attached as .config)
compiler: powerpc64-linux-gcc (GCC) 11.2.0
reproduce (this is a W=1 build):
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# https://github.com/congwang/linux/commit/f69c4127564dd6abacf52f9e5e2479de874493d9
git remote add congwang https://github.com/congwang/linux.git
git fetch --no-tags congwang sch_bpf
git checkout f69c4127564dd6abacf52f9e5e2479de874493d9
# save the attached .config to linux build tree
mkdir build_dir
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-11.2.0 make.cross O=build_dir ARCH=powerpc SHELL=/bin/bash

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@xxxxxxxxx>

All errors (new ones prefixed by >>):

kernel/bpf/priority_queue_map.c: In function 'priority_queue_map_alloc':
>> kernel/bpf/priority_queue_map.c:77:11: error: 'struct bpf_priority_queue' has no member named 'size'
77 | pq->size = (u64) attr->max_entries + 1;
| ^~
>> kernel/bpf/priority_queue_map.c:80:11: error: 'struct bpf_priority_queue' has no member named 'elem_size'
80 | pq->elem_size = sizeof(struct bpf_priority_queue_node ) +
| ^~
kernel/bpf/priority_queue_map.c: In function 'priority_queue_map_peek':
>> kernel/bpf/priority_queue_map.c:111:9: error: 'ptr' undeclared (first use in this function)
111 | ptr = n->key + pq->map.key_size;
| ^~~
kernel/bpf/priority_queue_map.c:111:9: note: each undeclared identifier is reported only once for each function it appears in
>> kernel/bpf/priority_queue_map.c:100:13: error: unused variable 'key_size' [-Werror=unused-variable]
100 | u32 key_size = map->key_size;
| ^~~~~~~~
kernel/bpf/priority_queue_map.c: In function 'priority_queue_map_pop_elem':
kernel/bpf/priority_queue_map.c:133:9: error: 'ptr' undeclared (first use in this function)
133 | ptr = n->key + pq->map.key_size;
| ^~~
kernel/bpf/priority_queue_map.c:122:13: error: unused variable 'key_size' [-Werror=unused-variable]
122 | u32 key_size = map->key_size;
| ^~~~~~~~
kernel/bpf/priority_queue_map.c: At top level:
>> kernel/bpf/priority_queue_map.c:152:33: error: no previous prototype for 'alloc_priority_queue_node' [-Werror=missing-prototypes]
152 | struct bpf_priority_queue_node *alloc_priority_queue_node(struct bpf_priority_queue *pq)
| ^~~~~~~~~~~~~~~~~~~~~~~~~
kernel/bpf/priority_queue_map.c: In function 'alloc_priority_queue_node':
kernel/bpf/priority_queue_map.c:154:49: error: 'struct bpf_priority_queue' has no member named 'elem_size'
154 | return bpf_map_kmalloc_node(&pq->map, pq->elem_size,
| ^~
kernel/bpf/priority_queue_map.c: In function 'priority_queue_map_update_elem':
>> kernel/bpf/priority_queue_map.c:166:23: error: 'flags' redeclared as different kind of symbol
166 | unsigned long flags;
| ^~~~~
kernel/bpf/priority_queue_map.c:161:57: note: previous definition of 'flags' with type 'u64' {aka 'long long unsigned int'}
161 | void *value, u64 flags)
| ~~~~^~~~~
kernel/bpf/priority_queue_map.c:165:13: error: unused variable 'key_size' [-Werror=unused-variable]
165 | u32 key_size = map->key_size;
| ^~~~~~~~
kernel/bpf/priority_queue_map.c: In function 'alloc_priority_queue_node':
kernel/bpf/priority_queue_map.c:157:1: error: control reaches end of non-void function [-Werror=return-type]
157 | }
| ^
cc1: all warnings being treated as errors


vim +77 kernel/bpf/priority_queue_map.c

63
64 static struct bpf_map *priority_queue_map_alloc(union bpf_attr *attr)
65 {
66 int numa_node = bpf_map_attr_numa_node(attr);
67 struct bpf_priority_queue *pq;
68 u64 size, queue_size;
69
70 queue_size = sizeof(*pq) + size * attr->value_size;
71 pq = bpf_map_area_alloc(queue_size, numa_node);
72 if (!pq)
73 return ERR_PTR(-ENOMEM);
74
75 memset(pq, 0, sizeof(*pq));
76 bpf_map_init_from_attr(&pq->map, attr);
> 77 pq->size = (u64) attr->max_entries + 1;
78 raw_spin_lock_init(&pq->lock);
79 pq_root_init(&pq->root, bpf_priority_queue_cmp);
> 80 pq->elem_size = sizeof(struct bpf_priority_queue_node ) +
81 round_up(pq->map.key_size, 8) +
82 round_up(pq->map.value_size, 8);
83 return &pq->map;
84 }
85
86 /* Called when map->refcnt goes to zero, either from workqueue or from syscall */
87 static void priority_queue_map_free(struct bpf_map *map)
88 {
89 struct bpf_priority_queue *pq = bpf_priority_queue(map);
90
91 pq_flush(&pq->root, NULL);
92 bpf_map_area_free(pq);
93 }
94
95 /* Called from syscall or from eBPF program */
96 static int priority_queue_map_peek(struct bpf_map *map, void *value)
97 {
98 struct bpf_priority_queue *pq = bpf_priority_queue(map);
99 struct bpf_priority_queue_node *n;
> 100 u32 key_size = map->key_size;
101 struct pq_node *node;
102 unsigned long flags;
103
104 raw_spin_lock_irqsave(&pq->lock, flags);
105 node = pq_top(&pq->root);
106 if (!node) {
107 raw_spin_unlock_irqrestore(&pq->lock, flags);
108 return -ENOENT;
109 }
110 n = container_of(node, struct bpf_priority_queue_node, node);
> 111 ptr = n->key + pq->map.key_size;
112 memcpy(value, ptr, pq->map.value_size);
113 raw_spin_unlock_irqrestore(&pq->lock, flags);
114 return 0;
115 }
116
117 /* Called from syscall or from eBPF program */
118 static int priority_queue_map_pop_elem(struct bpf_map *map, void *value)
119 {
120 struct bpf_priority_queue *pq = bpf_priority_queue(map);
121 struct bpf_priority_queue_node *n;
122 u32 key_size = map->key_size;
123 struct pq_node *node;
124 unsigned long flags;
125
126 raw_spin_lock_irqsave(&pq->lock, flags);
127 node = pq_pop(&pq->root);
128 if (!node) {
129 raw_spin_unlock_irqrestore(&pq->lock, flags);
130 return -ENOENT;
131 }
132 n = container_of(node, struct bpf_priority_queue_node, node);
133 ptr = n->key + pq->map.key_size;
134 memcpy(value, ptr, pq->map.value_size);
135 raw_spin_unlock_irqrestore(&pq->lock, flags);
136 return 0;
137 }
138
139 /* Called from syscall or from eBPF program */
140 static int priority_queue_map_push_elem(struct bpf_map *map, void *value,
141 u64 flags)
142 {
143 return -EINVAL;
144 }
145
146 /* Called from syscall or from eBPF program */
147 static void *priority_queue_map_lookup_elem(struct bpf_map *map, void *key)
148 {
149 return NULL;
150 }
151
> 152 struct bpf_priority_queue_node *alloc_priority_queue_node(struct bpf_priority_queue *pq)
153 {
154 return bpf_map_kmalloc_node(&pq->map, pq->elem_size,
155 GFP_ATOMIC | __GFP_NOWARN,
156 pq->map.numa_node);
157 }
158
159 /* Called from syscall or from eBPF program */
160 static int priority_queue_map_update_elem(struct bpf_map *map, void *key,
161 void *value, u64 flags)
162 {
163 struct bpf_priority_queue *pq = bpf_priority_queue(map);
164 struct bpf_priority_queue_node *n;
165 u32 key_size = map->key_size;
> 166 unsigned long flags;
167
168 n = alloc_priority_queue_node(pq);
169 if (!n)
170 return -ENOMEM;
171 raw_spin_lock_irqsave(&pq->lock, flags);
172 pq_push(&pq->root, &n->node);
173 raw_spin_unlock_irqrestore(&pq->lock, flags);
174 return 0;
175 }
176

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@xxxxxxxxxxxx

Attachment: .config.gz
Description: application/gzip