-
Notifications
You must be signed in to change notification settings - Fork 33
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
zynq7000: SMP kernel #548
zynq7000: SMP kernel #548
Conversation
f1904c4
to
5e569a4
Compare
Unit Test Results7 460 tests +724 6 745 ✅ +695 39m 33s ⏱️ + 6m 14s Results for commit b1884db. ± Comparison against base commit 47ac14e. This pull request removes 20 and adds 744 tests. Note that renamed tests count towards both.
♻️ This comment has been updated with latest results. |
5e569a4
to
37c8242
Compare
37c8242
to
3202b4a
Compare
9519331
to
9871ea2
Compare
7cd9b24
to
7d80140
Compare
7d80140
to
f7693a6
Compare
f7693a6
to
a5f9a22
Compare
Reverted change that activated L2 cache - it caused stability problems in some tests. I haven't found the reason for it yet. Because it's not necessary for SMP I think we should do it in a different PR. EDIT: it didn't help, only reduced frequency of failing |
Move memory barrier in spinlock clear operation zynq7000: Add memory barriers to SLCR locking/unlocking JIRA: RTOS-796
Page directories were previously 0x4000 bytes, but the upper half was never used by the hardware - only by pmap_resolve(). pmap_resolve() behavior was modified to closer align with how hardware resolves virtual memory addresses. JIRA: RTOS-796
Add scheduler lock Add TLB management broadcast functions Implement correct CPU ID and CPU count functions Add inter-processor interrupt Add core count to CPU info print at startup JIRA: RTOS-796
Set memory as shareable and enable write-allocate - needed for SMP Change AP values of 110 into 111 - previous value is deprecated JIRA: RTOS-796
Activate SCU and cache/TLB mainenance broadcast JIRA: RTOS-796
Allow interrupts to run on any core Schedule timer interrupt in a round-robin fashion across both cores Adjust timer to keep the current scheduling period on both cores JIRA: RTOS-796
JIRA: RTOS-796
a5f9a22
to
b1884db
Compare
Allows tasks to be scheduled on both CPU cores on zynq7000 platform.
Description
NOTE: the corresponding PR in PLO must be merged first - otherwise on zynq7000 kernel will hang waiting for other CPU cores which will never start.
Code is capable of detecting number of available CPUs at runtime, the
NUM_CPUS
constant is used as maximum number of CPUs to prepare for.One change was made not related to SMP: size of page directories was changed from
0x4000
bytes to0x2000
bytes, as the upper half was unnecessaryMemory attributes were changed in common armv7a code, which affects imx6ull (but should not cause significant change).
Using SMP on armv7a9-zynq7000-qemu causes drastic slowdown (about 4x-5x slower) when executing single-core workloads. This is because under QEMU the idle thread creates a lot of load on the host CPU, as well as contention on the timer spinlock. This slowdown does not occur on real hardware. For this reason I suggest limiting QEMU to emulating only one core, as we can test SMP configurations on real hardware.
Motivation and Context
Types of changes
How Has This Been Tested?
Checklist:
Special treatment