ia64/xen-unstable

changeset 17508:a5319f23db7c

x86: Reduce assertion aggressiveness in send_IPI_mask().
Signed-off-by: Keir Fraser <keir.fraser@citrix.com>
author Keir Fraser <keir.fraser@citrix.com>
date Wed Apr 23 09:15:34 2008 +0100 (2008-04-23)
parents 4f9284a5d3ab
children 08321f572e37
files xen/arch/x86/smp.c
line diff
     1.1 --- a/xen/arch/x86/smp.c	Wed Apr 23 09:02:15 2008 +0100
     1.2 +++ b/xen/arch/x86/smp.c	Wed Apr 23 09:15:34 2008 +0100
     1.3 @@ -75,20 +75,10 @@ static inline int __prepare_ICR2 (unsign
     1.4      return SET_APIC_DEST_FIELD(mask);
     1.5  }
     1.6  
     1.7 -static inline void check_IPI_mask(cpumask_t cpumask)
     1.8 -{
     1.9 -    /*
    1.10 -     * Sanity, and necessary. An IPI with no target generates a send accept
    1.11 -     * error with Pentium and P6 APICs.
    1.12 -     */
    1.13 -    ASSERT(cpus_subset(cpumask, cpu_online_map));
    1.14 -    ASSERT(!cpus_empty(cpumask));
    1.15 -}
    1.16 -
    1.17  void apic_wait_icr_idle(void)
    1.18  {
    1.19 -	while ( apic_read( APIC_ICR ) & APIC_ICR_BUSY )
    1.20 -		cpu_relax();
    1.21 +    while ( apic_read( APIC_ICR ) & APIC_ICR_BUSY )
    1.22 +        cpu_relax();
    1.23  }
    1.24  
    1.25  void send_IPI_mask_flat(cpumask_t cpumask, int vector)
    1.26 @@ -97,7 +87,8 @@ void send_IPI_mask_flat(cpumask_t cpumas
    1.27      unsigned long cfg;
    1.28      unsigned long flags;
    1.29  
    1.30 -    check_IPI_mask(cpumask);
    1.31 +    /* An IPI with no target generates a send accept error from P5/P6 APICs. */
    1.32 +    WARN_ON(mask == 0);
    1.33  
    1.34      local_irq_save(flags);
    1.35  
    1.36 @@ -130,17 +121,9 @@ void send_IPI_mask_phys(cpumask_t mask, 
    1.37      unsigned long cfg, flags;
    1.38      unsigned int query_cpu;
    1.39  
    1.40 -    check_IPI_mask(mask);
    1.41 -
    1.42 -    /*
    1.43 -     * Hack. The clustered APIC addressing mode doesn't allow us to send 
    1.44 -     * to an arbitrary mask, so I do a unicasts to each CPU instead. This 
    1.45 -     * should be modified to do 1 message per cluster ID - mbligh
    1.46 -     */ 
    1.47 -
    1.48      local_irq_save(flags);
    1.49  
    1.50 -    for_each_cpu_mask( query_cpu, mask )
    1.51 +    for_each_cpu_mask ( query_cpu, mask )
    1.52      {
    1.53          /*
    1.54           * Wait for idle.