3 primarypfq_t pqueue; //Global queue
6 /* Intitialize primary queue */
7 pqueue.front = pqueue.rear = NULL;
8 pthread_mutexattr_init(&pqueue.qlockattr);
9 pthread_mutexattr_settype(&pqueue.qlockattr, PTHREAD_MUTEX_RECURSIVE_NP);
10 pthread_mutex_init(&pqueue.qlock, &pqueue.qlockattr);
11 pthread_cond_init(&pqueue.qcond, NULL);
14 /* Delete the node pointed to by the front ptr of the queue */
16 prefetchqelem_t *delnode;
17 if(pqueue.front == NULL) {
18 printf("The queue is empty: UNDERFLOW %s, %d\n", __FILE__, __LINE__);
20 } else if (pqueue.front == pqueue.rear) {
22 pqueue.front = pqueue.rear = NULL;
24 delnode = pqueue.front;
25 pqueue.front = pqueue.front->next;
30 void queueDelete(void) {
31 /* Remove each element */
32 while(pqueue.front != NULL)
36 /* Inserts to the rear of primary prefetch queue */
37 void pre_enqueue(prefetchqelem_t *qnode) {
38 if(pqueue.front == NULL) {
39 pqueue.front = pqueue.rear = qnode;
43 pqueue.rear->next = qnode;
48 /* Return the node pointed to by the front ptr of the queue */
49 prefetchqelem_t *pre_dequeue(void) {
50 prefetchqelem_t *retnode;
51 if (pqueue.front == NULL) {
52 printf("Queue empty: Underflow %s, %d\n", __FILE__, __LINE__);
55 retnode = pqueue.front;
56 pqueue.front = pqueue.front->next;
57 if (pqueue.front == NULL)
65 int offset = sizeof(prefetchqelem_t);
69 prefetchqelem_t *tmp = pqueue.front;
72 ptr = (int *)(ptr1 + offset);
78 void predealloc(prefetchqelem_t *node) {