Compare commits
3 Commits
pthreads
...
smp_might_
| Author | SHA1 | Date | |
|---|---|---|---|
| ef3427454e | |||
| b0eaaeda2b | |||
| b7d7e202a9 |
@@ -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.
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user