grufault.c (e006043a4d2da52bba9fd9cb7e5a22e2951ff69b) | grufault.c (67bf04a5c2574e9495f660f418f6df776821d578) |
---|---|
1/* 2 * SN Platform GRU Driver 3 * 4 * FAULT HANDLER FOR GRU DETECTED TLB MISSES 5 * 6 * This file contains code that handles TLB misses within the GRU. 7 * These misses are reported either via interrupts or user polling of 8 * the user CB. --- 319 unchanged lines hidden (view full) --- 328 329 /* 330 * Error if TFH state is IDLE or FMM mode & the user issuing a UPM call. 331 * Might be a hardware race OR a stupid user. Ignore FMM because FMM 332 * is a transient state. 333 */ 334 if (tfh->status != TFHSTATUS_EXCEPTION) { 335 gru_flush_cache(tfh); | 1/* 2 * SN Platform GRU Driver 3 * 4 * FAULT HANDLER FOR GRU DETECTED TLB MISSES 5 * 6 * This file contains code that handles TLB misses within the GRU. 7 * These misses are reported either via interrupts or user polling of 8 * the user CB. --- 319 unchanged lines hidden (view full) --- 328 329 /* 330 * Error if TFH state is IDLE or FMM mode & the user issuing a UPM call. 331 * Might be a hardware race OR a stupid user. Ignore FMM because FMM 332 * is a transient state. 333 */ 334 if (tfh->status != TFHSTATUS_EXCEPTION) { 335 gru_flush_cache(tfh); |
336 sync_core(); |
|
336 if (tfh->status != TFHSTATUS_EXCEPTION) 337 goto failnoexception; 338 STAT(tfh_stale_on_fault); 339 } 340 if (tfh->state == TFHSTATE_IDLE) 341 goto failidle; 342 if (tfh->state == TFHSTATE_MISS_FMM && cbk) 343 goto failfmm; --- 250 unchanged lines hidden (view full) --- 594 595 ucbnum = get_cb_number((void *)excdet.cb); 596 if (ucbnum >= gts->ts_cbr_au_count * GRU_CBR_AU_SIZE) { 597 ret = -EINVAL; 598 } else if (gts->ts_gru) { 599 cbrnum = thread_cbr_number(gts, ucbnum); 600 cbe = get_cbe_by_index(gts->ts_gru, cbrnum); 601 gru_flush_cache(cbe); /* CBE not coherent */ | 337 if (tfh->status != TFHSTATUS_EXCEPTION) 338 goto failnoexception; 339 STAT(tfh_stale_on_fault); 340 } 341 if (tfh->state == TFHSTATE_IDLE) 342 goto failidle; 343 if (tfh->state == TFHSTATE_MISS_FMM && cbk) 344 goto failfmm; --- 250 unchanged lines hidden (view full) --- 595 596 ucbnum = get_cb_number((void *)excdet.cb); 597 if (ucbnum >= gts->ts_cbr_au_count * GRU_CBR_AU_SIZE) { 598 ret = -EINVAL; 599 } else if (gts->ts_gru) { 600 cbrnum = thread_cbr_number(gts, ucbnum); 601 cbe = get_cbe_by_index(gts->ts_gru, cbrnum); 602 gru_flush_cache(cbe); /* CBE not coherent */ |
603 sync_core(); /* make sure we are have current data */ |
|
602 excdet.opc = cbe->opccpy; 603 excdet.exopc = cbe->exopccpy; 604 excdet.ecause = cbe->ecause; 605 excdet.exceptdet0 = cbe->idef1upd; 606 excdet.exceptdet1 = cbe->idef3upd; 607 excdet.cbrstate = cbe->cbrstate; 608 excdet.cbrexecstatus = cbe->cbrexecstatus; 609 gru_flush_cache(cbe); --- 173 unchanged lines hidden --- | 604 excdet.opc = cbe->opccpy; 605 excdet.exopc = cbe->exopccpy; 606 excdet.ecause = cbe->ecause; 607 excdet.exceptdet0 = cbe->idef1upd; 608 excdet.exceptdet1 = cbe->idef3upd; 609 excdet.cbrstate = cbe->cbrstate; 610 excdet.cbrexecstatus = cbe->cbrexecstatus; 611 gru_flush_cache(cbe); --- 173 unchanged lines hidden --- |