Avoid the casts by specifying addresses of queue_chain_t members. If the order of members in the structures ever changes, the code will be correct.
--- device/net_io.c | 4 ++-- kern/mach_clock.c | 10 +++++----- kern/processor.c | 2 +- kern/sched_prim.c | 14 +++++++------- kern/task.c | 4 ++-- kern/thread.c | 2 +- vm/vm_object.c | 6 +++--- 7 files changed, 21 insertions(+), 21 deletions(-) diff --git a/device/net_io.c b/device/net_io.c index 68dcc09..dc43bdd 100644 --- a/device/net_io.c +++ b/device/net_io.c @@ -345,7 +345,7 @@ decl_simple_lock_data(,net_hash_header_lock) #define HASH_ITERATE(head, elt) (elt) = (net_hash_entry_t) (head); do { #define HASH_ITERATE_END(head, elt) \ - (elt) = (net_hash_entry_t) queue_next((queue_entry_t) (elt)); \ + (elt) = (net_hash_entry_t) queue_next(&((elt)->chain)); \ } while ((elt) != (head)); #define FILTER_ITERATE(if_port_list, fp, nextfp, chain) \ @@ -2070,7 +2070,7 @@ hash_ent_remove (ifp, hp, used, head, entp, dead_p) } } - remqueue((queue_t)*head, (queue_entry_t)entp); + remqueue((queue_t)*head, &(entp->chain)); ENQUEUE_DEAD(*dead_p, entp, chain); return FALSE; } diff --git a/kern/mach_clock.c b/kern/mach_clock.c index c68b460..7815b32 100644 --- a/kern/mach_clock.c +++ b/kern/mach_clock.c @@ -292,7 +292,7 @@ void softclock(void) fcn = telt->fcn; param = telt->param; - remqueue(&timer_head.chain, (queue_entry_t)telt); + remqueue(&timer_head.chain, &(telt->chain)); telt->set = TELT_UNSET; simple_unlock(&timer_lock); splx(s); @@ -323,7 +323,7 @@ void set_timeout(telt, interval) for (next = (timer_elt_t)queue_first(&timer_head.chain); ; - next = (timer_elt_t)queue_next((queue_entry_t)next)) { + next = (timer_elt_t)queue_next(&(next->chain))) { if (next->ticks > interval) break; @@ -333,7 +333,7 @@ void set_timeout(telt, interval) * Insert new timer element before 'next' * (after 'next'->prev) */ - insque((queue_entry_t) telt, ((queue_entry_t)next)->prev); + insque(&(telt->chain), *(&(next->chain).prev)); telt->set = TELT_SET; simple_unlock(&timer_lock); splx(s); @@ -347,7 +347,7 @@ boolean_t reset_timeout(telt) s = splsched(); simple_lock(&timer_lock); if (telt->set) { - remqueue(&timer_head.chain, (queue_entry_t)telt); + remqueue(&timer_head.chain, &(telt->chain)); telt->set = TELT_UNSET; simple_unlock(&timer_lock); splx(s); @@ -569,7 +569,7 @@ boolean_t untimeout(fcn, param) /* * Found it. */ - remqueue(&timer_head.chain, (queue_entry_t)elt); + remqueue(&timer_head.chain, &(elt->chain)); elt->set = TELT_UNSET; simple_unlock(&timer_lock); diff --git a/kern/processor.c b/kern/processor.c index 865c324..9af48a7 100644 --- a/kern/processor.c +++ b/kern/processor.c @@ -919,7 +919,7 @@ processor_set_things( thread_reference(thread); threads[i] = thread; } - assert(queue_end(&pset->threads, (queue_entry_t) thread)); + assert(queue_end(&pset->threads, &(thread->links))); break; } } diff --git a/kern/sched_prim.c b/kern/sched_prim.c index 1d2e14e..a3ce5b4 100644 --- a/kern/sched_prim.c +++ b/kern/sched_prim.c @@ -310,7 +310,7 @@ void clear_wait( */ thread_lock(thread); if (thread->wait_event == event) { - remqueue(q, (queue_entry_t)thread); + remqueue(q, &(thread->links)); thread->wait_event = 0; event = 0; /* cause to run below */ } @@ -389,12 +389,12 @@ void thread_wakeup_prim( lock = &wait_lock[index]; simple_lock(lock); thread = (thread_t) queue_first(q); - while (!queue_end(q, (queue_entry_t)thread)) { + while (!queue_end(q, &(thread->links))) { next_th = (thread_t) queue_next((queue_t) thread); if (thread->wait_event == event) { thread_lock(thread); - remqueue(q, (queue_entry_t) thread); + remqueue(q, &(thread->links)); thread->wait_event = 0; reset_timeout_check(&thread->timer); @@ -1448,7 +1448,7 @@ struct run_queue *rem_runq( checkrq(rq, "rem_runq: before removing thread"); thread_check(th, rq); #endif /* DEBUG */ - remqueue(&rq->runq[0], (queue_entry_t) th); + remqueue(&rq->runq[0], &(th->links)); rq->count--; #if DEBUG checkrq(rq, "rem_runq: after removing thread"); @@ -1889,7 +1889,7 @@ do_runq_scan( q = runq->runq + runq->low; while (count > 0) { thread = (thread_t) queue_first(q); - while (!queue_end(q, (queue_entry_t) thread)) { + while (!queue_end(q, &(thread->links))) { /* * Get the next thread now, since we may * remove this thread from the run queue. @@ -1920,7 +1920,7 @@ do_runq_scan( * see it. So we remove the thread * from the runq to make it safe. */ - remqueue(q, (queue_entry_t) thread); + remqueue(q, &(thread->links)); runq->count--; thread->runq = RUN_QUEUE_NULL; @@ -2037,7 +2037,7 @@ void thread_check( whichq = NRQS-1; } if ((th->links.next == &rq->runq[whichq]) && - (rq->runq[whichq].prev != (queue_entry_t)th)) + (rq->runq[whichq].prev != &(th->links))) panic("thread_check"); } #endif /* DEBUG */ diff --git a/kern/task.c b/kern/task.c index 13b3c76..fa7cf65 100644 --- a/kern/task.c +++ b/kern/task.c @@ -508,7 +508,7 @@ kern_return_t task_release( */ list = &task->thread_list; thread = (thread_t) queue_first(list); - while (!queue_end(list, (queue_entry_t) thread)) { + while (!queue_end(list, &(thread->links))) { next = (thread_t) queue_next(&thread->thread_list); thread_release(thread); thread = next; @@ -575,7 +575,7 @@ kern_return_t task_threads( thread_reference(thread); threads[i] = thread; } - assert(queue_end(&task->thread_list, (queue_entry_t) thread)); + assert(queue_end(&task->thread_list, &(thread->links))); /* can unlock task now that we've got the thread refs */ task_unlock(task); diff --git a/kern/thread.c b/kern/thread.c index 8474950..b15bfbd 100644 --- a/kern/thread.c +++ b/kern/thread.c @@ -2502,7 +2502,7 @@ kern_return_t processor_set_stack_usage( thread_reference(tmp_thread); threads[i] = tmp_thread; } - assert(queue_end(&pset->threads, (queue_entry_t) tmp_thread)); + assert(queue_end(&pset->threads, &(tmp_thread->links))); /* can unlock processor set now that we have the thread refs */ pset_unlock(pset); diff --git a/vm/vm_object.c b/vm/vm_object.c index 582487e..3051558 100644 --- a/vm/vm_object.c +++ b/vm/vm_object.c @@ -755,7 +755,7 @@ void vm_object_abort_activity( */ p = (vm_page_t) queue_first(&object->memq); - while (!queue_end(&object->memq, (queue_entry_t) p)) { + while (!queue_end(&object->memq, &(p->pageq))) { next = (vm_page_t) queue_next(&p->listq); /* @@ -2750,7 +2750,7 @@ void vm_object_page_remove( vm_object_page_remove_iterate++; p = (vm_page_t) queue_first(&object->memq); - while (!queue_end(&object->memq, (queue_entry_t) p)) { + while (!queue_end(&object->memq, &(p->pageq))) { next = (vm_page_t) queue_next(&p->listq); if ((start <= p->offset) && (p->offset < end)) { if (!p->fictitious) @@ -2986,7 +2986,7 @@ void vm_object_print( if (vm_object_print_pages) { count = 0; p = (vm_page_t) queue_first(&object->memq); - while (!queue_end(&object->memq, (queue_entry_t) p)) { + while (!queue_end(&object->memq, &(p->pageq))) { if (count == 0) iprintf("memory:="); else if (count == 4) {printf("\n"); iprintf(" ..."); count = 0;} else printf(","); -- 1.8.1.4