Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 31 May 2002 13:06:56 -0400
From:      Jake Burkholder <jake@locore.ca>
To:        Julian Elischer <julian@freebsd.org>
Cc:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   Re: PERFORCE change 12179 for review
Message-ID:  <20020531130656.T62759@locore.ca>
In-Reply-To: <200205310557.g4V5v2E25112@freefall.freebsd.org>; from julian@freebsd.org on Thu, May 30, 2002 at 10:57:02PM -0700
References:  <200205310557.g4V5v2E25112@freefall.freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
Apparently, On Thu, May 30, 2002 at 10:57:02PM -0700,
	Julian Elischer said words to the effect of;

> http://people.freebsd.org/~peter/p4db/chv.cgi?CH=12179
> 
> Change 12179 by julian@julian_ref on 2002/05/30 22:56:19
> 
> 	Use fuword and suword instead of copyin/copyout
> 	when setting up thread completion mailboxes.
> 	needs fptr and sptr, which I will add soon.

Please do not add these without discussing it first.  fuword and
suword take a long as their argument/return value, which works
fine.

> 
> Affected files ...
> 
> ... //depot/projects/kse/sys/i386/i386/trap.c#43 edit
> ... //depot/projects/kse/sys/kern/kern_thread.c#50 edit
> 
> Differences ...
> 
> ==== //depot/projects/kse/sys/i386/i386/trap.c#43 (text+ko) ====
> 
> @@ -955,10 +955,10 @@
>  		 * possibility that we could do this lazily (in sleep()),
>  		 * but for now do it every time.
>  		 */
> -		error = copyin((caddr_t)td->td_kse->ke_mailbox +
> -		    offsetof(struct kse_mailbox, current_thread),
> -		    &td->td_mailbox, sizeof(void *));
> -		if (error || td->td_mailbox == NULL) {
> +		td->td_mailbox = fuword((caddr_t)td->td_kse->ke_mailbox +
> +		    offsetof(struct kse_mailbox, current_thread));
> +		if ((td->td_mailbox == NULL) ||
> +		(td->td_mailbox == (viod *)-1)) {
>  			td->td_mailbox = NULL;	/* single thread it.. */
>  			td->td_flags &= ~TDF_UNBOUND;
>  		} else {
> 
> ==== //depot/projects/kse/sys/kern/kern_thread.c#50 (text+ko) ====
> 
> @@ -251,7 +251,7 @@
>  thread_export_context(struct thread *td)
>  {
>  	struct kse *ke;
> -	void *td2_mbx;
> +	uint td2_mbx; /* XXXKSE */

sigh.  sizeof(uint) != sizeof(void *).  Use uintptr_t.

>  	void *addr1;
>  	void *addr2;
>  	int error;
> @@ -266,11 +266,17 @@
>  			+ offsetof(struct thread_mailbox , next_completed);
>  	/* Then link it into it's KSE's list of completed threads. */
>  	if (!error)
> -		error = copyin( addr1, &td2_mbx, sizeof(void *));
> +		error = td2_mbx = fuword(addr1);
> +		if (error == -1)
> +			error = EFAULT;
> +		else 
> +			error = 0;
>  	if (!error)
> -		error = copyout(&td2_mbx, addr2, sizeof(void *));
> +		error = suword(addr2, td2_mbx);
>  	if (!error)
> -		error = copyout(&td->td_mailbox, addr1, sizeof(void *));
> +		error = suword(addr1, (uint)td->td_mailbox);
> +	if (error == -1)
> +		error = EFAULT;
>  	return (error);
>  }
>  

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe p4-projects" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20020531130656.T62759>