try to use cp only for curproc[cpu()]
This commit is contained in:
		
							parent
							
								
									22330658ff
								
							
						
					
					
						commit
						9583b476bf
					
				
					 4 changed files with 37 additions and 36 deletions
				
			
		
							
								
								
									
										18
									
								
								proc.c
									
										
									
									
									
								
							
							
						
						
									
										18
									
								
								proc.c
									
										
									
									
									
								
							| 
						 | 
					@ -204,9 +204,9 @@ scheduler(void)
 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
sched(void)
 | 
					sched(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  struct proc *p = curproc[cpu()];
 | 
					  struct proc *cp = curproc[cpu()];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if(p->state == RUNNING)
 | 
					  if(cp->state == RUNNING)
 | 
				
			||||||
    panic("sched running");
 | 
					    panic("sched running");
 | 
				
			||||||
  if(!holding(&proc_table_lock))
 | 
					  if(!holding(&proc_table_lock))
 | 
				
			||||||
    panic("sched proc_table_lock");
 | 
					    panic("sched proc_table_lock");
 | 
				
			||||||
| 
						 | 
					@ -221,10 +221,10 @@ sched(void)
 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
yield(void)
 | 
					yield(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  struct proc *p = curproc[cpu()];
 | 
					  struct proc *cp = curproc[cpu()];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  acquire(&proc_table_lock);
 | 
					  acquire(&proc_table_lock);
 | 
				
			||||||
  p->state = RUNNABLE;
 | 
					  cp->state = RUNNABLE;
 | 
				
			||||||
  sched();
 | 
					  sched();
 | 
				
			||||||
  release(&proc_table_lock);
 | 
					  release(&proc_table_lock);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -246,9 +246,9 @@ forkret(void)
 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
sleep(void *chan, struct spinlock *lk)
 | 
					sleep(void *chan, struct spinlock *lk)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  struct proc *p = curproc[cpu()];
 | 
					  struct proc *cp = curproc[cpu()];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if(p == 0)
 | 
					  if(cp == 0)
 | 
				
			||||||
    panic("sleep");
 | 
					    panic("sleep");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if(lk == 0)
 | 
					  if(lk == 0)
 | 
				
			||||||
| 
						 | 
					@ -266,12 +266,12 @@ sleep(void *chan, struct spinlock *lk)
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // Go to sleep.
 | 
					  // Go to sleep.
 | 
				
			||||||
  p->chan = chan;
 | 
					  cp->chan = chan;
 | 
				
			||||||
  p->state = SLEEPING;
 | 
					  cp->state = SLEEPING;
 | 
				
			||||||
  sched();
 | 
					  sched();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // Tidy up.
 | 
					  // Tidy up.
 | 
				
			||||||
  p->chan = 0;
 | 
					  cp->chan = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // Reacquire original lock.
 | 
					  // Reacquire original lock.
 | 
				
			||||||
  if(lk != &proc_table_lock){
 | 
					  if(lk != &proc_table_lock){
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										18
									
								
								syscall.c
									
										
									
									
									
								
							
							
						
						
									
										18
									
								
								syscall.c
									
										
									
									
									
								
							| 
						 | 
					@ -37,15 +37,15 @@ fetchint(struct proc *p, uint addr, int *ip)
 | 
				
			||||||
int
 | 
					int
 | 
				
			||||||
fetchstr(struct proc *p, uint addr, char **pp)
 | 
					fetchstr(struct proc *p, uint addr, char **pp)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  char *cp, *ep;
 | 
					  char *s, *ep;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if(addr >= p->sz)
 | 
					  if(addr >= p->sz)
 | 
				
			||||||
    return -1;
 | 
					    return -1;
 | 
				
			||||||
  *pp = p->mem + addr;
 | 
					  *pp = p->mem + addr;
 | 
				
			||||||
  ep = p->mem + p->sz;
 | 
					  ep = p->mem + p->sz;
 | 
				
			||||||
  for(cp = *pp; cp < ep; cp++)
 | 
					  for(s = *pp; s < ep; s++)
 | 
				
			||||||
    if(*cp == 0)
 | 
					    if(*s == 0)
 | 
				
			||||||
      return cp - *pp;
 | 
					      return s - *pp;
 | 
				
			||||||
  return -1;
 | 
					  return -1;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -53,9 +53,9 @@ fetchstr(struct proc *p, uint addr, char **pp)
 | 
				
			||||||
int
 | 
					int
 | 
				
			||||||
argint(int argno, int *ip)
 | 
					argint(int argno, int *ip)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  struct proc *p = curproc[cpu()];
 | 
					  struct proc *cp = curproc[cpu()];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  return fetchint(p, p->tf->esp + 4 + 4*argno, ip);
 | 
					  return fetchint(cp, cp->tf->esp + 4 + 4*argno, ip);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Fetch the nth word-sized system call argument as a pointer
 | 
					// Fetch the nth word-sized system call argument as a pointer
 | 
				
			||||||
| 
						 | 
					@ -65,13 +65,13 @@ int
 | 
				
			||||||
argptr(int argno, char **pp, int size)
 | 
					argptr(int argno, char **pp, int size)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  int i;
 | 
					  int i;
 | 
				
			||||||
  struct proc *p = curproc[cpu()];
 | 
					  struct proc *cp = curproc[cpu()];
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
  if(argint(argno, &i) < 0)
 | 
					  if(argint(argno, &i) < 0)
 | 
				
			||||||
    return -1;
 | 
					    return -1;
 | 
				
			||||||
  if((uint)i >= p->sz || (uint)i+size >= p->sz)
 | 
					  if((uint)i >= cp->sz || (uint)i+size >= cp->sz)
 | 
				
			||||||
    return -1;
 | 
					    return -1;
 | 
				
			||||||
  *pp = p->mem + i;
 | 
					  *pp = cp->mem + i;
 | 
				
			||||||
  return 0;
 | 
					  return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										23
									
								
								sysfile.c
									
										
									
									
									
								
							
							
						
						
									
										23
									
								
								sysfile.c
									
										
									
									
									
								
							| 
						 | 
					@ -22,11 +22,11 @@ argfd(int argno, int *pfd, struct file **pf)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  int fd;
 | 
					  int fd;
 | 
				
			||||||
  struct file *f;
 | 
					  struct file *f;
 | 
				
			||||||
  struct proc *p = curproc[cpu()];
 | 
					  struct proc *cp = curproc[cpu()];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if(argint(argno, &fd) < 0)
 | 
					  if(argint(argno, &fd) < 0)
 | 
				
			||||||
    return -1;
 | 
					    return -1;
 | 
				
			||||||
  if(fd < 0 || fd >= NOFILE || (f=p->ofile[fd]) == 0)
 | 
					  if(fd < 0 || fd >= NOFILE || (f=cp->ofile[fd]) == 0)
 | 
				
			||||||
    return -1;
 | 
					    return -1;
 | 
				
			||||||
  if(pfd)
 | 
					  if(pfd)
 | 
				
			||||||
    *pfd = fd;
 | 
					    *pfd = fd;
 | 
				
			||||||
| 
						 | 
					@ -41,10 +41,11 @@ static int
 | 
				
			||||||
fdalloc(struct file *f)
 | 
					fdalloc(struct file *f)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  int fd;
 | 
					  int fd;
 | 
				
			||||||
  struct proc *p = curproc[cpu()];
 | 
					  struct proc *cp = curproc[cpu()];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  for(fd = 0; fd < NOFILE; fd++){
 | 
					  for(fd = 0; fd < NOFILE; fd++){
 | 
				
			||||||
    if(p->ofile[fd] == 0){
 | 
					    if(cp->ofile[fd] == 0){
 | 
				
			||||||
      p->ofile[fd] = f;
 | 
					      cp->ofile[fd] = f;
 | 
				
			||||||
      return fd;
 | 
					      return fd;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
| 
						 | 
					@ -57,7 +58,7 @@ sys_pipe(void)
 | 
				
			||||||
  int *fd;
 | 
					  int *fd;
 | 
				
			||||||
  struct file *rf = 0, *wf = 0;
 | 
					  struct file *rf = 0, *wf = 0;
 | 
				
			||||||
  int fd0, fd1;
 | 
					  int fd0, fd1;
 | 
				
			||||||
  struct proc *p = curproc[cpu()];
 | 
					  struct proc *cp = curproc[cpu()];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if(argptr(0, (void*)&fd, 2*sizeof fd[0]) < 0)
 | 
					  if(argptr(0, (void*)&fd, 2*sizeof fd[0]) < 0)
 | 
				
			||||||
    return -1;
 | 
					    return -1;
 | 
				
			||||||
| 
						 | 
					@ -66,7 +67,7 @@ sys_pipe(void)
 | 
				
			||||||
  fd0 = -1;
 | 
					  fd0 = -1;
 | 
				
			||||||
  if((fd0 = fdalloc(rf)) < 0 || (fd1 = fdalloc(wf)) < 0){
 | 
					  if((fd0 = fdalloc(rf)) < 0 || (fd1 = fdalloc(wf)) < 0){
 | 
				
			||||||
    if(fd0 >= 0)
 | 
					    if(fd0 >= 0)
 | 
				
			||||||
      p->ofile[fd0] = 0;
 | 
					      cp->ofile[fd0] = 0;
 | 
				
			||||||
    fileclose(rf);
 | 
					    fileclose(rf);
 | 
				
			||||||
    fileclose(wf);
 | 
					    fileclose(wf);
 | 
				
			||||||
    return -1;
 | 
					    return -1;
 | 
				
			||||||
| 
						 | 
					@ -241,7 +242,7 @@ sys_mkdir(void)
 | 
				
			||||||
int
 | 
					int
 | 
				
			||||||
sys_chdir(void)
 | 
					sys_chdir(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  struct proc *p = curproc[cpu()];
 | 
					  struct proc *cp = curproc[cpu()];
 | 
				
			||||||
  struct inode *ip;
 | 
					  struct inode *ip;
 | 
				
			||||||
  char *path;
 | 
					  char *path;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -261,9 +262,9 @@ sys_chdir(void)
 | 
				
			||||||
    return -1;
 | 
					    return -1;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  idecref(p->cwd);
 | 
					  idecref(cp->cwd);
 | 
				
			||||||
  p->cwd = ip;
 | 
					  cp->cwd = ip;
 | 
				
			||||||
  iunlock(p->cwd);
 | 
					  iunlock(cp->cwd);
 | 
				
			||||||
  return 0;
 | 
					  return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										14
									
								
								umalloc.c
									
										
									
									
									
								
							
							
						
						
									
										14
									
								
								umalloc.c
									
										
									
									
									
								
							| 
						 | 
					@ -46,17 +46,17 @@ free(void *ap)
 | 
				
			||||||
static Header*
 | 
					static Header*
 | 
				
			||||||
morecore(uint nu)
 | 
					morecore(uint nu)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  char *cp;
 | 
					  char *p;
 | 
				
			||||||
  Header *up;
 | 
					  Header *hp;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if(nu < PAGE)
 | 
					  if(nu < PAGE)
 | 
				
			||||||
    nu = PAGE;
 | 
					    nu = PAGE;
 | 
				
			||||||
  cp = sbrk(nu * sizeof(Header));
 | 
					  p = sbrk(nu * sizeof(Header));
 | 
				
			||||||
  if(cp == (char*) -1)
 | 
					  if(p == (char*) -1)
 | 
				
			||||||
    return 0;
 | 
					    return 0;
 | 
				
			||||||
  up = (Header*) cp;
 | 
					  hp = (Header*)p;
 | 
				
			||||||
  up->s.size = nu;
 | 
					  hp->s.size = nu;
 | 
				
			||||||
  free((void*)(up + 1));
 | 
					  free((void*)(hp + 1));
 | 
				
			||||||
  return freep;
 | 
					  return freep;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue