2019-06-13 18:29:05 -03:00
// SPDX-License-Identifier: GPL-2.0
2018-03-09 11:14:36 +01:00
# include <linux/compiler.h>
# include <linux/bitmap.h>
2019-08-29 17:10:59 -03:00
# include <linux/kernel.h>
2019-07-04 12:06:20 -03:00
# include <linux/zalloc.h>
2019-07-21 13:24:30 +02:00
# include <perf/cpumap.h>
2019-09-10 16:29:02 +01:00
# include <internal/cpumap.h>
2019-08-22 10:48:31 -03:00
# include "debug.h"
2019-08-29 17:10:59 -03:00
# include "env.h"
2018-03-09 11:14:36 +01:00
# include "mem2node.h"
# include "tests.h"
static struct node {
int node ;
const char * map ;
} test_nodes [ ] = {
{ . node = 0 , . map = " 0 " } ,
{ . node = 1 , . map = " 1-2 " } ,
{ . node = 3 , . map = " 5-7,9 " } ,
} ;
# define T TEST_ASSERT_VAL
static unsigned long * get_bitmap ( const char * str , int nbits )
{
2019-07-21 13:24:30 +02:00
struct perf_cpu_map * map = perf_cpu_map__new ( str ) ;
2018-03-09 11:14:36 +01:00
unsigned long * bm = NULL ;
2021-09-07 19:59:35 -07:00
bm = bitmap_zalloc ( nbits ) ;
2018-03-09 11:14:36 +01:00
if ( map & & bm ) {
2022-01-21 20:58:10 -08:00
struct perf_cpu cpu ;
int i ;
perf_cpu_map__for_each_cpu ( cpu , i , map )
2022-11-19 01:34:46 +00:00
__set_bit ( cpu . cpu , bm ) ;
2018-03-09 11:14:36 +01:00
}
if ( map )
2019-07-21 13:24:17 +02:00
perf_cpu_map__put ( map ) ;
2018-03-09 11:14:36 +01:00
else
free ( bm ) ;
return bm & & map ? bm : NULL ;
}
2021-11-03 23:41:51 -07:00
static int test__mem2node ( struct test_suite * t __maybe_unused , int subtest __maybe_unused )
2018-03-09 11:14:36 +01:00
{
struct mem2node map ;
struct memory_node nodes [ 3 ] ;
struct perf_env env = {
. memory_nodes = ( struct memory_node * ) & nodes [ 0 ] ,
. nr_memory_nodes = ARRAY_SIZE ( nodes ) ,
. memory_bsize = 0x100 ,
} ;
unsigned int i ;
for ( i = 0 ; i < ARRAY_SIZE ( nodes ) ; i + + ) {
nodes [ i ] . node = test_nodes [ i ] . node ;
nodes [ i ] . size = 10 ;
T ( " failed: alloc bitmap " ,
( nodes [ i ] . set = get_bitmap ( test_nodes [ i ] . map , 10 ) ) ) ;
}
T ( " failed: mem2node__init " , ! mem2node__init ( & map , & env ) ) ;
T ( " failed: mem2node__node " , 0 = = mem2node__node ( & map , 0x50 ) ) ;
T ( " failed: mem2node__node " , 1 = = mem2node__node ( & map , 0x100 ) ) ;
T ( " failed: mem2node__node " , 1 = = mem2node__node ( & map , 0x250 ) ) ;
T ( " failed: mem2node__node " , 3 = = mem2node__node ( & map , 0x500 ) ) ;
T ( " failed: mem2node__node " , 3 = = mem2node__node ( & map , 0x650 ) ) ;
T ( " failed: mem2node__node " , - 1 = = mem2node__node ( & map , 0x450 ) ) ;
T ( " failed: mem2node__node " , - 1 = = mem2node__node ( & map , 0x1050 ) ) ;
for ( i = 0 ; i < ARRAY_SIZE ( nodes ) ; i + + )
2019-07-04 12:06:20 -03:00
zfree ( & nodes [ i ] . set ) ;
2018-03-09 11:14:36 +01:00
mem2node__exit ( & map ) ;
return 0 ;
}
2021-11-03 23:41:50 -07:00
DEFINE_SUITE ( " mem2node " , mem2node ) ;