summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libbsp/i386/shared/smp/smp-imps.c (follow)
Commit message (Collapse)AuthorAgeFilesLines
* bsps/i386: Move shared files to bspsSebastian Huber2018-04-241-828/+0
| | | | | | This patch is a part of the BSP source reorganization. Update #3285.
* i386/smp: Export _CPU_SMP_Prepare_start_multitasking as a functionAmaan Cheval2018-03-161-0/+5
| | | | | | | | | | When it's a macro, a function declaration causes a compiler error due to the macro being expanded. Partial log showing error: https://gist.github.com/AmaanC/ab3521141479aa6f61ea25f5d74ebb4d Closes #3331
* score: Distribute clock tick to all online CPUsSebastian Huber2016-03-041-1/+10
| | | | Update #2554.
* i386: refactor libcpu/cpu.h into rtems/score/i386.hJoel Sherrill2016-03-031-1/+1
| | | | Fixes #2515.
* smp: Add and use _SMP_Should_start_processor()Sebastian Huber2015-01-091-5/+1
|
* score: Add clustered/partitioned schedulingSebastian Huber2014-04-151-1/+7
| | | | | | | | | | | | | | | Clustered/partitioned scheduling helps to control the worst-case latencies in the system. The goal is to reduce the amount of shared state in the system and thus prevention of lock contention. Modern multi-processor systems tend to have several layers of data and instruction caches. With clustered/partitioned scheduling it is possible to honour the cache topology of a system and thus avoid expensive cache synchronization traffic. We have clustered scheduling in case the set of processors of a system is partitioned into non-empty pairwise-disjoint subsets. These subsets are called clusters. Clusters with a cardinality of one are partitions. Each cluster is owned by exactly one scheduler instance.
* score: SMP initialization changesSebastian Huber2014-04-141-5/+13
| | | | | | | | | | | | | | | | | Add and use _CPU_SMP_Start_processor(). Add and use _CPU_SMP_Finalize_initialization(). This makes most _CPU_SMP_Initialize() functions a bit simpler since we can calculate the minimum value of the count of processors requested by the application configuration and the count of physically or virtually available processors in the high-level code. The CPU port has now the ability to signal a processor start failure. With the support for clustered/partitioned scheduling the presence of particular processors can be configured to be optional or mandatory. There will be a fatal error only in case mandatory processors are not present. The CPU port may use a timeout to monitor the start of a processor.
* score: Rename rtems_smp_process_interrupt()Sebastian Huber2014-02-191-5/+3
| | | | | | Rename rtems_smp_process_interrupt() into _SMP_Inter_processor_interrupt_handler(). Delete unused header file <rtems/bspsmp.h>.
* score: Rename rtems_smp_secondary_cpu_initialize()Sebastian Huber2014-02-191-1/+2
| | | | | | Rename rtems_smp_secondary_cpu_initialize() into _SMP_Start_multitasking_on_secondary_processor(). Move declaration to <rtems/score/smpimpl.h>.
* score: Delete bsp_smp_broadcast_interrupt()Sebastian Huber2014-02-191-6/+0
| | | | | | Since the per-CPU SMP lock must be acquired and released to send the message a single interrupt broadcast operations offers no benefits. If synchronization is required, then a SMP barrier must be used anyway.
* score: Rename bsp_smp_initialize()Sebastian Huber2014-02-191-1/+1
| | | | | Rename bsp_smp_initialize() into _CPU_SMP_Initialize() since every CPU port must supply this function.
* bsps/i386: Include missing header and fix warningsSebastian Huber2013-07-301-13/+11
|
* smp: Add and use _Per_CPU_Get()Sebastian Huber2013-07-301-1/+1
| | | | | | Add and use _Per_CPU_Get_by_index() and _Per_CPU_Get_index(). Add _Per_CPU_Send_interrupt(). This avoids direct access of _Per_CPU_Information.
* Updated legacy code in i386 pc386Vipul Nayyar2013-07-291-16/+14
|
* smp: Add and use _CPU_SMP_Send_interrupt()Sebastian Huber2013-07-171-4/+2
| | | | Delete bsp_smp_interrupt_cpu().
* smp: Simplify SMP initialization sequenceSebastian Huber2013-05-291-49/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Delete bsp_smp_wait_for(). Other parts of the system work without timeout, e.g. the spinlocks. Using a timeout here does not make the system more robust. Delete bsp_smp_cpu_state and replace it with Per_CPU_State. The Per_CPU_State follows the Score naming conventions. Add _Per_CPU_Change_state() and _Per_CPU_Wait_for_state() functions to change and observe states. Use Per_CPU_State in Per_CPU_Control instead of the anonymous integer. Add _CPU_Processor_event_broadcast() and _CPU_Processor_event_receive() functions provided by the CPU port. Use these functions in _Per_CPU_Change_state() and _Per_CPU_Wait_for_state(). Add prototype for _SMP_Send_message(). Delete RTEMS_BSP_SMP_FIRST_TASK message. The first context switch is now performed in rtems_smp_secondary_cpu_initialize(). Issuing the first context switch in the context of the inter-processor interrupt is not possible on systems with a modern interrupt controller. Such an interrupt controler usually requires a handshake protocol with interrupt acknowledge and end of interrupt signals. A direct context switch in an interrupt handler circumvents the interrupt processing epilogue and may leave the system in an inconsistent state. Release lock in rtems_smp_process_interrupt() even if no message was delivered. This prevents deadlock of the system. Simplify and format _SMP_Send_message(), _SMP_Request_other_cores_to_perform_first_context_switch(), _SMP_Request_other_cores_to_dispatch() and _SMP_Request_other_cores_to_shutdown().
* smp: Delete bsp_smp_secondary_cpu_initialize()Sebastian Huber2013-05-291-2/+6
| | | | | | | Do not call bsp_smp_secondary_cpu_initialize() in rtems_smp_secondary_cpu_initialize(). This allows more flexibilty in the BSP low-level code. Specify context requirements for a call to rtems_smp_secondary_cpu_initialize().
* smp: Simplify main CPU initializationSebastian Huber2013-05-291-3/+1
| | | | | | Call _SMP_Handler_initialize() later and move bsp_smp_initialize() into _SMP_Handler_initialize(). Change bsp_smp_initialize() prototype to match integer types of calling context.
* smp: Add maximum_processors field to configSebastian Huber2013-05-161-4/+4
| | | | | | | Delete rtems_configuration_get_smp_maximum_processors(). Delete rtems_configuration_smp_maximum_processors variable. Add maximum_processors field to rtems_configuration_table if RTEMS_SMP is defined. Add rtems_configuration_get_maximum_processors().
* 2011-08-01 Jennifer Averett <Jennifer.Averett@OARcorp.com>Jennifer Averett2011-08-011-55/+256
| | | | | | | PR 1802 * shared/irq/irq_asm.S, shared/irq/irq_init.c, shared/smp/smp-imps.c, shared/smp/smp-imps.h: Add SMP support for i386. * shared/smp/getcpuid.c: New file.
* 2011-07-18 Joel Sherrill <joel.sherrill@oarcorp.com>Joel Sherrill2011-07-181-449/+438
| | | | | * shared/irq/apic.h, shared/smp/smp-imps.c, shared/smp/smp-imps.h: Reformat to be more compliant with RTEMS style.
* 2011-07-15 Joel Sherrill <joel.sherrill@oarcorp.com>Joel Sherrill2011-07-151-2/+27
| | | | | * shared/irq/apic.h, shared/smp/smp-imps.c, shared/smp/smp-imps.h: Per email with Erich Boleyn, change license to BSD style.
* 2011-07-14 Jennifer Averett <Jennifer.Averett@OARcorp.com>Jennifer Averett2011-07-141-0/+649
* shared/irq/apic.h, shared/smp/README, shared/smp/smp-imps.c, shared/smp/smp-imps.h: New files.