3 Commits

Author SHA1 Message Date
ef3427454e extend to 64 cores for AMD SMP systems
Change-Id: Ifa96ecaa60e3e9d5679d7d89af4a9148603d07cf
2015-10-01 14:22:44 +02:00
b0eaaeda2b Fix Statistical Profiling support
Change-Id: I5ebed6ead53e2f696d53d6d72e6e370e6e127820
2015-10-01 14:22:44 +02:00
b7d7e202a9 SMP: allow compilation with clang
Change-Id: Iec57820d150f2436cb3b7c543f662d3313197a4c
2015-10-01 14:22:43 +02:00
9 changed files with 180 additions and 6 deletions

View File

@@ -1959,7 +1959,7 @@ do_pcibridge(int busind)
* pci_intel_init *
*===========================================================================*/
static void
pci_intel_init()
pci_intel_init(void)
{
/* Try to detect a know PCI controller. Read the Vendor ID and
* the Device ID for function 0 of device 0.

View File

@@ -19,6 +19,10 @@
#if defined(CONFIG_SMP) && defined(__GNUC__)
#ifndef __ASSEMBLY__
#include <limits.h>
#include <sys/types.h>
static inline void bits_fill(bitchunk_t * chunks, unsigned bits)
{
unsigned c, cnt;

View File

@@ -84,6 +84,8 @@ OBJS.kernel+= ${UNPAGED_OBJS}
.ifdef CONFIG_SMP
SRCS += arch_smp.c trampoline.S
# trampoline.S uses .code16, which is unsupported by clang.
AFLAGS.trampoline.S= ${${ACTIVE_CC} == "clang":?-no-integrated-as:}
.endif
.if ${USE_ACPI} != "no"

View File

@@ -64,6 +64,62 @@ void ipc_entry_syscall_cpu4(void);
void ipc_entry_syscall_cpu5(void);
void ipc_entry_syscall_cpu6(void);
void ipc_entry_syscall_cpu7(void);
void ipc_entry_syscall_cpu8(void);
void ipc_entry_syscall_cpu9(void);
void ipc_entry_syscall_cpu10(void);
void ipc_entry_syscall_cpu11(void);
void ipc_entry_syscall_cpu12(void);
void ipc_entry_syscall_cpu13(void);
void ipc_entry_syscall_cpu14(void);
void ipc_entry_syscall_cpu15(void);
void ipc_entry_syscall_cpu16(void);
void ipc_entry_syscall_cpu17(void);
void ipc_entry_syscall_cpu18(void);
void ipc_entry_syscall_cpu19(void);
void ipc_entry_syscall_cpu20(void);
void ipc_entry_syscall_cpu21(void);
void ipc_entry_syscall_cpu22(void);
void ipc_entry_syscall_cpu23(void);
void ipc_entry_syscall_cpu24(void);
void ipc_entry_syscall_cpu25(void);
void ipc_entry_syscall_cpu26(void);
void ipc_entry_syscall_cpu27(void);
void ipc_entry_syscall_cpu28(void);
void ipc_entry_syscall_cpu29(void);
void ipc_entry_syscall_cpu30(void);
void ipc_entry_syscall_cpu31(void);
void ipc_entry_syscall_cpu32(void);
void ipc_entry_syscall_cpu33(void);
void ipc_entry_syscall_cpu34(void);
void ipc_entry_syscall_cpu35(void);
void ipc_entry_syscall_cpu36(void);
void ipc_entry_syscall_cpu37(void);
void ipc_entry_syscall_cpu38(void);
void ipc_entry_syscall_cpu39(void);
void ipc_entry_syscall_cpu40(void);
void ipc_entry_syscall_cpu41(void);
void ipc_entry_syscall_cpu42(void);
void ipc_entry_syscall_cpu43(void);
void ipc_entry_syscall_cpu44(void);
void ipc_entry_syscall_cpu45(void);
void ipc_entry_syscall_cpu46(void);
void ipc_entry_syscall_cpu47(void);
void ipc_entry_syscall_cpu48(void);
void ipc_entry_syscall_cpu49(void);
void ipc_entry_syscall_cpu50(void);
void ipc_entry_syscall_cpu51(void);
void ipc_entry_syscall_cpu52(void);
void ipc_entry_syscall_cpu53(void);
void ipc_entry_syscall_cpu54(void);
void ipc_entry_syscall_cpu55(void);
void ipc_entry_syscall_cpu56(void);
void ipc_entry_syscall_cpu57(void);
void ipc_entry_syscall_cpu58(void);
void ipc_entry_syscall_cpu59(void);
void ipc_entry_syscall_cpu60(void);
void ipc_entry_syscall_cpu61(void);
void ipc_entry_syscall_cpu62(void);
void ipc_entry_syscall_cpu63(void);
void kernel_call_entry_orig(void);
void kernel_call_entry_um(void);
void level0_call(void);

View File

@@ -216,6 +216,62 @@ ipc_entry_syscall_percpu(4)
ipc_entry_syscall_percpu(5)
ipc_entry_syscall_percpu(6)
ipc_entry_syscall_percpu(7)
ipc_entry_syscall_percpu(8)
ipc_entry_syscall_percpu(9)
ipc_entry_syscall_percpu(10)
ipc_entry_syscall_percpu(11)
ipc_entry_syscall_percpu(12)
ipc_entry_syscall_percpu(13)
ipc_entry_syscall_percpu(14)
ipc_entry_syscall_percpu(15)
ipc_entry_syscall_percpu(16)
ipc_entry_syscall_percpu(17)
ipc_entry_syscall_percpu(18)
ipc_entry_syscall_percpu(19)
ipc_entry_syscall_percpu(20)
ipc_entry_syscall_percpu(21)
ipc_entry_syscall_percpu(22)
ipc_entry_syscall_percpu(23)
ipc_entry_syscall_percpu(24)
ipc_entry_syscall_percpu(25)
ipc_entry_syscall_percpu(26)
ipc_entry_syscall_percpu(27)
ipc_entry_syscall_percpu(28)
ipc_entry_syscall_percpu(29)
ipc_entry_syscall_percpu(30)
ipc_entry_syscall_percpu(31)
ipc_entry_syscall_percpu(32)
ipc_entry_syscall_percpu(33)
ipc_entry_syscall_percpu(34)
ipc_entry_syscall_percpu(35)
ipc_entry_syscall_percpu(36)
ipc_entry_syscall_percpu(37)
ipc_entry_syscall_percpu(38)
ipc_entry_syscall_percpu(39)
ipc_entry_syscall_percpu(40)
ipc_entry_syscall_percpu(41)
ipc_entry_syscall_percpu(42)
ipc_entry_syscall_percpu(43)
ipc_entry_syscall_percpu(44)
ipc_entry_syscall_percpu(45)
ipc_entry_syscall_percpu(46)
ipc_entry_syscall_percpu(47)
ipc_entry_syscall_percpu(48)
ipc_entry_syscall_percpu(49)
ipc_entry_syscall_percpu(50)
ipc_entry_syscall_percpu(51)
ipc_entry_syscall_percpu(52)
ipc_entry_syscall_percpu(53)
ipc_entry_syscall_percpu(54)
ipc_entry_syscall_percpu(55)
ipc_entry_syscall_percpu(56)
ipc_entry_syscall_percpu(57)
ipc_entry_syscall_percpu(58)
ipc_entry_syscall_percpu(59)
ipc_entry_syscall_percpu(60)
ipc_entry_syscall_percpu(61)
ipc_entry_syscall_percpu(62)
ipc_entry_syscall_percpu(63)
ENTRY(ipc_entry_sysenter)
/* SYSENTER simply sets kernel segments, EIP to here, and ESP

View File

@@ -211,7 +211,63 @@ int tss_init(unsigned cpu, void * kernel_stack)
set_star_cpu(5);
set_star_cpu(6);
set_star_cpu(7);
assert(CONFIG_MAX_CPUS <= 8);
set_star_cpu(8);
set_star_cpu(9);
set_star_cpu(10);
set_star_cpu(11);
set_star_cpu(12);
set_star_cpu(13);
set_star_cpu(14);
set_star_cpu(15);
set_star_cpu(16);
set_star_cpu(17);
set_star_cpu(18);
set_star_cpu(19);
set_star_cpu(20);
set_star_cpu(21);
set_star_cpu(22);
set_star_cpu(23);
set_star_cpu(24);
set_star_cpu(25);
set_star_cpu(26);
set_star_cpu(27);
set_star_cpu(28);
set_star_cpu(29);
set_star_cpu(30);
set_star_cpu(31);
set_star_cpu(32);
set_star_cpu(33);
set_star_cpu(34);
set_star_cpu(35);
set_star_cpu(36);
set_star_cpu(37);
set_star_cpu(38);
set_star_cpu(39);
set_star_cpu(40);
set_star_cpu(41);
set_star_cpu(42);
set_star_cpu(43);
set_star_cpu(44);
set_star_cpu(45);
set_star_cpu(46);
set_star_cpu(47);
set_star_cpu(48);
set_star_cpu(49);
set_star_cpu(50);
set_star_cpu(51);
set_star_cpu(52);
set_star_cpu(53);
set_star_cpu(54);
set_star_cpu(55);
set_star_cpu(56);
set_star_cpu(57);
set_star_cpu(58);
set_star_cpu(59);
set_star_cpu(60);
set_star_cpu(61);
set_star_cpu(62);
set_star_cpu(63);
assert(CONFIG_MAX_CPUS <= 64);
}
return SEG_SELECTOR(index);

View File

@@ -19,9 +19,9 @@ typedef struct spinlock {
#else
/* SMP */
#define SPINLOCK_DEFINE(name) spinlock_t name;
#define SPINLOCK_DEFINE(name) spinlock_t name = { .val = 0 };
#define PRIVATE_SPINLOCK_DEFINE(name) PRIVATE SPINLOCK_DEFINE(name)
#define SPINLOCK_DECLARE(name) extern SPINLOCK_DEFINE(name)
#define SPINLOCK_DECLARE(name) extern spinlock_t name;
#define spinlock_init(sl) do { (sl)->val = 0; } while (0)
#if CONFIG_MAX_CPUS == 1

View File

@@ -77,7 +77,7 @@ int do_sprofile(struct proc * caller, message * m_ptr)
break;
case PROF_NMI:
err = nmi_watchdog_start_profiling(
_ptr->m_lsys_krn_sys_sprof.freq);
m_ptr->m_lsys_krn_sys_sprof.freq);
if (err)
return err;
break;

View File

@@ -30,7 +30,7 @@ int do_sprofile(void)
case PROF_START:
return sys_sprof(PROF_START, m_in.m_lc_pm_sprof.mem_size,
m_in.m_lc_pm_sprof.freq, m_in.m_lc_pm_sprof.intr_type, who_e,
m_in.m_lc_pm_sprof.ctl_ptr, m_in.m_lc_pm_sprof.mem_ptr);
(void *)m_in.m_lc_pm_sprof.ctl_ptr, (void *)m_in.m_lc_pm_sprof.mem_ptr);
case PROF_STOP:
return sys_sprof(PROF_STOP,0,0,0,0,0,0);