All of lore.kernel.org
 help / color / mirror / Atom feed
* Re: [PATCH v3 2/2] pseries/mce: Refactor the pseries mce handling code
@ 2021-11-25 22:03 kernel test robot
  0 siblings, 0 replies; 4+ messages in thread
From: kernel test robot @ 2021-11-25 22:03 UTC (permalink / raw)
  To: kbuild

[-- Attachment #1: Type: text/plain, Size: 20898 bytes --]

CC: kbuild-all(a)lists.01.org
In-Reply-To: <20211124095500.98656-2-ganeshgr@linux.ibm.com>
References: <20211124095500.98656-2-ganeshgr@linux.ibm.com>
TO: Ganesh Goudar <ganeshgr@linux.ibm.com>
TO: linuxppc-dev(a)lists.ozlabs.org
TO: mpe(a)ellerman.id.au
CC: Ganesh Goudar <ganeshgr@linux.ibm.com>
CC: mahesh(a)linux.ibm.com
CC: npiggin(a)gmail.com
CC: dja(a)axtens.net

Hi Ganesh,

Thank you for the patch! Perhaps something to improve:

[auto build test WARNING on powerpc/next]
[also build test WARNING on v5.16-rc2 next-20211125]
[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/Ganesh-Goudar/powerpc-mce-Avoid-using-irq_work_queue-in-realmode/20211124-175800
base:   https://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux.git next
:::::: branch date: 2 days ago
:::::: commit date: 2 days ago
config: powerpc64-randconfig-c024-20211124 (https://download.01.org/0day-ci/archive/20211126/202111260536.m57xOEqc-lkp(a)intel.com/config)
compiler: powerpc64-linux-gcc (GCC) 11.2.0

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
Reported-by: Julia Lawall <julia.lawall@lip6.fr>


cocci warnings: (new ones prefixed by >>)
>> arch/powerpc/platforms/pseries/ras.c:550:6-8: WARNING: possible condition with no effect (if == else)

vim +550 arch/powerpc/platforms/pseries/ras.c

^1da177e4c3f41 arch/ppc64/kernel/ras.c              Linus Torvalds    2005-04-16  513  
3efc8c464c6707 arch/powerpc/platforms/pseries/ras.c Ganesh Goudar     2021-11-24  514  static int mce_handle_error(struct pt_regs *regs, struct rtas_error_log *errp)
8f0b80561f217e arch/powerpc/platforms/pseries/ras.c Mahesh Salgaonkar 2018-09-11  515  {
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  516  	struct mce_error_info mce_err = { 0 };
3efc8c464c6707 arch/powerpc/platforms/pseries/ras.c Ganesh Goudar     2021-11-24  517  	unsigned long eaddr = 0, paddr = 0;
3efc8c464c6707 arch/powerpc/platforms/pseries/ras.c Ganesh Goudar     2021-11-24  518  	struct pseries_errorlog *pseries_log;
3efc8c464c6707 arch/powerpc/platforms/pseries/ras.c Ganesh Goudar     2021-11-24  519  	struct pseries_mc_errorlog *mce_log;
3efc8c464c6707 arch/powerpc/platforms/pseries/ras.c Ganesh Goudar     2021-11-24  520  	int disposition = rtas_error_disposition(errp);
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  521  	int initiator = rtas_error_initiator(errp);
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  522  	int severity = rtas_error_severity(errp);
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  523  	u8 error_type, err_sub_type;
8f0b80561f217e arch/powerpc/platforms/pseries/ras.c Mahesh Salgaonkar 2018-09-11  524  
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  525  	if (initiator == RTAS_INITIATOR_UNKNOWN)
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  526  		mce_err.initiator = MCE_INITIATOR_UNKNOWN;
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  527  	else if (initiator == RTAS_INITIATOR_CPU)
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  528  		mce_err.initiator = MCE_INITIATOR_CPU;
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  529  	else if (initiator == RTAS_INITIATOR_PCI)
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  530  		mce_err.initiator = MCE_INITIATOR_PCI;
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  531  	else if (initiator == RTAS_INITIATOR_ISA)
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  532  		mce_err.initiator = MCE_INITIATOR_ISA;
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  533  	else if (initiator == RTAS_INITIATOR_MEMORY)
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  534  		mce_err.initiator = MCE_INITIATOR_MEMORY;
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  535  	else if (initiator == RTAS_INITIATOR_POWERMGM)
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  536  		mce_err.initiator = MCE_INITIATOR_POWERMGM;
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  537  	else
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  538  		mce_err.initiator = MCE_INITIATOR_UNKNOWN;
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  539  
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  540  	if (severity == RTAS_SEVERITY_NO_ERROR)
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  541  		mce_err.severity = MCE_SEV_NO_ERROR;
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  542  	else if (severity == RTAS_SEVERITY_EVENT)
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  543  		mce_err.severity = MCE_SEV_WARNING;
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  544  	else if (severity == RTAS_SEVERITY_WARNING)
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  545  		mce_err.severity = MCE_SEV_WARNING;
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  546  	else if (severity == RTAS_SEVERITY_ERROR_SYNC)
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  547  		mce_err.severity = MCE_SEV_SEVERE;
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  548  	else if (severity == RTAS_SEVERITY_ERROR)
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  549  		mce_err.severity = MCE_SEV_SEVERE;
3efc8c464c6707 arch/powerpc/platforms/pseries/ras.c Ganesh Goudar     2021-11-24 @550  	else if (severity == RTAS_SEVERITY_FATAL)
3efc8c464c6707 arch/powerpc/platforms/pseries/ras.c Ganesh Goudar     2021-11-24  551  		mce_err.severity = MCE_SEV_FATAL;
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  552  	else
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  553  		mce_err.severity = MCE_SEV_FATAL;
8f0b80561f217e arch/powerpc/platforms/pseries/ras.c Mahesh Salgaonkar 2018-09-11  554  
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  555  	if (severity <= RTAS_SEVERITY_ERROR_SYNC)
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  556  		mce_err.sync_error = true;
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  557  	else
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  558  		mce_err.sync_error = false;
8f0b80561f217e arch/powerpc/platforms/pseries/ras.c Mahesh Salgaonkar 2018-09-11  559  
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  560  	mce_err.error_type = MCE_ERROR_TYPE_UNKNOWN;
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  561  	mce_err.error_class = MCE_ECLASS_UNKNOWN;
8f0b80561f217e arch/powerpc/platforms/pseries/ras.c Mahesh Salgaonkar 2018-09-11  562  
3efc8c464c6707 arch/powerpc/platforms/pseries/ras.c Ganesh Goudar     2021-11-24  563  	if (!rtas_error_extended(errp))
3efc8c464c6707 arch/powerpc/platforms/pseries/ras.c Ganesh Goudar     2021-11-24  564  		goto out;
3efc8c464c6707 arch/powerpc/platforms/pseries/ras.c Ganesh Goudar     2021-11-24  565  
3efc8c464c6707 arch/powerpc/platforms/pseries/ras.c Ganesh Goudar     2021-11-24  566  	pseries_log = get_pseries_errorlog(errp, PSERIES_ELOG_SECT_ID_MCE);
3efc8c464c6707 arch/powerpc/platforms/pseries/ras.c Ganesh Goudar     2021-11-24  567  	if (!pseries_log)
3efc8c464c6707 arch/powerpc/platforms/pseries/ras.c Ganesh Goudar     2021-11-24  568  		goto out;
3efc8c464c6707 arch/powerpc/platforms/pseries/ras.c Ganesh Goudar     2021-11-24  569  
3efc8c464c6707 arch/powerpc/platforms/pseries/ras.c Ganesh Goudar     2021-11-24  570  	mce_log = (struct pseries_mc_errorlog *)pseries_log->data;
3efc8c464c6707 arch/powerpc/platforms/pseries/ras.c Ganesh Goudar     2021-11-24  571  	error_type = mce_log->error_type;
3efc8c464c6707 arch/powerpc/platforms/pseries/ras.c Ganesh Goudar     2021-11-24  572  	err_sub_type = rtas_mc_error_sub_type(mce_log);
3efc8c464c6707 arch/powerpc/platforms/pseries/ras.c Ganesh Goudar     2021-11-24  573  
3efc8c464c6707 arch/powerpc/platforms/pseries/ras.c Ganesh Goudar     2021-11-24  574  	switch (mce_log->error_type) {
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  575  	case MC_ERROR_TYPE_UE:
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  576  		mce_err.error_type = MCE_ERROR_TYPE_UE;
efbc4303b255bb arch/powerpc/platforms/pseries/ras.c Ganesh Goudar     2020-03-27  577  		mce_common_process_ue(regs, &mce_err);
efbc4303b255bb arch/powerpc/platforms/pseries/ras.c Ganesh Goudar     2020-03-27  578  		if (mce_err.ignore_event)
efbc4303b255bb arch/powerpc/platforms/pseries/ras.c Ganesh Goudar     2020-03-27  579  			disposition = RTAS_DISP_FULLY_RECOVERED;
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  580  		switch (err_sub_type) {
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  581  		case MC_ERROR_UE_IFETCH:
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  582  			mce_err.u.ue_error_type = MCE_UE_ERROR_IFETCH;
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  583  			break;
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  584  		case MC_ERROR_UE_PAGE_TABLE_WALK_IFETCH:
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  585  			mce_err.u.ue_error_type = MCE_UE_ERROR_PAGE_TABLE_WALK_IFETCH;
8f0b80561f217e arch/powerpc/platforms/pseries/ras.c Mahesh Salgaonkar 2018-09-11  586  			break;
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  587  		case MC_ERROR_UE_LOAD_STORE:
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  588  			mce_err.u.ue_error_type = MCE_UE_ERROR_LOAD_STORE;
8f0b80561f217e arch/powerpc/platforms/pseries/ras.c Mahesh Salgaonkar 2018-09-11  589  			break;
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  590  		case MC_ERROR_UE_PAGE_TABLE_WALK_LOAD_STORE:
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  591  			mce_err.u.ue_error_type = MCE_UE_ERROR_PAGE_TABLE_WALK_LOAD_STORE;
8f0b80561f217e arch/powerpc/platforms/pseries/ras.c Mahesh Salgaonkar 2018-09-11  592  			break;
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  593  		case MC_ERROR_UE_INDETERMINATE:
8f0b80561f217e arch/powerpc/platforms/pseries/ras.c Mahesh Salgaonkar 2018-09-11  594  		default:
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  595  			mce_err.u.ue_error_type = MCE_UE_ERROR_INDETERMINATE;
8f0b80561f217e arch/powerpc/platforms/pseries/ras.c Mahesh Salgaonkar 2018-09-11  596  			break;
8f0b80561f217e arch/powerpc/platforms/pseries/ras.c Mahesh Salgaonkar 2018-09-11  597  		}
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  598  		if (mce_log->sub_err_type & UE_EFFECTIVE_ADDR_PROVIDED)
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  599  			eaddr = be64_to_cpu(mce_log->effective_address);
8f0b80561f217e arch/powerpc/platforms/pseries/ras.c Mahesh Salgaonkar 2018-09-11  600  
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  601  		if (mce_log->sub_err_type & UE_LOGICAL_ADDR_PROVIDED) {
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  602  			paddr = be64_to_cpu(mce_log->logical_address);
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  603  		} else if (mce_log->sub_err_type & UE_EFFECTIVE_ADDR_PROVIDED) {
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  604  			unsigned long pfn;
c6d15258cdf1c1 arch/powerpc/platforms/pseries/ras.c Mahesh Salgaonkar 2018-09-11  605  
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  606  			pfn = addr_to_pfn(regs, eaddr);
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  607  			if (pfn != ULONG_MAX)
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  608  				paddr = pfn << PAGE_SHIFT;
8f0b80561f217e arch/powerpc/platforms/pseries/ras.c Mahesh Salgaonkar 2018-09-11  609  		}
8f0b80561f217e arch/powerpc/platforms/pseries/ras.c Mahesh Salgaonkar 2018-09-11  610  
8f0b80561f217e arch/powerpc/platforms/pseries/ras.c Mahesh Salgaonkar 2018-09-11  611  		break;
8f0b80561f217e arch/powerpc/platforms/pseries/ras.c Mahesh Salgaonkar 2018-09-11  612  	case MC_ERROR_TYPE_SLB:
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  613  		mce_err.error_type = MCE_ERROR_TYPE_SLB;
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  614  		switch (err_sub_type) {
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  615  		case MC_ERROR_SLB_PARITY:
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  616  			mce_err.u.slb_error_type = MCE_SLB_ERROR_PARITY;
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  617  			break;
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  618  		case MC_ERROR_SLB_MULTIHIT:
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  619  			mce_err.u.slb_error_type = MCE_SLB_ERROR_MULTIHIT;
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  620  			break;
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  621  		case MC_ERROR_SLB_INDETERMINATE:
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  622  		default:
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  623  			mce_err.u.slb_error_type = MCE_SLB_ERROR_INDETERMINATE;
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  624  			break;
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  625  		}
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  626  		if (mce_log->sub_err_type & 0x80)
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  627  			eaddr = be64_to_cpu(mce_log->effective_address);
8f0b80561f217e arch/powerpc/platforms/pseries/ras.c Mahesh Salgaonkar 2018-09-11  628  		break;
8f0b80561f217e arch/powerpc/platforms/pseries/ras.c Mahesh Salgaonkar 2018-09-11  629  	case MC_ERROR_TYPE_ERAT:
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  630  		mce_err.error_type = MCE_ERROR_TYPE_ERAT;
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  631  		switch (err_sub_type) {
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  632  		case MC_ERROR_ERAT_PARITY:
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  633  			mce_err.u.erat_error_type = MCE_ERAT_ERROR_PARITY;
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  634  			break;
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  635  		case MC_ERROR_ERAT_MULTIHIT:
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  636  			mce_err.u.erat_error_type = MCE_ERAT_ERROR_MULTIHIT;
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  637  			break;
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  638  		case MC_ERROR_ERAT_INDETERMINATE:
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  639  		default:
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  640  			mce_err.u.erat_error_type = MCE_ERAT_ERROR_INDETERMINATE;
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  641  			break;
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  642  		}
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  643  		if (mce_log->sub_err_type & 0x80)
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  644  			eaddr = be64_to_cpu(mce_log->effective_address);
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  645  		break;
8f0b80561f217e arch/powerpc/platforms/pseries/ras.c Mahesh Salgaonkar 2018-09-11  646  	case MC_ERROR_TYPE_TLB:
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  647  		mce_err.error_type = MCE_ERROR_TYPE_TLB;
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  648  		switch (err_sub_type) {
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  649  		case MC_ERROR_TLB_PARITY:
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  650  			mce_err.u.tlb_error_type = MCE_TLB_ERROR_PARITY;
8f0b80561f217e arch/powerpc/platforms/pseries/ras.c Mahesh Salgaonkar 2018-09-11  651  			break;
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  652  		case MC_ERROR_TLB_MULTIHIT:
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  653  			mce_err.u.tlb_error_type = MCE_TLB_ERROR_MULTIHIT;
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  654  			break;
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  655  		case MC_ERROR_TLB_INDETERMINATE:
8f0b80561f217e arch/powerpc/platforms/pseries/ras.c Mahesh Salgaonkar 2018-09-11  656  		default:
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  657  			mce_err.u.tlb_error_type = MCE_TLB_ERROR_INDETERMINATE;
8f0b80561f217e arch/powerpc/platforms/pseries/ras.c Mahesh Salgaonkar 2018-09-11  658  			break;
8f0b80561f217e arch/powerpc/platforms/pseries/ras.c Mahesh Salgaonkar 2018-09-11  659  		}
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  660  		if (mce_log->sub_err_type & 0x80)
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  661  			eaddr = be64_to_cpu(mce_log->effective_address);
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  662  		break;
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  663  	case MC_ERROR_TYPE_D_CACHE:
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  664  		mce_err.error_type = MCE_ERROR_TYPE_DCACHE;
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  665  		break;
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  666  	case MC_ERROR_TYPE_I_CACHE:
3efc8c464c6707 arch/powerpc/platforms/pseries/ras.c Ganesh Goudar     2021-11-24  667  		mce_err.error_type = MCE_ERROR_TYPE_DCACHE;
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  668  		break;
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  669  	case MC_ERROR_TYPE_UNKNOWN:
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  670  	default:
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  671  		mce_err.error_type = MCE_ERROR_TYPE_UNKNOWN;
9ca766f9891d23 arch/powerpc/platforms/pseries/ras.c Nicholas Piggin   2019-08-02  672  		break;
8f0b80561f217e arch/powerpc/platforms/pseries/ras.c Mahesh Salgaonkar 2018-09-11  673  	}
3efc8c464c6707 arch/powerpc/platforms/pseries/ras.c Ganesh Goudar     2021-11-24  674  

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org

^ permalink raw reply	[flat|nested] 4+ messages in thread
* [PATCH v3 1/2] powerpc/mce: Avoid using irq_work_queue() in realmode
@ 2021-11-24  9:54 Ganesh Goudar
  2021-11-24  9:55 ` [PATCH v3 2/2] pseries/mce: Refactor the pseries mce handling code Ganesh Goudar
  0 siblings, 1 reply; 4+ messages in thread
From: Ganesh Goudar @ 2021-11-24  9:54 UTC (permalink / raw)
  To: linuxppc-dev, mpe; +Cc: Ganesh Goudar, mahesh, npiggin, dja

In realmode mce handler we use irq_work_queue() to defer
the processing of mce events, irq_work_queue() can only
be called when translation is enabled because it touches
memory outside RMA, hence we enable translation before
calling irq_work_queue and disable on return, though it
is not safe to do in realmode.

To avoid this, program the decrementer and call the event
processing functions from timer handler.

Signed-off-by: Ganesh Goudar <ganeshgr@linux.ibm.com>
---
V2:
* Use arch_irq_work_raise to raise decrementer interrupt.
* Avoid having atomic variable.

V3:
* Fix build error.
  Reported by kernel test bot.
---
 arch/powerpc/include/asm/machdep.h       |  2 +
 arch/powerpc/include/asm/mce.h           |  2 +
 arch/powerpc/include/asm/paca.h          |  1 +
 arch/powerpc/kernel/mce.c                | 51 +++++++++++-------------
 arch/powerpc/kernel/time.c               |  3 ++
 arch/powerpc/platforms/pseries/pseries.h |  1 +
 arch/powerpc/platforms/pseries/ras.c     | 31 +-------------
 arch/powerpc/platforms/pseries/setup.c   |  1 +
 8 files changed, 34 insertions(+), 58 deletions(-)

diff --git a/arch/powerpc/include/asm/machdep.h b/arch/powerpc/include/asm/machdep.h
index 9c3c9f04129f..d22b222ba471 100644
--- a/arch/powerpc/include/asm/machdep.h
+++ b/arch/powerpc/include/asm/machdep.h
@@ -99,6 +99,8 @@ struct machdep_calls {
 	/* Called during machine check exception to retrive fixup address. */
 	bool		(*mce_check_early_recovery)(struct pt_regs *regs);
 
+	void            (*machine_check_log_err)(void);
+
 	/* Motherboard/chipset features. This is a kind of general purpose
 	 * hook used to control some machine specific features (like reset
 	 * lines, chip power control, etc...).
diff --git a/arch/powerpc/include/asm/mce.h b/arch/powerpc/include/asm/mce.h
index 331d944280b8..6e306aaf58aa 100644
--- a/arch/powerpc/include/asm/mce.h
+++ b/arch/powerpc/include/asm/mce.h
@@ -235,8 +235,10 @@ extern void machine_check_print_event_info(struct machine_check_event *evt,
 unsigned long addr_to_pfn(struct pt_regs *regs, unsigned long addr);
 extern void mce_common_process_ue(struct pt_regs *regs,
 				  struct mce_error_info *mce_err);
+void machine_check_raise_dec_intr(void);
 int mce_register_notifier(struct notifier_block *nb);
 int mce_unregister_notifier(struct notifier_block *nb);
+void mce_run_late_handlers(void);
 #ifdef CONFIG_PPC_BOOK3S_64
 void flush_and_reload_slb(void);
 void flush_erat(void);
diff --git a/arch/powerpc/include/asm/paca.h b/arch/powerpc/include/asm/paca.h
index dc05a862e72a..d463c796f7fa 100644
--- a/arch/powerpc/include/asm/paca.h
+++ b/arch/powerpc/include/asm/paca.h
@@ -280,6 +280,7 @@ struct paca_struct {
 #endif
 #ifdef CONFIG_PPC_BOOK3S_64
 	struct mce_info *mce_info;
+	u32 mces_to_process;
 #endif /* CONFIG_PPC_BOOK3S_64 */
 } ____cacheline_aligned;
 
diff --git a/arch/powerpc/kernel/mce.c b/arch/powerpc/kernel/mce.c
index fd829f7f25a4..8e17f29472a0 100644
--- a/arch/powerpc/kernel/mce.c
+++ b/arch/powerpc/kernel/mce.c
@@ -28,19 +28,9 @@
 
 #include "setup.h"
 
-static void machine_check_process_queued_event(struct irq_work *work);
-static void machine_check_ue_irq_work(struct irq_work *work);
 static void machine_check_ue_event(struct machine_check_event *evt);
 static void machine_process_ue_event(struct work_struct *work);
 
-static struct irq_work mce_event_process_work = {
-        .func = machine_check_process_queued_event,
-};
-
-static struct irq_work mce_ue_event_irq_work = {
-	.func = machine_check_ue_irq_work,
-};
-
 static DECLARE_WORK(mce_ue_event_work, machine_process_ue_event);
 
 static BLOCKING_NOTIFIER_HEAD(mce_notifier_list);
@@ -89,6 +79,12 @@ static void mce_set_error_info(struct machine_check_event *mce,
 	}
 }
 
+/* Raise decrementer interrupt */
+void machine_check_raise_dec_intr(void)
+{
+	arch_irq_work_raise();
+}
+
 /*
  * Decode and save high level MCE information into per cpu buffer which
  * is an array of machine_check_event structure.
@@ -135,6 +131,8 @@ void save_mce_event(struct pt_regs *regs, long handled,
 	if (mce->error_type == MCE_ERROR_TYPE_UE)
 		mce->u.ue_error.ignore_event = mce_err->ignore_event;
 
+	local_paca->mces_to_process++;
+
 	if (!addr)
 		return;
 
@@ -217,7 +215,7 @@ void release_mce_event(void)
 	get_mce_event(NULL, true);
 }
 
-static void machine_check_ue_irq_work(struct irq_work *work)
+static void machine_check_ue_work(void)
 {
 	schedule_work(&mce_ue_event_work);
 }
@@ -239,7 +237,7 @@ static void machine_check_ue_event(struct machine_check_event *evt)
 	       evt, sizeof(*evt));
 
 	/* Queue work to process this event later. */
-	irq_work_queue(&mce_ue_event_irq_work);
+	machine_check_raise_dec_intr();
 }
 
 /*
@@ -249,7 +247,6 @@ void machine_check_queue_event(void)
 {
 	int index;
 	struct machine_check_event evt;
-	unsigned long msr;
 
 	if (!get_mce_event(&evt, MCE_EVENT_RELEASE))
 		return;
@@ -263,20 +260,7 @@ void machine_check_queue_event(void)
 	memcpy(&local_paca->mce_info->mce_event_queue[index],
 	       &evt, sizeof(evt));
 
-	/*
-	 * Queue irq work to process this event later. Before
-	 * queuing the work enable translation for non radix LPAR,
-	 * as irq_work_queue may try to access memory outside RMO
-	 * region.
-	 */
-	if (!radix_enabled() && firmware_has_feature(FW_FEATURE_LPAR)) {
-		msr = mfmsr();
-		mtmsr(msr | MSR_IR | MSR_DR);
-		irq_work_queue(&mce_event_process_work);
-		mtmsr(msr);
-	} else {
-		irq_work_queue(&mce_event_process_work);
-	}
+	machine_check_raise_dec_intr();
 }
 
 void mce_common_process_ue(struct pt_regs *regs,
@@ -338,7 +322,7 @@ static void machine_process_ue_event(struct work_struct *work)
  * process pending MCE event from the mce event queue. This function will be
  * called during syscall exit.
  */
-static void machine_check_process_queued_event(struct irq_work *work)
+static void machine_check_process_queued_event(void)
 {
 	int index;
 	struct machine_check_event *evt;
@@ -363,6 +347,17 @@ static void machine_check_process_queued_event(struct irq_work *work)
 	}
 }
 
+void mce_run_late_handlers(void)
+{
+	if (unlikely(local_paca->mces_to_process)) {
+		if (ppc_md.machine_check_log_err)
+			ppc_md.machine_check_log_err();
+		machine_check_process_queued_event();
+		machine_check_ue_work();
+		local_paca->mces_to_process--;
+	}
+}
+
 void machine_check_print_event_info(struct machine_check_event *evt,
 				    bool user_mode, bool in_guest)
 {
diff --git a/arch/powerpc/kernel/time.c b/arch/powerpc/kernel/time.c
index cae8f03a44fe..94c591b6f9d2 100644
--- a/arch/powerpc/kernel/time.c
+++ b/arch/powerpc/kernel/time.c
@@ -594,6 +594,9 @@ DEFINE_INTERRUPT_HANDLER_ASYNC(timer_interrupt)
 
 	if (test_irq_work_pending()) {
 		clear_irq_work_pending();
+#ifdef CONFIG_PPC_BOOK3S_64
+		mce_run_late_handlers();
+#endif
 		irq_work_run();
 	}
 
diff --git a/arch/powerpc/platforms/pseries/pseries.h b/arch/powerpc/platforms/pseries/pseries.h
index 3544778e06d0..9cf0d33dfbf5 100644
--- a/arch/powerpc/platforms/pseries/pseries.h
+++ b/arch/powerpc/platforms/pseries/pseries.h
@@ -21,6 +21,7 @@ struct pt_regs;
 extern int pSeries_system_reset_exception(struct pt_regs *regs);
 extern int pSeries_machine_check_exception(struct pt_regs *regs);
 extern long pseries_machine_check_realmode(struct pt_regs *regs);
+void pSeries_machine_check_log_err(void);
 
 #ifdef CONFIG_SMP
 extern void smp_init_pseries(void);
diff --git a/arch/powerpc/platforms/pseries/ras.c b/arch/powerpc/platforms/pseries/ras.c
index 56092dccfdb8..8613f9cc5798 100644
--- a/arch/powerpc/platforms/pseries/ras.c
+++ b/arch/powerpc/platforms/pseries/ras.c
@@ -23,11 +23,6 @@ static DEFINE_SPINLOCK(ras_log_buf_lock);
 
 static int ras_check_exception_token;
 
-static void mce_process_errlog_event(struct irq_work *work);
-static struct irq_work mce_errlog_process_work = {
-	.func = mce_process_errlog_event,
-};
-
 #define EPOW_SENSOR_TOKEN	9
 #define EPOW_SENSOR_INDEX	0
 
@@ -729,40 +724,16 @@ static int mce_handle_error(struct pt_regs *regs, struct rtas_error_log *errp)
 	error_type = mce_log->error_type;
 
 	disposition = mce_handle_err_realmode(disposition, error_type);
-
-	/*
-	 * Enable translation as we will be accessing per-cpu variables
-	 * in save_mce_event() which may fall outside RMO region, also
-	 * leave it enabled because subsequently we will be queuing work
-	 * to workqueues where again per-cpu variables accessed, besides
-	 * fwnmi_release_errinfo() crashes when called in realmode on
-	 * pseries.
-	 * Note: All the realmode handling like flushing SLB entries for
-	 *       SLB multihit is done by now.
-	 */
 out:
-	msr = mfmsr();
-	mtmsr(msr | MSR_IR | MSR_DR);
-
 	disposition = mce_handle_err_virtmode(regs, errp, mce_log,
 					      disposition);
-
-	/*
-	 * Queue irq work to log this rtas event later.
-	 * irq_work_queue uses per-cpu variables, so do this in virt
-	 * mode as well.
-	 */
-	irq_work_queue(&mce_errlog_process_work);
-
-	mtmsr(msr);
-
 	return disposition;
 }
 
 /*
  * Process MCE rtas errlog event.
  */
-static void mce_process_errlog_event(struct irq_work *work)
+void pSeries_machine_check_log_err(void)
 {
 	struct rtas_error_log *err;
 
diff --git a/arch/powerpc/platforms/pseries/setup.c b/arch/powerpc/platforms/pseries/setup.c
index 8a62af5b9c24..9bdc487b8e35 100644
--- a/arch/powerpc/platforms/pseries/setup.c
+++ b/arch/powerpc/platforms/pseries/setup.c
@@ -1084,6 +1084,7 @@ define_machine(pseries) {
 	.system_reset_exception = pSeries_system_reset_exception,
 	.machine_check_early	= pseries_machine_check_realmode,
 	.machine_check_exception = pSeries_machine_check_exception,
+	.machine_check_log_err	= pSeries_machine_check_log_err,
 #ifdef CONFIG_KEXEC_CORE
 	.machine_kexec          = pSeries_machine_kexec,
 	.kexec_cpu_down         = pseries_kexec_cpu_down,
-- 
2.31.1


^ permalink raw reply related	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2022-01-17 10:14 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2021-11-25 22:03 [PATCH v3 2/2] pseries/mce: Refactor the pseries mce handling code kernel test robot
  -- strict thread matches above, loose matches on Subject: below --
2021-11-24  9:54 [PATCH v3 1/2] powerpc/mce: Avoid using irq_work_queue() in realmode Ganesh Goudar
2021-11-24  9:55 ` [PATCH v3 2/2] pseries/mce: Refactor the pseries mce handling code Ganesh Goudar
2021-11-24 13:10   ` Nicholas Piggin
2022-01-17  8:11     ` Ganesh

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.