220{
221 int retval, event_counter,
i, overflow_flag, pos;
222 int papi_index, j;
223 int profile_index = 0;
224 long long overflow_vector;
225
227 long long latest = 0;
231
233
234 if ( *t )
236 else
238
241
243 OVFDBG(
"Either no eventset or eventset not set to overflow.\n" );
244#ifdef ANY_THREAD_GETS_SIGNAL
246#endif
248 }
249
252
255 ( "eventset->thread %p vs. current thread %p mismatch",
258 }
259
260 if ( isHardware ) {
263 *isHardware = 1;
264 } else
265 *isHardware = 0;
266 }
267
269
270 overflow_flag = 0;
271 overflow_vector = 0;
272
277 for (
i = 0;
i < event_counter;
i++ ) {
279 latest = ESI->
sw_stop[papi_index];
281
284 ( "dispatch_overflow() latest %lld, deadline %lld, threshold %d\n",
288 overflow_vector ^= (
long long ) 1 << pos;
290 overflow_flag = 1;
291
294 }
295 }
296 } else if ( genOverflowBit ) {
297
299
300
301
302
303
305 overflow_vector = (
long long ) 1 << pos;
306 } else
307 overflow_vector = overflow_bit;
308
311 int k = 0;
312 while ( overflow_vector ) {
313 i = ffsll( overflow_vector ) - 1;
314 for ( j = 0; j < event_counter; j++ ) {
316
317
318
319
320 for ( k = 0, pos = 0; k < PAPI_EVENTS_IN_DERIVED_EVENT && pos >= 0;
321 k++ ) {
324 profile_index = j;
325 goto foundit;
326 }
327 }
328 }
329 if ( j == event_counter ) {
331 ( "BUG! overflow_vector is 0, dropping interrupt" );
333 }
334
335 foundit:
337 over = 0;
338 else
339 over = temp[profile_index];
341 profile_index );
342 overflow_vector ^= (
long long ) 1 <<
i;
343 }
344
345 } else {
348 }
349 }
351 }
352#ifdef ANY_THREAD_GETS_SIGNAL
353 else {
354 OVFDBG(
"I haven't been noticed by PAPI before\n" );
356 }
357#endif
359}
struct papi_vectors * _papi_hwd[]
#define PAPI_OVERFLOW_HARDWARE
unsigned long int(* _papi_hwi_thread_id_fn)(void)
#define OVFDBG(format, args...)
void PAPIERROR(char *format,...)
int _papi_hwi_read(hwd_context_t *context, EventSetInfo_t *ESI, long long *values)
int pos[PAPI_EVENTS_IN_DERIVED_EVENT]
struct _ThreadInfo * master
EventInfo_t * EventInfoArray
EventSetOverflowInfo_t overflow
PAPI_overflow_handler_t handler
hwd_ucontext_t * ucontext
inline_static ThreadInfo_t * _papi_hwi_lookup_thread(int custom_tid)
int _papi_hwi_broadcast_signal(unsigned int mytid)