Hi Andra,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on linux/master]
[also build test ERROR on linus/master v5.8 next-20200805]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]

url:    
https://github.com/0day-ci/linux/commits/Andra-Paraschiv/Add-support-for-Nitro-Enclaves/20200805-171942
base:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 
bcf876870b95592b52519ed4aafcf9d95999bc9c
config: arm64-allyesconfig (attached as .config)
compiler: aarch64-linux-gcc (GCC) 9.3.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
        # save the attached .config to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross 
ARCH=arm64 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <[email protected]>

All errors (new ones prefixed by >>):

   drivers/virt/nitro_enclaves/ne_misc_dev.c: In function 'ne_setup_cpu_pool':
>> drivers/virt/nitro_enclaves/ne_misc_dev.c:245:46: error: 'smp_num_siblings' 
>> undeclared (first use in this function); did you mean 'cpu_sibling'?
     245 |  ne_cpu_pool.avail_cores_size = nr_cpu_ids / smp_num_siblings;
         |                                              ^~~~~~~~~~~~~~~~
         |                                              cpu_sibling
   drivers/virt/nitro_enclaves/ne_misc_dev.c:245:46: note: each undeclared 
identifier is reported only once for each function it appears in
   drivers/virt/nitro_enclaves/ne_misc_dev.c: In function 'ne_enclave_ioctl':
   drivers/virt/nitro_enclaves/ne_misc_dev.c:928:54: error: 'smp_num_siblings' 
