Hi Srinivasan,

I love your patch! Yet something to improve:

[auto build test ERROR on v4.17-rc2]
[also build test ERROR on next-20180426]
[cannot apply to tip/x86/core]
[if your patch is applied to the wrong git tree, please drop us a note to help 
improve the system]

url:    
https://github.com/0day-ci/linux/commits/kys-linuxonhyperv-com/X86-Hyper-V-APIC-enlightenments/20180427-114416
config: i386-randconfig-b0-04270034 (attached as .config)
compiler: gcc-4.9 (Debian 4.9.4-2) 4.9.4
reproduce:
        # save the attached .config to linux build tree
        make ARCH=i386 

All errors (new ones prefixed by >>):

   arch/x86//hyperv/hv_apic.c: In function 'hv_apic_read':
   arch/x86//hyperv/hv_apic.c:73:3: error: implicit declaration of function 
'native_apic_mem_read' [-Werror=implicit-function-declaration]
      return native_apic_mem_read(reg);
      ^
   arch/x86//hyperv/hv_apic.c: In function 'hv_apic_write':
   arch/x86//hyperv/hv_apic.c:87:3: error: implicit declaration of function 
'native_apic_mem_write' [-Werror=implicit-function-declaration]
      native_apic_mem_write(reg, val);
      ^
   arch/x86//hyperv/hv_apic.c: In function 'hv_send_ipi':
>> arch/x86//hyperv/hv_apic.c:155:3: error: invalid use of undefined type 
>> 'struct apic'
      orig_apic.send_IPI(cpu, vector);
      ^
   arch/x86//hyperv/hv_apic.c: In function 'hv_send_ipi_mask':
   arch/x86//hyperv/hv_apic.c:161:3: error: invalid use of undefined type 
'struct apic'
      orig_apic.send_IPI_mask(mask, vector);
      ^
   arch/x86//hyperv/hv_apic.c: In function 'hv_send_ipi_mask_allbutself':
   arch/x86//hyperv/hv_apic.c:174:3: error: invalid use of undefined type 
'struct apic'
      orig_apic.send_IPI_mask_allbutself(mask, vector);
      ^
   arch/x86//hyperv/hv_apic.c: In function 'hv_send_ipi_all':
   arch/x86//hyperv/hv_apic.c:185:3: error: invalid use of undefined type 
'struct apic'
      orig_apic.send_IPI_all(vector);
      ^
   arch/x86//hyperv/hv_apic.c: In function 'hv_send_ipi_self':
   arch/x86//hyperv/hv_apic.c:191:3: error: invalid use of undefined type 
'struct apic'
      orig_apic.send_IPI_self(vector);
      ^
   arch/x86//hyperv/hv_apic.c: In function 'hv_apic_init':
   arch/x86//hyperv/hv_apic.c:204:16: error: 'apic' undeclared (first use in 
this function)
      orig_apic = *apic;
                   ^
   arch/x86//hyperv/hv_apic.c:204:16: note: each undeclared identifier is 
reported only once for each function it appears in
>> arch/x86//hyperv/hv_apic.c:204:3: error: 'orig_apic' has an incomplete type
      orig_apic = *apic;
      ^
   arch/x86//hyperv/hv_apic.c:217:3: error: implicit declaration of function 
'apic_set_eoi_write' [-Werror=implicit-function-declaration]
      apic_set_eoi_write(hv_apic_eoi_write);
      ^
   cc1: some warnings being treated as errors

