diff mbox series

[ovs-dev] sparse: Fix numa.h for libnuma >= 2.0.13.

Message ID 20230117170827.3000242-1-i.maximets@ovn.org
State Accepted
Commit d6501c66050ad7ad54081f2104a01a28f1b3ce42
Headers show
Series [ovs-dev] sparse: Fix numa.h for libnuma >= 2.0.13. | expand

Checks

Context Check Description
ovsrobot/apply-robot success apply and check: success
ovsrobot/github-robot-_Build_and_Test success github build: passed
ovsrobot/intel-ovs-compilation success test: success

Commit Message

Ilya Maximets Jan. 17, 2023, 5:08 p.m. UTC
Current numa.h header for sparse re-defines functions in a way
that breaks the header from libnuma 2.0.13+, because the original
issue was fixed in that version:
  https://github.com/numactl/numactl/commit/25dcde021dd4f1a1dcac2ba0094f1cb441a2e4a5

Sparse errors as a result:

  lib/netdev-afxdp.c: note: in included file (through include/sparse/numa.h):
  /usr/include/numa.h:346:26: error: macro "numa_get_interleave_mask_compat"
                                     passed 1 arguments, but takes just 0
  /usr/include/numa.h:376:26: error: macro "numa_get_membind_compat"
                                     passed 1 arguments, but takes just 0
  /usr/include/numa.h:406:26: error: macro "numa_get_run_node_mask_compat"
                                     passed 1 arguments, but takes just 0
  /usr/include/numa.h:347:1: error: Expected ; at end of declaration
  /usr/include/numa.h:347:1: error: got {
  /usr/include/numa.h:351:9: error: 'tp' has implicit type

It's hard to adjust defines to work with both versions of a header.
Just defining all the functions we actually use in OVS instead and
not including the original header.

Fixes: e8568993e062 ("netdev-afxdp: NUMA-aware memory allocation for XSK related memory.")
Signed-off-by: Ilya Maximets <i.maximets@ovn.org>
---
 include/sparse/numa.h | 23 +++++++++++++++++------
 1 file changed, 17 insertions(+), 6 deletions(-)

Comments

David Marchand Feb. 2, 2023, 8:31 a.m. UTC | #1
On Tue, Jan 17, 2023 at 6:13 PM Ilya Maximets <i.maximets@ovn.org> wrote:
>
> Current numa.h header for sparse re-defines functions in a way
> that breaks the header from libnuma 2.0.13+, because the original
> issue was fixed in that version:
>   https://github.com/numactl/numactl/commit/25dcde021dd4f1a1dcac2ba0094f1cb441a2e4a5
>
> Sparse errors as a result:
>
>   lib/netdev-afxdp.c: note: in included file (through include/sparse/numa.h):
>   /usr/include/numa.h:346:26: error: macro "numa_get_interleave_mask_compat"
>                                      passed 1 arguments, but takes just 0
>   /usr/include/numa.h:376:26: error: macro "numa_get_membind_compat"
>                                      passed 1 arguments, but takes just 0
>   /usr/include/numa.h:406:26: error: macro "numa_get_run_node_mask_compat"
>                                      passed 1 arguments, but takes just 0
>   /usr/include/numa.h:347:1: error: Expected ; at end of declaration
>   /usr/include/numa.h:347:1: error: got {
>   /usr/include/numa.h:351:9: error: 'tp' has implicit type
>
> It's hard to adjust defines to work with both versions of a header.
> Just defining all the functions we actually use in OVS instead and
> not including the original header.
>
> Fixes: e8568993e062 ("netdev-afxdp: NUMA-aware memory allocation for XSK related memory.")
> Signed-off-by: Ilya Maximets <i.maximets@ovn.org>

Reviewed-by: David Marchand <david.marchand@redhat.com>
Ilya Maximets Feb. 3, 2023, 4:54 p.m. UTC | #2
On 2/2/23 09:31, David Marchand wrote:
> On Tue, Jan 17, 2023 at 6:13 PM Ilya Maximets <i.maximets@ovn.org> wrote:
>>
>> Current numa.h header for sparse re-defines functions in a way
>> that breaks the header from libnuma 2.0.13+, because the original
>> issue was fixed in that version:
>>   https://github.com/numactl/numactl/commit/25dcde021dd4f1a1dcac2ba0094f1cb441a2e4a5
>>
>> Sparse errors as a result:
>>
>>   lib/netdev-afxdp.c: note: in included file (through include/sparse/numa.h):
>>   /usr/include/numa.h:346:26: error: macro "numa_get_interleave_mask_compat"
>>                                      passed 1 arguments, but takes just 0
>>   /usr/include/numa.h:376:26: error: macro "numa_get_membind_compat"
>>                                      passed 1 arguments, but takes just 0
>>   /usr/include/numa.h:406:26: error: macro "numa_get_run_node_mask_compat"
>>                                      passed 1 arguments, but takes just 0
>>   /usr/include/numa.h:347:1: error: Expected ; at end of declaration
>>   /usr/include/numa.h:347:1: error: got {
>>   /usr/include/numa.h:351:9: error: 'tp' has implicit type
>>
>> It's hard to adjust defines to work with both versions of a header.
>> Just defining all the functions we actually use in OVS instead and
>> not including the original header.
>>
>> Fixes: e8568993e062 ("netdev-afxdp: NUMA-aware memory allocation for XSK related memory.")
>> Signed-off-by: Ilya Maximets <i.maximets@ovn.org>
> 
> Reviewed-by: David Marchand <david.marchand@redhat.com>

Thanks!  Applied and backported down to 2.17.

Best regards, Ilya Maximets.
diff mbox series

Patch

diff --git a/include/sparse/numa.h b/include/sparse/numa.h
index 3691a0eaf..a185972e3 100644
--- a/include/sparse/numa.h
+++ b/include/sparse/numa.h
@@ -18,10 +18,21 @@ 
 #error "Use this header only with sparse.  It is not a correct implementation."
 #endif
 
-/* Avoid sparse warning: non-ANSI function declaration of function" */
-#define numa_get_membind_compat() numa_get_membind_compat(void)
-#define numa_get_interleave_mask_compat() numa_get_interleave_mask_compat(void)
-#define numa_get_run_node_mask_compat() numa_get_run_node_mask_compat(void)
+#ifndef __NUMA_H_SPARSE
+#define __NUMA_H_SPARSE 1
 
-/* Get actual <numa.h> definitions for us to annotate and build on. */
-#include_next<numa.h>
+/* Avoid sparse warning "non-ANSI function declaration of function" with
+ * libnuma < 2.0.13. */
+
+struct bitmask {
+    unsigned long size;
+    unsigned long *maskp;
+};
+
+int numa_available(void);
+struct bitmask *numa_allocate_nodemask(void);
+void numa_bitmask_free(struct bitmask *);
+void numa_set_localalloc(void);
+void numa_set_preferred(int node);
+
+#endif /* <numa.h> for sparse. */