undeclared (first use in this function)
     928 |   if (vcpu_id >= (ne_enclave->avail_cpu_cores_size * 
smp_num_siblings)) {
         |                                                      ^~~~~~~~~~~~~~~~

vim +245 drivers/virt/nitro_enclaves/ne_misc_dev.c

7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  130  
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  131  /**
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  132   * ne_setup_cpu_pool() - Set 
the NE CPU pool after handling sanity checks such
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  133   *                      as not 
sharing CPU cores with the primary / parent VM
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  134   *                      or not 
using CPU 0, which should remain available for
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  135   *                      the 
primary / parent VM. Offline the CPUs from the
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  136   *                      pool 
after the checks passed.
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  137   * @ne_cpu_list:       The CPU 
list used for setting NE CPU pool.
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  138   *
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  139   * Context: Process context.
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  140   * Return:
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  141   * * 0 on success.
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  142   * * Negative return value on 
failure.
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  143   */
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  144  static int 
ne_setup_cpu_pool(const char *ne_cpu_list)
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  145  {
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  146         int core_id = -1;
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  147         unsigned int cpu = 0;
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  148         cpumask_var_t cpu_pool 
= NULL;
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  149         unsigned int 
cpu_sibling = 0;
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  150         unsigned int i = 0;
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  151         int numa_node = -1;
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  152         int rc = -EINVAL;
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  153  
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  154         if (!ne_cpu_list)
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  155                 return 0;
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  156  
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  157         if 
(!zalloc_cpumask_var(&cpu_pool, GFP_KERNEL))
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  158                 return -ENOMEM;
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  159  
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  160         
mutex_lock(&ne_cpu_pool.mutex);
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  161  
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  162         rc = 
cpulist_parse(ne_cpu_list, cpu_pool);
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  163         if (rc < 0) {
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  164                 pr_err("%s: 
Error in cpulist parse [rc=%d]\n", ne_misc_dev.name, rc);
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  165  
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  166                 goto 
free_pool_cpumask;
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  167         }
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  168  
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  169         cpu = 
cpumask_any(cpu_pool);
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  170         if (cpu >= nr_cpu_ids) {
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  171                 pr_err("%s: No 
CPUs available in CPU pool\n", ne_misc_dev.name);
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  172  
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  173                 rc = -EINVAL;
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  174  
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  175                 goto 
free_pool_cpumask;
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  176         }
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  177  
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  178         /*
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  179          * Check if the CPUs 
from the NE CPU pool are from the same NUMA node.
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  180          */
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  181         for_each_cpu(cpu, 
cpu_pool) {
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  182                 if (numa_node < 
0) {
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  183                         
numa_node = cpu_to_node(cpu);
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  184                         if 
(numa_node < 0) {
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  185                                 
pr_err("%s: Invalid NUMA node %d\n",
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  186                                 
       ne_misc_dev.name, numa_node);
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  187  
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  188                                 
rc = -EINVAL;
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  189  
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  190                                 
goto free_pool_cpumask;
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  191                         }
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  192                 } else {
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  193                         if 
(numa_node != cpu_to_node(cpu)) {
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  194                                 
pr_err("%s: CPUs with different NUMA nodes\n",
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  195                                 
       ne_misc_dev.name);
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  196  
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  197                                 
rc = -EINVAL;
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  198  
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  199                                 
goto free_pool_cpumask;
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  200                         }
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  201                 }
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  202         }
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  203  
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  204         /*
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  205          * Check if CPU 0 and 
its siblings are included in the provided CPU pool
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  206          * They should remain 
available for the primary / parent VM.
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  207          */
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  208         if (cpumask_test_cpu(0, 
cpu_pool)) {
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  209                 pr_err("%s: CPU 
0 has to remain available\n", ne_misc_dev.name);
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  210  
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  211                 rc = -EINVAL;
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  212  
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  213                 goto 
free_pool_cpumask;
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  214         }
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  215  
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  216         
for_each_cpu(cpu_sibling, topology_sibling_cpumask(0)) {
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  217                 if 
(cpumask_test_cpu(cpu_sibling, cpu_pool)) {
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  218                         
pr_err("%s: CPU sibling %d for CPU 0 is in CPU pool\n",
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  219                                
ne_misc_dev.name, cpu_sibling);
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  220  
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  221                         rc = 
-EINVAL;
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  222  
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  223                         goto 
free_pool_cpumask;
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  224                 }
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  225         }
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  226  
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  227         /*
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  228          * Check if CPU 
siblings are included in the provided CPU pool. The
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  229          * expectation is that 
CPU cores are made available in the CPU pool for
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  230          * enclaves.
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  231          */
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  232         for_each_cpu(cpu, 
cpu_pool) {
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  233                 
for_each_cpu(cpu_sibling, topology_sibling_cpumask(cpu)) {
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  234                         if 
(!cpumask_test_cpu(cpu_sibling, cpu_pool)) {
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  235                                 
pr_err("%s: CPU %d is not in CPU pool\n",
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  236                                 
       ne_misc_dev.name, cpu_sibling);
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  237  
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  238                                 
rc = -EINVAL;
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  239  
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  240                                 
goto free_pool_cpumask;
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  241                         }
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  242                 }
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  243         }
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  244  
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05 @245         
ne_cpu_pool.avail_cores_size = nr_cpu_ids / smp_num_siblings;
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  246  
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  247         ne_cpu_pool.avail_cores 
= kcalloc(ne_cpu_pool.avail_cores_size,
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  248                                 
          sizeof(*ne_cpu_pool.avail_cores),
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  249                                 
          GFP_KERNEL);
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  250         if 
(!ne_cpu_pool.avail_cores) {
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  251                 rc = -ENOMEM;
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  252  
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  253                 goto 
free_pool_cpumask;
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  254         }
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  255  
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  256         for (i = 0; i < 
ne_cpu_pool.avail_cores_size; i++)
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  257                 if 
(!zalloc_cpumask_var(&ne_cpu_pool.avail_cores[i], GFP_KERNEL)) {
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  258                         rc = 
-ENOMEM;
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  259  
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  260                         goto 
free_cores_cpumask;
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  261                 }
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  262  
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  263         /* Split the NE CPU 
pool in CPU cores. */
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  264         for_each_cpu(cpu, 
cpu_pool) {
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  265                 core_id = 
topology_core_id(cpu);
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  266                 if (core_id < 0 
|| core_id >= ne_cpu_pool.avail_cores_size) {
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  267                         
pr_err("%s: Invalid core id  %d\n",
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  268                                
ne_misc_dev.name, core_id);
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  269  
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  270                         rc = 
-EINVAL;
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  271  
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  272                         goto 
clear_cpumask;
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  273                 }
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  274  
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  275                 
cpumask_set_cpu(cpu, ne_cpu_pool.avail_cores[core_id]);
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  276         }
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  277  
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  278         /*
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  279          * CPUs that are given 
to enclave(s) should not be considered online
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  280          * by Linux anymore, as 
the hypervisor will degrade them to floating.
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  281          * The physical CPUs 
(full cores) are carved out of the primary / parent
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  282          * VM and given to the 
enclave VM. The same number of vCPUs would run
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  283          * on less pCPUs for 
the primary / parent VM.
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  284          *
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  285          * We offline them 
here, to not degrade performance and expose correct
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  286          * topology to Linux 
and user space.
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  287          */
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  288         for_each_cpu(cpu, 
cpu_pool) {
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  289                 rc = 
remove_cpu(cpu);
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  290                 if (rc != 0) {
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  291                         
pr_err("%s: CPU %d is not offlined [rc=%d]\n",
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  292                                
ne_misc_dev.name, cpu, rc);
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  293  
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  294                         goto 
online_cpus;
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  295                 }
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  296         }
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  297  
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  298         
free_cpumask_var(cpu_pool);
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  299  
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  300         ne_cpu_pool.numa_node = 
numa_node;
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  301  
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  302         
mutex_unlock(&ne_cpu_pool.mutex);
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  303  
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  304         return 0;
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  305  
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  306  online_cpus:
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  307         for_each_cpu(cpu, 
cpu_pool)
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  308                 add_cpu(cpu);
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  309  clear_cpumask:
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  310         for (i = 0; i < 
ne_cpu_pool.avail_cores_size; i++)
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  311                 
cpumask_clear(ne_cpu_pool.avail_cores[i]);
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  312  free_cores_cpumask:
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  313         for (i = 0; i < 
ne_cpu_pool.avail_cores_size; i++)
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  314                 
free_cpumask_var(ne_cpu_pool.avail_cores[i]);
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  315         
kfree(ne_cpu_pool.avail_cores);
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  316         
ne_cpu_pool.avail_cores_size = 0;
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  317  free_pool_cpumask:
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  318         
free_cpumask_var(cpu_pool);
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  319         
mutex_unlock(&ne_cpu_pool.mutex);
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  320  
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  321         return rc;
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  322  }
7d5c9a7dfa51e60 Andra Paraschiv 2020-08-05  323  

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/[email protected]

Attachment: .config.gz
Description: application/gzip

Reply via email to