recover_from_read_error(slidx_table_t *slidx, peidx_table_t *peidx, pal_bus_check_info_t *pbci, 
recover_from_read_error(slidx_table_t *slidx, peidx_table_t *peidx, pal_bus_check_info_t *pbci, 
recover_from_read_error(slidx_table_t *slidx, peidx_table_t *peidx, pal_bus_check_info_t *pbci,			struct ia64_sal_os_state *sos){	sal_log_mod_error_info_t *smei;	pal_min_state_area_t *pmsa;	struct ia64_psr *psr1, *psr2;	ia64_fptr_t *mca_hdlr_bh = (ia64_fptr_t*)mca_handler_bhhook;	/* Is target address valid? */	if (!pbci->tv)		return 0;	/*	 * cpu read or memory-mapped io read	 *	 *    offending process  affected process  OS MCA do	 *     kernel mode        kernel mode       down system	 *     kernel mode        user   mode       kill the process	 *     user   mode        kernel mode       down system (*)	 *     user   mode        user   mode       kill the process	 *	 * (*) You could terminate offending user-mode process	 *    if (pbci->pv && pbci->pl != 0) *and* if you sure	 *    the process not have any locks of kernel.	 */	psr1 =(struct ia64_psr *)&(peidx_minstate_area(peidx)->pmsa_ipsr);	/*	 *  Check the privilege level of interrupted context.	 *   If it is user-mode, then terminate affected process.	 */	if (psr1->cpl != 0) {		smei = peidx_bus_check(peidx, 0);		if (smei->valid.target_identifier) {			/*			 *  setup for resume to bottom half of MCA,			 * "mca_handler_bhhook"			 */			pmsa = sos->pal_min_state;			/* pass to bhhook as 1st argument (gr8) */			pmsa->pmsa_gr[8-1] = smei->target_identifier;			/* set interrupted return address (but no use) */			pmsa->pmsa_br0 = pmsa->pmsa_iip;			/* change resume address to bottom half */			pmsa->pmsa_iip = mca_hdlr_bh->fp;			pmsa->pmsa_gr[1-1] = mca_hdlr_bh->gp;			/* set cpl with kernel mode */			psr2 = (struct ia64_psr *)&pmsa->pmsa_ipsr;			psr2->cpl = 0;			psr2->ri  = 0;			psr2->i  = 0;			return 1;		}	}	return 0;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/20305e59724381365096b6ab0a48054723367c80/mca_drv.c/buggy/arch/ia64/kernel/mca_drv.c