add func do_mod_exit
Conflicts: kernel/syscall.c
This commit is contained in:
@@ -233,7 +233,7 @@ void aal_mc_map_micpa(unsigned long host_pa, unsigned long* mic_pa) {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
dkprintf("aal_mc_map_micpa,1,i=%d,host_pa=%lx,mic_pa=%llx\n", i, host_pa, *mic_pa);
|
kprintf("aal_mc_map_micpa,1,i=%d,host_pa=%lx,mic_pa=%llx\n", i, host_pa, *mic_pa);
|
||||||
if(i == NUM_SMPT_ENTRIES_IN_USE - NUM_SMPT_ENTRIES_MICPA - 1) {
|
if(i == NUM_SMPT_ENTRIES_IN_USE - NUM_SMPT_ENTRIES_MICPA - 1) {
|
||||||
*mic_pa = 0;
|
*mic_pa = 0;
|
||||||
return;
|
return;
|
||||||
@@ -250,10 +250,15 @@ int aal_mc_free_micpa(unsigned long mic_pa) {
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
free_bitmap_micpa |= (1ULL << smpt_ndx);
|
free_bitmap_micpa |= (1ULL << smpt_ndx);
|
||||||
dkprintf("aal_mc_free_micpa,index=%d,freed\n", smpt_ndx);
|
kprintf("aal_mc_free_micpa,index=%d,freed\n", smpt_ndx);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void aal_mc_clean_micpa(void){
|
||||||
|
free_bitmap_micpa = ((~((1ULL<<(NUM_SMPT_ENTRIES_IN_USE - NUM_SMPT_ENTRIES_MICPA))-1))&((1ULL << NUM_SMPT_ENTRIES_IN_USE) - 1));
|
||||||
|
kprintf("aal_mc_clean_micpa\n");
|
||||||
|
}
|
||||||
|
|
||||||
void mem_init(void)
|
void mem_init(void)
|
||||||
{
|
{
|
||||||
page_allocator_init();
|
page_allocator_init();
|
||||||
|
|||||||
@@ -38,6 +38,11 @@ static aal_atomic_t pid_cnt = AAL_ATOMIC_INIT(1024);
|
|||||||
int memcpy_async(unsigned long dest, unsigned long src,
|
int memcpy_async(unsigned long dest, unsigned long src,
|
||||||
unsigned long len, int wait, unsigned long *notify);
|
unsigned long len, int wait, unsigned long *notify);
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef DCFA_KMOD
|
||||||
|
static void do_mod_exit(int status);
|
||||||
|
#endif
|
||||||
|
|
||||||
static void send_syscall(struct syscall_request *req)
|
static void send_syscall(struct syscall_request *req)
|
||||||
{
|
{
|
||||||
struct ikc_scd_packet packet;
|
struct ikc_scd_packet packet;
|
||||||
@@ -343,8 +348,12 @@ SYSCALL_DECLARE(lseek)
|
|||||||
SYSCALL_DECLARE(exit_group)
|
SYSCALL_DECLARE(exit_group)
|
||||||
{
|
{
|
||||||
SYSCALL_HEADER;
|
SYSCALL_HEADER;
|
||||||
do_syscall(&request, ctx);
|
|
||||||
|
|
||||||
|
#ifdef DCFA_KMOD
|
||||||
|
do_mod_exit((int)aal_mc_syscall_arg0(ctx));
|
||||||
|
#endif
|
||||||
|
|
||||||
|
do_syscall(&request, ctx);
|
||||||
runq_del_proc(cpu_local_var(current), aal_mc_get_processor_id());
|
runq_del_proc(cpu_local_var(current), aal_mc_get_processor_id());
|
||||||
free_process_memory(cpu_local_var(current));
|
free_process_memory(cpu_local_var(current));
|
||||||
|
|
||||||
@@ -952,6 +961,10 @@ SYSCALL_DECLARE(futex)
|
|||||||
|
|
||||||
SYSCALL_DECLARE(exit)
|
SYSCALL_DECLARE(exit)
|
||||||
{
|
{
|
||||||
|
#ifdef DCFA_KMOD
|
||||||
|
do_mod_exit((int)aal_mc_syscall_arg0(ctx));
|
||||||
|
#endif
|
||||||
|
|
||||||
/* If there is a clear_child_tid address set, clear it and wake it.
|
/* If there is a clear_child_tid address set, clear it and wake it.
|
||||||
* This unblocks any pthread_join() waiters. */
|
* This unblocks any pthread_join() waiters. */
|
||||||
if (cpu_local_var(current)->thread.clear_child_tid) {
|
if (cpu_local_var(current)->thread.clear_child_tid) {
|
||||||
@@ -1058,12 +1071,18 @@ SYSCALL_DECLARE(noop)
|
|||||||
|
|
||||||
extern int ibmic_cmd_syscall(char *uargs);
|
extern int ibmic_cmd_syscall(char *uargs);
|
||||||
extern int dcfampi_cmd_syscall(char *uargs);
|
extern int dcfampi_cmd_syscall(char *uargs);
|
||||||
|
extern void ibmic_cmd_exit(int status);
|
||||||
|
|
||||||
static int (*mod_call_table[]) (char *) = {
|
static int (*mod_call_table[]) (char *) = {
|
||||||
[1] = ibmic_cmd_syscall,
|
[1] = ibmic_cmd_syscall,
|
||||||
[2] = dcfampi_cmd_syscall,
|
[2] = dcfampi_cmd_syscall,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static void (*mod_exit_table[]) (int) = {
|
||||||
|
[1] = ibmic_cmd_exit,
|
||||||
|
[2] = NULL,
|
||||||
|
};
|
||||||
|
|
||||||
SYSCALL_DECLARE(mod_call) {
|
SYSCALL_DECLARE(mod_call) {
|
||||||
int mod_id;
|
int mod_id;
|
||||||
unsigned long long uargs;
|
unsigned long long uargs;
|
||||||
@@ -1078,6 +1097,14 @@ SYSCALL_DECLARE(mod_call) {
|
|||||||
|
|
||||||
return -ENOSYS;
|
return -ENOSYS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void do_mod_exit(int status){
|
||||||
|
int i;
|
||||||
|
for(i=1; i<=2; i++){
|
||||||
|
if(mod_exit_table[i])
|
||||||
|
mod_exit_table[i](status);
|
||||||
|
}
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
SYSCALL_DECLARE(process_data_section) {
|
SYSCALL_DECLARE(process_data_section) {
|
||||||
|
|||||||
Reference in New Issue
Block a user