Re: [PATCH v2 1/4] x86/split_lock: Move Split and Bus lock code to a dedicated file

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Ravi,

kernel test robot noticed the following build errors:

[auto build test ERROR on tip/master]
[also build test ERROR on next-20240712]
[cannot apply to tip/x86/core kvm/queue linus/master tip/auto-latest kvm/linux-next v6.10-rc7]
[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#_base_tree_information]

url:    https://github.com/intel-lab-lkp/linux/commits/Ravi-Bangoria/x86-split_lock-Move-Split-and-Bus-lock-code-to-a-dedicated-file/20240712-175306
base:   tip/master
patch link:    https://lore.kernel.org/r/20240712093943.1288-2-ravi.bangoria%40amd.com
patch subject: [PATCH v2 1/4] x86/split_lock: Move Split and Bus lock code to a dedicated file
config: i386-buildonly-randconfig-002-20240713 (https://download.01.org/0day-ci/archive/20240713/202407131818.mNFDcgjd-lkp@xxxxxxxxx/config)
compiler: clang version 18.1.5 (https://github.com/llvm/llvm-project 617a15a9eac96088ae5e9134248d8236e34b91b1)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240713/202407131818.mNFDcgjd-lkp@xxxxxxxxx/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@xxxxxxxxx>
| Closes: https://lore.kernel.org/oe-kbuild-all/202407131818.mNFDcgjd-lkp@xxxxxxxxx/

All errors (new ones prefixed by >>):

>> arch/x86/kernel/cpu/bus_lock.c:219:16: error: no member named 'reported_split_lock' in 'struct task_struct'
     219 |         if (!current->reported_split_lock)
         |              ~~~~~~~  ^
   arch/x86/kernel/cpu/bus_lock.c:222:11: error: no member named 'reported_split_lock' in 'struct task_struct'
     222 |         current->reported_split_lock = 1;
         |         ~~~~~~~  ^
>> arch/x86/kernel/cpu/bus_lock.c:250:6: error: redefinition of 'handle_guest_split_lock'
     250 | bool handle_guest_split_lock(unsigned long ip)
         |      ^
   arch/x86/include/asm/cpu.h:42:20: note: previous definition is here
      42 | static inline bool handle_guest_split_lock(unsigned long ip)
         |                    ^
>> arch/x86/kernel/cpu/bus_lock.c:292:6: error: redefinition of 'handle_user_split_lock'
     292 | bool handle_user_split_lock(struct pt_regs *regs, long error_code)
         |      ^
   arch/x86/include/asm/cpu.h:37:20: note: previous definition is here
      37 | static inline bool handle_user_split_lock(struct pt_regs *regs, long error_code)
         |                    ^
>> arch/x86/kernel/cpu/bus_lock.c:300:6: error: redefinition of 'handle_bus_lock'
     300 | void handle_bus_lock(struct pt_regs *regs)
         |      ^
   arch/x86/include/asm/cpu.h:47:20: note: previous definition is here
      47 | static inline void handle_bus_lock(struct pt_regs *regs) {}
         |                    ^
>> arch/x86/kernel/cpu/bus_lock.c:401:13: error: redefinition of 'sld_setup'
     401 | void __init sld_setup(struct cpuinfo_x86 *c)
         |             ^
   arch/x86/include/asm/cpu.h:36:27: note: previous definition is here
      36 | static inline void __init sld_setup(struct cpuinfo_x86 *c) {}
         |                           ^
   6 errors generated.


vim +219 arch/x86/kernel/cpu/bus_lock.c

   213	
   214	static void split_lock_warn(unsigned long ip)
   215	{
   216		struct delayed_work *work;
   217		int cpu;
   218	
 > 219		if (!current->reported_split_lock)
   220			pr_warn_ratelimited("#AC: %s/%d took a split_lock trap at address: 0x%lx\n",
   221					    current->comm, current->pid, ip);
   222		current->reported_split_lock = 1;
   223	
   224		if (sysctl_sld_mitigate) {
   225			/*
   226			 * misery factor #1:
   227			 * sleep 10ms before trying to execute split lock.
   228			 */
   229			if (msleep_interruptible(10) > 0)
   230				return;
   231			/*
   232			 * Misery factor #2:
   233			 * only allow one buslocked disabled core at a time.
   234			 */
   235			if (down_interruptible(&buslock_sem) == -EINTR)
   236				return;
   237			work = &sl_reenable_unlock;
   238		} else {
   239			work = &sl_reenable;
   240		}
   241	
   242		cpu = get_cpu();
   243		schedule_delayed_work_on(cpu, work, 2);
   244	
   245		/* Disable split lock detection on this CPU to make progress */
   246		sld_update_msr(false);
   247		put_cpu();
   248	}
   249	
 > 250	bool handle_guest_split_lock(unsigned long ip)
   251	{
   252		if (sld_state == sld_warn) {
   253			split_lock_warn(ip);
   254			return true;
   255		}
   256	
   257		pr_warn_once("#AC: %s/%d %s split_lock trap at address: 0x%lx\n",
   258			     current->comm, current->pid,
   259			     sld_state == sld_fatal ? "fatal" : "bogus", ip);
   260	
   261		current->thread.error_code = 0;
   262		current->thread.trap_nr = X86_TRAP_AC;
   263		force_sig_fault(SIGBUS, BUS_ADRALN, NULL);
   264		return false;
   265	}
   266	EXPORT_SYMBOL_GPL(handle_guest_split_lock);
   267	
   268	void bus_lock_init(void)
   269	{
   270		u64 val;
   271	
   272		if (!boot_cpu_has(X86_FEATURE_BUS_LOCK_DETECT))
   273			return;
   274	
   275		rdmsrl(MSR_IA32_DEBUGCTLMSR, val);
   276	
   277		if ((boot_cpu_has(X86_FEATURE_SPLIT_LOCK_DETECT) &&
   278		    (sld_state == sld_warn || sld_state == sld_fatal)) ||
   279		    sld_state == sld_off) {
   280			/*
   281			 * Warn and fatal are handled by #AC for split lock if #AC for
   282			 * split lock is supported.
   283			 */
   284			val &= ~DEBUGCTLMSR_BUS_LOCK_DETECT;
   285		} else {
   286			val |= DEBUGCTLMSR_BUS_LOCK_DETECT;
   287		}
   288	
   289		wrmsrl(MSR_IA32_DEBUGCTLMSR, val);
   290	}
   291	
 > 292	bool handle_user_split_lock(struct pt_regs *regs, long error_code)
   293	{
   294		if ((regs->flags & X86_EFLAGS_AC) || sld_state == sld_fatal)
   295			return false;
   296		split_lock_warn(regs->ip);
   297		return true;
   298	}
   299	
 > 300	void handle_bus_lock(struct pt_regs *regs)
   301	{
   302		switch (sld_state) {
   303		case sld_off:
   304			break;
   305		case sld_ratelimit:
   306			/* Enforce no more than bld_ratelimit bus locks/sec. */
   307			while (!__ratelimit(&bld_ratelimit))
   308				msleep(20);
   309			/* Warn on the bus lock. */
   310			fallthrough;
   311		case sld_warn:
   312			pr_warn_ratelimited("#DB: %s/%d took a bus_lock trap at address: 0x%lx\n",
   313					    current->comm, current->pid, regs->ip);
   314			break;
   315		case sld_fatal:
   316			force_sig_fault(SIGBUS, BUS_ADRALN, NULL);
   317			break;
   318		}
   319	}
   320	
   321	/*
   322	 * CPU models that are known to have the per-core split-lock detection
   323	 * feature even though they do not enumerate IA32_CORE_CAPABILITIES.
   324	 */
   325	static const struct x86_cpu_id split_lock_cpu_ids[] __initconst = {
   326		X86_MATCH_VFM(INTEL_ICELAKE_X,	0),
   327		X86_MATCH_VFM(INTEL_ICELAKE_L,	0),
   328		X86_MATCH_VFM(INTEL_ICELAKE_D,	0),
   329		{}
   330	};
   331	
   332	static void __init split_lock_setup(struct cpuinfo_x86 *c)
   333	{
   334		const struct x86_cpu_id *m;
   335		u64 ia32_core_caps;
   336	
   337		if (boot_cpu_has(X86_FEATURE_HYPERVISOR))
   338			return;
   339	
   340		/* Check for CPUs that have support but do not enumerate it: */
   341		m = x86_match_cpu(split_lock_cpu_ids);
   342		if (m)
   343			goto supported;
   344	
   345		if (!cpu_has(c, X86_FEATURE_CORE_CAPABILITIES))
   346			return;
   347	
   348		/*
   349		 * Not all bits in MSR_IA32_CORE_CAPS are architectural, but
   350		 * MSR_IA32_CORE_CAPS_SPLIT_LOCK_DETECT is.  All CPUs that set
   351		 * it have split lock detection.
   352		 */
   353		rdmsrl(MSR_IA32_CORE_CAPS, ia32_core_caps);
   354		if (ia32_core_caps & MSR_IA32_CORE_CAPS_SPLIT_LOCK_DETECT)
   355			goto supported;
   356	
   357		/* CPU is not in the model list and does not have the MSR bit: */
   358		return;
   359	
   360	supported:
   361		cpu_model_supports_sld = true;
   362		__split_lock_setup();
   363	}
   364	
   365	static void sld_state_show(void)
   366	{
   367		if (!boot_cpu_has(X86_FEATURE_BUS_LOCK_DETECT) &&
   368		    !boot_cpu_has(X86_FEATURE_SPLIT_LOCK_DETECT))
   369			return;
   370	
   371		switch (sld_state) {
   372		case sld_off:
   373			pr_info("disabled\n");
   374			break;
   375		case sld_warn:
   376			if (boot_cpu_has(X86_FEATURE_SPLIT_LOCK_DETECT)) {
   377				pr_info("#AC: crashing the kernel on kernel split_locks and warning on user-space split_locks\n");
   378				if (cpuhp_setup_state(CPUHP_AP_ONLINE_DYN,
   379						      "x86/splitlock", NULL, splitlock_cpu_offline) < 0)
   380					pr_warn("No splitlock CPU offline handler\n");
   381			} else if (boot_cpu_has(X86_FEATURE_BUS_LOCK_DETECT)) {
   382				pr_info("#DB: warning on user-space bus_locks\n");
   383			}
   384			break;
   385		case sld_fatal:
   386			if (boot_cpu_has(X86_FEATURE_SPLIT_LOCK_DETECT)) {
   387				pr_info("#AC: crashing the kernel on kernel split_locks and sending SIGBUS on user-space split_locks\n");
   388			} else if (boot_cpu_has(X86_FEATURE_BUS_LOCK_DETECT)) {
   389				pr_info("#DB: sending SIGBUS on user-space bus_locks%s\n",
   390					boot_cpu_has(X86_FEATURE_SPLIT_LOCK_DETECT) ?
   391					" from non-WB" : "");
   392			}
   393			break;
   394		case sld_ratelimit:
   395			if (boot_cpu_has(X86_FEATURE_BUS_LOCK_DETECT))
   396				pr_info("#DB: setting system wide bus lock rate limit to %u/sec\n", bld_ratelimit.burst);
   397			break;
   398		}
   399	}
   400	
 > 401	void __init sld_setup(struct cpuinfo_x86 *c)

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki




[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux