Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 21 Sep 2002 21:56:38 -0700 (PDT)
From:      Peter Wemm <peter@FreeBSD.org>
To:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   PERFORCE change 17910 for review
Message-ID:  <200209220456.g8M4uciP004717@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://people.freebsd.org/~peter/p4db/chv.cgi?CH=17910

Change 17910 by peter@peter_overcee on 2002/09/21 21:55:54

	integrate i386_hammer branch to pick up some i386 changes I want.

Affected files ...

.. //depot/projects/hammer/sys/x86_64/include/cpufunc.h#3 integrate
.. //depot/projects/hammer/sys/x86_64/include/segments.h#5 integrate
.. //depot/projects/hammer/sys/x86_64/x86_64/autoconf.c#4 integrate
.. //depot/projects/hammer/sys/x86_64/x86_64/machdep.c#20 integrate
.. //depot/projects/hammer/sys/x86_64/x86_64/mem.c#3 integrate
.. //depot/projects/hammer/sys/x86_64/x86_64/support.s#5 integrate

Differences ...

==== //depot/projects/hammer/sys/x86_64/include/cpufunc.h#3 (text+ko) ====

@@ -30,7 +30,7 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $FreeBSD: src/sys/i386/include/cpufunc.h,v 1.129 2002/09/21 18:26:53 markm Exp $
+ * $FreeBSD: src/sys/i386/include/cpufunc.h,v 1.130 2002/09/22 04:45:21 peter Exp $
  */
 
 /*
@@ -46,6 +46,7 @@
 #include <machine/psl.h>
 
 struct thread;
+struct region_descriptor;
 
 __BEGIN_DECLS
 #define readb(va)	(*(volatile u_int8_t *) (va))
@@ -468,6 +469,27 @@
 	__asm __volatile("movl %0,%%gs" : : "rm" (sel));
 }
 
+/* void lidt(struct region_descriptor *addr); */
+static __inline void
+lidt(struct region_descriptor *addr)
+{
+	__asm __volatile("lidt (%0)" : : "r" (addr));
+}
+
+/* void lldt(u_short sel); */
+static __inline void
+lldt(u_short sel)
+{
+	__asm __volatile("lldt %0" : : "r" (sel));
+}
+
+/* void ltr(u_short sel); */
+static __inline void
+ltr(u_short sel)
+{
+	__asm __volatile("ltr %0" : : "r" (sel));
+}
+
 static __inline u_int
 rdr0(void)
 {
@@ -622,6 +644,10 @@
 void	load_cr4(u_int cr4);
 void	load_fs(u_int sel);
 void	load_gs(u_int sel);
+struct region_descriptor;
+void	lidt(struct region_descriptor *addr);
+void	lldt(u_short sel);
+void	ltr(u_short sel);
 void	outb(u_int port, u_char data);
 void	outl(u_int port, u_int data);
 void	outsb(u_int port, void *addr, size_t cnt);
@@ -663,7 +689,6 @@
 
 #endif	/* __GNUC__ */
 
-void	ltr(u_short sel);
 void    reset_dbregs(void);
 
 __END_DECLS

==== //depot/projects/hammer/sys/x86_64/include/segments.h#5 (text+ko) ====

@@ -35,7 +35,7 @@
  * SUCH DAMAGE.
  *
  *	from: @(#)segments.h	7.1 (Berkeley) 5/9/91
- * $FreeBSD: src/sys/i386/include/segments.h,v 1.29 2002/03/23 15:09:35 bde Exp $
+ * $FreeBSD: src/sys/i386/include/segments.h,v 1.30 2002/09/22 04:45:21 peter Exp $
  */
 
 #ifndef _MACHINE_SEGMENTS_H_
@@ -224,8 +224,6 @@
 extern union descriptor ldt[NLDT];
 
 void	lgdt(struct region_descriptor *rdp);
-void	lidt(struct region_descriptor *rdp);
-void	lldt(u_short sel);
 void	sdtossd(struct segment_descriptor *sdp,
 	    struct soft_segment_descriptor *ssdp);
 void	ssdtosd(struct soft_segment_descriptor *ssdp,

==== //depot/projects/hammer/sys/x86_64/x86_64/autoconf.c#4 (text+ko) ====

@@ -34,7 +34,7 @@
  * SUCH DAMAGE.
  *
  *	from: @(#)autoconf.c	7.1 (Berkeley) 5/9/91
- * $FreeBSD: src/sys/i386/i386/autoconf.c,v 1.169 2002/09/20 17:59:09 phk Exp $
+ * $FreeBSD: src/sys/i386/i386/autoconf.c,v 1.170 2002/09/22 00:59:01 jake Exp $
  */
 
 /*
@@ -61,7 +61,6 @@
 #include <sys/mount.h>
 #include <sys/cons.h>
 
-#if defined(NFSCLIENT) && defined(NFS_ROOT)
 #include <sys/socket.h>
 #include <net/if.h>
 #include <net/if_dl.h>
@@ -73,7 +72,6 @@
 #include <nfs/nfsproto.h>
 #include <nfsclient/nfs.h>
 #include <nfsclient/nfsdiskless.h>
-#endif
 
 #include <machine/md_var.h>
 #include <i386/isa/icu.h>
@@ -88,10 +86,6 @@
 static void	configure(void *);
 static void	configure_final(void *);
 
-#if defined(NFSCLIENT) && defined(NFS_ROOT) && !defined(BOOTP_NFSROOT)
-static void	pxe_setup_nfsdiskless(void);
-#endif
-
 SYSINIT(configure1, SI_SUB_CONFIGURE, SI_ORDER_FIRST, configure_first, NULL);
 /* SI_ORDER_SECOND is hookable */
 SYSINIT(configure2, SI_SUB_CONFIGURE, SI_ORDER_THIRD, configure, NULL);
@@ -175,184 +169,10 @@
 #endif
 #if defined(NFSCLIENT) && defined(NFS_ROOT)
 #if !defined(BOOTP_NFSROOT)
-	pxe_setup_nfsdiskless();
+	nfs_setup_diskless();
 	if (nfs_diskless_valid)
 #endif
 		rootdevnames[0] = "nfs:";
 #endif
 }
 SYSINIT(cpu_rootconf, SI_SUB_ROOT_CONF, SI_ORDER_FIRST, cpu_rootconf, NULL)
-
-#if defined(NFSCLIENT) && defined(NFS_ROOT) && !defined(BOOTP_NFSROOT)
-
-static int
-inaddr_to_sockaddr(char *ev, struct sockaddr_in *sa)
-{
-	u_int32_t	a[4];
-	char		*cp;
-	int		count;
-
-	bzero(sa, sizeof(*sa));
-	sa->sin_len = sizeof(*sa);
-	sa->sin_family = AF_INET;
-
-	if ((cp = getenv(ev)) == NULL)
-		return(1);
-	count = sscanf(cp, "%d.%d.%d.%d", &a[0], &a[1], &a[2], &a[3]);
-	freeenv(cp);
-	if (count != 4)
-		return(1);
-	/* XXX is this ordering correct? */
-	sa->sin_addr.s_addr = (a[3] << 24) + (a[2] << 16) + (a[1] << 8) + a[0];
-	return(0);
-}
-
-static int
-hwaddr_to_sockaddr(char *ev, struct sockaddr_dl *sa)
-{
-	char		*cp;
-	u_int32_t	a[6];
-	int		count;
-
-	bzero(sa, sizeof(*sa));
-	sa->sdl_len = sizeof(*sa);
-	sa->sdl_family = AF_LINK;
-	sa->sdl_type = IFT_ETHER;
-	sa->sdl_alen = ETHER_ADDR_LEN;
-	if ((cp = getenv(ev)) == NULL)
-		return(1);
-	count = sscanf(cp, "%x:%x:%x:%x:%x:%x",
-	    &a[0], &a[1], &a[2], &a[3], &a[4], &a[5]);
-	freeenv(cp);
-	if (count != 6)
-		return(1);
-	sa->sdl_data[0] = a[0];
-	sa->sdl_data[1] = a[1];
-	sa->sdl_data[2] = a[2];
-	sa->sdl_data[3] = a[3];
-	sa->sdl_data[4] = a[4];
-	sa->sdl_data[5] = a[5];
-	return(0);
-}
-
-static int
-decode_nfshandle(char *ev, u_char *fh) 
-{
-	u_char	*cp, *ep;
-	int	len, val;
-
-	ep = cp = getenv(ev);
-	if (cp == NULL)
-		return(0);
-	if ((strlen(cp) < 2) || (*cp != 'X')) {
-		freeenv(ep);
-		return (0);
-	}
-	len = 0;
-	cp++;
-	for (;;) {
-		if (*cp == 'X') {
-			freeenv(ep);
-			return(len);
-		}
-		if ((sscanf(cp, "%2x", &val) != 1) || (val > 0xff)) {
-			freeenv(ep);
-			return(0);
-		}
-		*(fh++) = val;
-		len++;
-		cp += 2;
-		if (len > NFSX_V2FH) {
-		    freeenv(ep);
-		    return(0);
-		}
-	}
-}
-
-/*
- * Populate the essential fields in the nfsv3_diskless structure.
- *
- * The loader is expected to export the following environment variables:
- *
- * boot.netif.ip		IP address on boot interface
- * boot.netif.netmask		netmask on boot interface
- * boot.netif.gateway		default gateway (optional)
- * boot.netif.hwaddr		hardware address of boot interface
- * boot.nfsroot.server		IP address of root filesystem server
- * boot.nfsroot.path		path of the root filesystem on server
- * boot.nfsroot.nfshandle	NFS handle for root filesystem on server
- */
-static void
-pxe_setup_nfsdiskless(void)
-{
-	struct nfs_diskless	*nd = &nfs_diskless;
-	struct ifnet		*ifp;
-	struct ifaddr		*ifa;
-	struct sockaddr_dl	*sdl, ourdl;
-	struct sockaddr_in	myaddr, netmask;
-	char			*cp;
-
-	/* set up interface */
-	if (inaddr_to_sockaddr("boot.netif.ip", &myaddr))
-		return;
-	if (inaddr_to_sockaddr("boot.netif.netmask", &netmask)) {
-		printf("PXE: no netmask\n");
-		return;
-	}
-	bcopy(&myaddr, &nd->myif.ifra_addr, sizeof(myaddr));
-	bcopy(&myaddr, &nd->myif.ifra_broadaddr, sizeof(myaddr));
-	((struct sockaddr_in *) &nd->myif.ifra_broadaddr)->sin_addr.s_addr =
-		myaddr.sin_addr.s_addr | ~ netmask.sin_addr.s_addr;
-	bcopy(&netmask, &nd->myif.ifra_mask, sizeof(netmask));
-
-	if (hwaddr_to_sockaddr("boot.netif.hwaddr", &ourdl)) {
-		printf("PXE: no hardware address\n");
-		return;
-	}
-	ifa = NULL;
-	TAILQ_FOREACH(ifp, &ifnet, if_link) {
-		TAILQ_FOREACH(ifa, &ifp->if_addrhead, ifa_link) {
-			if ((ifa->ifa_addr->sa_family == AF_LINK) &&
-			    (sdl = ((struct sockaddr_dl *)ifa->ifa_addr))) {
-				if ((sdl->sdl_type == ourdl.sdl_type) &&
-				    (sdl->sdl_alen == ourdl.sdl_alen) &&
-				    !bcmp(sdl->sdl_data + sdl->sdl_nlen,
-					  ourdl.sdl_data + ourdl.sdl_nlen, 
-					  sdl->sdl_alen))
-				    goto match_done;
-			}
-		}
-	}
-	printf("PXE: no interface\n");
-	return;	/* no matching interface */
-match_done:
-	sprintf(nd->myif.ifra_name, "%s%d", ifp->if_name, ifp->if_unit);
-
-	
-	/* set up gateway */
-	inaddr_to_sockaddr("boot.netif.gateway", &nd->mygateway);
-
-	/* XXX set up swap? */
-
-	/* set up root mount */
-	nd->root_args.rsize = 8192;		/* XXX tunable? */
-	nd->root_args.wsize = 8192;
-	nd->root_args.sotype = SOCK_DGRAM;
-	nd->root_args.flags = (NFSMNT_WSIZE | NFSMNT_RSIZE | NFSMNT_RESVPORT);
-	if (inaddr_to_sockaddr("boot.nfsroot.server", &nd->root_saddr)) {
-		printf("PXE: no server\n");
-		return;
-	}
-	nd->root_saddr.sin_port = htons(NFS_PORT);
-	if (decode_nfshandle("boot.nfsroot.nfshandle", &nd->root_fh[0]) == 0) {
-		printf("PXE: no NFS handle\n");
-		return;
-	}
-	if ((cp = getenv("boot.nfsroot.path")) != NULL) {
-		strncpy(nd->root_hostnam, cp, MNAMELEN - 1);
-		freeenv(cp);
-	}
-
-	nfs_diskless_valid = 1;
-}
-#endif

==== //depot/projects/hammer/sys/x86_64/x86_64/machdep.c#20 (text+ko) ====

@@ -35,7 +35,7 @@
  * SUCH DAMAGE.
  *
  *	from: @(#)machdep.c	7.4 (Berkeley) 6/3/91
- * $FreeBSD: src/sys/i386/i386/machdep.c,v 1.537 2002/09/20 17:50:53 phk Exp $
+ * $FreeBSD: src/sys/i386/i386/machdep.c,v 1.538 2002/09/22 01:32:48 mdodd Exp $
  */
 
 #include "opt_atalk.h"
@@ -508,6 +508,10 @@
 	struct trapframe *regs = td->td_frame;
 	struct pcb *pcb = td->td_pcb;
 
+	/* Reset pc->pcb_gs and %gs before possibly invalidating it. */
+	pcb->pcb_gs = _udatasel;
+	load_gs(_udatasel);
+
 	if (td->td_proc->p_md.md_ldt)
 		user_ldt_free(td);
   
@@ -524,19 +528,6 @@
 	/* PS_STRINGS value for BSD/OS binaries.  It is 0 for non-BSD/OS. */
 	regs->tf_ebx = ps_strings;
 
-	/* reset %gs as well */
-	if (pcb == PCPU_GET(curpcb))
-		load_gs(_udatasel);
-
-	/*
-	 * Always reset pcb->pcb_gs to udatasel, it will be loaded into gs
-	 * by cpu_switch_load_gs when this process returns from the system
-	 * call. Failing to reset pcb_gs here can cause cpu_switch_load_gs
-	 * to trigger a general protection fault if the parent process had
-	 * modified gs to point at a LDT entry.
-	 */
-	pcb->pcb_gs = _udatasel;
-
         /*
          * Reset the hardware debug registers if they were in use.
          * They won't have any meaning for the newly exec'd process.  

==== //depot/projects/hammer/sys/x86_64/x86_64/mem.c#3 (text+ko) ====

@@ -38,7 +38,7 @@
  *
  *	from: Utah $Hdr: mem.c 1.13 89/10/08$
  *	from: @(#)mem.c	7.2 (Berkeley) 5/9/91
- * $FreeBSD: src/sys/i386/i386/mem.c,v 1.97 2002/08/03 00:59:15 peter Exp $
+ * $FreeBSD: src/sys/i386/i386/mem.c,v 1.98 2002/09/21 19:02:17 markm Exp $
  */
 
 /*
@@ -182,19 +182,17 @@
 			eaddr = round_page(uio->uio_offset + c);
 
 			if (addr < (vm_offset_t)VADDR(PTDPTDI, 0))
-				return EFAULT;
+				return (EFAULT);
 			if (eaddr >= (vm_offset_t)VADDR(APTDPTDI, 0))
-				return EFAULT;
+				return (EFAULT);
 			for (; addr < eaddr; addr += PAGE_SIZE) 
-				if (pmap_extract(kernel_pmap, addr) == 0) {
-					return EFAULT;
-				}
+				if (pmap_extract(kernel_pmap, addr) == 0)
+					return (EFAULT);
 
 			if (!kernacc((caddr_t)(int)uio->uio_offset, c,
 			    uio->uio_rw == UIO_READ ? 
-			    VM_PROT_READ : VM_PROT_WRITE)) {
+			    VM_PROT_READ : VM_PROT_WRITE))
 				return (EFAULT);
-			}
 			error = uiomove((caddr_t)(int)uio->uio_offset, (int)c, uio);
 			continue;
 		}
@@ -221,14 +219,14 @@
 
 	/* minor device 0 is physical memory */
 	case 0:
-        	return i386_btop(offset);
+        	return (i386_btop(offset));
 
 	/* minor device 1 is kernel memory */
 	case 1:
-        	return i386_btop(vtophys(offset));
+        	return (i386_btop(vtophys(offset)));
 
 	default:
-		return -1;
+		return (-1);
 	}
 }
 
@@ -270,9 +268,9 @@
 				error = copyout(md, mo->mo_desc, 
 					nd * sizeof(struct mem_range_desc));
 			free(md, M_MEMDESC);
-		} else {
+		}
+		else
 			nd = mem_range_softc.mr_ndesc;
-		}
 		mo->mo_arg[0] = nd;
 		break;
 		
