[patch 2.5.30] alpha: IPI update [2/10]

From: Ivan Kokshaysky (ink@jurassic.park.msu.ru)
Date: Sat Aug 10 2002 - 10:25:15 EST


- send_ipi_message() fix from Jeff Wiedemeier:
  The 2.5.30 IPI algorithm (with the to_whom == set test) incorrectly sends
  IPI messages to CPU 0 in a SMP system running with one processor. In this
  case to_whom is often 0 (cpu_present_mask & ~1UL << smp_processor_id()) which
  ends up triggering the to_whom == set case.
- migration IPI removed;

Ivan.

--- 2.5.30/arch/alpha/kernel/smp.c Fri Aug 2 01:16:16 2002
+++ linux/arch/alpha/kernel/smp.c Thu Aug 8 19:45:19 2002
@@ -62,7 +63,6 @@ static struct {
 
 enum ipi_message_type {
         IPI_RESCHEDULE,
- IPI_MIGRATION,
         IPI_CALL_FUNC,
         IPI_CPU_STOP,
 };
@@ -668,33 +658,21 @@ send_ipi_message(unsigned long to_whom,
 {
         unsigned long i, set, n;
 
- set = to_whom & -to_whom;
- if (to_whom == set) {
+ mb();
+ for (i = to_whom; i ; i &= ~set) {
+ set = i & -i;
                 n = __ffs(set);
- mb();
                 set_bit(operation, &ipi_data[n].bits);
- mb();
- wripir(n);
- } else {
- mb();
- for (i = to_whom; i ; i &= ~set) {
- set = i & -i;
- n = __ffs(set);
- set_bit(operation, &ipi_data[n].bits);
- }
+ }
 
- mb();
- for (i = to_whom; i ; i &= ~set) {
- set = i & -i;
- n = __ffs(set);
- wripir(n);
- }
+ mb();
+ for (i = to_whom; i ; i &= ~set) {
+ set = i & -i;
+ n = __ffs(set);
+ wripir(n);
         }
 }
 
-/* Data for IPI_MIGRATION. */
-static task_t *migration_task;
-
 /* Structure and data for smp_call_function. This is designed to
    minimize static memory requirements. Plus it looks cleaner. */
 
@@ -768,15 +746,6 @@ handle_ipi(struct pt_regs *regs)
                            is done by the interrupt return path. */
                         break;
 
- case IPI_MIGRATION:
- {
- task_t *t = migration_task;
- mb();
- migration_task = 0;
- sched_task_migrated(t);
- break;
- }
-
                 case IPI_CALL_FUNC:
                     {
                         struct smp_call_struct *data;
@@ -835,19 +804,6 @@ smp_send_reschedule(int cpu)
 }
 
 void
-smp_migrate_task(int cpu, task_t *t)
-{
-#if DEBUG_IPI_MSG
- if (cpu == hard_smp_processor_id())
- printk(KERN_WARNING
- "smp_migrate_task: Sending IPI to self.\n");
-#endif
- /* Acquire the migration_task mutex. */
- pointer_lock(&migration_task, t, 1);
- send_ipi_message(1UL << cpu, IPI_MIGRATION);
-}
-
-void
 smp_send_stop(void)
 {
         unsigned long to_whom = cpu_present_mask & ~(1UL << smp_processor_id());
-
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/



This archive was generated by hypermail 2b29 : Thu Aug 15 2002 - 22:00:22 EST