svn commit: r213232 - in projects/sv: contrib/top etc/rc.d share/mk
sys/arm/at91 sys/conf sys/dev/dc sys/dev/mii sys/fs/devfs
sys/i386/i386 sys/mips/cavium sys/netinet sys/netinet6
tools/regression...
Attilio Rao
attilio at FreeBSD.org
Mon Sep 27 21:28:40 UTC 2010
Author: attilio
Date: Mon Sep 27 21:28:39 2010
New Revision: 213232
URL: http://svn.freebsd.org/changeset/base/213232
Log:
MFC @ 213231
Added:
projects/sv/sys/fs/devfs/devfs_dir.c
- copied unchanged from r213231, head/sys/fs/devfs/devfs_dir.c
projects/sv/usr.bin/clang/clang/clang.1
- copied unchanged from r213231, head/usr.bin/clang/clang/clang.1
projects/sv/usr.bin/clang/tblgen/tblgen.1
- copied unchanged from r213231, head/usr.bin/clang/tblgen/tblgen.1
Modified:
projects/sv/etc/rc.d/nsswitch
projects/sv/sys/arm/at91/at91_twi.c
projects/sv/sys/conf/files
projects/sv/sys/conf/ldscript.mips.octeon1.64
projects/sv/sys/dev/dc/dcphy.c
projects/sv/sys/dev/dc/pnphy.c
projects/sv/sys/dev/mii/acphy.c
projects/sv/sys/dev/mii/amphy.c
projects/sv/sys/dev/mii/atphy.c
projects/sv/sys/dev/mii/axphy.c
projects/sv/sys/dev/mii/bmtphy.c
projects/sv/sys/dev/mii/brgphy.c
projects/sv/sys/dev/mii/ciphy.c
projects/sv/sys/dev/mii/e1000phy.c
projects/sv/sys/dev/mii/exphy.c
projects/sv/sys/dev/mii/gentbi.c
projects/sv/sys/dev/mii/icsphy.c
projects/sv/sys/dev/mii/inphy.c
projects/sv/sys/dev/mii/ip1000phy.c
projects/sv/sys/dev/mii/jmphy.c
projects/sv/sys/dev/mii/lxtphy.c
projects/sv/sys/dev/mii/mii_physubr.c
projects/sv/sys/dev/mii/mlphy.c
projects/sv/sys/dev/mii/nsgphy.c
projects/sv/sys/dev/mii/nsphy.c
projects/sv/sys/dev/mii/nsphyter.c
projects/sv/sys/dev/mii/pnaphy.c
projects/sv/sys/dev/mii/qsphy.c
projects/sv/sys/dev/mii/rgephy.c
projects/sv/sys/dev/mii/rlphy.c
projects/sv/sys/dev/mii/rlswitch.c
projects/sv/sys/dev/mii/ruephy.c
projects/sv/sys/dev/mii/smcphy.c
projects/sv/sys/dev/mii/tdkphy.c
projects/sv/sys/dev/mii/truephy.c
projects/sv/sys/dev/mii/ukphy.c
projects/sv/sys/dev/mii/xmphy.c
projects/sv/sys/fs/devfs/devfs.h
projects/sv/sys/fs/devfs/devfs_devs.c
projects/sv/sys/fs/devfs/devfs_int.h
projects/sv/sys/fs/devfs/devfs_vnops.c
projects/sv/sys/i386/i386/machdep.c
projects/sv/sys/mips/cavium/octopci.c
projects/sv/sys/netinet/in_rmx.c
projects/sv/sys/netinet/netdump_client.c
projects/sv/sys/netinet6/in6_rmx.c
projects/sv/tools/regression/geom_eli/resize.t
projects/sv/usr.bin/clang/clang/Makefile
projects/sv/usr.bin/clang/tblgen/Makefile
Directory Properties:
projects/sv/ (props changed)
projects/sv/cddl/contrib/opensolaris/ (props changed)
projects/sv/contrib/bind9/ (props changed)
projects/sv/contrib/ee/ (props changed)
projects/sv/contrib/expat/ (props changed)
projects/sv/contrib/file/ (props changed)
projects/sv/contrib/gdb/ (props changed)
projects/sv/contrib/gdtoa/ (props changed)
projects/sv/contrib/gnu-sort/ (props changed)
projects/sv/contrib/groff/ (props changed)
projects/sv/contrib/less/ (props changed)
projects/sv/contrib/libpcap/ (props changed)
projects/sv/contrib/llvm/ (props changed)
projects/sv/contrib/llvm/tools/clang/ (props changed)
projects/sv/contrib/ncurses/ (props changed)
projects/sv/contrib/netcat/ (props changed)
projects/sv/contrib/ntp/ (props changed)
projects/sv/contrib/one-true-awk/ (props changed)
projects/sv/contrib/openbsm/ (props changed)
projects/sv/contrib/openpam/ (props changed)
projects/sv/contrib/pf/ (props changed)
projects/sv/contrib/sendmail/ (props changed)
projects/sv/contrib/tcpdump/ (props changed)
projects/sv/contrib/tcsh/ (props changed)
projects/sv/contrib/top/ (props changed)
projects/sv/contrib/top/install-sh (props changed)
projects/sv/contrib/tzcode/stdtime/ (props changed)
projects/sv/contrib/tzcode/zic/ (props changed)
projects/sv/contrib/tzdata/ (props changed)
projects/sv/contrib/wpa/ (props changed)
projects/sv/crypto/openssh/ (props changed)
projects/sv/crypto/openssl/ (props changed)
projects/sv/lib/libc/ (props changed)
projects/sv/lib/libc/stdtime/ (props changed)
projects/sv/lib/libutil/ (props changed)
projects/sv/lib/libz/ (props changed)
projects/sv/sbin/ (props changed)
projects/sv/sbin/ipfw/ (props changed)
projects/sv/share/mk/bsd.arch.inc.mk (props changed)
projects/sv/share/zoneinfo/ (props changed)
projects/sv/sys/ (props changed)
projects/sv/sys/amd64/include/xen/ (props changed)
projects/sv/sys/cddl/contrib/opensolaris/ (props changed)
projects/sv/sys/contrib/dev/acpica/ (props changed)
projects/sv/sys/contrib/pf/ (props changed)
projects/sv/sys/contrib/x86emu/ (props changed)
projects/sv/sys/dev/xen/xenpci/ (props changed)
projects/sv/usr.bin/calendar/ (props changed)
projects/sv/usr.bin/csup/ (props changed)
projects/sv/usr.bin/procstat/ (props changed)
projects/sv/usr.sbin/zic/ (props changed)
Modified: projects/sv/etc/rc.d/nsswitch
==============================================================================
--- projects/sv/etc/rc.d/nsswitch Mon Sep 27 21:10:37 2010 (r213231)
+++ projects/sv/etc/rc.d/nsswitch Mon Sep 27 21:28:39 2010 (r213232)
@@ -80,7 +80,7 @@ generate_host_conf()
cache | *=*)
;;
*)
- printf "Warning: unrecognized source [%s]\n" $_s >&2
+ echo "Warning: unrecognized source [$_s]" >&2
;;
esac
done
Modified: projects/sv/sys/arm/at91/at91_twi.c
==============================================================================
--- projects/sv/sys/arm/at91/at91_twi.c Mon Sep 27 21:10:37 2010 (r213231)
+++ projects/sv/sys/arm/at91/at91_twi.c Mon Sep 27 21:28:39 2010 (r213232)
@@ -338,7 +338,7 @@ at91_twi_transfer(device_t dev, struct i
err = EINVAL;
goto out;
}
- if (len == 1)
+ if (len == 1 && msgs[i].flags & IIC_M_RD)
WR4(sc, TWI_CR, TWI_CR_START | TWI_CR_STOP);
else
WR4(sc, TWI_CR, TWI_CR_START);
@@ -348,7 +348,7 @@ at91_twi_transfer(device_t dev, struct i
if ((sr = RD4(sc, TWI_SR)) & TWI_SR_RXRDY) {
len--;
*buf++ = RD4(sc, TWI_RHR) & 0xff;
- if (len == 0 && msgs[i].len != 1)
+ if (len == 1)
WR4(sc, TWI_CR, TWI_CR_STOP);
}
}
@@ -358,8 +358,6 @@ at91_twi_transfer(device_t dev, struct i
}
} else {
while (len--) {
- if (len == 0 && msgs[i].len != 1)
- WR4(sc, TWI_CR, TWI_CR_STOP);
if ((err = at91_twi_wait(sc, TWI_SR_TXRDY)))
goto out;
WR4(sc, TWI_THR, *buf++);
Modified: projects/sv/sys/conf/files
==============================================================================
--- projects/sv/sys/conf/files Mon Sep 27 21:10:37 2010 (r213231)
+++ projects/sv/sys/conf/files Mon Sep 27 21:28:39 2010 (r213232)
@@ -1890,6 +1890,7 @@ fs/coda/coda_vfsops.c optional vcoda
fs/coda/coda_vnops.c optional vcoda
fs/deadfs/dead_vnops.c standard
fs/devfs/devfs_devs.c standard
+fs/devfs/devfs_dir.c standard
fs/devfs/devfs_rule.c standard
fs/devfs/devfs_vfsops.c standard
fs/devfs/devfs_vnops.c standard
Modified: projects/sv/sys/conf/ldscript.mips.octeon1.64
==============================================================================
--- projects/sv/sys/conf/ldscript.mips.octeon1.64 Mon Sep 27 21:10:37 2010 (r213231)
+++ projects/sv/sys/conf/ldscript.mips.octeon1.64 Mon Sep 27 21:28:39 2010 (r213232)
@@ -7,24 +7,29 @@ ENTRY(_start)
__DYNAMIC = 0;
PROVIDE (_DYNAMIC = 0);
+PHDRS {
+ text PT_LOAD FLAGS(0x7);
+}
+
SECTIONS {
. = KERNLOADADDR + SIZEOF_HEADERS;
- .text . : {
+ .text : {
*(.text)
*(.dynamic)
etext = .;
_etext = .;
. = ALIGN(0x2000);
- }
+ } : text
- .rodata ALIGN(0x2000) : {
+ . = ALIGN(0x2000);
+ .rodata : {
_fdata = .;
*(.rodata)
. = ALIGN(32);
}
- .data . : {
+ .data : {
_rwdata = .;
*(.data)
. = ALIGN(32);
@@ -33,15 +38,15 @@ SECTIONS {
_gp = (. + 0x8000);
- .sdata . : {
+ .sdata : {
_small_start = .;
*(.sdata)
. = ALIGN(32);
edata = .;
_edata = .;
- }
+ } : text
- .sbss . : {
+ .sbss : {
__bss_start = .;
_fbss = .;
*(.sbss) *(.scommon)
@@ -49,7 +54,7 @@ SECTIONS {
. = ALIGN(32);
}
- .bss . : {
+ .bss : {
*(.bss)
*(COMMON)
. = ALIGN(32);
Modified: projects/sv/sys/dev/dc/dcphy.c
==============================================================================
--- projects/sv/sys/dev/dc/dcphy.c Mon Sep 27 21:10:37 2010 (r213231)
+++ projects/sv/sys/dev/dc/dcphy.c Mon Sep 27 21:28:39 2010 (r213232)
@@ -146,7 +146,7 @@ dcphy_attach(device_t dev)
sc = device_get_softc(dev);
ma = device_get_ivars(dev);
sc->mii_dev = device_get_parent(dev);
- mii = device_get_softc(sc->mii_dev);
+ mii = ma->mii_data;
LIST_INSERT_HEAD(&mii->mii_phys, sc, mii_list);
sc->mii_inst = mii->mii_instance;
Modified: projects/sv/sys/dev/dc/pnphy.c
==============================================================================
--- projects/sv/sys/dev/dc/pnphy.c Mon Sep 27 21:10:37 2010 (r213231)
+++ projects/sv/sys/dev/dc/pnphy.c Mon Sep 27 21:28:39 2010 (r213232)
@@ -129,7 +129,7 @@ pnphy_attach(device_t dev)
sc = device_get_softc(dev);
ma = device_get_ivars(dev);
sc->mii_dev = device_get_parent(dev);
- mii = device_get_softc(sc->mii_dev);
+ mii = ma->mii_data;
LIST_INSERT_HEAD(&mii->mii_phys, sc, mii_list);
sc->mii_inst = mii->mii_instance;
Modified: projects/sv/sys/dev/mii/acphy.c
==============================================================================
--- projects/sv/sys/dev/mii/acphy.c Mon Sep 27 21:10:37 2010 (r213231)
+++ projects/sv/sys/dev/mii/acphy.c Mon Sep 27 21:28:39 2010 (r213232)
@@ -129,7 +129,7 @@ acphy_attach(device_t dev)
sc = device_get_softc(dev);
ma = device_get_ivars(dev);
sc->mii_dev = device_get_parent(dev);
- mii = device_get_softc(sc->mii_dev);
+ mii = ma->mii_data;
LIST_INSERT_HEAD(&mii->mii_phys, sc, mii_list);
sc->mii_inst = mii->mii_instance;
Modified: projects/sv/sys/dev/mii/amphy.c
==============================================================================
--- projects/sv/sys/dev/mii/amphy.c Mon Sep 27 21:10:37 2010 (r213231)
+++ projects/sv/sys/dev/mii/amphy.c Mon Sep 27 21:28:39 2010 (r213232)
@@ -106,7 +106,7 @@ amphy_attach(device_t dev)
sc = device_get_softc(dev);
ma = device_get_ivars(dev);
sc->mii_dev = device_get_parent(dev);
- mii = device_get_softc(sc->mii_dev);
+ mii = ma->mii_data;
LIST_INSERT_HEAD(&mii->mii_phys, sc, mii_list);
sc->mii_inst = mii->mii_instance;
Modified: projects/sv/sys/dev/mii/atphy.c
==============================================================================
--- projects/sv/sys/dev/mii/atphy.c Mon Sep 27 21:10:37 2010 (r213231)
+++ projects/sv/sys/dev/mii/atphy.c Mon Sep 27 21:28:39 2010 (r213232)
@@ -110,7 +110,7 @@ atphy_attach(device_t dev)
sc = &asc->mii_sc;
ma = device_get_ivars(dev);
sc->mii_dev = device_get_parent(dev);
- mii = device_get_softc(sc->mii_dev);
+ mii = ma->mii_data;
LIST_INSERT_HEAD(&mii->mii_phys, sc, mii_list);
sc->mii_inst = mii->mii_instance;
Modified: projects/sv/sys/dev/mii/axphy.c
==============================================================================
--- projects/sv/sys/dev/mii/axphy.c Mon Sep 27 21:10:37 2010 (r213231)
+++ projects/sv/sys/dev/mii/axphy.c Mon Sep 27 21:28:39 2010 (r213232)
@@ -96,7 +96,7 @@ axphy_attach(device_t dev)
sc = device_get_softc(dev);
ma = device_get_ivars(dev);
sc->mii_dev = device_get_parent(dev);
- mii = device_get_softc(sc->mii_dev);
+ mii = ma->mii_data;
LIST_INSERT_HEAD(&mii->mii_phys, sc, mii_list);
sc->mii_inst = mii->mii_instance;
Modified: projects/sv/sys/dev/mii/bmtphy.c
==============================================================================
--- projects/sv/sys/dev/mii/bmtphy.c Mon Sep 27 21:10:37 2010 (r213231)
+++ projects/sv/sys/dev/mii/bmtphy.c Mon Sep 27 21:28:39 2010 (r213232)
@@ -144,7 +144,7 @@ bmtphy_attach(device_t dev)
sc = device_get_softc(dev);
ma = device_get_ivars(dev);
sc->mii_dev = device_get_parent(dev);
- mii = device_get_softc(sc->mii_dev);
+ mii = ma->mii_data;
LIST_INSERT_HEAD(&mii->mii_phys, sc, mii_list);
sc->mii_inst = mii->mii_instance;
Modified: projects/sv/sys/dev/mii/brgphy.c
==============================================================================
--- projects/sv/sys/dev/mii/brgphy.c Mon Sep 27 21:10:37 2010 (r213231)
+++ projects/sv/sys/dev/mii/brgphy.c Mon Sep 27 21:28:39 2010 (r213232)
@@ -187,7 +187,7 @@ brgphy_attach(device_t dev)
sc = &bsc->mii_sc;
ma = device_get_ivars(dev);
sc->mii_dev = device_get_parent(dev);
- mii = device_get_softc(sc->mii_dev);
+ mii = ma->mii_data;
LIST_INSERT_HEAD(&mii->mii_phys, sc, mii_list);
/* Initialize mii_softc structure */
Modified: projects/sv/sys/dev/mii/ciphy.c
==============================================================================
--- projects/sv/sys/dev/mii/ciphy.c Mon Sep 27 21:10:37 2010 (r213231)
+++ projects/sv/sys/dev/mii/ciphy.c Mon Sep 27 21:28:39 2010 (r213232)
@@ -115,7 +115,7 @@ ciphy_attach(device_t dev)
sc = device_get_softc(dev);
ma = device_get_ivars(dev);
sc->mii_dev = device_get_parent(dev);
- mii = device_get_softc(sc->mii_dev);
+ mii = ma->mii_data;
LIST_INSERT_HEAD(&mii->mii_phys, sc, mii_list);
sc->mii_inst = mii->mii_instance;
Modified: projects/sv/sys/dev/mii/e1000phy.c
==============================================================================
--- projects/sv/sys/dev/mii/e1000phy.c Mon Sep 27 21:10:37 2010 (r213231)
+++ projects/sv/sys/dev/mii/e1000phy.c Mon Sep 27 21:28:39 2010 (r213232)
@@ -141,7 +141,7 @@ e1000phy_attach(device_t dev)
sc = &esc->mii_sc;
ma = device_get_ivars(dev);
sc->mii_dev = device_get_parent(dev);
- mii = device_get_softc(sc->mii_dev);
+ mii = ma->mii_data;
LIST_INSERT_HEAD(&mii->mii_phys, sc, mii_list);
sc->mii_inst = mii->mii_instance;
Modified: projects/sv/sys/dev/mii/exphy.c
==============================================================================
--- projects/sv/sys/dev/mii/exphy.c Mon Sep 27 21:10:37 2010 (r213231)
+++ projects/sv/sys/dev/mii/exphy.c Mon Sep 27 21:28:39 2010 (r213232)
@@ -135,7 +135,7 @@ exphy_attach(device_t dev)
sc = device_get_softc(dev);
ma = device_get_ivars(dev);
sc->mii_dev = device_get_parent(dev);
- mii = device_get_softc(sc->mii_dev);
+ mii = ma->mii_data;
/*
* The 3Com PHY can never be isolated, so never allow non-zero
Modified: projects/sv/sys/dev/mii/gentbi.c
==============================================================================
--- projects/sv/sys/dev/mii/gentbi.c Mon Sep 27 21:10:37 2010 (r213231)
+++ projects/sv/sys/dev/mii/gentbi.c Mon Sep 27 21:28:39 2010 (r213232)
@@ -158,7 +158,7 @@ gentbi_attach(device_t dev)
sc = device_get_softc(dev);
ma = device_get_ivars(dev);
sc->mii_dev = device_get_parent(dev);
- mii = device_get_softc(sc->mii_dev);
+ mii = ma->mii_data;
LIST_INSERT_HEAD(&mii->mii_phys, sc, mii_list);
if (bootverbose)
Modified: projects/sv/sys/dev/mii/icsphy.c
==============================================================================
--- projects/sv/sys/dev/mii/icsphy.c Mon Sep 27 21:10:37 2010 (r213231)
+++ projects/sv/sys/dev/mii/icsphy.c Mon Sep 27 21:28:39 2010 (r213232)
@@ -138,7 +138,7 @@ icsphy_attach(device_t dev)
sc = &isc->mii_sc;
ma = device_get_ivars(dev);
sc->mii_dev = device_get_parent(dev);
- mii = device_get_softc(sc->mii_dev);
+ mii = ma->mii_data;
LIST_INSERT_HEAD(&mii->mii_phys, sc, mii_list);
sc->mii_inst = mii->mii_instance;
Modified: projects/sv/sys/dev/mii/inphy.c
==============================================================================
--- projects/sv/sys/dev/mii/inphy.c Mon Sep 27 21:10:37 2010 (r213231)
+++ projects/sv/sys/dev/mii/inphy.c Mon Sep 27 21:28:39 2010 (r213232)
@@ -104,7 +104,7 @@ inphy_attach(device_t dev)
sc = device_get_softc(dev);
ma = device_get_ivars(dev);
sc->mii_dev = device_get_parent(dev);
- mii = device_get_softc(sc->mii_dev);
+ mii = ma->mii_data;
LIST_INSERT_HEAD(&mii->mii_phys, sc, mii_list);
sc->mii_inst = mii->mii_instance;
Modified: projects/sv/sys/dev/mii/ip1000phy.c
==============================================================================
--- projects/sv/sys/dev/mii/ip1000phy.c Mon Sep 27 21:10:37 2010 (r213231)
+++ projects/sv/sys/dev/mii/ip1000phy.c Mon Sep 27 21:28:39 2010 (r213232)
@@ -111,7 +111,7 @@ ip1000phy_attach(device_t dev)
sc = &isc->mii_sc;
ma = device_get_ivars(dev);
sc->mii_dev = device_get_parent(dev);
- mii = device_get_softc(sc->mii_dev);
+ mii = ma->mii_data;
LIST_INSERT_HEAD(&mii->mii_phys, sc, mii_list);
sc->mii_inst = mii->mii_instance;
Modified: projects/sv/sys/dev/mii/jmphy.c
==============================================================================
--- projects/sv/sys/dev/mii/jmphy.c Mon Sep 27 21:10:37 2010 (r213231)
+++ projects/sv/sys/dev/mii/jmphy.c Mon Sep 27 21:28:39 2010 (r213232)
@@ -109,7 +109,7 @@ jmphy_attach(device_t dev)
sc = &jsc->mii_sc;
ma = device_get_ivars(dev);
sc->mii_dev = device_get_parent(dev);
- mii = device_get_softc(sc->mii_dev);
+ mii = ma->mii_data;
LIST_INSERT_HEAD(&mii->mii_phys, sc, mii_list);
sc->mii_inst = mii->mii_instance;
Modified: projects/sv/sys/dev/mii/lxtphy.c
==============================================================================
--- projects/sv/sys/dev/mii/lxtphy.c Mon Sep 27 21:10:37 2010 (r213231)
+++ projects/sv/sys/dev/mii/lxtphy.c Mon Sep 27 21:28:39 2010 (r213232)
@@ -132,7 +132,7 @@ lxtphy_attach(device_t dev)
sc = device_get_softc(dev);
ma = device_get_ivars(dev);
sc->mii_dev = device_get_parent(dev);
- mii = device_get_softc(sc->mii_dev);
+ mii = ma->mii_data;
LIST_INSERT_HEAD(&mii->mii_phys, sc, mii_list);
sc->mii_inst = mii->mii_instance;
Modified: projects/sv/sys/dev/mii/mii_physubr.c
==============================================================================
--- projects/sv/sys/dev/mii/mii_physubr.c Mon Sep 27 21:10:37 2010 (r213231)
+++ projects/sv/sys/dev/mii/mii_physubr.c Mon Sep 27 21:28:39 2010 (r213232)
@@ -326,10 +326,9 @@ mii_anar(int media)
void
mii_add_media(struct mii_softc *sc)
{
+ struct mii_data *mii = sc->mii_pdata;
const char *sep = "";
- struct mii_data *mii;
- mii = device_get_softc(sc->mii_dev);
if ((sc->mii_capabilities & BMSR_MEDIAMASK) == 0) {
printf("no media present");
return;
Modified: projects/sv/sys/dev/mii/mlphy.c
==============================================================================
--- projects/sv/sys/dev/mii/mlphy.c Mon Sep 27 21:10:37 2010 (r213231)
+++ projects/sv/sys/dev/mii/mlphy.c Mon Sep 27 21:28:39 2010 (r213232)
@@ -143,7 +143,7 @@ mlphy_attach(dev)
sc = &msc->ml_mii;
ma = device_get_ivars(dev);
sc->mii_dev = device_get_parent(dev);
- mii = device_get_softc(sc->mii_dev);
+ mii = ma->mii_data;
LIST_INSERT_HEAD(&mii->mii_phys, sc, mii_list);
sc->mii_inst = mii->mii_instance;
Modified: projects/sv/sys/dev/mii/nsgphy.c
==============================================================================
--- projects/sv/sys/dev/mii/nsgphy.c Mon Sep 27 21:10:37 2010 (r213231)
+++ projects/sv/sys/dev/mii/nsgphy.c Mon Sep 27 21:28:39 2010 (r213232)
@@ -126,7 +126,7 @@ nsgphy_attach(device_t dev)
device_printf(dev, "<rev. %d>\n", MII_REV(ma->mii_id2));
device_printf(dev, " ");
sc->mii_dev = device_get_parent(dev);
- mii = device_get_softc(sc->mii_dev);
+ mii = ma->mii_data;
LIST_INSERT_HEAD(&mii->mii_phys, sc, mii_list);
sc->mii_inst = mii->mii_instance;
Modified: projects/sv/sys/dev/mii/nsphy.c
==============================================================================
--- projects/sv/sys/dev/mii/nsphy.c Mon Sep 27 21:10:37 2010 (r213231)
+++ projects/sv/sys/dev/mii/nsphy.c Mon Sep 27 21:28:39 2010 (r213232)
@@ -130,7 +130,7 @@ nsphy_attach(device_t dev)
sc = device_get_softc(dev);
ma = device_get_ivars(dev);
sc->mii_dev = device_get_parent(dev);
- mii = device_get_softc(sc->mii_dev);
+ mii = ma->mii_data;
LIST_INSERT_HEAD(&mii->mii_phys, sc, mii_list);
sc->mii_inst = mii->mii_instance;
Modified: projects/sv/sys/dev/mii/nsphyter.c
==============================================================================
--- projects/sv/sys/dev/mii/nsphyter.c Mon Sep 27 21:10:37 2010 (r213231)
+++ projects/sv/sys/dev/mii/nsphyter.c Mon Sep 27 21:28:39 2010 (r213232)
@@ -135,7 +135,7 @@ nsphyter_attach(device_t dev)
sc = device_get_softc(dev);
ma = device_get_ivars(dev);
sc->mii_dev = device_get_parent(dev);
- mii = device_get_softc(sc->mii_dev);
+ mii = ma->mii_data;
LIST_INSERT_HEAD(&mii->mii_phys, sc, mii_list);
sc->mii_inst = mii->mii_instance;
Modified: projects/sv/sys/dev/mii/pnaphy.c
==============================================================================
--- projects/sv/sys/dev/mii/pnaphy.c Mon Sep 27 21:10:37 2010 (r213231)
+++ projects/sv/sys/dev/mii/pnaphy.c Mon Sep 27 21:28:39 2010 (r213232)
@@ -107,7 +107,7 @@ pnaphy_attach(device_t dev)
sc = device_get_softc(dev);
ma = device_get_ivars(dev);
sc->mii_dev = device_get_parent(dev);
- mii = device_get_softc(sc->mii_dev);
+ mii = ma->mii_data;
LIST_INSERT_HEAD(&mii->mii_phys, sc, mii_list);
sc->mii_inst = mii->mii_instance;
Modified: projects/sv/sys/dev/mii/qsphy.c
==============================================================================
--- projects/sv/sys/dev/mii/qsphy.c Mon Sep 27 21:10:37 2010 (r213231)
+++ projects/sv/sys/dev/mii/qsphy.c Mon Sep 27 21:28:39 2010 (r213232)
@@ -130,7 +130,7 @@ qsphy_attach(device_t dev)
sc = device_get_softc(dev);
ma = device_get_ivars(dev);
sc->mii_dev = device_get_parent(dev);
- mii = device_get_softc(sc->mii_dev);
+ mii = ma->mii_data;
LIST_INSERT_HEAD(&mii->mii_phys, sc, mii_list);
sc->mii_inst = mii->mii_instance;
Modified: projects/sv/sys/dev/mii/rgephy.c
==============================================================================
--- projects/sv/sys/dev/mii/rgephy.c Mon Sep 27 21:10:37 2010 (r213231)
+++ projects/sv/sys/dev/mii/rgephy.c Mon Sep 27 21:28:39 2010 (r213232)
@@ -119,7 +119,7 @@ rgephy_attach(device_t dev)
sc = &rsc->mii_sc;
ma = device_get_ivars(dev);
sc->mii_dev = device_get_parent(dev);
- mii = device_get_softc(sc->mii_dev);
+ mii = ma->mii_data;
LIST_INSERT_HEAD(&mii->mii_phys, sc, mii_list);
sc->mii_inst = mii->mii_instance;
Modified: projects/sv/sys/dev/mii/rlphy.c
==============================================================================
--- projects/sv/sys/dev/mii/rlphy.c Mon Sep 27 21:10:37 2010 (r213231)
+++ projects/sv/sys/dev/mii/rlphy.c Mon Sep 27 21:28:39 2010 (r213232)
@@ -129,7 +129,7 @@ rlphy_attach(device_t dev)
sc = device_get_softc(dev);
ma = device_get_ivars(dev);
sc->mii_dev = device_get_parent(dev);
- mii = device_get_softc(sc->mii_dev);
+ mii = ma->mii_data;
/*
* Check whether we're the RTL8201L PHY and remember so the status
Modified: projects/sv/sys/dev/mii/rlswitch.c
==============================================================================
--- projects/sv/sys/dev/mii/rlswitch.c Mon Sep 27 21:10:37 2010 (r213231)
+++ projects/sv/sys/dev/mii/rlswitch.c Mon Sep 27 21:28:39 2010 (r213232)
@@ -117,7 +117,7 @@ rlswitch_attach(device_t dev)
sc = device_get_softc(dev);
ma = device_get_ivars(dev);
sc->mii_dev = device_get_parent(dev);
- mii = device_get_softc(sc->mii_dev);
+ mii = ma->mii_data;
/*
* We handle all pseudo PHY in a single instance, so never allow
Modified: projects/sv/sys/dev/mii/ruephy.c
==============================================================================
--- projects/sv/sys/dev/mii/ruephy.c Mon Sep 27 21:10:37 2010 (r213231)
+++ projects/sv/sys/dev/mii/ruephy.c Mon Sep 27 21:28:39 2010 (r213232)
@@ -108,7 +108,7 @@ ruephy_attach(device_t dev)
sc = device_get_softc(dev);
ma = device_get_ivars(dev);
sc->mii_dev = device_get_parent(dev);
- mii = device_get_softc(sc->mii_dev);
+ mii = ma->mii_data;
/*
* The RealTek PHY can never be isolated, so never allow non-zero
Modified: projects/sv/sys/dev/mii/smcphy.c
==============================================================================
--- projects/sv/sys/dev/mii/smcphy.c Mon Sep 27 21:10:37 2010 (r213231)
+++ projects/sv/sys/dev/mii/smcphy.c Mon Sep 27 21:28:39 2010 (r213232)
@@ -102,7 +102,7 @@ smcphy_attach(device_t dev)
sc = device_get_softc(dev);
ma = device_get_ivars(dev);
sc->mii_dev = device_get_parent(dev);
- mii = device_get_softc(sc->mii_dev);
+ mii = ma->mii_data;
LIST_INSERT_HEAD(&mii->mii_phys, sc, mii_list);
sc->mii_inst = mii->mii_instance;
Modified: projects/sv/sys/dev/mii/tdkphy.c
==============================================================================
--- projects/sv/sys/dev/mii/tdkphy.c Mon Sep 27 21:10:37 2010 (r213231)
+++ projects/sv/sys/dev/mii/tdkphy.c Mon Sep 27 21:28:39 2010 (r213232)
@@ -108,7 +108,7 @@ tdkphy_attach(device_t dev)
sc = device_get_softc(dev);
ma = device_get_ivars(dev);
sc->mii_dev = device_get_parent(dev);
- mii = device_get_softc(sc->mii_dev);
+ mii = ma->mii_data;
LIST_INSERT_HEAD(&mii->mii_phys, sc, mii_list);
if (bootverbose)
Modified: projects/sv/sys/dev/mii/truephy.c
==============================================================================
--- projects/sv/sys/dev/mii/truephy.c Mon Sep 27 21:10:37 2010 (r213231)
+++ projects/sv/sys/dev/mii/truephy.c Mon Sep 27 21:28:39 2010 (r213232)
@@ -150,7 +150,7 @@ truephy_attach(device_t dev)
if (sc->mii_anegticks == 0)
sc->mii_anegticks = MII_ANEGTICKS;
sc->mii_dev = device_get_parent(dev);
- mii = device_get_softc(sc->mii_dev);
+ mii = ma->mii_data;
LIST_INSERT_HEAD(&mii->mii_phys, sc, mii_list);
sc->mii_inst = mii->mii_instance;
Modified: projects/sv/sys/dev/mii/ukphy.c
==============================================================================
--- projects/sv/sys/dev/mii/ukphy.c Mon Sep 27 21:10:37 2010 (r213231)
+++ projects/sv/sys/dev/mii/ukphy.c Mon Sep 27 21:28:39 2010 (r213232)
@@ -122,7 +122,7 @@ ukphy_attach(device_t dev)
sc = device_get_softc(dev);
ma = device_get_ivars(dev);
sc->mii_dev = device_get_parent(dev);
- mii = device_get_softc(sc->mii_dev);
+ mii = ma->mii_data;
LIST_INSERT_HEAD(&mii->mii_phys, sc, mii_list);
if (bootverbose)
Modified: projects/sv/sys/dev/mii/xmphy.c
==============================================================================
--- projects/sv/sys/dev/mii/xmphy.c Mon Sep 27 21:10:37 2010 (r213231)
+++ projects/sv/sys/dev/mii/xmphy.c Mon Sep 27 21:28:39 2010 (r213232)
@@ -107,7 +107,7 @@ xmphy_attach(device_t dev)
sc = device_get_softc(dev);
ma = device_get_ivars(dev);
sc->mii_dev = device_get_parent(dev);
- mii = device_get_softc(sc->mii_dev);
+ mii = ma->mii_data;
LIST_INSERT_HEAD(&mii->mii_phys, sc, mii_list);
sc->mii_inst = mii->mii_instance;
Modified: projects/sv/sys/fs/devfs/devfs.h
==============================================================================
--- projects/sv/sys/fs/devfs/devfs.h Mon Sep 27 21:10:37 2010 (r213231)
+++ projects/sv/sys/fs/devfs/devfs.h Mon Sep 27 21:28:39 2010 (r213232)
@@ -124,6 +124,8 @@ MALLOC_DECLARE(M_DEVFS);
struct componentname;
+TAILQ_HEAD(devfs_dlist_head, devfs_dirent);
+
struct devfs_dirent {
struct cdev_priv *de_cdp;
int de_inode;
@@ -133,10 +135,11 @@ struct devfs_dirent {
#define DE_DOTDOT 0x04
#define DE_DOOMED 0x08
#define DE_COVERED 0x10
+#define DE_USER 0x20
int de_holdcnt;
struct dirent *de_dirent;
TAILQ_ENTRY(devfs_dirent) de_list;
- TAILQ_HEAD(, devfs_dirent) de_dlist;
+ struct devfs_dlist_head de_dlist;
struct devfs_dirent *de_dir;
int de_links;
mode_t de_mode;
Modified: projects/sv/sys/fs/devfs/devfs_devs.c
==============================================================================
--- projects/sv/sys/fs/devfs/devfs_devs.c Mon Sep 27 21:10:37 2010 (r213231)
+++ projects/sv/sys/fs/devfs/devfs_devs.c Mon Sep 27 21:28:39 2010 (r213232)
@@ -142,6 +142,27 @@ devfs_alloc(int flags)
return (cdev);
}
+int
+devfs_dev_exists(const char *name)
+{
+ struct cdev_priv *cdp;
+
+ mtx_assert(&devmtx, MA_OWNED);
+
+ TAILQ_FOREACH(cdp, &cdevp_list, cdp_list) {
+ if ((cdp->cdp_flags & CDP_ACTIVE) == 0)
+ continue;
+ if (devfs_pathpath(cdp->cdp_c.si_name, name) != 0)
+ return (1);
+ if (devfs_pathpath(name, cdp->cdp_c.si_name) != 0)
+ return (1);
+ }
+ if (devfs_dir_find(name) != 0)
+ return (1);
+
+ return (0);
+}
+
void
devfs_free(struct cdev *cdev)
{
@@ -338,6 +359,10 @@ devfs_delete(struct devfs_mount *dm, str
dd = devfs_parent_dirent(de);
if (dd != NULL)
DEVFS_DE_HOLD(dd);
+ if (de->de_flags & DE_USER) {
+ KASSERT(dd != NULL, ("devfs_delete: NULL dd"));
+ devfs_dir_unref_de(dm, dd);
+ }
} else
dd = NULL;
@@ -396,10 +421,17 @@ devfs_purge(struct devfs_mount *dm, stru
DEVFS_DE_HOLD(dd);
for (;;) {
- de = TAILQ_FIRST(&dd->de_dlist);
+ /*
+ * Use TAILQ_LAST() to remove "." and ".." last.
+ * We might need ".." to resolve a path in
+ * devfs_dir_unref_de().
+ */
+ de = TAILQ_LAST(&dd->de_dlist, devfs_dlist_head);
if (de == NULL)
break;
TAILQ_REMOVE(&dd->de_dlist, de, de_list);
+ if (de->de_flags & DE_USER)
+ devfs_dir_unref_de(dm, dd);
if (de->de_flags & (DE_DOT | DE_DOTDOT))
devfs_delete(dm, de, DEVFS_DEL_NORECURSE);
else if (de->de_dirent->d_type == DT_DIR)
Copied: projects/sv/sys/fs/devfs/devfs_dir.c (from r213231, head/sys/fs/devfs/devfs_dir.c)
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ projects/sv/sys/fs/devfs/devfs_dir.c Mon Sep 27 21:28:39 2010 (r213232, copy of r213231, head/sys/fs/devfs/devfs_dir.c)
@@ -0,0 +1,175 @@
+/*-
+ * Copyright (c) 2010 Jaakko Heinonen <jh at FreeBSD.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * $FreeBSD$
+ */
+
+#include <sys/param.h>
+#include <sys/conf.h>
+#include <sys/types.h>
+#include <sys/kernel.h>
+#include <sys/libkern.h>
+#include <sys/lock.h>
+#include <sys/malloc.h>
+#include <sys/mutex.h>
+#include <sys/queue.h>
+#include <sys/systm.h>
+#include <sys/sx.h>
+
+#include <fs/devfs/devfs.h>
+#include <fs/devfs/devfs_int.h>
+
+struct dirlistent {
+ char *dir;
+ int refcnt;
+ LIST_ENTRY(dirlistent) link;
+};
+
+static LIST_HEAD(, dirlistent) devfs_dirlist =
+ LIST_HEAD_INITIALIZER(devfs_dirlist);
+
+static MALLOC_DEFINE(M_DEVFS4, "DEVFS4", "DEVFS directory list");
+
+static struct mtx dirlist_mtx;
+MTX_SYSINIT(dirlist_mtx, &dirlist_mtx, "devfs dirlist lock", MTX_DEF);
+
+/* Returns 1 if the path is in the directory list. */
+int
+devfs_dir_find(const char *path)
+{
+ struct dirlistent *dle;
+
+ mtx_lock(&dirlist_mtx);
+ LIST_FOREACH(dle, &devfs_dirlist, link) {
+ if (devfs_pathpath(dle->dir, path) != 0) {
+ mtx_unlock(&dirlist_mtx);
+ return (1);
+ }
+ }
+ mtx_unlock(&dirlist_mtx);
+
+ return (0);
+}
+
+static struct dirlistent *
+devfs_dir_findent_locked(const char *dir)
+{
+ struct dirlistent *dle;
+
+ mtx_assert(&dirlist_mtx, MA_OWNED);
+
+ LIST_FOREACH(dle, &devfs_dirlist, link) {
+ if (strcmp(dir, dle->dir) == 0)
+ return (dle);
+ }
+
+ return (NULL);
+}
+
+static void
+devfs_dir_ref(const char *dir)
+{
+ struct dirlistent *dle, *dle_new;
+
+ if (*dir == '\0')
+ return;
+
+ dle_new = malloc(sizeof(*dle), M_DEVFS4, M_WAITOK);
+ dle_new->dir = strdup(dir, M_DEVFS4);
+ dle_new->refcnt = 1;
+
+ mtx_lock(&dirlist_mtx);
+ dle = devfs_dir_findent_locked(dir);
+ if (dle != NULL) {
+ dle->refcnt++;
+ mtx_unlock(&dirlist_mtx);
+ free(dle_new->dir, M_DEVFS4);
+ free(dle_new, M_DEVFS4);
+ return;
+ }
+ LIST_INSERT_HEAD(&devfs_dirlist, dle_new, link);
+ mtx_unlock(&dirlist_mtx);
+}
+
+void
+devfs_dir_ref_de(struct devfs_mount *dm, struct devfs_dirent *de)
+{
+ char dirname[SPECNAMELEN + 1], *namep;
+
+ namep = devfs_fqpn(dirname, dm, de, NULL);
+ KASSERT(namep != NULL, ("devfs_ref_dir_de: NULL namep"));
+
+ devfs_dir_ref(namep);
+}
+
+static void
+devfs_dir_unref(const char *dir)
+{
+ struct dirlistent *dle;
+
+ if (*dir == '\0')
+ return;
+
+ mtx_lock(&dirlist_mtx);
+ dle = devfs_dir_findent_locked(dir);
+ KASSERT(dle != NULL, ("devfs_dir_unref: dir %s not referenced", dir));
+ dle->refcnt--;
+ KASSERT(dle->refcnt >= 0, ("devfs_dir_unref: negative refcnt"));
+ if (dle->refcnt == 0) {
+ LIST_REMOVE(dle, link);
+ mtx_unlock(&dirlist_mtx);
+ free(dle->dir, M_DEVFS4);
+ free(dle, M_DEVFS4);
+ } else
+ mtx_unlock(&dirlist_mtx);
+}
+
+void
+devfs_dir_unref_de(struct devfs_mount *dm, struct devfs_dirent *de)
+{
+ char dirname[SPECNAMELEN + 1], *namep;
+
+ namep = devfs_fqpn(dirname, dm, de, NULL);
+ KASSERT(namep != NULL, ("devfs_unref_dir_de: NULL namep"));
+
+ devfs_dir_unref(namep);
+}
+
+/* Returns 1 if the path p1 contains the path p2. */
+int
+devfs_pathpath(const char *p1, const char *p2)
+{
+
+ for (;;p1++, p2++) {
+ if (*p1 != *p2) {
+ if (*p1 == '/' && *p2 == '\0')
+ return (1);
+ else
+ return (0);
+ } else if (*p1 == '\0')
+ return (1);
+ }
+ /* NOTREACHED */
+}
Modified: projects/sv/sys/fs/devfs/devfs_int.h
==============================================================================
--- projects/sv/sys/fs/devfs/devfs_int.h Mon Sep 27 21:10:37 2010 (r213231)
+++ projects/sv/sys/fs/devfs/devfs_int.h Mon Sep 27 21:28:39 2010 (r213232)
@@ -38,6 +38,7 @@
#ifdef _KERNEL
struct devfs_dirent;
+struct devfs_mount;
struct cdev_privdata {
struct file *cdpd_fp;
@@ -71,11 +72,17 @@ struct cdev_priv {
#define cdev2priv(c) member2struct(cdev_priv, cdp_c, c)
struct cdev *devfs_alloc(int);
+int devfs_dev_exists(const char *);
void devfs_free(struct cdev *);
void devfs_create(struct cdev *dev);
void devfs_destroy(struct cdev *dev);
void devfs_destroy_cdevpriv(struct cdev_privdata *p);
+int devfs_dir_find(const char *);
+void devfs_dir_ref_de(struct devfs_mount *, struct devfs_dirent *);
+void devfs_dir_unref_de(struct devfs_mount *, struct devfs_dirent *);
+int devfs_pathpath(const char *, const char *);
+
extern struct unrhdr *devfs_inos;
extern struct mtx devmtx;
extern struct mtx devfs_de_interlock;
Modified: projects/sv/sys/fs/devfs/devfs_vnops.c
==============================================================================
--- projects/sv/sys/fs/devfs/devfs_vnops.c Mon Sep 27 21:10:37 2010 (r213231)
+++ projects/sv/sys/fs/devfs/devfs_vnops.c Mon Sep 27 21:28:39 2010 (r213232)
@@ -1564,6 +1564,7 @@ devfs_symlink(struct vop_symlink_args *a
dd = ap->a_dvp->v_data;
de = devfs_newdirent(ap->a_cnp->cn_nameptr, ap->a_cnp->cn_namelen);
+ de->de_flags = DE_USER;
de->de_uid = 0;
de->de_gid = 0;
de->de_mode = 0755;
@@ -1587,6 +1588,7 @@ devfs_symlink(struct vop_symlink_args *a
de_dotdot = TAILQ_FIRST(&dd->de_dlist); /* "." */
de_dotdot = TAILQ_NEXT(de_dotdot, de_list); /* ".." */
TAILQ_INSERT_AFTER(&dd->de_dlist, de_dotdot, de, de_list);
+ devfs_dir_ref_de(dmp, dd);
return (devfs_allocv(de, ap->a_dvp->v_mount, LK_EXCLUSIVE, ap->a_vpp));
}
Modified: projects/sv/sys/i386/i386/machdep.c
==============================================================================
--- projects/sv/sys/i386/i386/machdep.c Mon Sep 27 21:10:37 2010 (r213231)
+++ projects/sv/sys/i386/i386/machdep.c Mon Sep 27 21:28:39 2010 (r213232)
@@ -1950,6 +1950,7 @@ sdtossd(sd, ssd)
ssd->ssd_gran = sd->sd_gran;
}
+#ifndef XEN
static int
add_smap_entry(struct bios_smap *smap, vm_paddr_t *physmap, int *physmap_idxp)
{
@@ -2029,78 +2030,13 @@ add_smap_entry(struct bios_smap *smap, v
return (1);
}
-/*
- * Populate the (physmap) array with base/bound pairs describing the
- * available physical memory in the system, then test this memory and
- * build the phys_avail array describing the actually-available memory.
- *
- * If we cannot accurately determine the physical memory map, then use
- * value from the 0xE801 call, and failing that, the RTC.
- *
- * Total memory size may be set by the kernel environment variable
- * hw.physmem or the compile-time define MAXMEM.
- *
- * XXX first should be vm_paddr_t.
- */
static void
-getmemsize(int first)
+basemem_setup(void)
{
- int i, off, physmap_idx, pa_indx, da_indx;
- int hasbrokenint12, has_smap;
- u_long physmem_tunable;
- u_int extmem;
- struct vm86frame vmf;
- struct vm86context vmc;
- vm_paddr_t pa, physmap[PHYSMAP_SIZE];
+ vm_paddr_t pa;
pt_entry_t *pte;
- struct bios_smap *smap, *smapbase, *smapend;
- u_int32_t smapsize;
- quad_t dcons_addr, dcons_size;
- caddr_t kmdp;
-
- has_smap = 0;
-#ifdef XBOX
- if (arch_i386_is_xbox) {
- /*
- * We queried the memory size before, so chop off 4MB for
- * the framebuffer and inform the OS of this.
- */
- physmap[0] = 0;
- physmap[1] = (arch_i386_xbox_memsize * 1024 * 1024) - XBOX_FB_SIZE;
- physmap_idx = 0;
- goto physmap_done;
- }
-#endif
-#if defined(XEN)
- has_smap = 0;
- Maxmem = xen_start_info->nr_pages - init_first;
- physmem = Maxmem;
- basemem = 0;
- physmap[0] = init_first << PAGE_SHIFT;
- physmap[1] = ptoa(Maxmem) - round_page(MSGBUF_SIZE);
- physmap_idx = 0;
- goto physmap_done;
-#endif
- hasbrokenint12 = 0;
- TUNABLE_INT_FETCH("hw.hasbrokenint12", &hasbrokenint12);
- bzero(&vmf, sizeof(vmf));
- bzero(physmap, sizeof(physmap));
- basemem = 0;
-
- /*
- * Some newer BIOSes has broken INT 12H implementation which cause
- * kernel panic immediately. In this case, we need to scan SMAP
- * with INT 15:E820 first, then determine base memory size.
- */
- if (hasbrokenint12) {
- goto int15e820;
- }
+ int i;
- /*
- * Perform "base memory" related probes & setup
- */
- vm86_intcall(0x12, &vmf);
- basemem = vmf.vmf_ax;
if (basemem > 640) {
printf("Preposterous BIOS basemem of %uK, truncating to 640K\n",
basemem);
@@ -2140,12 +2076,69 @@ getmemsize(int first)
pte = (pt_entry_t *)vm86paddr;
for (i = basemem / 4; i < 160; i++)
pte[i] = (i << PAGE_SHIFT) | PG_V | PG_RW | PG_U;
+}
+#endif
+
+/*
+ * Populate the (physmap) array with base/bound pairs describing the
+ * available physical memory in the system, then test this memory and
+ * build the phys_avail array describing the actually-available memory.
+ *
+ * If we cannot accurately determine the physical memory map, then use
+ * value from the 0xE801 call, and failing that, the RTC.
+ *
+ * Total memory size may be set by the kernel environment variable
+ * hw.physmem or the compile-time define MAXMEM.
+ *
+ * XXX first should be vm_paddr_t.
+ */
+static void
+getmemsize(int first)
+{
+ int has_smap, off, physmap_idx, pa_indx, da_indx;
+ u_long physmem_tunable;
+ vm_paddr_t physmap[PHYSMAP_SIZE];
+ pt_entry_t *pte;
+ quad_t dcons_addr, dcons_size;
+#ifndef XEN
+ int hasbrokenint12, i;
+ u_int extmem;
+ struct vm86frame vmf;
+ struct vm86context vmc;
+ vm_paddr_t pa;
+ struct bios_smap *smap, *smapbase, *smapend;
+ u_int32_t smapsize;
+ caddr_t kmdp;
+#endif
+
+ has_smap = 0;
+#if defined(XEN)
+ Maxmem = xen_start_info->nr_pages - init_first;
+ physmem = Maxmem;
+ basemem = 0;
+ physmap[0] = init_first << PAGE_SHIFT;
+ physmap[1] = ptoa(Maxmem) - round_page(MSGBUF_SIZE);
+ physmap_idx = 0;
+#else
+#ifdef XBOX
+ if (arch_i386_is_xbox) {
+ /*
+ * We queried the memory size before, so chop off 4MB for
+ * the framebuffer and inform the OS of this.
+ */
+ physmap[0] = 0;
+ physmap[1] = (arch_i386_xbox_memsize * 1024 * 1024) - XBOX_FB_SIZE;
+ physmap_idx = 0;
+ goto physmap_done;
+ }
+#endif
+ bzero(&vmf, sizeof(vmf));
+ bzero(physmap, sizeof(physmap));
+ basemem = 0;
-int15e820:
/*
- * Fetch the memory map with INT 15:E820. First, check to see
- * if the loader supplied it and use that if so. Otherwise,
- * use vm86 to invoke the BIOS call directly.
+ * Check if the loader supplied an SMAP memory map. If so,
+ * use that and do not make any VM86 calls.
*/
physmap_idx = 0;
smapbase = NULL;
@@ -2156,9 +2149,10 @@ int15e820:
smapbase = (struct bios_smap *)preload_search_info(kmdp,
MODINFO_METADATA | MODINFOMD_SMAP);
if (smapbase != NULL) {
- /* subr_module.c says:
+ /*
+ * subr_module.c says:
* "Consumer may safely assume that size value precedes data."
- * ie: an int32_t immediately precedes smap.
+ * ie: an int32_t immediately precedes SMAP.
*/
smapsize = *((u_int32_t *)smapbase - 1);
smapend = (struct bios_smap *)((uintptr_t)smapbase + smapsize);
@@ -2167,33 +2161,50 @@ int15e820:
for (smap = smapbase; smap < smapend; smap++)
if (!add_smap_entry(smap, physmap, &physmap_idx))
break;
- } else {
- /*
- * map page 1 R/W into the kernel page table so we can use it
- * as a buffer. The kernel will unmap this page later.
- */
- pmap_kenter(KERNBASE + (1 << PAGE_SHIFT), 1 << PAGE_SHIFT);
- vmc.npages = 0;
- smap = (void *)vm86_addpage(&vmc, 1, KERNBASE +
- (1 << PAGE_SHIFT));
- vm86_getptr(&vmc, (vm_offset_t)smap, &vmf.vmf_es, &vmf.vmf_di);
-
- vmf.vmf_ebx = 0;
- do {
- vmf.vmf_eax = 0xE820;
- vmf.vmf_edx = SMAP_SIG;
- vmf.vmf_ecx = sizeof(struct bios_smap);
- i = vm86_datacall(0x15, &vmf, &vmc);
- if (i || vmf.vmf_eax != SMAP_SIG)
- break;
- has_smap = 1;
- if (!add_smap_entry(smap, physmap, &physmap_idx))
- break;
- } while (vmf.vmf_ebx != 0);
+ goto have_smap;
}
/*
- * Perform "base memory" related probes & setup based on SMAP
+ * Some newer BIOSes have a broken INT 12H implementation
*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***
More information about the svn-src-projects
mailing list