Changeset d70fc74 in mainline for kernel/generic/src/smp/smp_call.c


Ignore:
Timestamp:
2012-07-06T12:58:58Z (12 years ago)
Author:
Adam Hraska <adam.hraska+hos@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
ef1603b
Parents:
1f8c11f
Message:

smp_call: Minor fixes and comments.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • kernel/generic/src/smp/smp_call.c

    r1f8c11f rd70fc74  
    5454 *
    5555 * If @a cpu_id is the local CPU, the function will be invoked
    56  * directly.
     56 * directly. If the destination cpu id @a cpu_id is invalid
     57 * or denotes an inactive cpu, the call is discarded immediately.
    5758 *
    5859 * Interrupts must be enabled. Otherwise you run the risk
    5960 * of a deadlock.
    6061 *
    61  * @param cpu_id Destination CPU's logical id (eg CPU->id)
     62 * @param cpu_id Destination CPU's logical id (eg CPU->id).
    6263 * @param func Function to call.
    6364 * @param arg Argument to pass to the user supplied function @a func.
     
    7374       
    7475        /* Discard invalid calls. */
    75         if (config.cpu_count <= cpu_id) {
     76        if (config.cpu_count <= cpu_id || !cpus[cpu_id].active) {
    7677                call_start(call_info, func, arg);
    7778                call_done(call_info);
     
    8182        /* Protect cpu->id against migration. */
    8283        preemption_disable();
    83        
     84
    8485        call_start(call_info, func, arg);
    8586       
     
    8990                list_append(&call_info->calls_link, &cpus[cpu_id].smp_pending_calls);
    9091                spinlock_unlock(&cpus[cpu_id].smp_calls_lock);
    91                                
     92
     93                /*
     94                 * If a platform supports SMP it must implement arch_smp_call_ipi().
     95                 * It should issue an IPI an cpu_id and invoke smp_call_ipi_recv()
     96                 * on cpu_id in turn.
     97                 *
     98                 * Do not implement as just an empty dummy function. Instead
     99                 * consider providing a full implementation or at least a version
     100                 * that panics if invoked. Note that smp_call_async() never
     101                 * calls arch_smp_call_ipi() on uniprocessors even if CONFIG_SMP.
     102                 */
    92103                arch_smp_call_ipi(cpu_id);
    93104#endif
     
    131142/** Architecture independent smp call IPI handler.
    132143 *
    133  * Interrupts must be disabled.
     144 * Interrupts must be disabled. Tolerates spurious calls.
    134145 */
    135146void smp_call_ipi_recv(void)
Note: See TracChangeset for help on using the changeset viewer.