Partially revert r224661:

octeon_ap_boot is not a bitmask. It holds the CPU Id of the
AP currently being started. As such there's no need to make
it a 64-bit integral and we're not limited to 64 CPUs.

Reported by: jmallet
Obtained from:	Andre Duane
This commit is contained in:
marcel 2011-10-04 17:49:19 +00:00
parent 661ede8286
commit 0e47b3099e
2 changed files with 5 additions and 6 deletions

View File

@ -50,12 +50,12 @@ LEAF(octeon_ap_wait)
jal platform_processor_id jal platform_processor_id
nop nop
1: lld t0, octeon_ap_boot 1: ll t0, octeon_ap_boot
bne v0, t0, 1b bne v0, t0, 1b
nop nop
move t0, zero move t0, zero
scd t0, octeon_ap_boot sc t0, octeon_ap_boot
beqz t0, 1b beqz t0, 1b
nop nop

View File

@ -46,8 +46,7 @@ __FBSDID("$FreeBSD$");
/* XXX */ /* XXX */
extern cvmx_bootinfo_t *octeon_bootinfo; extern cvmx_bootinfo_t *octeon_bootinfo;
/* NOTE: this 64-bit mask (and many others) limits MAXCPU to 64 */ unsigned octeon_ap_boot = ~0;
uint64_t octeon_ap_boot = ~0ULL;
void void
platform_ipi_send(int cpuid) platform_ipi_send(int cpuid)
@ -139,11 +138,11 @@ platform_start_ap(int cpuid)
DELAY(2000); /* Give it a moment to start */ DELAY(2000); /* Give it a moment to start */
} }
if (atomic_cmpset_64(&octeon_ap_boot, ~0, cpuid) == 0) if (atomic_cmpset_32(&octeon_ap_boot, ~0, cpuid) == 0)
return (-1); return (-1);
for (;;) { for (;;) {
DELAY(1000); DELAY(1000);
if (atomic_cmpset_64(&octeon_ap_boot, 0, ~0) != 0) if (atomic_cmpset_32(&octeon_ap_boot, 0, ~0) != 0)
return (0); return (0);
printf("Waiting for cpu%d to start\n", cpuid); printf("Waiting for cpu%d to start\n", cpuid);
} }