@ -16,6 +16,7 @@
struct PlugTestData {
char * machine ;
const char * cpu_model ;
char * device_model ;
unsigned sockets ;
unsigned cores ;
unsigned threads ;
@ -71,11 +72,40 @@ static void test_plug_without_cpu_add(gconstpointer data)
g_free ( args ) ;
}
static void test_plug_with_device_add_x86 ( gconstpointer data )
{
const PlugTestData * td = data ;
char * args ;
unsigned int s , c , t ;
args = g_strdup_printf ( " -machine %s -cpu %s "
" -smp sockets=%u,cores=%u,threads=%u,maxcpus=%u " ,
td - > machine , td - > cpu_model ,
td - > sockets , td - > cores , td - > threads , td - > maxcpus ) ;
qtest_start ( args ) ;
for ( s = td - > sockets ; s < td - > maxcpus / td - > cores / td - > threads ; s + + ) {
for ( c = 0 ; c < td - > cores ; c + + ) {
for ( t = 0 ; t < td - > threads ; t + + ) {
char * id = g_strdup_printf ( " id-%i-%i-%i " , s , c , t ) ;
qtest_qmp_device_add ( td - > device_model , id , " 'socket-id':'%i', "
" 'core-id':'%i', 'thread-id':'%i' " ,
s , c , t ) ;
g_free ( id ) ;
}
}
}
qtest_end ( ) ;
g_free ( args ) ;
}
static void test_data_free ( gpointer data )
{
PlugTestData * pc = data ;
g_free ( pc - > machine ) ;
g_free ( pc - > device_model ) ;
g_free ( pc ) ;
}
@ -90,6 +120,8 @@ static void add_pc_test_case(const char *mname)
data = g_new ( PlugTestData , 1 ) ;
data - > machine = g_strdup ( mname ) ;
data - > cpu_model = " Haswell " ; /* 1.3+ theoretically */
data - > device_model = g_strdup_printf ( " %s-%s-cpu " , data - > cpu_model ,
qtest_get_arch ( ) ) ;
data - > sockets = 1 ;
data - > cores = 3 ;
data - > threads = 2 ;
@ -105,19 +137,30 @@ static void add_pc_test_case(const char *mname)
( strcmp ( mname , " pc-0.12 " ) = = 0 ) | |
( strcmp ( mname , " pc-0.11 " ) = = 0 ) | |
( strcmp ( mname , " pc-0.10 " ) = = 0 ) ) {
path = g_strdup_printf ( " cpu/%s/init/%ux%ux%u&maxcpus=%u " ,
path = g_strdup_printf ( " cpu-plug /%s/init/%ux%ux%u&maxcpus=%u " ,
mname , data - > sockets , data - > cores ,
data - > threads , data - > maxcpus ) ;
qtest_add_data_func_full ( path , data , test_plug_without_cpu_add ,
test_data_free ) ;
g_free ( path ) ;
} else {
path = g_strdup_printf ( " cpu/%s/add/%ux%ux%u&maxcpus=%u " ,
PlugTestData * data2 = g_memdup ( data , sizeof ( PlugTestData ) ) ;
data2 - > machine = g_strdup ( data - > machine ) ;
data2 - > device_model = g_strdup ( data - > device_model ) ;
path = g_strdup_printf ( " cpu-plug/%s/cpu-add/%ux%ux%u&maxcpus=%u " ,
mname , data - > sockets , data - > cores ,
data - > threads , data - > maxcpus ) ;
qtest_add_data_func_full ( path , data , test_plug_with_cpu_add ,
test_data_free ) ;
g_free ( path ) ;
path = g_strdup_printf ( " cpu-plug/%s/device-add/%ux%ux%u&maxcpus=%u " ,
mname , data2 - > sockets , data2 - > cores ,
data2 - > threads , data2 - > maxcpus ) ;
qtest_add_data_func_full ( path , data2 , test_plug_with_device_add_x86 ,
test_data_free ) ;
g_free ( path ) ;
}
}