vim +/orig_apic +204 arch/x86//hyperv/hv_apic.c

    59  
    60  static u32 hv_apic_read(u32 reg)
    61  {
    62          u32 reg_val, hi;
    63  
    64          switch (reg) {
    65          case APIC_EOI:
    66                  rdmsr(HV_X64_MSR_EOI, reg_val, hi);
    67                  return reg_val;
    68          case APIC_TASKPRI:
    69                  rdmsr(HV_X64_MSR_TPR, reg_val, hi);
    70                  return reg_val;
    71  
    72          default:
  > 73                  return native_apic_mem_read(reg);
    74          }
    75  }
    76  
    77  static void hv_apic_write(u32 reg, u32 val)
    78  {
    79          switch (reg) {
    80          case APIC_EOI:
    81                  wrmsr(HV_X64_MSR_EOI, val, 0);
    82                  break;
    83          case APIC_TASKPRI:
    84                  wrmsr(HV_X64_MSR_TPR, val, 0);
    85                  break;
    86          default:
    87                  native_apic_mem_write(reg, val);
    88          }
    89  }
    90  
    91  static void hv_apic_eoi_write(u32 reg, u32 val)
    92  {
    93          wrmsr(HV_X64_MSR_EOI, val, 0);
    94  }
    95  
    96  /*
    97   * IPI implementation on Hyper-V.
    98   */
    99  
   100  static int __send_ipi_mask(const struct cpumask *mask, int vector)
   101  {
   102          int cur_cpu, vcpu;
   103          struct ipi_arg_non_ex **arg;
   104          struct ipi_arg_non_ex *ipi_arg;
   105          int ret = 1;
   106          unsigned long flags;
   107  
   108          if (cpumask_empty(mask))
   109                  return 0;
   110  
   111          if (!hv_hypercall_pg)
   112                  return ret;
   113  
   114          if ((vector < HV_IPI_LOW_VECTOR) || (vector > 
HV_IPI_HIGH_VECTOR))
   115                  return ret;
   116  
   117          local_irq_save(flags);
   118          arg = (struct ipi_arg_non_ex 
**)this_cpu_ptr(hyperv_pcpu_input_arg);
   119  
   120          ipi_arg = *arg;
   121          if (unlikely(!ipi_arg))
   122                  goto ipi_mask_done;
   123  
   124  
   125          ipi_arg->vector = vector;
   126          ipi_arg->reserved = 0;
   127          ipi_arg->cpu_mask = 0;
   128  
   129          for_each_cpu(cur_cpu, mask) {
   130                  vcpu = hv_cpu_number_to_vp_number(cur_cpu);
   131                  if (vcpu >= 64)
   132                          goto ipi_mask_done;
   133  
   134                  __set_bit(vcpu, (unsigned long *)&ipi_arg->cpu_mask);
   135          }
   136  
   137          ret = hv_do_hypercall(HVCALL_SEND_IPI, ipi_arg, NULL);
   138  
   139  ipi_mask_done:
   140          local_irq_restore(flags);
   141          return ret;
   142  }
   143  
   144  static int __send_ipi_one(int cpu, int vector)
   145  {
   146          struct cpumask mask = CPU_MASK_NONE;
   147  
   148          cpumask_set_cpu(cpu, &mask);
   149          return __send_ipi_mask(&mask, vector);
   150  }
   151  
   152  static void hv_send_ipi(int cpu, int vector)
   153  {
   154          if (__send_ipi_one(cpu, vector))
 > 155                  orig_apic.send_IPI(cpu, vector);
   156  }
   157  
   158  static void hv_send_ipi_mask(const struct cpumask *mask, int vector)
   159  {
   160          if (__send_ipi_mask(mask, vector))
   161                  orig_apic.send_IPI_mask(mask, vector);
   162  }
   163  
   164  static void hv_send_ipi_mask_allbutself(const struct cpumask *mask, int 
vector)
   165  {
   166          unsigned int this_cpu = smp_processor_id();
   167          struct cpumask new_mask;
   168          const struct cpumask *local_mask;
   169  
   170          cpumask_copy(&new_mask, mask);
   171          cpumask_clear_cpu(this_cpu, &new_mask);
   172          local_mask = &new_mask;
   173          if (__send_ipi_mask(local_mask, vector))
   174                  orig_apic.send_IPI_mask_allbutself(mask, vector);
   175  }
   176  
   177  static void hv_send_ipi_allbutself(int vector)
   178  {
   179          hv_send_ipi_mask_allbutself(cpu_online_mask, vector);
   180  }
   181  
   182  static void hv_send_ipi_all(int vector)
   183  {
   184          if (__send_ipi_mask(cpu_online_mask, vector))
   185                  orig_apic.send_IPI_all(vector);
   186  }
   187  
   188  static void hv_send_ipi_self(int vector)
   189  {
   190          if (__send_ipi_one(smp_processor_id(), vector))
 > 191                  orig_apic.send_IPI_self(vector);
   192  }
   193  
   194  void __init hv_apic_init(void)
   195  {
   196          if (ms_hyperv.hints & HV_X64_CLUSTER_IPI_RECOMMENDED) {
   197                  if (hyperv_pcpu_input_arg == NULL)
   198                          goto msr_based_access;
   199  
   200                  pr_info("Hyper-V: Using IPI hypercalls\n");
   201                  /*
   202                   * Set the IPI entry points.
   203                   */
 > 204                  orig_apic = *apic;

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation

Attachment: .config.gz
Description: application/gzip

Reply via email to