Пример #1
0
void
polaris_machine_check(unsigned long vector, unsigned long la_ptr,
		      struct pt_regs * regs)
{
	/* Clear the error before any reporting.  */
	mb();
	mb();
	draina();
	polaris_pci_clr_err();
	wrmces(0x7);
	mb();

	process_mcheck_info(vector, la_ptr, regs, "POLARIS",
			    mcheck_expected(0));
}
Пример #2
0
void polaris_machine_check(unsigned long vector, unsigned long la_ptr,
			 struct pt_regs * regs)
{
	struct el_common *mchk_header;
	struct el_POLARIS_sysdata_mcheck *mchk_sysdata;

	mchk_header = (struct el_common *)la_ptr;

	mchk_sysdata = 
	  (struct el_POLARIS_sysdata_mcheck *)(la_ptr+mchk_header->sys_offset);

#if 0
	DBG_MCK(("polaris_machine_check: vector=0x%lx la_ptr=0x%lx\n",
	     vector, la_ptr));
	DBG_MCK(("\t\t pc=0x%lx size=0x%x procoffset=0x%x sysoffset 0x%x\n",
	     regs->pc, mchk_header->size, mchk_header->proc_offset,
	     mchk_header->sys_offset));
	DBG_MCK(("polaris_machine_check: expected %d status 0x%lx\n",
	     POLARIS_mcheck_expected, mchk_sysdata->psc_status));
#endif
#ifdef DEBUG_MCHECK_DUMP
	{
	    unsigned long *ptr;
	    int i;

	    ptr = (unsigned long *)la_ptr;
	    for (i = 0; i < mchk_header->size / sizeof(long); i += 2) {
		printk(" +%lx %lx %lx\n", i*sizeof(long), ptr[i], ptr[i+1]);
	    }
	}
#endif /* DEBUG_MCHECK_DUMP */
	/*
	 * Check if machine check is due to a badaddr() and if so,
	 * ignore the machine check.
	 */
	mb();
	mb();
	if (POLARIS_mcheck_expected) {
		DBG_MCK(("POLARIS machine check expected\n"));
		POLARIS_mcheck_expected = 0;
		POLARIS_mcheck_taken = 1;
		mb();
		mb();
		draina();
		polaris_pci_clr_err();
		wrmces(0x7);
		mb();
	}
#if 1
	else {
		printk("POLARIS machine check NOT expected\n") ;
	DBG_MCK(("polaris_machine_check: vector=0x%lx la_ptr=0x%lx\n",
	     vector, la_ptr));
	DBG_MCK(("\t\t pc=0x%lx size=0x%x procoffset=0x%x sysoffset 0x%x\n",
	     regs->pc, mchk_header->size, mchk_header->proc_offset,
	     mchk_header->sys_offset));
		POLARIS_mcheck_expected = 0;
		POLARIS_mcheck_taken = 1;
		mb();
		mb();
		draina();
		polaris_pci_clr_err();
		wrmces(0x7);
		mb();
	}
#endif
}