exec now uses phys_zero system call to zero bss segments (instead of

using phys_copy to copy zeroes there for every kb), which is a big
optimisation in some cases

fixed a bug that was introduced when function keys became notifies
This commit is contained in:
Ben Gras 2005-06-01 09:39:45 +00:00
parent c977bd8709
commit 447b988154
2 changed files with 18 additions and 2 deletions

View File

@ -24,12 +24,21 @@ FORWARD _PROTOTYPE( void mproc_dmp, (void));
PUBLIC int do_fkey_pressed(void) PUBLIC int do_fkey_pressed(void)
{ {
printf("Process Manager debug dump: "); printf("Process Manager debug dump: ");
switch (m_in.FKEY_CODE) { #if DEAD_CODE
switch (m_in.FKEY_NUM) {
#else
switch (m_in.NOTIFY_FLAGS) {
#endif
case SF7: mproc_dmp(); break; case SF7: mproc_dmp(); break;
default: default:
#if DEAD_CODE
printf("PM: unhandled notification for Shift+F%d key.\n", printf("PM: unhandled notification for Shift+F%d key.\n",
m_in.FKEY_NUM); m_in.FKEY_NUM);
#else
printf("PM: unhandled notification for Shift+F%d key.\n",
m_in.NOTIFY_FLAGS);
#endif
} }
} }

View File

@ -297,7 +297,6 @@ phys_bytes tot_bytes; /* total memory to allocate, including gap */
register struct mproc *rmp; register struct mproc *rmp;
vir_clicks text_clicks, data_clicks, gap_clicks, stack_clicks, tot_clicks; vir_clicks text_clicks, data_clicks, gap_clicks, stack_clicks, tot_clicks;
phys_clicks new_base; phys_clicks new_base;
static char zero[1024]; /* used to zero bss */
phys_bytes bytes, base, count, bss_offset; phys_bytes bytes, base, count, bss_offset;
int s; int s;
@ -372,7 +371,13 @@ phys_bytes tot_bytes; /* total memory to allocate, including gap */
base += bss_offset; base += bss_offset;
bytes -= bss_offset; bytes -= bss_offset;
if ((s=sys_physzero(base, bytes)) != OK) {
panic("new_mem can't zero", s);
}
#if DEAD_CODE
while (bytes > 0) { while (bytes > 0) {
static char zero[1024]; /* used to zero bss */
count = MIN(bytes, (phys_bytes) sizeof(zero)); count = MIN(bytes, (phys_bytes) sizeof(zero));
if ((s=sys_physcopy(PM_PROC_NR, D, (phys_bytes) zero, if ((s=sys_physcopy(PM_PROC_NR, D, (phys_bytes) zero,
NONE, PHYS_SEG, base, count)) != OK) { NONE, PHYS_SEG, base, count)) != OK) {
@ -381,6 +386,8 @@ phys_bytes tot_bytes; /* total memory to allocate, including gap */
base += count; base += count;
bytes -= count; bytes -= count;
} }
#endif
return(OK); return(OK);
} }