On 05/08/2020 17:23, kernel test robot wrote:

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

Removed, for now, the dependency on ARM64 arch. x86 is currently supported, with Arm to come afterwards.

Thanks,
Andra


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]




Amazon Development Center (Romania) S.R.L. registered office: 27A Sf. Lazar 
Street, UBC5, floor 2, Iasi, Iasi County, 700045, Romania. Registered in 
Romania. Registration number J22/2621/2005.

Reply via email to