@@ -301,13 +299,11 @@
 	if (mem_range_softc.mr_op == NULL)
 		return (EOPNOTSUPP);
 
-	if (*arg == 0) {
+	if (*arg == 0)
 		*arg = mem_range_softc.mr_ndesc;
-	}
-	else {
+	else
 		bcopy(mem_range_softc.mr_desc, mrd,
 			(*arg) * sizeof(struct mem_range_desc));
-	}
 	return (0);
 }
 
@@ -338,19 +334,19 @@
 			0640, "kmem");
 		iodev = make_dev(&mem_cdevsw, 14, UID_ROOT, GID_WHEEL,
 			0600, "io");
-		return 0;
+		return (0);
 
 	case MOD_UNLOAD:
 		destroy_dev(memdev);
 		destroy_dev(kmemdev);
 		destroy_dev(iodev);
-		return 0;
+		return (0);
 
 	case MOD_SHUTDOWN:
-		return 0;
+		return (0);
 
 	default:
-		return EOPNOTSUPP;
+		return (EOPNOTSUPP);
 	}
 }
 

==== //depot/projects/hammer/sys/x86_64/x86_64/support.s#5 (text+ko) ====

@@ -30,7 +30,7 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $FreeBSD: src/sys/i386/i386/support.s,v 1.92 2002/09/16 19:25:08 mini Exp $
+ * $FreeBSD: src/sys/i386/i386/support.s,v 1.93 2002/09/22 04:45:20 peter Exp $
  */
 
 #include <machine/asmacros.h>
@@ -656,27 +656,6 @@
 	pushq	%rax
 	lretq
 
-/*
- * void lidt(struct region_descriptor *rdp);
- */
-ENTRY(lidt)
-	lidt	(%rdi)
-	ret
-
-/*
- * void lldt(u_short sel)
- */
-ENTRY(lldt)
-	lldt	%di
-	ret
-
-/*
- * void ltr(u_short sel)
- */
-ENTRY(ltr)
-	ltr	%di
-	ret
-
 /* void reset_dbregs() */
 ENTRY(reset_dbregs)
 	movl    $0,%eax

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?200209220456.g8M4uciP004717>