Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F147700990
D16158.1784116685.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Size
2 KB
Referenced Files
None
Subscribers
None
D16158.1784116685.diff
View Options
Index: sys/amd64/amd64/mp_machdep.c
===================================================================
--- sys/amd64/amd64/mp_machdep.c
+++ sys/amd64/amd64/mp_machdep.c
@@ -274,7 +274,7 @@
lgdt(&ap_gdt); /* does magic intra-segment return */
/* Get per-cpu data */
- pc = &__pcpu[cpu];
+ pc = bootPC;
/* prime data page for it to use */
pcpu_init(pc, cpu, sizeof(struct pcpu));
@@ -355,6 +355,7 @@
u_int32_t mpbioswarmvec;
int apic_id, cpu, i;
u_char mpbiosreason;
+ struct pcpu *pc;
mtx_init(&ap_boot_mtx, "ap boot", NULL, MTX_SPIN);
@@ -395,6 +396,7 @@
/* start each AP */
for (cpu = 1; cpu < mp_ncpus; cpu++) {
apic_id = cpu_apic_ids[cpu];
+ pc = &__pcpu[cpu];
/* allocate and set up an idle stack data page */
bootstacks[cpu] = (void *)kmem_malloc(kernel_arena,
@@ -407,11 +409,16 @@
M_WAITOK | M_ZERO);
dbg_stack = (char *)kmem_malloc(kernel_arena, PAGE_SIZE,
M_WAITOK | M_ZERO);
- dpcpu = (void *)kmem_malloc(kernel_arena, DPCPU_SIZE,
- M_WAITOK | M_ZERO);
+ dpcpu = (void *)kmem_malloc_domain(kernel_arena, pc->pc_domain,
+ DPCPU_SIZE, M_WAITOK | M_ZERO);
bootSTK = (char *)bootstacks[cpu] + kstack_pages * PAGE_SIZE - 8;
bootAP = cpu;
+ bootPC = pc;
+ if (pc->pc_domain) {
+ bootPC = (void*)kmem_malloc_domain(kernel_arena, pc->pc_domain, sizeof(struct pcpu), M_WAITOK);
+ memcpy(bootPC, pc, sizeof(struct pcpu));
+ }
/* attempt to start the Application Processor */
if (!start_ap(apic_id)) {
Index: sys/x86/include/x86_smp.h
===================================================================
--- sys/x86/include/x86_smp.h
+++ sys/x86/include/x86_smp.h
@@ -29,6 +29,7 @@
extern struct pcb stoppcbs[];
extern int cpu_apic_ids[];
extern int bootAP;
+extern struct pcpu *bootPC;
extern void *dpcpu;
extern char *bootSTK;
extern void *bootstacks[];
Index: sys/x86/x86/mp_x86.c
===================================================================
--- sys/x86/x86/mp_x86.c
+++ sys/x86/x86/mp_x86.c
@@ -85,6 +85,7 @@
/* AP uses this during bootstrap. Do not staticize. */
char *bootSTK;
int bootAP;
+struct pcpu *bootPC;
/* Free these after use */
void *bootstacks[MAXCPU];
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Wed, Jul 15, 11:58 AM (3 h, 5 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
29134684
Default Alt Text
D16158.1784116685.diff (2 KB)
Attached To
Mode
D16158: allocate pcpu and dpcpu from correct domain
Attached
Detach File
Event Timeline
Log In to Comment