Messages in this thread | | | From | Keith Owens <> | Subject | Re: [PATCH for 2.5] preemptible kernel | Date | Wed, 21 Mar 2001 20:19:54 +1100 |
| |
Nigel Gamble wrote: > A task that has been preempted is on the run queue and can be > rescheduled on a different CPU, so I can't see how a per-CPU counter > would work. It seems to me that you would need a per run queue > counter, like the example I gave in a previous posting.
Ouch. What about all the per cpu structures in the kernel, how do you handle them if a preempted task can be rescheduled on another cpu?
int count[NR_CPUS], *p; p = count+smp_processor_id(); /* start on cpu 0, &count[0] */ if (*p >= 1024) { /* preempt here, reschedule on cpu 1 */ *p = 1; /* update cpu 0 count from cpu 1, oops */ }
Unless you find every use of a per cpu structure and wrap a spin lock around it, migrating a task from one cpu to another is going to be a source of wierd and wonderful errors. Since the main use of per cpu structures is to avoid locks, adding a spin lock to every structure will be a killer. Or have I missed something?
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |