svn commit: r223664 - in projects/largeSMP: contrib/top etc/rc.d
sbin/growfs sbin/hastd sbin/ipfw share/mk sys/dev/gem
sys/fs/nfs sys/fs/nfsclient sys/geom/part sys/sys
Attilio Rao
attilio at FreeBSD.org
Wed Jun 29 08:50:58 UTC 2011
Author: attilio
Date: Wed Jun 29 08:50:57 2011
New Revision: 223664
URL: http://svn.freebsd.org/changeset/base/223664
Log:
MFC
Modified:
projects/largeSMP/etc/rc.d/quota
projects/largeSMP/sbin/growfs/growfs.8
projects/largeSMP/sbin/growfs/growfs.c
projects/largeSMP/sbin/hastd/activemap.c
projects/largeSMP/sbin/hastd/primary.c
projects/largeSMP/sbin/ipfw/main.c
projects/largeSMP/sys/dev/gem/if_gem.c
projects/largeSMP/sys/dev/gem/if_gemvar.h
projects/largeSMP/sys/fs/nfs/nfsproto.h
projects/largeSMP/sys/fs/nfsclient/nfs_clport.c
projects/largeSMP/sys/fs/nfsclient/nfs_clrpcops.c
projects/largeSMP/sys/geom/part/g_part_gpt.c
projects/largeSMP/sys/sys/soundcard.h
Directory Properties:
projects/largeSMP/ (props changed)
projects/largeSMP/cddl/contrib/opensolaris/ (props changed)
projects/largeSMP/contrib/bind9/ (props changed)
projects/largeSMP/contrib/binutils/ (props changed)
projects/largeSMP/contrib/bzip2/ (props changed)
projects/largeSMP/contrib/compiler-rt/ (props changed)
projects/largeSMP/contrib/dialog/ (props changed)
projects/largeSMP/contrib/ee/ (props changed)
projects/largeSMP/contrib/expat/ (props changed)
projects/largeSMP/contrib/file/ (props changed)
projects/largeSMP/contrib/gcc/ (props changed)
projects/largeSMP/contrib/gdb/ (props changed)
projects/largeSMP/contrib/gdtoa/ (props changed)
projects/largeSMP/contrib/gnu-sort/ (props changed)
projects/largeSMP/contrib/groff/ (props changed)
projects/largeSMP/contrib/less/ (props changed)
projects/largeSMP/contrib/libpcap/ (props changed)
projects/largeSMP/contrib/libstdc++/ (props changed)
projects/largeSMP/contrib/llvm/ (props changed)
projects/largeSMP/contrib/llvm/tools/clang/ (props changed)
projects/largeSMP/contrib/ncurses/ (props changed)
projects/largeSMP/contrib/netcat/ (props changed)
projects/largeSMP/contrib/ntp/ (props changed)
projects/largeSMP/contrib/one-true-awk/ (props changed)
projects/largeSMP/contrib/openbsm/ (props changed)
projects/largeSMP/contrib/openpam/ (props changed)
projects/largeSMP/contrib/pf/ (props changed)
projects/largeSMP/contrib/sendmail/ (props changed)
projects/largeSMP/contrib/tcpdump/ (props changed)
projects/largeSMP/contrib/tcsh/ (props changed)
projects/largeSMP/contrib/tnftp/ (props changed)
projects/largeSMP/contrib/top/ (props changed)
projects/largeSMP/contrib/top/install-sh (props changed)
projects/largeSMP/contrib/tzcode/stdtime/ (props changed)
projects/largeSMP/contrib/tzcode/zic/ (props changed)
projects/largeSMP/contrib/tzdata/ (props changed)
projects/largeSMP/contrib/wpa/ (props changed)
projects/largeSMP/contrib/xz/ (props changed)
projects/largeSMP/crypto/openssh/ (props changed)
projects/largeSMP/crypto/openssl/ (props changed)
projects/largeSMP/gnu/lib/ (props changed)
projects/largeSMP/gnu/usr.bin/binutils/ (props changed)
projects/largeSMP/gnu/usr.bin/cc/cc_tools/ (props changed)
projects/largeSMP/gnu/usr.bin/gdb/ (props changed)
projects/largeSMP/lib/libc/ (props changed)
projects/largeSMP/lib/libc/stdtime/ (props changed)
projects/largeSMP/lib/libutil/ (props changed)
projects/largeSMP/lib/libz/ (props changed)
projects/largeSMP/sbin/ (props changed)
projects/largeSMP/sbin/ipfw/ (props changed)
projects/largeSMP/share/mk/bsd.arch.inc.mk (props changed)
projects/largeSMP/share/zoneinfo/ (props changed)
projects/largeSMP/sys/ (props changed)
projects/largeSMP/sys/amd64/include/xen/ (props changed)
projects/largeSMP/sys/boot/ (props changed)
projects/largeSMP/sys/boot/i386/efi/ (props changed)
projects/largeSMP/sys/boot/ia64/efi/ (props changed)
projects/largeSMP/sys/boot/ia64/ski/ (props changed)
projects/largeSMP/sys/boot/powerpc/boot1.chrp/ (props changed)
projects/largeSMP/sys/boot/powerpc/ofw/ (props changed)
projects/largeSMP/sys/cddl/contrib/opensolaris/ (props changed)
projects/largeSMP/sys/conf/ (props changed)
projects/largeSMP/sys/contrib/dev/acpica/ (props changed)
projects/largeSMP/sys/contrib/octeon-sdk/ (props changed)
projects/largeSMP/sys/contrib/pf/ (props changed)
projects/largeSMP/sys/contrib/x86emu/ (props changed)
projects/largeSMP/usr.bin/calendar/ (props changed)
projects/largeSMP/usr.bin/csup/ (props changed)
projects/largeSMP/usr.bin/procstat/ (props changed)
projects/largeSMP/usr.sbin/ndiscvt/ (props changed)
projects/largeSMP/usr.sbin/zic/ (props changed)
Modified: projects/largeSMP/etc/rc.d/quota
==============================================================================
--- projects/largeSMP/etc/rc.d/quota Wed Jun 29 08:32:37 2011 (r223663)
+++ projects/largeSMP/etc/rc.d/quota Wed Jun 29 08:50:57 2011 (r223664)
@@ -14,6 +14,7 @@
name="quota"
rcvar=`set_rcvar`
+load_rc_config $name
start_cmd="quota_start"
stop_cmd="/usr/sbin/quotaoff ${quotaoff_flags}"
@@ -30,5 +31,4 @@ quota_start()
echo ' done.'
}
-load_rc_config $name
run_rc_command "$1"
Modified: projects/largeSMP/sbin/growfs/growfs.8
==============================================================================
--- projects/largeSMP/sbin/growfs/growfs.8 Wed Jun 29 08:32:37 2011 (r223663)
+++ projects/largeSMP/sbin/growfs/growfs.8 Wed Jun 29 08:50:57 2011 (r223664)
@@ -37,12 +37,12 @@
.\" $TSHeader: src/sbin/growfs/growfs.8,v 1.3 2000/12/12 19:31:00 tomsoft Exp $
.\" $FreeBSD$
.\"
-.Dd June 22, 2011
+.Dd June 29, 2011
.Dt GROWFS 8
.Os
.Sh NAME
.Nm growfs
-.Nd expand an existing UFS filesystem
+.Nd expand an existing UFS file system
.Sh SYNOPSIS
.Nm
.Op Fl Ny
@@ -58,8 +58,8 @@ Before starting
.Nm
the disk must be labeled to a bigger size using
.Xr bsdlabel 8 .
-If you wish to grow a filesystem beyond the boundary of
-the slice it resides in, you must resize the slice using
+If you wish to grow a file system beyond the boundary of
+the slice it resides in, you must re-size the slice using
.Xr gpart 8
before running
.Nm .
@@ -67,17 +67,17 @@ If you are using volumes you must enlarg
.Xr gvinum 8 .
The
.Nm
-utility extends the size of the filesystem on the specified special file.
+utility extends the size of the file system on the specified special file.
Currently
.Nm
-can only enlarge unmounted filesystems.
-Do not try enlarging a mounted filesystem, your system may panic and you will
-not be able to use the filesystem any longer.
+can only enlarge unmounted file systems.
+Do not try enlarging a mounted file system, your system may panic and you will
+not be able to use the file system any longer.
Most of the
.Xr newfs 8
options cannot be changed by
.Nm .
-In fact, you can only increase the size of the filesystem.
+In fact, you can only increase the size of the file system.
Use
.Xr tunefs 8
for other changes.
@@ -86,8 +86,8 @@ The following options are available:
.Bl -tag -width indent
.It Fl N
.Dq Test mode .
-Causes the new filesystem parameters to be printed out without actually
-enlarging the filesystem.
+Causes the new file system parameters to be printed out without actually
+enlarging the file system.
.It Fl y
.Dq Expert mode .
Usually
@@ -102,12 +102,12 @@ So use this option with great care!
.It Fl s Ar size
Determines the
.Ar size
-of the filesystem after enlarging in sectors.
+of the file system after enlarging in sectors.
This value defaults to the size of the raw partition specified in
.Ar special
(in other words,
.Nm
-will enlarge the filesystem to the size of the entire partition).
+will enlarge the file system to the size of the entire partition).
.El
.Sh EXAMPLES
.Dl growfs -s 4194304 /dev/vinum/testvol
@@ -122,9 +122,9 @@ up to 2GB if there is enough space in
.Xr ffsinfo 8 ,
.Xr fsck 8 ,
.Xr gpart 8 ,
+.Xr gvinum 8 ,
.Xr newfs 8 ,
-.Xr tunefs 8 ,
-.Xr gvinum 8
+.Xr tunefs 8
.Sh HISTORY
The
.Nm
@@ -144,12 +144,12 @@ There may be cases on
.Fx
3.x only, when
.Nm
-does not recognize properly whether or not the filesystem is mounted and
+does not recognize properly whether or not the file system is mounted and
exits with an error message.
Then please use
.Nm
.Fl y
-if you are sure that the filesystem is not mounted.
+if you are sure that the file system is not mounted.
It is also recommended to always use
.Xr fsck 8
after enlarging (just to be on the safe side).
@@ -183,8 +183,8 @@ on the first cylinder group to verify th
in the CYLINDER SUMMARY (internal cs) of the CYLINDER GROUP
.Em cgr0
has enough blocks.
-As a rule of thumb for default filesystem parameters one block is needed for
-every 2 GB of total filesystem size.
+As a rule of thumb for default file system parameters one block is needed for
+every 2 GB of total file system size.
.Pp
Normally
.Nm
Modified: projects/largeSMP/sbin/growfs/growfs.c
==============================================================================
--- projects/largeSMP/sbin/growfs/growfs.c Wed Jun 29 08:32:37 2011 (r223663)
+++ projects/largeSMP/sbin/growfs/growfs.c Wed Jun 29 08:50:57 2011 (r223664)
@@ -160,7 +160,7 @@ static void get_dev_size(int, int *);
/* ************************************************************ growfs ***** */
/*
- * Here we actually start growing the filesystem. We basically read the
+ * Here we actually start growing the file system. We basically read the
* cylinder summary from the first cylinder group as we want to update
* this on the fly during our various operations. First we handle the
* changes in the former last cylinder group. Afterwards we create all new
@@ -231,7 +231,7 @@ growfs(int fsi, int fso, unsigned int Nf
updjcg(osblock.fs_ncg-1, modtime, fsi, fso, Nflag);
/*
- * Dump out summary information about filesystem.
+ * Dump out summary information about file system.
*/
# define B2MBFACTOR (1 / (1024.0 * 1024.0))
printf("growfs: %.1fMB (%jd sectors) block size %d, fragment size %d\n",
@@ -435,7 +435,7 @@ initcg(int cylno, time_t modtime, int fs
if (acg.cg_nextfreeoff > (unsigned)sblock.fs_cgsize) {
/*
* This should never happen as we would have had that panic
- * already on filesystem creation
+ * already on file system creation
*/
errx(37, "panic: cylinder group too big");
}
@@ -446,7 +446,7 @@ initcg(int cylno, time_t modtime, int fs
acg.cg_cs.cs_nifree--;
}
/*
- * For the old filesystem, we have to initialize all the inodes.
+ * For the old file system, we have to initialize all the inodes.
*/
if (sblock.fs_magic == FS_UFS1_MAGIC) {
bzero(iobuf, sblock.fs_bsize);
@@ -670,7 +670,7 @@ cond_bl_upd(ufs2_daddr_t *block, struct
/* ************************************************************ updjcg ***** */
/*
* Here we do all needed work for the former last cylinder group. It has to be
- * changed in any case, even if the filesystem ended exactly on the end of
+ * changed in any case, even if the file system ended exactly on the end of
* this group, as there is some slightly inconsistent handling of the number
* of cylinders in the cylinder group. We start again by reading the cylinder
* group from disk. If the last block was not fully available, we first handle
@@ -780,7 +780,7 @@ updjcg(int cylno, time_t modtime, int fs
* the rotational layout tables and the cluster summary. This is
* also done per fragment for the first new block if the old file
* system end was not on a block boundary, per fragment for the new
- * last block if the new filesystem end is not on a block boundary,
+ * last block if the new file system end is not on a block boundary,
* and per block for all space in between.
*
* Handle the first new block here if it was partially available
@@ -804,7 +804,7 @@ updjcg(int cylno, time_t modtime, int fs
/*
* Check if the fragment just created could join an
* already existing fragment at the former end of the
- * filesystem.
+ * file system.
*/
if(isblock(&sblock, cg_blksfree(&acg),
((osblock.fs_size - cgbase(&sblock, cylno))/
@@ -931,7 +931,7 @@ updjcg(int cylno, time_t modtime, int fs
* Option (1) is considered to be less intrusive to the structure of the file-
* system. So we try to stick to that whenever possible. If there is not enough
* space in the cylinder group containing the cylinder summary we have to use
- * method (2). In case of active snapshots in the filesystem we probably can
+ * method (2). In case of active snapshots in the file system we probably can
* completely avoid implementing copy on write if we stick to method (2) only.
*/
static void
@@ -1287,7 +1287,7 @@ updcsloc(time_t modtime, int fsi, int fs
/*
* No cluster handling is needed here, as there was at least
* one fragment in use by the cylinder summary in the old
- * filesystem.
+ * file system.
* No block-free counter handling here as this block was not
* a free block.
*/
@@ -1597,7 +1597,7 @@ wtfs(ufs2_daddr_t bno, size_t size, void
/*
* Here we allocate a free block in the current cylinder group. It is assumed,
* that acg contains the current cylinder group. As we may take a block from
- * somewhere in the filesystem we have to handle cluster summary here.
+ * somewhere in the file system we have to handle cluster summary here.
*/
static ufs2_daddr_t
alloc(void)
@@ -1939,9 +1939,9 @@ get_dev_size(int fd, int *size)
/* ************************************************************** main ***** */
/*
* growfs(8) is a utility which allows to increase the size of an existing
- * ufs filesystem. Currently this can only be done on unmounted filesystem.
+ * ufs file system. Currently this can only be done on unmounted file system.
* It recognizes some command line options to specify the new desired size,
- * and it does some basic checkings. The old filesystem size is determined
+ * and it does some basic checkings. The old file system size is determined
* and after some more checks like we can really access the new last block
* on the disk etc. we calculate the new parameters for the superblock. After
* having done this we just call growfs() which will do the work. Before
@@ -1953,11 +1953,11 @@ get_dev_size(int fd, int *size)
* are lucky, then we only have to handle our blocks to be relocated in that
* way.
* Also we have to consider in what order we actually update the critical
- * data structures of the filesystem to make sure, that in case of a disaster
+ * data structures of the file system to make sure, that in case of a disaster
* fsck(8) is still able to restore any lost data.
* The foreseen last step then will be to provide for growing even mounted
- * filesystems. There we have to extend the mount() system call to provide
- * userland access to the filesystem locking facility.
+ * file systems. There we have to extend the mount() system call to provide
+ * userland access to the file system locking facility.
*/
int
main(int argc, char **argv)
@@ -2088,7 +2088,7 @@ main(int argc, char **argv)
}
/*
- * Check if that partition is suitable for growing a filesystem.
+ * Check if that partition is suitable for growing a file system.
*/
if (p_size < 1) {
errx(1, "partition is unavailable");
@@ -2146,7 +2146,7 @@ main(int argc, char **argv)
if(ExpertFlag == 0) {
for(j=0; j<FSMAXSNAP; j++) {
if(sblock.fs_snapinum[j]) {
- errx(1, "active snapshot found in filesystem; "
+ errx(1, "active snapshot found in file system; "
"please remove all snapshots before "
"using growfs");
}
@@ -2159,7 +2159,7 @@ main(int argc, char **argv)
if (ExpertFlag == 0 && Nflag == 0) {
printf("We strongly recommend you to make a backup "
- "before growing the filesystem.\n"
+ "before growing the file system.\n"
"Did you backup your data (Yes/No)? ");
fgets(reply, (int)sizeof(reply), stdin);
if (strcmp(reply, "Yes\n")){
@@ -2168,10 +2168,10 @@ main(int argc, char **argv)
}
}
- printf("New filesystem size is %jd frags\n", (intmax_t)sblock.fs_size);
+ printf("New file system size is %jd frags\n", (intmax_t)sblock.fs_size);
/*
- * Try to access our new last block in the filesystem. Even if we
+ * Try to access our new last block in the file system. Even if we
* later on realize we have to abort our operation, on that block
* there should be no data, so we can't destroy something yet.
*/
@@ -2180,7 +2180,7 @@ main(int argc, char **argv)
/*
* Now calculate new superblock values and check for reasonable
- * bound for new filesystem size:
+ * bound for new file system size:
* fs_size: is derived from label or user input
* fs_dsize: should get updated in the routines creating or
* updating the cylinder groups on the fly
@@ -2189,7 +2189,7 @@ main(int argc, char **argv)
*/
/*
- * Update the number of cylinders and cylinder groups in the filesystem.
+ * Update the number of cylinders and cylinder groups in the file system.
*/
if (sblock.fs_magic == FS_UFS1_MAGIC) {
sblock.fs_old_ncyl =
Modified: projects/largeSMP/sbin/hastd/activemap.c
==============================================================================
--- projects/largeSMP/sbin/hastd/activemap.c Wed Jun 29 08:32:37 2011 (r223663)
+++ projects/largeSMP/sbin/hastd/activemap.c Wed Jun 29 08:50:57 2011 (r223664)
@@ -205,7 +205,7 @@ keepdirty_find(struct activemap *amp, in
return (kd);
}
-static void
+static bool
keepdirty_add(struct activemap *amp, int extent)
{
struct keepdirty *kd;
@@ -217,7 +217,7 @@ keepdirty_add(struct activemap *amp, int
*/
TAILQ_REMOVE(&->am_keepdirty, kd, kd_next);
TAILQ_INSERT_HEAD(&->am_keepdirty, kd, kd_next);
- return;
+ return (false);
}
/*
* Add new element, but first remove the most unused one if
@@ -238,6 +238,8 @@ keepdirty_add(struct activemap *amp, int
amp->am_nkeepdirty++;
TAILQ_INSERT_HEAD(&->am_keepdirty, kd, kd_next);
}
+
+ return (true);
}
static void
@@ -308,9 +310,9 @@ activemap_write_start(struct activemap *
assert(!bit_test(amp->am_memmap, ext));
bit_set(amp->am_memmap, ext);
amp->am_ndirty++;
- modified = true;
}
- keepdirty_add(amp, ext);
+ if (keepdirty_add(amp, ext))
+ modified = true;
}
return (modified);
@@ -345,7 +347,8 @@ activemap_write_complete(struct activema
if (--amp->am_memtab[ext] == 0) {
bit_clear(amp->am_memmap, ext);
amp->am_ndirty--;
- modified = true;
+ if (keepdirty_find(amp, ext) == NULL)
+ modified = true;
}
}
Modified: projects/largeSMP/sbin/hastd/primary.c
==============================================================================
--- projects/largeSMP/sbin/hastd/primary.c Wed Jun 29 08:32:37 2011 (r223663)
+++ projects/largeSMP/sbin/hastd/primary.c Wed Jun 29 08:50:57 2011 (r223664)
@@ -1687,8 +1687,11 @@ ggate_send_thread(void *arg)
}
if (ggio->gctl_error == 0 && ggio->gctl_cmd == BIO_WRITE) {
mtx_lock(&res->hr_amp_lock);
- activemap_write_complete(res->hr_amp,
- ggio->gctl_offset, ggio->gctl_length);
+ if (activemap_write_complete(res->hr_amp,
+ ggio->gctl_offset, ggio->gctl_length)) {
+ res->hr_stat_activemap_update++;
+ (void)hast_activemap_flush(res);
+ }
mtx_unlock(&res->hr_amp_lock);
}
if (ggio->gctl_cmd == BIO_WRITE) {
Modified: projects/largeSMP/sbin/ipfw/main.c
==============================================================================
--- projects/largeSMP/sbin/ipfw/main.c Wed Jun 29 08:32:37 2011 (r223663)
+++ projects/largeSMP/sbin/ipfw/main.c Wed Jun 29 08:50:57 2011 (r223664)
@@ -262,7 +262,7 @@ ipfw_main(int oldac, char **oldav)
save_av = av;
optind = optreset = 1; /* restart getopt() */
- while ((ch = getopt(ac, av, "abcdefhinNqs:STtv")) != -1)
+ while ((ch = getopt(ac, av, "abcdefhinNp:qs:STtv")) != -1)
switch (ch) {
case 'a':
do_acct = 1;
@@ -306,6 +306,10 @@ ipfw_main(int oldac, char **oldav)
co.do_resolv = 1;
break;
+ case 'p':
+ errx(EX_USAGE, "An absolute pathname must be used "
+ "with -p option.");
+
case 'q':
co.do_quiet = 1;
break;
@@ -603,9 +607,12 @@ main(int ac, char *av[])
* as a file to be preprocessed.
*/
- if (ac > 1 && av[ac - 1][0] == '/' && access(av[ac - 1], R_OK) == 0)
- ipfw_readfile(ac, av);
- else {
+ if (ac > 1 && av[ac - 1][0] == '/') {
+ if (access(av[ac - 1], R_OK) == 0)
+ ipfw_readfile(ac, av);
+ else
+ err(EX_USAGE, "pathname: %s", av[ac - 1]);
+ } else {
if (ipfw_main(ac, av)) {
errx(EX_USAGE,
"usage: ipfw [options]\n"
Modified: projects/largeSMP/sys/dev/gem/if_gem.c
==============================================================================
--- projects/largeSMP/sys/dev/gem/if_gem.c Wed Jun 29 08:32:37 2011 (r223663)
+++ projects/largeSMP/sys/dev/gem/if_gem.c Wed Jun 29 08:50:57 2011 (r223664)
@@ -121,7 +121,7 @@ static void gem_rint_timeout(void *arg);
#endif
static inline void gem_rxcksum(struct mbuf *m, uint64_t flags);
static void gem_rxdrain(struct gem_softc *sc);
-static void gem_setladrf(struct gem_softc *sc);
+static void gem_setladrf(struct gem_softc *sc, u_int enable);
static void gem_start(struct ifnet *ifp);
static void gem_start_locked(struct ifnet *ifp);
static void gem_stop(struct ifnet *ifp, int disable);
@@ -705,7 +705,7 @@ gem_reset_rx(struct gem_softc *sc)
* Resetting while DMA is in progress can cause a bus hang, so we
* disable DMA first.
*/
- gem_disable_rx(sc);
+ (void)gem_disable_rx(sc);
GEM_BANK1_WRITE_4(sc, GEM_RX_CONFIG, 0);
GEM_BANK1_BARRIER(sc, GEM_RX_CONFIG, 4,
BUS_SPACE_BARRIER_READ | BUS_SPACE_BARRIER_WRITE);
@@ -715,7 +715,7 @@ gem_reset_rx(struct gem_softc *sc)
/* Wait 5ms extra. */
DELAY(5000);
- /* Finally, reset the ERX. */
+ /* Reset the ERX. */
GEM_BANK2_WRITE_4(sc, GEM_RESET, GEM_RESET_RX);
GEM_BANK2_BARRIER(sc, GEM_RESET, 4,
BUS_SPACE_BARRIER_READ | BUS_SPACE_BARRIER_WRITE);
@@ -724,6 +724,16 @@ gem_reset_rx(struct gem_softc *sc)
device_printf(sc->sc_dev, "cannot reset receiver\n");
return (1);
}
+
+ /* Finally, reset RX MAC. */
+ GEM_BANK1_WRITE_4(sc, GEM_MAC_RXRESET, 1);
+ GEM_BANK1_BARRIER(sc, GEM_MAC_RXRESET, 4,
+ BUS_SPACE_BARRIER_READ | BUS_SPACE_BARRIER_WRITE);
+ if (!GEM_BANK1_BITWAIT(sc, GEM_MAC_RXRESET, 1, 0)) {
+ device_printf(sc->sc_dev, "cannot reset RX MAC\n");
+ return (1);
+ }
+
return (0);
}
@@ -766,12 +776,17 @@ gem_reset_rxdma(struct gem_softc *sc)
GEM_BANK1_WRITE_4(sc, GEM_RX_PAUSE_THRESH,
(3 * sc->sc_rxfifosize / 256) |
((sc->sc_rxfifosize / 256) << 12));
+ /*
+ * Clear the RX filter and reprogram it. This will also set the
+ * current RX MAC configuration.
+ */
+ gem_setladrf(sc, 0);
GEM_BANK1_WRITE_4(sc, GEM_RX_CONFIG,
GEM_BANK1_READ_4(sc, GEM_RX_CONFIG) | GEM_RX_CONFIG_RXDMA_EN);
GEM_BANK1_WRITE_4(sc, GEM_MAC_RX_MASK,
GEM_MAC_RX_DONE | GEM_MAC_RX_FRAME_CNT);
GEM_BANK1_WRITE_4(sc, GEM_MAC_RX_CONFIG,
- GEM_BANK1_READ_4(sc, GEM_MAC_RX_CONFIG) | GEM_MAC_RX_ENABLE);
+ sc->sc_mac_rxcfg | GEM_MAC_RX_ENABLE);
}
static int
@@ -782,7 +797,7 @@ gem_reset_tx(struct gem_softc *sc)
* Resetting while DMA is in progress can cause a bus hang, so we
* disable DMA first.
*/
- gem_disable_tx(sc);
+ (void)gem_disable_tx(sc);
GEM_BANK1_WRITE_4(sc, GEM_TX_CONFIG, 0);
GEM_BANK1_BARRIER(sc, GEM_TX_CONFIG, 4,
BUS_SPACE_BARRIER_READ | BUS_SPACE_BARRIER_WRITE);
@@ -812,8 +827,10 @@ gem_disable_rx(struct gem_softc *sc)
GEM_BANK1_READ_4(sc, GEM_MAC_RX_CONFIG) & ~GEM_MAC_RX_ENABLE);
GEM_BANK1_BARRIER(sc, GEM_MAC_RX_CONFIG, 4,
BUS_SPACE_BARRIER_READ | BUS_SPACE_BARRIER_WRITE);
- return (GEM_BANK1_BITWAIT(sc, GEM_MAC_RX_CONFIG, GEM_MAC_RX_ENABLE,
- 0));
+ if (GEM_BANK1_BITWAIT(sc, GEM_MAC_RX_CONFIG, GEM_MAC_RX_ENABLE, 0))
+ return (1);
+ device_printf(sc->sc_dev, "cannot disable RX MAC\n");
+ return (0);
}
static int
@@ -824,8 +841,10 @@ gem_disable_tx(struct gem_softc *sc)
GEM_BANK1_READ_4(sc, GEM_MAC_TX_CONFIG) & ~GEM_MAC_TX_ENABLE);
GEM_BANK1_BARRIER(sc, GEM_MAC_TX_CONFIG, 4,
BUS_SPACE_BARRIER_READ | BUS_SPACE_BARRIER_WRITE);
- return (GEM_BANK1_BITWAIT(sc, GEM_MAC_TX_CONFIG, GEM_MAC_TX_ENABLE,
- 0));
+ if (GEM_BANK1_BITWAIT(sc, GEM_MAC_TX_CONFIG, GEM_MAC_TX_ENABLE, 0))
+ return (1);
+ device_printf(sc->sc_dev, "cannot disable TX MAC\n");
+ return (0);
}
static int
@@ -960,7 +979,7 @@ gem_init_locked(struct gem_softc *sc)
gem_init_regs(sc);
/* step 5. RX MAC registers & counters */
- gem_setladrf(sc);
+ gem_setladrf(sc, 0);
/* step 6 & 7. Program Descriptor Ring Base Addresses. */
/* NOTE: we use only 32-bit DMA addresses here. */
@@ -1050,21 +1069,14 @@ gem_init_locked(struct gem_softc *sc)
/* step 12. RX_MAC Configuration Register */
v = GEM_BANK1_READ_4(sc, GEM_MAC_RX_CONFIG);
v |= GEM_MAC_RX_ENABLE | GEM_MAC_RX_STRIP_CRC;
- GEM_BANK1_WRITE_4(sc, GEM_MAC_RX_CONFIG, 0);
- GEM_BANK1_BARRIER(sc, GEM_MAC_RX_CONFIG, 4,
- BUS_SPACE_BARRIER_READ | BUS_SPACE_BARRIER_WRITE);
- if (!GEM_BANK1_BITWAIT(sc, GEM_MAC_RX_CONFIG, GEM_MAC_RX_ENABLE, 0))
- device_printf(sc->sc_dev, "cannot configure RX MAC\n");
+ (void)gem_disable_rx(sc);
+ sc->sc_mac_rxcfg = v & ~GEM_MAC_RX_ENABLE;
GEM_BANK1_WRITE_4(sc, GEM_MAC_RX_CONFIG, v);
/* step 13. TX_MAC Configuration Register */
v = GEM_BANK1_READ_4(sc, GEM_MAC_TX_CONFIG);
v |= GEM_MAC_TX_ENABLE;
- GEM_BANK1_WRITE_4(sc, GEM_MAC_TX_CONFIG, 0);
- GEM_BANK1_BARRIER(sc, GEM_MAC_TX_CONFIG, 4,
- BUS_SPACE_BARRIER_READ | BUS_SPACE_BARRIER_WRITE);
- if (!GEM_BANK1_BITWAIT(sc, GEM_MAC_TX_CONFIG, GEM_MAC_TX_ENABLE, 0))
- device_printf(sc->sc_dev, "cannot configure TX MAC\n");
+ (void)gem_disable_tx(sc);
GEM_BANK1_WRITE_4(sc, GEM_MAC_TX_CONFIG, v);
/* step 14. Issue Transmit Pending command. */
@@ -1588,7 +1600,7 @@ gem_rint(struct gem_softc *sc)
* the buffer that's already attached to this descriptor.
*/
if (gem_add_rxbuf(sc, sc->sc_rxptr) != 0) {
- ifp->if_ierrors++;
+ ifp->if_iqdrops++;
GEM_INIT_RXDESC(sc, sc->sc_rxptr);
m = NULL;
}
@@ -2028,8 +2040,8 @@ gem_mii_statchg(device_t dev)
* the GEM Gigabit Ethernet ASIC Specification.
*/
- rxcfg = GEM_BANK1_READ_4(sc, GEM_MAC_RX_CONFIG);
- rxcfg &= ~(GEM_MAC_RX_CARR_EXTEND | GEM_MAC_RX_ENABLE);
+ rxcfg = sc->sc_mac_rxcfg;
+ rxcfg &= ~GEM_MAC_RX_CARR_EXTEND;
txcfg = GEM_MAC_TX_ENA_IPG0 | GEM_MAC_TX_NGU | GEM_MAC_TX_NGU_LIMIT;
if ((IFM_OPTIONS(sc->sc_mii->mii_media_active) & IFM_FDX) != 0)
txcfg |= GEM_MAC_TX_IGN_CARRIER | GEM_MAC_TX_IGN_COLLIS;
@@ -2037,17 +2049,9 @@ gem_mii_statchg(device_t dev)
rxcfg |= GEM_MAC_RX_CARR_EXTEND;
txcfg |= GEM_MAC_TX_CARR_EXTEND;
}
- GEM_BANK1_WRITE_4(sc, GEM_MAC_TX_CONFIG, 0);
- GEM_BANK1_BARRIER(sc, GEM_MAC_TX_CONFIG, 4,
- BUS_SPACE_BARRIER_READ | BUS_SPACE_BARRIER_WRITE);
- if (!GEM_BANK1_BITWAIT(sc, GEM_MAC_TX_CONFIG, GEM_MAC_TX_ENABLE, 0))
- device_printf(sc->sc_dev, "cannot disable TX MAC\n");
+ (void)gem_disable_tx(sc);
GEM_BANK1_WRITE_4(sc, GEM_MAC_TX_CONFIG, txcfg);
- GEM_BANK1_WRITE_4(sc, GEM_MAC_RX_CONFIG, 0);
- GEM_BANK1_BARRIER(sc, GEM_MAC_RX_CONFIG, 4,
- BUS_SPACE_BARRIER_READ | BUS_SPACE_BARRIER_WRITE);
- if (!GEM_BANK1_BITWAIT(sc, GEM_MAC_RX_CONFIG, GEM_MAC_RX_ENABLE, 0))
- device_printf(sc->sc_dev, "cannot disable RX MAC\n");
+ (void)gem_disable_rx(sc);
GEM_BANK1_WRITE_4(sc, GEM_MAC_RX_CONFIG, rxcfg);
v = GEM_BANK1_READ_4(sc, GEM_MAC_CONTROL_CONFIG) &
@@ -2092,6 +2096,7 @@ gem_mii_statchg(device_t dev)
v |= GEM_MAC_XIF_FDPLX_LED;
GEM_BANK1_WRITE_4(sc, GEM_MAC_XIF_CONFIG, v);
+ sc->sc_mac_rxcfg = rxcfg;
if ((sc->sc_ifp->if_drv_flags & IFF_DRV_RUNNING) != 0 &&
(sc->sc_flags & GEM_LINK) != 0) {
GEM_BANK1_WRITE_4(sc, GEM_MAC_TX_CONFIG,
@@ -2147,7 +2152,7 @@ gem_ioctl(struct ifnet *ifp, u_long cmd,
if ((ifp->if_drv_flags & IFF_DRV_RUNNING) != 0 &&
((ifp->if_flags ^ sc->sc_ifflags) &
(IFF_ALLMULTI | IFF_PROMISC)) != 0)
- gem_setladrf(sc);
+ gem_setladrf(sc, 1);
else
gem_init_locked(sc);
} else if ((ifp->if_drv_flags & IFF_DRV_RUNNING) != 0)
@@ -2164,7 +2169,8 @@ gem_ioctl(struct ifnet *ifp, u_long cmd,
case SIOCADDMULTI:
case SIOCDELMULTI:
GEM_LOCK(sc);
- gem_setladrf(sc);
+ if ((ifp->if_drv_flags & IFF_DRV_RUNNING) != 0)
+ gem_setladrf(sc, 1);
GEM_UNLOCK(sc);
break;
case SIOCGIFMEDIA:
@@ -2189,7 +2195,7 @@ gem_ioctl(struct ifnet *ifp, u_long cmd,
}
static void
-gem_setladrf(struct gem_softc *sc)
+gem_setladrf(struct gem_softc *sc, u_int enable)
{
struct ifnet *ifp = sc->sc_ifp;
struct ifmultiaddr *inm;
@@ -2199,24 +2205,20 @@ gem_setladrf(struct gem_softc *sc)
GEM_LOCK_ASSERT(sc, MA_OWNED);
- /* Get the current RX configuration. */
- v = GEM_BANK1_READ_4(sc, GEM_MAC_RX_CONFIG);
-
/*
- * Turn off promiscuous mode, promiscuous group mode (all multicast),
- * and hash filter. Depending on the case, the right bit will be
- * enabled.
+ * Turn off the RX MAC and the hash filter as required by the Sun GEM
+ * programming restrictions.
*/
- v &= ~(GEM_MAC_RX_PROMISCUOUS | GEM_MAC_RX_HASH_FILTER |
- GEM_MAC_RX_PROMISC_GRP);
-
+ v = sc->sc_mac_rxcfg & ~GEM_MAC_RX_HASH_FILTER;
GEM_BANK1_WRITE_4(sc, GEM_MAC_RX_CONFIG, v);
GEM_BANK1_BARRIER(sc, GEM_MAC_RX_CONFIG, 4,
BUS_SPACE_BARRIER_READ | BUS_SPACE_BARRIER_WRITE);
- if (!GEM_BANK1_BITWAIT(sc, GEM_MAC_RX_CONFIG, GEM_MAC_RX_HASH_FILTER,
- 0))
- device_printf(sc->sc_dev, "cannot disable RX hash filter\n");
+ if (!GEM_BANK1_BITWAIT(sc, GEM_MAC_RX_CONFIG, GEM_MAC_RX_HASH_FILTER |
+ GEM_MAC_RX_ENABLE, 0))
+ device_printf(sc->sc_dev,
+ "cannot disable RX MAC or hash filter\n");
+ v &= ~(GEM_MAC_RX_PROMISCUOUS | GEM_MAC_RX_PROMISC_GRP);
if ((ifp->if_flags & IFF_PROMISC) != 0) {
v |= GEM_MAC_RX_PROMISCUOUS;
goto chipit;
@@ -2262,5 +2264,8 @@ gem_setladrf(struct gem_softc *sc)
hash[i]);
chipit:
+ sc->sc_mac_rxcfg = v;
+ if (enable)
+ v |= GEM_MAC_RX_ENABLE;
GEM_BANK1_WRITE_4(sc, GEM_MAC_RX_CONFIG, v);
}
Modified: projects/largeSMP/sys/dev/gem/if_gemvar.h
==============================================================================
--- projects/largeSMP/sys/dev/gem/if_gemvar.h Wed Jun 29 08:32:37 2011 (r223663)
+++ projects/largeSMP/sys/dev/gem/if_gemvar.h Wed Jun 29 08:50:57 2011 (r223664)
@@ -173,6 +173,8 @@ struct gem_softc {
u_int sc_rxptr; /* next ready RX descriptor/state */
u_int sc_rxfifosize; /* RX FIFO size (bytes) */
+ uint32_t sc_mac_rxcfg; /* RX MAC conf. % GEM_MAC_RX_ENABLE */
+
int sc_ifflags;
u_long sc_csum_features;
};
Modified: projects/largeSMP/sys/fs/nfs/nfsproto.h
==============================================================================
--- projects/largeSMP/sys/fs/nfs/nfsproto.h Wed Jun 29 08:32:37 2011 (r223663)
+++ projects/largeSMP/sys/fs/nfs/nfsproto.h Wed Jun 29 08:50:57 2011 (r223664)
@@ -868,15 +868,24 @@ struct nfsv3_sattr {
* NFSATTRBIT_WRITEGETATTR0 - bits 0<->31
*/
#define NFSATTRBIT_WRITEGETATTR0 \
- (NFSATTRBM_CHANGE | \
+ (NFSATTRBM_SUPPORTEDATTRS | \
+ NFSATTRBM_TYPE | \
+ NFSATTRBM_CHANGE | \
NFSATTRBM_SIZE | \
- NFSATTRBM_FSID)
+ NFSATTRBM_FSID | \
+ NFSATTRBM_FILEID | \
+ NFSATTRBM_MAXREAD)
/*
* NFSATTRBIT_WRITEGETATTR1 - bits 32<->63
*/
#define NFSATTRBIT_WRITEGETATTR1 \
- (NFSATTRBM_TIMEMETADATA | \
+ (NFSATTRBM_MODE | \
+ NFSATTRBM_NUMLINKS | \
+ NFSATTRBM_RAWDEV | \
+ NFSATTRBM_SPACEUSED | \
+ NFSATTRBM_TIMEACCESS | \
+ NFSATTRBM_TIMEMETADATA | \
NFSATTRBM_TIMEMODIFY)
/*
Modified: projects/largeSMP/sys/fs/nfsclient/nfs_clport.c
==============================================================================
--- projects/largeSMP/sys/fs/nfsclient/nfs_clport.c Wed Jun 29 08:32:37 2011 (r223663)
+++ projects/largeSMP/sys/fs/nfsclient/nfs_clport.c Wed Jun 29 08:50:57 2011 (r223664)
@@ -388,6 +388,7 @@ nfscl_loadattrcache(struct vnode **vpp,
np->n_vattr.na_mtime = nap->na_mtime;
np->n_vattr.na_ctime = nap->na_ctime;
np->n_vattr.na_fsid = nap->na_fsid;
+ np->n_vattr.na_mode = nap->na_mode;
} else {
NFSBCOPY((caddr_t)nap, (caddr_t)&np->n_vattr,
sizeof (struct nfsvattr));
Modified: projects/largeSMP/sys/fs/nfsclient/nfs_clrpcops.c
==============================================================================
--- projects/largeSMP/sys/fs/nfsclient/nfs_clrpcops.c Wed Jun 29 08:32:37 2011 (r223663)
+++ projects/largeSMP/sys/fs/nfsclient/nfs_clrpcops.c Wed Jun 29 08:50:57 2011 (r223664)
@@ -1527,8 +1527,8 @@ nfsrpc_writerpc(vnode_t vp, struct uio *
* deadlock, is that the upcall times out and allows
* the write to complete. However, progress is so slow
* that it might just as well be deadlocked.
- * So, we just get the attributes that change with each
- * write Op.
+ * As such, we get the rest of the attributes, but not
+ * Owner or Owner_group.
* nb: nfscl_loadattrcache() needs to be told that these
* partial attributes from a write rpc are being
* passed in, via a argument flag.
Modified: projects/largeSMP/sys/geom/part/g_part_gpt.c
==============================================================================
--- projects/largeSMP/sys/geom/part/g_part_gpt.c Wed Jun 29 08:32:37 2011 (r223663)
+++ projects/largeSMP/sys/geom/part/g_part_gpt.c Wed Jun 29 08:50:57 2011 (r223664)
@@ -88,6 +88,7 @@ struct g_part_gpt_entry {
static void g_gpt_printf_utf16(struct sbuf *, uint16_t *, size_t);
static void g_gpt_utf8_to_utf16(const uint8_t *, uint16_t *, size_t);
+static void g_gpt_set_defaults(struct g_part_table *, struct g_provider *);
static int g_part_gpt_add(struct g_part_table *, struct g_part_entry *,
struct g_part_parms *);
@@ -493,12 +494,7 @@ g_part_gpt_create(struct g_part_table *b
table->mbr[DOSPARTOFF + 6] = 0xff; /* esect */
table->mbr[DOSPARTOFF + 7] = 0xff; /* ecyl */
le32enc(table->mbr + DOSPARTOFF + 8, 1); /* start */
- le32enc(table->mbr + DOSPARTOFF + 12, MIN(last, 0xffffffffLL));
-
- table->lba[GPT_ELT_PRIHDR] = 1;
- table->lba[GPT_ELT_PRITBL] = 2;
- table->lba[GPT_ELT_SECHDR] = last;
- table->lba[GPT_ELT_SECTBL] = last - tblsz;
+ le32enc(table->mbr + DOSPARTOFF + 12, MIN(last, UINT32_MAX));
/* Allocate space for the header */
table->hdr = g_malloc(sizeof(struct gpt_hdr), M_WAITOK | M_ZERO);
@@ -506,14 +502,11 @@ g_part_gpt_create(struct g_part_table *b
bcopy(GPT_HDR_SIG, table->hdr->hdr_sig, sizeof(table->hdr->hdr_sig));
table->hdr->hdr_revision = GPT_HDR_REVISION;
table->hdr->hdr_size = offsetof(struct gpt_hdr, padding);
- table->hdr->hdr_lba_start = 2 + tblsz;
- table->hdr->hdr_lba_end = last - tblsz - 1;
kern_uuidgen(&table->hdr->hdr_uuid, 1);
table->hdr->hdr_entries = basetable->gpt_entries;
table->hdr->hdr_entsz = sizeof(struct gpt_ent);
- basetable->gpt_first = table->hdr->hdr_lba_start;
- basetable->gpt_last = table->hdr->hdr_lba_end;
+ g_gpt_set_defaults(basetable, pp);
return (0);
}
@@ -815,32 +808,10 @@ g_part_gpt_read(struct g_part_table *bas
static int
g_part_gpt_recover(struct g_part_table *basetable)
{
- struct g_part_gpt_table *table;
- struct g_provider *pp;
- uint64_t last;
- size_t tblsz;
-
- table = (struct g_part_gpt_table *)basetable;
- pp = LIST_FIRST(&basetable->gpt_gp->consumer)->provider;
- last = pp->mediasize / pp->sectorsize - 1;
- tblsz = (table->hdr->hdr_entries * table->hdr->hdr_entsz +
- pp->sectorsize - 1) / pp->sectorsize;
-
- table->lba[GPT_ELT_PRIHDR] = 1;
- table->lba[GPT_ELT_PRITBL] = 2;
- table->lba[GPT_ELT_SECHDR] = last;
- table->lba[GPT_ELT_SECTBL] = last - tblsz;
- table->state[GPT_ELT_PRIHDR] = GPT_STATE_OK;
- table->state[GPT_ELT_PRITBL] = GPT_STATE_OK;
- table->state[GPT_ELT_SECHDR] = GPT_STATE_OK;
- table->state[GPT_ELT_SECTBL] = GPT_STATE_OK;
- table->hdr->hdr_lba_start = 2 + tblsz;
- table->hdr->hdr_lba_end = last - tblsz - 1;
- basetable->gpt_first = table->hdr->hdr_lba_start;
- basetable->gpt_last = table->hdr->hdr_lba_end;
+ g_gpt_set_defaults(basetable,
+ LIST_FIRST(&basetable->gpt_gp->consumer)->provider);
basetable->gpt_corrupt = 0;
-
return (0);
}
@@ -1039,6 +1010,34 @@ g_part_gpt_write(struct g_part_table *ba
}
static void
+g_gpt_set_defaults(struct g_part_table *basetable, struct g_provider *pp)
+{
+ struct g_part_gpt_table *table;
+ quad_t last;
+ size_t tblsz;
+
+ table = (struct g_part_gpt_table *)basetable;
+ last = pp->mediasize / pp->sectorsize - 1;
+ tblsz = (basetable->gpt_entries * sizeof(struct gpt_ent) +
+ pp->sectorsize - 1) / pp->sectorsize;
+
+ table->lba[GPT_ELT_PRIHDR] = 1;
+ table->lba[GPT_ELT_PRITBL] = 2;
+ table->lba[GPT_ELT_SECHDR] = last;
+ table->lba[GPT_ELT_SECTBL] = last - tblsz;
+ table->state[GPT_ELT_PRIHDR] = GPT_STATE_OK;
+ table->state[GPT_ELT_PRITBL] = GPT_STATE_OK;
+ table->state[GPT_ELT_SECHDR] = GPT_STATE_OK;
+ table->state[GPT_ELT_SECTBL] = GPT_STATE_OK;
+
+ table->hdr->hdr_lba_start = 2 + tblsz;
+ table->hdr->hdr_lba_end = last - tblsz - 1;
+
+ basetable->gpt_first = table->hdr->hdr_lba_start;
+ basetable->gpt_last = table->hdr->hdr_lba_end;
+}
+
+static void
g_gpt_printf_utf16(struct sbuf *sb, uint16_t *str, size_t len)
{
u_int bo;
Modified: projects/largeSMP/sys/sys/soundcard.h
==============================================================================
--- projects/largeSMP/sys/sys/soundcard.h Wed Jun 29 08:32:37 2011 (r223663)
+++ projects/largeSMP/sys/sys/soundcard.h Wed Jun 29 08:50:57 2011 (r223664)
@@ -311,8 +311,7 @@ typedef struct _snd_capabilities {
* IOCTL Commands for /dev/sequencer
*/
-#define SNDCTL_SEQ_HALT _IO ('Q', 0)
-#define SNDCTL_SEQ_RESET SNDCTL_SEQ_HALT /* Historic interface */
+#define SNDCTL_SEQ_RESET _IO ('Q', 0)
#define SNDCTL_SEQ_SYNC _IO ('Q', 1)
#define SNDCTL_SYNTH_INFO _IOWR('Q', 2, struct synth_info)
#define SNDCTL_SEQ_CTRLRATE _IOWR('Q', 3, int) /* Set/get timer res.(hz) */
@@ -776,7 +775,8 @@ typedef struct {
* IOCTL commands for /dev/dsp and /dev/audio
*/
-#define SNDCTL_DSP_RESET _IO ('P', 0)
+#define SNDCTL_DSP_HALT _IO ('P', 0)
+#define SNDCTL_DSP_RESET SNDCTL_DSP_HALT
#define SNDCTL_DSP_SYNC _IO ('P', 1)
#define SNDCTL_DSP_SPEED _IOWR('P', 2, int)
#define SNDCTL_DSP_STEREO _IOWR('P', 3, int)
More information about the svn-src-projects
mailing list