summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/libc/gen/alarm.33
-rw-r--r--lib/libc/gen/siginterrupt.35
-rw-r--r--lib/libc/gen/ualarm.34
-rw-r--r--lib/libc/nls/ru_RU.KOI8-R.msg8
-rw-r--r--lib/libc/sys/execve.24
-rw-r--r--lib/libc/sys/fcntl.22
-rw-r--r--lib/libc/sys/getitimer.22
-rw-r--r--lib/libc/sys/getrlimit.22
-rw-r--r--lib/libc/sys/sigaction.24
-rw-r--r--lib/libc/sys/sigaltstack.232
-rw-r--r--lib/libc/sys/sigreturn.22
-rw-r--r--lib/libc/sys/vfork.22
-rw-r--r--share/man/man9/make_dev.911
-rw-r--r--sys/amd64/amd64/pmap.c13
-rw-r--r--sys/dev/cxgb/cxgb_adapter.h2
-rw-r--r--sys/dev/cxgb/cxgb_sge.c48
-rw-r--r--sys/dev/iwn/if_iwn.c4
-rw-r--r--sys/dev/mvs/mvs.c2
-rw-r--r--sys/fs/devfs/devfs_devs.c9
-rw-r--r--sys/fs/devfs/devfs_int.h2
-rw-r--r--sys/fs/msdosfs/msdosfs_vnops.c3
-rw-r--r--sys/fs/nfsclient/nfs_clbio.c4
-rw-r--r--sys/fs/nwfs/nwfs_io.c2
-rw-r--r--sys/fs/smbfs/smbfs_io.c4
-rw-r--r--sys/fs/tmpfs/tmpfs_vnops.c3
-rw-r--r--sys/i386/i386/pmap.c13
-rw-r--r--sys/kern/kern_conf.c47
-rw-r--r--sys/kern/kern_exec.c4
-rw-r--r--sys/kern/uipc_cow.c6
-rw-r--r--sys/kern/uipc_syscalls.c16
-rw-r--r--sys/kern/vfs_vnops.c8
-rw-r--r--sys/mips/include/pmap.h1
-rw-r--r--sys/mips/mips/pmap.c14
-rw-r--r--sys/net/bpf_zerocopy.c2
-rw-r--r--sys/netgraph/ng_ksocket.c2
-rw-r--r--sys/nfsclient/nfs_bio.c4
-rw-r--r--sys/sparc64/sparc64/pmap.c15
-rw-r--r--sys/sys/conf.h6
-rw-r--r--sys/sys/vnode.h4
-rw-r--r--sys/ufs/ffs/ffs_vnops.c2
-rw-r--r--sys/vm/device_pager.c4
-rw-r--r--sys/vm/sg_pager.c2
-rw-r--r--sys/vm/vm_contig.c6
-rw-r--r--sys/vm/vm_fault.c12
-rw-r--r--sys/vm/vm_glue.c4
-rw-r--r--sys/vm/vm_object.c2
-rw-r--r--sys/vm/vm_page.c23
-rw-r--r--sys/vm/vm_page.h4
-rw-r--r--sys/vm/vm_pageout.c72
-rw-r--r--sys/vm/vm_pageout.h1
-rw-r--r--sys/vm/vnode_pager.c18
-rw-r--r--usr.bin/calendar/io.c6
-rw-r--r--usr.bin/calendar/parsedata.c2
-rw-r--r--usr.bin/find/find.c9
-rw-r--r--usr.bin/find/function.c8
-rw-r--r--usr.bin/find/ls.c8
-rw-r--r--usr.bin/find/main.c8
-rw-r--r--usr.bin/find/misc.c9
-rw-r--r--usr.bin/find/operator.c8
-rw-r--r--usr.bin/find/option.c12
-rw-r--r--usr.bin/lastcomm/lastcomm.12
-rw-r--r--usr.bin/rpcgen/rpc_cout.c1
-rw-r--r--usr.sbin/mountd/mountd.c8
-rw-r--r--usr.sbin/pmcstat/pmcstat_log.c2
64 files changed, 292 insertions, 260 deletions
diff --git a/lib/libc/gen/alarm.3 b/lib/libc/gen/alarm.3
index 70e7c6e..92817b8 100644
--- a/lib/libc/gen/alarm.3
+++ b/lib/libc/gen/alarm.3
@@ -76,8 +76,7 @@ If no alarm is currently set, the return value is 0.
.Sh SEE ALSO
.Xr setitimer 2 ,
.Xr sigaction 2 ,
-.Xr sigpause 2 ,
-.Xr sigvec 2 ,
+.Xr sigsuspend 2 ,
.Xr signal 3 ,
.Xr sleep 3 ,
.Xr ualarm 3 ,
diff --git a/lib/libc/gen/siginterrupt.3 b/lib/libc/gen/siginterrupt.3
index e5eae62..e790132 100644
--- a/lib/libc/gen/siginterrupt.3
+++ b/lib/libc/gen/siginterrupt.3
@@ -109,9 +109,8 @@ is not a valid signal number.
.El
.Sh SEE ALSO
.Xr sigaction 2 ,
-.Xr sigblock 2 ,
-.Xr sigpause 2 ,
-.Xr sigsetmask 2 ,
+.Xr sigprocmask 2 ,
+.Xr sigsuspend 2 ,
.Xr signal 3
.Sh HISTORY
The
diff --git a/lib/libc/gen/ualarm.3 b/lib/libc/gen/ualarm.3
index 47575cf..5719896 100644
--- a/lib/libc/gen/ualarm.3
+++ b/lib/libc/gen/ualarm.3
@@ -84,8 +84,8 @@ A microsecond is 0.000001 seconds.
.Sh SEE ALSO
.Xr getitimer 2 ,
.Xr setitimer 2 ,
-.Xr sigpause 2 ,
-.Xr sigvec 2 ,
+.Xr sigaction 2 ,
+.Xr sigsuspend 2 ,
.Xr alarm 3 ,
.Xr signal 3 ,
.Xr sleep 3 ,
diff --git a/lib/libc/nls/ru_RU.KOI8-R.msg b/lib/libc/nls/ru_RU.KOI8-R.msg
index 55233b9..431bc27 100644
--- a/lib/libc/nls/ru_RU.KOI8-R.msg
+++ b/lib/libc/nls/ru_RU.KOI8-R.msg
@@ -114,7 +114,7 @@ $ ENETRESET
$ ECONNABORTED
53 Программа вызвала аварийное прекращение подключения
$ ECONNRESET
-54 Подключение сброшено противоположной строной
+54 Подключение сброшено противоположной стороной
$ ENOBUFS
55 Не осталось места под буфер
$ EISCONN
@@ -146,7 +146,7 @@ $ EUSERS
$ EDQUOT
69 Превзойдена дисковая квота
$ ESTALE
-70 Устаревший декриптор файла NFS
+70 Устаревший дескриптор файла NFS
$ EREMOTE
71 Слишком много дистанционных переходов в пути
$ EBADRPC
@@ -180,9 +180,9 @@ $ ECANCELED
$ EILSEQ
86 Недопустимая последовательность байтов
$ ENOATTR
-87 Аттрибут не найден
+87 Атрибут не найден
$ EDOOFUS
-88 Ошибка програмирования
+88 Ошибка программирования
$
$ strsignal() support catalog
$
diff --git a/lib/libc/sys/execve.2 b/lib/libc/sys/execve.2
index cdd4197..acc6471 100644
--- a/lib/libc/sys/execve.2
+++ b/lib/libc/sys/execve.2
@@ -189,8 +189,8 @@ the calling process:
.It interval timers Ta see Xr getitimer 2
.It resource limits Ta see Xr getrlimit 2
.It file mode mask Ta see Xr umask 2
-.It signal mask Ta see Xr sigvec 2 ,
-.Xr sigsetmask 2
+.It signal mask Ta see Xr sigaction 2 ,
+.Xr sigprocmask 2
.El
.Pp
When a program is executed as a result of an
diff --git a/lib/libc/sys/fcntl.2 b/lib/libc/sys/fcntl.2
index 250cef4..a801b60 100644
--- a/lib/libc/sys/fcntl.2
+++ b/lib/libc/sys/fcntl.2
@@ -618,7 +618,7 @@ for the reasons as stated in
.Xr flock 2 ,
.Xr getdtablesize 2 ,
.Xr open 2 ,
-.Xr sigvec 2 ,
+.Xr sigaction 2 ,
.Xr lockf 3 ,
.Xr tcgetpgrp 3 ,
.Xr tcsetpgrp 3
diff --git a/lib/libc/sys/getitimer.2 b/lib/libc/sys/getitimer.2
index 260f8f0..e942cc8 100644
--- a/lib/libc/sys/getitimer.2
+++ b/lib/libc/sys/getitimer.2
@@ -171,7 +171,7 @@ to be handled.
.Sh SEE ALSO
.Xr gettimeofday 2 ,
.Xr select 2 ,
-.Xr sigvec 2 ,
+.Xr sigaction 2 ,
.Xr clocks 7
.Sh HISTORY
The
diff --git a/lib/libc/sys/getrlimit.2 b/lib/libc/sys/getrlimit.2
index 48feea0..35198bc 100644
--- a/lib/libc/sys/getrlimit.2
+++ b/lib/libc/sys/getrlimit.2
@@ -193,7 +193,7 @@ raised the maximum limit value, and the caller is not the super-user.
.Xr quota 1 ,
.Xr quotactl 2 ,
.Xr sigaltstack 2 ,
-.Xr sigvec 2 ,
+.Xr sigaction 2 ,
.Xr sysctl 3 ,
.Xr ulimit 3
.Sh HISTORY
diff --git a/lib/libc/sys/sigaction.2 b/lib/libc/sys/sigaction.2
index 3b4f2f0..47b3a72 100644
--- a/lib/libc/sys/sigaction.2
+++ b/lib/libc/sys/sigaction.2
@@ -609,13 +609,9 @@ or
.Xr kill 2 ,
.Xr ptrace 2 ,
.Xr sigaltstack 2 ,
-.Xr sigblock 2 ,
-.Xr sigpause 2 ,
.Xr sigpending 2 ,
.Xr sigprocmask 2 ,
-.Xr sigsetmask 2 ,
.Xr sigsuspend 2 ,
-.Xr sigvec 2 ,
.Xr wait 2 ,
.Xr fpsetmask 3 ,
.Xr setjmp 3 ,
diff --git a/lib/libc/sys/sigaltstack.2 b/lib/libc/sys/sigaltstack.2
index da6877e..6119c6a 100644
--- a/lib/libc/sys/sigaltstack.2
+++ b/lib/libc/sys/sigaltstack.2
@@ -28,7 +28,7 @@
.\" @(#)sigaltstack.2 8.2 (Berkeley) 5/1/95
.\" $FreeBSD$
.\"
-.Dd May 1, 1995
+.Dd May 6, 2010
.Dt SIGALTSTACK 2
.Os
.Sh NAME
@@ -39,7 +39,7 @@
.Sh SYNOPSIS
.In signal.h
.Bd -literal
-typedef struct sigaltstack {
+typedef struct {
char *ss_sp;
size_t ss_size;
int ss_flags;
@@ -51,25 +51,25 @@ typedef struct sigaltstack {
The
.Fn sigaltstack
system call
-allows users to define an alternate stack on which signals
-are to be processed.
+allows defining an alternate stack on which signals
+are to be processed for the current thread.
If
.Fa ss
is non-zero,
it specifies a pointer to and the size of a
.Em "signal stack"
-on which to deliver signals,
-and tells the system if the process is currently executing
-on that stack.
+on which to deliver signals.
When a signal's action indicates its handler
should execute on the signal stack (specified with a
.Xr sigaction 2
system call), the system checks to see
-if the process is currently executing on that stack.
-If the process is not currently executing on the signal stack,
+if the thread is currently executing on that stack.
+If the thread is not currently executing on the signal stack,
the system arranges a switch to the signal stack for the
duration of the signal handler's execution.
.Pp
+An active stack cannot be modified.
+.Pp
If
.Dv SS_DISABLE
is set in
@@ -78,12 +78,6 @@ is set in
and
.Fa ss_size
are ignored and the signal stack will be disabled.
-Trying to disable an active stack will cause
-.Fn sigaltstack
-to return -1 with
-.Va errno
-set to
-.Er EINVAL .
A disabled stack will cause all signals to be
taken on the regular user stack.
If the stack is later re-enabled then all signals that were specified
@@ -96,7 +90,7 @@ The
.Fa ss_flags
field will contain the value
.Dv SS_ONSTACK
-if the process is currently on a signal stack and
+if the thread is currently on a signal stack and
.Dv SS_DISABLE
if the signal stack is currently disabled.
.Sh NOTES
@@ -146,8 +140,12 @@ or
.Fa oss
points to memory that is not a valid part of the process
address space.
+.It Bq Er EPERM
+An attempt was made to modify an active stack.
.It Bq Er EINVAL
-An attempt was made to disable an active stack.
+The
+.Fa ss_flags
+field was invalid.
.It Bq Er ENOMEM
Size of alternate stack area is less than or equal to
.Dv MINSIGSTKSZ .
diff --git a/lib/libc/sys/sigreturn.2 b/lib/libc/sys/sigreturn.2
index a022470..02d75a8 100644
--- a/lib/libc/sys/sigreturn.2
+++ b/lib/libc/sys/sigreturn.2
@@ -83,7 +83,7 @@ The process status longword is invalid or would improperly
raise the privilege level of the process.
.El
.Sh SEE ALSO
-.Xr sigvec 2 ,
+.Xr sigaction 2 ,
.Xr setjmp 3 ,
.Xr ucontext 3
.Sh HISTORY
diff --git a/lib/libc/sys/vfork.2 b/lib/libc/sys/vfork.2
index 3cd3368..1cfaa61 100644
--- a/lib/libc/sys/vfork.2
+++ b/lib/libc/sys/vfork.2
@@ -104,7 +104,7 @@ Same as for
.Xr _exit 2 ,
.Xr fork 2 ,
.Xr rfork 2 ,
-.Xr sigvec 2 ,
+.Xr sigaction 2 ,
.Xr wait 2 ,
.Xr exit 3
.Sh HISTORY
diff --git a/share/man/man9/make_dev.9 b/share/man/man9/make_dev.9
index 50f7d46..00af8a8 100644
--- a/share/man/man9/make_dev.9
+++ b/share/man/man9/make_dev.9
@@ -24,7 +24,7 @@
.\"
.\" $FreeBSD$
.\"
-.Dd September 28, 2008
+.Dd May 6, 2010
.Dt MAKE_DEV 9
.Os
.Sh NAME
@@ -133,9 +133,18 @@ The following values are currently accepted:
.Pp
.Bd -literal -offset indent -compact
MAKEDEV_REF reference the created device
+MAKEDEV_NOWAIT do not sleep, may return NULL
+MAKEDEV_WAITOK allow the function to sleep to satisfy malloc
.Ed
.Pp
The
+.Dv MAKEDEV_WAITOK
+flag is assumed if none of
+.Dv MAKEDEV_WAITOK ,
+.Dv MAKEDEV_NOWAIT
+is specified.
+.Pp
+The
.Xr dev_clone 9
event handler shall specify
.Dv MAKEDEV_REF
diff --git a/sys/amd64/amd64/pmap.c b/sys/amd64/amd64/pmap.c
index 045b634..3cf15d1 100644
--- a/sys/amd64/amd64/pmap.c
+++ b/sys/amd64/amd64/pmap.c
@@ -3961,16 +3961,15 @@ pmap_pvh_wired_mappings(struct md_page *pvh, int count)
boolean_t
pmap_page_is_mapped(vm_page_t m)
{
- struct md_page *pvh;
+ boolean_t rv;
if ((m->flags & (PG_FICTITIOUS | PG_UNMANAGED)) != 0)
return (FALSE);
- mtx_assert(&vm_page_queue_mtx, MA_OWNED);
- if (TAILQ_EMPTY(&m->md.pv_list)) {
- pvh = pa_to_pvh(VM_PAGE_TO_PHYS(m));
- return (!TAILQ_EMPTY(&pvh->pv_list));
- } else
- return (TRUE);
+ vm_page_lock_queues();
+ rv = !TAILQ_EMPTY(&m->md.pv_list) ||
+ !TAILQ_EMPTY(&pa_to_pvh(VM_PAGE_TO_PHYS(m))->pv_list);
+ vm_page_unlock_queues();
+ return (rv);
}
/*
diff --git a/sys/dev/cxgb/cxgb_adapter.h b/sys/dev/cxgb/cxgb_adapter.h
index d1f5ef6..1430ca1 100644
--- a/sys/dev/cxgb/cxgb_adapter.h
+++ b/sys/dev/cxgb/cxgb_adapter.h
@@ -204,6 +204,7 @@ struct sge_fl {
uint32_t cidx;
uint32_t pidx;
uint32_t gen;
+ uint32_t db_pending;
bus_addr_t phys_addr;
uint32_t cntxt_id;
uint32_t empty;
@@ -232,6 +233,7 @@ struct sge_txq {
uint32_t pidx;
uint32_t gen;
uint32_t unacked;
+ uint32_t db_pending;
struct tx_desc *desc;
struct tx_sw_desc *sdesc;
uint32_t token;
diff --git a/sys/dev/cxgb/cxgb_sge.c b/sys/dev/cxgb/cxgb_sge.c
index 9bc36c9..5fdae6b 100644
--- a/sys/dev/cxgb/cxgb_sge.c
+++ b/sys/dev/cxgb/cxgb_sge.c
@@ -696,7 +696,7 @@ refill_fl(adapter_t *sc, struct sge_fl *q, int n)
struct refill_fl_cb_arg cb_arg;
struct mbuf *m;
caddr_t cl;
- int err, count = 0;
+ int err;
cb_arg.error = 0;
while (n--) {
@@ -754,12 +754,14 @@ refill_fl(adapter_t *sc, struct sge_fl *q, int n)
d = q->desc;
}
q->credits++;
- count++;
+ q->db_pending++;
}
done:
- if (count)
+ if (q->db_pending >= 32) {
+ q->db_pending = 0;
t3_write_reg(sc, A_SG_KDOORBELL, V_EGRCNTX(q->cntxt_id));
+ }
}
@@ -810,8 +812,10 @@ __refill_fl(adapter_t *adap, struct sge_fl *fl)
static __inline void
__refill_fl_lt(adapter_t *adap, struct sge_fl *fl, int max)
{
- if ((fl->size - fl->credits) < max)
- refill_fl(adap, fl, min(max, fl->size - fl->credits));
+ uint32_t reclaimable = fl->size - fl->credits;
+
+ if (reclaimable > 0)
+ refill_fl(adap, fl, min(max, reclaimable));
}
/**
@@ -1261,7 +1265,7 @@ make_sgl(struct sg_ent *sgp, bus_dma_segment_t *segs, int nsegs)
* When GTS is disabled we unconditionally ring the doorbell.
*/
static __inline void
-check_ring_tx_db(adapter_t *adap, struct sge_txq *q)
+check_ring_tx_db(adapter_t *adap, struct sge_txq *q, int mustring)
{
#if USE_GTS
clear_bit(TXQ_LAST_PKT_DB, &q->flags);
@@ -1275,9 +1279,12 @@ check_ring_tx_db(adapter_t *adap, struct sge_txq *q)
F_SELEGRCNTX | V_EGRCNTX(q->cntxt_id));
}
#else
- wmb(); /* write descriptors before telling HW */
- t3_write_reg(adap, A_SG_KDOORBELL,
- F_SELEGRCNTX | V_EGRCNTX(q->cntxt_id));
+ if (mustring || ++q->db_pending >= 32) {
+ wmb(); /* write descriptors before telling HW */
+ t3_write_reg(adap, A_SG_KDOORBELL,
+ F_SELEGRCNTX | V_EGRCNTX(q->cntxt_id));
+ q->db_pending = 0;
+ }
#endif
}
@@ -1480,7 +1487,7 @@ t3_encap(struct sge_qset *qs, struct mbuf **m)
wmb();
ETHER_BPF_MTAP(pi->ifp, m0);
wr_gen2(txd, txqs.gen);
- check_ring_tx_db(sc, txq);
+ check_ring_tx_db(sc, txq, 0);
return (0);
} else if (tso_info) {
int eth_type;
@@ -1543,7 +1550,7 @@ t3_encap(struct sge_qset *qs, struct mbuf **m)
wmb();
ETHER_BPF_MTAP(pi->ifp, m0);
wr_gen2(txd, txqs.gen);
- check_ring_tx_db(sc, txq);
+ check_ring_tx_db(sc, txq, 0);
m_freem(m0);
return (0);
}
@@ -1574,7 +1581,7 @@ t3_encap(struct sge_qset *qs, struct mbuf **m)
wmb();
ETHER_BPF_MTAP(pi->ifp, m0);
wr_gen2(txd, txqs.gen);
- check_ring_tx_db(sc, txq);
+ check_ring_tx_db(sc, txq, 0);
m_freem(m0);
return (0);
}
@@ -1593,7 +1600,7 @@ t3_encap(struct sge_qset *qs, struct mbuf **m)
wr_lo = htonl(V_WR_TID(txq->token));
write_wr_hdr_sgl(ndesc, txd, &txqs, txq, sgl, flits,
sgl_flits, wr_hi, wr_lo);
- check_ring_tx_db(sc, txq);
+ check_ring_tx_db(sc, txq, 0);
return (0);
}
@@ -1643,7 +1650,6 @@ cxgb_start_locked(struct sge_qset *qs)
{
struct mbuf *m_head = NULL;
struct sge_txq *txq = &qs->txq[TXQ_ETH];
- int in_use_init = txq->in_use;
struct port_info *pi = qs->port;
struct ifnet *ifp = pi->ifp;
@@ -1655,8 +1661,7 @@ cxgb_start_locked(struct sge_qset *qs)
return;
}
TXQ_LOCK_ASSERT(qs);
- while ((txq->in_use - in_use_init < TX_START_MAX_DESC) &&
- !TXQ_RING_EMPTY(qs) && (ifp->if_drv_flags & IFF_DRV_RUNNING) &&
+ while (!TXQ_RING_EMPTY(qs) && (ifp->if_drv_flags & IFF_DRV_RUNNING) &&
pi->link_config.link_ok) {
reclaim_completed_tx(qs, cxgb_tx_reclaim_threshold, TXQ_ETH);
@@ -1674,6 +1679,10 @@ cxgb_start_locked(struct sge_qset *qs)
m_head = NULL;
}
+
+ if (txq->db_pending)
+ check_ring_tx_db(pi->adapter, txq, 1);
+
if (!TXQ_RING_EMPTY(qs) && callout_pending(&txq->txq_timer) == 0 &&
pi->link_config.link_ok)
callout_reset_on(&txq->txq_timer, 1, cxgb_tx_timeout,
@@ -1707,6 +1716,9 @@ cxgb_transmit_locked(struct ifnet *ifp, struct sge_qset *qs, struct mbuf *m)
(error = drbr_enqueue(ifp, br, m)) != 0)
return (error);
} else {
+ if (txq->db_pending)
+ check_ring_tx_db(pi->adapter, txq, 1);
+
/*
* We've bypassed the buf ring so we need to update
* the stats directly
@@ -2354,7 +2366,7 @@ again: reclaim_completed_tx(qs, 16, TXQ_OFLD);
TXQ_UNLOCK(qs);
write_ofld_wr(adap, m, q, pidx, gen, ndesc, segs, nsegs);
- check_ring_tx_db(adap, q);
+ check_ring_tx_db(adap, q, 1);
return (0);
}
@@ -3033,7 +3045,7 @@ process_responses(adapter_t *adap, struct sge_qset *qs, int budget)
r = rspq->desc;
}
- if (++rspq->credits >= (rspq->size / 4)) {
+ if (++rspq->credits >= 64) {
refill_rspq(adap, rspq, rspq->credits);
rspq->credits = 0;
}
diff --git a/sys/dev/iwn/if_iwn.c b/sys/dev/iwn/if_iwn.c
index 5a17d1e..39b26b5 100644
--- a/sys/dev/iwn/if_iwn.c
+++ b/sys/dev/iwn/if_iwn.c
@@ -4730,7 +4730,7 @@ iwn_scan(struct iwn_softc *sc)
chan->passive = htole16(78);
else
chan->passive = htole16(110);
- hdr->crc_threshold = htole16(1);
+ hdr->crc_threshold = 0xffff;
} else if (!(c->ic_flags & IEEE80211_CHAN_PASSIVE)) {
chan->rf_gain = 0x28;
chan->active = htole16(36);
@@ -4743,7 +4743,7 @@ iwn_scan(struct iwn_softc *sc)
chan->passive = htole16(88);
else
chan->passive = htole16(120);
- hdr->crc_threshold = htole16(1);
+ hdr->crc_threshold = 0xffff;
}
DPRINTF(sc, IWN_DEBUG_STATE,
diff --git a/sys/dev/mvs/mvs.c b/sys/dev/mvs/mvs.c
index 038e9f21..2694d9c 100644
--- a/sys/dev/mvs/mvs.c
+++ b/sys/dev/mvs/mvs.c
@@ -2168,6 +2168,6 @@ mvspoll(struct cam_sim *sim)
arg.arg = ch->dev;
arg.cause = 2; /* XXX */
- mvs_ch_intr(arg.arg);
+ mvs_ch_intr(&arg);
}
diff --git a/sys/fs/devfs/devfs_devs.c b/sys/fs/devfs/devfs_devs.c
index 81b2752..4bd6728 100644
--- a/sys/fs/devfs/devfs_devs.c
+++ b/sys/fs/devfs/devfs_devs.c
@@ -115,17 +115,21 @@ SYSCTL_INT(_debug_sizeof, OID_AUTO, cdev_priv, CTLFLAG_RD,
0, sizeof(struct cdev_priv), "sizeof(struct cdev_priv)");
struct cdev *
-devfs_alloc(void)
+devfs_alloc(int flags)
{
struct cdev_priv *cdp;
struct cdev *cdev;
struct timespec ts;
- cdp = malloc(sizeof *cdp, M_CDEVP, M_USE_RESERVE | M_ZERO | M_WAITOK);
+ cdp = malloc(sizeof *cdp, M_CDEVP, M_USE_RESERVE | M_ZERO |
+ ((flags & MAKEDEV_NOWAIT) ? M_NOWAIT : M_WAITOK));
+ if (cdp == NULL)
+ return (NULL);
cdp->cdp_dirents = &cdp->cdp_dirent0;
cdp->cdp_dirent0 = NULL;
cdp->cdp_maxdirent = 0;
+ cdp->cdp_inode = 0;
cdev = &cdp->cdp_c;
@@ -133,6 +137,7 @@ devfs_alloc(void)
LIST_INIT(&cdev->si_children);
vfs_timestamp(&ts);
cdev->si_atime = cdev->si_mtime = cdev->si_ctime = ts;
+ cdev->si_cred = NULL;
return (cdev);
}
diff --git a/sys/fs/devfs/devfs_int.h b/sys/fs/devfs/devfs_int.h
index 5a61dd4..f5612e1 100644
--- a/sys/fs/devfs/devfs_int.h
+++ b/sys/fs/devfs/devfs_int.h
@@ -70,7 +70,7 @@ struct cdev_priv {
#define cdev2priv(c) member2struct(cdev_priv, cdp_c, c)
-struct cdev *devfs_alloc(void);
+struct cdev *devfs_alloc(int);
void devfs_free(struct cdev *);
void devfs_create(struct cdev *dev);
void devfs_destroy(struct cdev *dev);
diff --git a/sys/fs/msdosfs/msdosfs_vnops.c b/sys/fs/msdosfs/msdosfs_vnops.c
index f38c72b..7a19412 100644
--- a/sys/fs/msdosfs/msdosfs_vnops.c
+++ b/sys/fs/msdosfs/msdosfs_vnops.c
@@ -652,7 +652,6 @@ msdosfs_write(ap)
struct buf *bp;
int ioflag = ap->a_ioflag;
struct uio *uio = ap->a_uio;
- struct thread *td = uio->uio_td;
struct vnode *vp = ap->a_vp;
struct vnode *thisvp;
struct denode *dep = VTODE(vp);
@@ -696,7 +695,7 @@ msdosfs_write(ap)
/*
* If they've exceeded their filesize limit, tell them about it.
*/
- if (vn_rlimit_fsize(vp, uio, td))
+ if (vn_rlimit_fsize(vp, uio, uio->uio_td))
return (EFBIG);
/*
diff --git a/sys/fs/nfsclient/nfs_clbio.c b/sys/fs/nfsclient/nfs_clbio.c
index df027ac..0224e15 100644
--- a/sys/fs/nfsclient/nfs_clbio.c
+++ b/sys/fs/nfsclient/nfs_clbio.c
@@ -134,9 +134,7 @@ ncl_getpages(struct vop_getpages_args *ap)
for (i = 0; i < npages; ++i) {
if (i != ap->a_reqpage) {
vm_page_lock(pages[i]);
- vm_page_lock_queues();
vm_page_free(pages[i]);
- vm_page_unlock_queues();
vm_page_unlock(pages[i]);
}
}
@@ -177,9 +175,7 @@ ncl_getpages(struct vop_getpages_args *ap)
for (i = 0; i < npages; ++i) {
if (i != ap->a_reqpage) {
vm_page_lock(pages[i]);
- vm_page_lock_queues();
vm_page_free(pages[i]);
- vm_page_unlock_queues();
vm_page_unlock(pages[i]);
}
}
diff --git a/sys/fs/nwfs/nwfs_io.c b/sys/fs/nwfs/nwfs_io.c
index 0bb996f..1252014 100644
--- a/sys/fs/nwfs/nwfs_io.c
+++ b/sys/fs/nwfs/nwfs_io.c
@@ -431,9 +431,7 @@ nwfs_getpages(ap)
for (i = 0; i < npages; i++) {
if (ap->a_reqpage != i) {
vm_page_lock(pages[i]);
- vm_page_lock_queues();
vm_page_free(pages[i]);
- vm_page_unlock_queues();
vm_page_unlock(pages[i]);
}
}
diff --git a/sys/fs/smbfs/smbfs_io.c b/sys/fs/smbfs/smbfs_io.c
index c47fb1b..1ffcde9 100644
--- a/sys/fs/smbfs/smbfs_io.c
+++ b/sys/fs/smbfs/smbfs_io.c
@@ -443,9 +443,7 @@ smbfs_getpages(ap)
for (i = 0; i < npages; ++i) {
if (i != reqpage) {
vm_page_lock(pages[i]);
- vm_page_lock_queues();
vm_page_free(pages[i]);
- vm_page_unlock_queues();
vm_page_unlock(pages[i]);
}
}
@@ -484,9 +482,7 @@ smbfs_getpages(ap)
for (i = 0; i < npages; i++) {
if (reqpage != i) {
vm_page_lock(pages[i]);
- vm_page_lock_queues();
vm_page_free(pages[i]);
- vm_page_unlock_queues();
vm_page_unlock(pages[i]);
}
}
diff --git a/sys/fs/tmpfs/tmpfs_vnops.c b/sys/fs/tmpfs/tmpfs_vnops.c
index 3ffef6b..330eea5 100644
--- a/sys/fs/tmpfs/tmpfs_vnops.c
+++ b/sys/fs/tmpfs/tmpfs_vnops.c
@@ -717,7 +717,6 @@ tmpfs_write(struct vop_write_args *v)
struct vnode *vp = v->a_vp;
struct uio *uio = v->a_uio;
int ioflag = v->a_ioflag;
- struct thread *td = uio->uio_td;
boolean_t extended;
int error = 0;
@@ -747,7 +746,7 @@ tmpfs_write(struct vop_write_args *v)
VFS_TO_TMPFS(vp->v_mount)->tm_maxfilesize)
return (EFBIG);
- if (vn_rlimit_fsize(vp, uio, td))
+ if (vn_rlimit_fsize(vp, uio, uio->uio_td))
return (EFBIG);
extended = uio->uio_offset + uio->uio_resid > node->tn_size;
diff --git a/sys/i386/i386/pmap.c b/sys/i386/i386/pmap.c
index 661fade..b342a67 100644
--- a/sys/i386/i386/pmap.c
+++ b/sys/i386/i386/pmap.c
@@ -4125,16 +4125,15 @@ pmap_pvh_wired_mappings(struct md_page *pvh, int count)
boolean_t
pmap_page_is_mapped(vm_page_t m)
{
- struct md_page *pvh;
+ boolean_t rv;
if ((m->flags & (PG_FICTITIOUS | PG_UNMANAGED)) != 0)
return (FALSE);
- mtx_assert(&vm_page_queue_mtx, MA_OWNED);
- if (TAILQ_EMPTY(&m->md.pv_list)) {
- pvh = pa_to_pvh(VM_PAGE_TO_PHYS(m));
- return (!TAILQ_EMPTY(&pvh->pv_list));
- } else
- return (TRUE);
+ vm_page_lock_queues();
+ rv = !TAILQ_EMPTY(&m->md.pv_list) ||
+ !TAILQ_EMPTY(&pa_to_pvh(VM_PAGE_TO_PHYS(m))->pv_list);
+ vm_page_unlock_queues();
+ return (rv);
}
/*
diff --git a/sys/kern/kern_conf.c b/sys/kern/kern_conf.c
index a2e292e..17a6827 100644
--- a/sys/kern/kern_conf.c
+++ b/sys/kern/kern_conf.c
@@ -505,7 +505,7 @@ giant_mmap_single(struct cdev *dev, vm_ooffset_t *offset, vm_size_t size,
}
static void
-notify(struct cdev *dev, const char *ev)
+notify(struct cdev *dev, const char *ev, int flags)
{
static const char prefix[] = "cdev=";
char *data;
@@ -514,7 +514,8 @@ notify(struct cdev *dev, const char *ev)
if (cold)
return;
namelen = strlen(dev->si_name);
- data = malloc(namelen + sizeof(prefix), M_TEMP, M_NOWAIT);
+ data = malloc(namelen + sizeof(prefix), M_TEMP,
+ (flags & MAKEDEV_NOWAIT) ? M_NOWAIT : M_WAITOK);
if (data == NULL)
return;
memcpy(data, prefix, sizeof(prefix) - 1);
@@ -524,17 +525,17 @@ notify(struct cdev *dev, const char *ev)
}
static void
-notify_create(struct cdev *dev)
+notify_create(struct cdev *dev, int flags)
{
- notify(dev, "CREATE");
+ notify(dev, "CREATE", flags);
}
static void
notify_destroy(struct cdev *dev)
{
- notify(dev, "DESTROY");
+ notify(dev, "DESTROY", MAKEDEV_WAITOK);
}
static struct cdev *
@@ -572,24 +573,27 @@ fini_cdevsw(struct cdevsw *devsw)
devsw->d_flags &= ~D_INIT;
}
-static void
-prep_cdevsw(struct cdevsw *devsw)
+static int
+prep_cdevsw(struct cdevsw *devsw, int flags)
{
struct cdevsw *dsw2;
mtx_assert(&devmtx, MA_OWNED);
if (devsw->d_flags & D_INIT)
- return;
+ return (1);
if (devsw->d_flags & D_NEEDGIANT) {
dev_unlock();
- dsw2 = malloc(sizeof *dsw2, M_DEVT, M_WAITOK);
+ dsw2 = malloc(sizeof *dsw2, M_DEVT,
+ (flags & MAKEDEV_NOWAIT) ? M_NOWAIT : M_WAITOK);
dev_lock();
+ if (dsw2 == NULL && !(devsw->d_flags & D_INIT))
+ return (0);
} else
dsw2 = NULL;
if (devsw->d_flags & D_INIT) {
if (dsw2 != NULL)
cdevsw_free_devlocked(dsw2);
- return;
+ return (1);
}
if (devsw->d_version != D_VERSION_03) {
@@ -647,6 +651,7 @@ prep_cdevsw(struct cdevsw *devsw)
if (dsw2 != NULL)
cdevsw_free_devlocked(dsw2);
+ return (1);
}
static struct cdev *
@@ -657,9 +662,15 @@ make_dev_credv(int flags, struct cdevsw *devsw, int unit,
struct cdev *dev;
int i;
- dev = devfs_alloc();
+ dev = devfs_alloc(flags);
+ if (dev == NULL)
+ return (NULL);
dev_lock();
- prep_cdevsw(devsw);
+ if (!prep_cdevsw(devsw, flags)) {
+ dev_unlock();
+ devfs_free(dev);
+ return (NULL);
+ }
dev = newdev(devsw, unit, dev);
if (flags & MAKEDEV_REF)
dev_refl(dev);
@@ -686,8 +697,6 @@ make_dev_credv(int flags, struct cdevsw *devsw, int unit,
dev->si_flags |= SI_NAMED;
if (cr != NULL)
dev->si_cred = crhold(cr);
- else
- dev->si_cred = NULL;
dev->si_uid = uid;
dev->si_gid = gid;
dev->si_mode = mode;
@@ -696,7 +705,7 @@ make_dev_credv(int flags, struct cdevsw *devsw, int unit,
clean_unrhdrl(devfs_inos);
dev_unlock_and_free();
- notify_create(dev);
+ notify_create(dev, flags);
return (dev);
}
@@ -771,7 +780,7 @@ make_dev_alias(struct cdev *pdev, const char *fmt, ...)
int i;
KASSERT(pdev != NULL, ("NULL pdev"));
- dev = devfs_alloc();
+ dev = devfs_alloc(MAKEDEV_WAITOK);
dev_lock();
dev->si_flags |= SI_ALIAS;
dev->si_flags |= SI_NAMED;
@@ -788,7 +797,7 @@ make_dev_alias(struct cdev *pdev, const char *fmt, ...)
clean_unrhdrl(devfs_inos);
dev_unlock();
- notify_create(dev);
+ notify_create(dev, MAKEDEV_WAITOK);
return (dev);
}
@@ -973,9 +982,9 @@ clone_create(struct clonedevs **cdp, struct cdevsw *csw, int *up,
* the end of the list.
*/
unit = *up;
- ndev = devfs_alloc();
+ ndev = devfs_alloc(MAKEDEV_WAITOK);
dev_lock();
- prep_cdevsw(csw);
+ prep_cdevsw(csw, MAKEDEV_WAITOK);
low = extra;
de = dl = NULL;
cd = *cdp;
diff --git a/sys/kern/kern_exec.c b/sys/kern/kern_exec.c
index 0ec9817..fc87d63 100644
--- a/sys/kern/kern_exec.c
+++ b/sys/kern/kern_exec.c
@@ -948,11 +948,9 @@ exec_map_first_page(imgp)
rv = vm_pager_get_pages(object, ma, initial_pagein, 0);
ma[0] = vm_page_lookup(object, 0);
if ((rv != VM_PAGER_OK) || (ma[0] == NULL)) {
- if (ma[0]) {
+ if (ma[0] != NULL) {
vm_page_lock(ma[0]);
- vm_page_lock_queues();
vm_page_free(ma[0]);
- vm_page_unlock_queues();
vm_page_unlock(ma[0]);
}
VM_OBJECT_UNLOCK(object);
diff --git a/sys/kern/uipc_cow.c b/sys/kern/uipc_cow.c
index bc9a56a..853b70b 100644
--- a/sys/kern/uipc_cow.c
+++ b/sys/kern/uipc_cow.c
@@ -81,7 +81,6 @@ socow_iodone(void *addr, void *args)
sf_buf_free(sf);
/* remove COW mapping */
vm_page_lock(pp);
- vm_page_lock_queues();
vm_page_cowclear(pp);
vm_page_unwire(pp, 0);
/*
@@ -91,7 +90,6 @@ socow_iodone(void *addr, void *args)
*/
if (pp->wire_count == 0 && pp->object == NULL)
vm_page_free(pp);
- vm_page_unlock_queues();
vm_page_unlock(pp);
socow_stats.iodone++;
}
@@ -147,9 +145,8 @@ socow_setup(struct mbuf *m0, struct uio *uio)
* Allocate an sf buf
*/
sf = sf_buf_alloc(pp, SFB_CATCH);
- if (!sf) {
+ if (sf == NULL) {
vm_page_lock(pp);
- vm_page_lock_queues();
vm_page_cowclear(pp);
vm_page_unwire(pp, 0);
/*
@@ -159,7 +156,6 @@ socow_setup(struct mbuf *m0, struct uio *uio)
*/
if (pp->wire_count == 0 && pp->object == NULL)
vm_page_free(pp);
- vm_page_unlock_queues();
vm_page_unlock(pp);
socow_stats.fail_sf_buf++;
return(0);
diff --git a/sys/kern/uipc_syscalls.c b/sys/kern/uipc_syscalls.c
index a137875..adcb852 100644
--- a/sys/kern/uipc_syscalls.c
+++ b/sys/kern/uipc_syscalls.c
@@ -1716,7 +1716,6 @@ sf_buf_mext(void *addr, void *args)
m = sf_buf_page(args);
sf_buf_free(args);
vm_page_lock(m);
- vm_page_lock_queues();
vm_page_unwire(m, 0);
/*
* Check for the object going away on us. This can
@@ -1725,7 +1724,6 @@ sf_buf_mext(void *addr, void *args)
*/
if (m->wire_count == 0 && m->object == NULL)
vm_page_free(m);
- vm_page_unlock_queues();
vm_page_unlock(m);
if (addr == NULL)
return;
@@ -2111,7 +2109,6 @@ retry_space:
}
if (error) {
vm_page_lock(pg);
- vm_page_lock_queues();
vm_page_unwire(pg, 0);
/*
* See if anyone else might know about
@@ -2120,10 +2117,8 @@ retry_space:
*/
if (pg->wire_count == 0 && pg->valid == 0 &&
pg->busy == 0 && !(pg->oflags & VPO_BUSY) &&
- pg->hold_count == 0) {
+ pg->hold_count == 0)
vm_page_free(pg);
- }
- vm_page_unlock_queues();
vm_page_unlock(pg);
VM_OBJECT_UNLOCK(obj);
if (error == EAGAIN)
@@ -2139,14 +2134,9 @@ retry_space:
(mnw ? SFB_NOWAIT : SFB_CATCH))) == NULL) {
mbstat.sf_allocfail++;
vm_page_lock(pg);
- vm_page_lock_queues();
vm_page_unwire(pg, 0);
- /*
- * XXX: Not same check as above!?
- */
- if (pg->wire_count == 0 && pg->object == NULL)
- vm_page_free(pg);
- vm_page_unlock_queues();
+ KASSERT(pg->object != NULL,
+ ("kern_sendfile: object disappeared"));
vm_page_unlock(pg);
error = (mnw ? EAGAIN : EINTR);
break;
diff --git a/sys/kern/vfs_vnops.c b/sys/kern/vfs_vnops.c
index edc7ea8..64f77dd 100644
--- a/sys/kern/vfs_vnops.c
+++ b/sys/kern/vfs_vnops.c
@@ -1341,19 +1341,19 @@ vn_vget_ino(struct vnode *vp, ino_t ino, int lkflags, struct vnode **rvp)
}
int
-vn_rlimit_fsize(const struct vnode *vp, const struct uio *uio, const struct thread *td)
+vn_rlimit_fsize(const struct vnode *vp, const struct uio *uio,
+ const struct thread *td)
{
+
if (vp->v_type != VREG || td == NULL)
return (0);
-
PROC_LOCK(td->td_proc);
- if (uio->uio_offset + uio->uio_resid >
+ if ((uoff_t)uio->uio_offset + uio->uio_resid >
lim_cur(td->td_proc, RLIMIT_FSIZE)) {
psignal(td->td_proc, SIGXFSZ);
PROC_UNLOCK(td->td_proc);
return (EFBIG);
}
PROC_UNLOCK(td->td_proc);
-
return (0);
}
diff --git a/sys/mips/include/pmap.h b/sys/mips/include/pmap.h
index f4df6ca..0091d58 100644
--- a/sys/mips/include/pmap.h
+++ b/sys/mips/include/pmap.h
@@ -175,7 +175,6 @@ void pmap_unmapdev(vm_offset_t, vm_size_t);
vm_offset_t pmap_steal_memory(vm_size_t size);
void pmap_set_modified(vm_offset_t pa);
int page_is_managed(vm_offset_t pa);
-void pmap_page_is_free(vm_page_t m);
void pmap_kenter(vm_offset_t va, vm_paddr_t pa);
void pmap_kremove(vm_offset_t va);
void *pmap_kenter_temporary(vm_paddr_t pa, int i);
diff --git a/sys/mips/mips/pmap.c b/sys/mips/mips/pmap.c
index af9ef43..dbce42a 100644
--- a/sys/mips/mips/pmap.c
+++ b/sys/mips/mips/pmap.c
@@ -3030,20 +3030,6 @@ init_pte_prot(vm_offset_t va, vm_page_t m, vm_prot_t prot)
}
/*
- * pmap_page_is_free:
- *
- * Called when a page is freed to allow pmap to clean up
- * any extra state associated with the page. In this case
- * clear modified/referenced bits.
- */
-void
-pmap_page_is_free(vm_page_t m)
-{
-
- m->md.pv_flags = 0;
-}
-
-/*
* pmap_set_modified:
*
* Sets the page modified and reference bits for the specified page.
diff --git a/sys/net/bpf_zerocopy.c b/sys/net/bpf_zerocopy.c
index 5629093..91efd64 100644
--- a/sys/net/bpf_zerocopy.c
+++ b/sys/net/bpf_zerocopy.c
@@ -113,11 +113,9 @@ zbuf_page_free(vm_page_t pp)
{
vm_page_lock(pp);
- vm_page_lock_queues();
vm_page_unwire(pp, 0);
if (pp->wire_count == 0 && pp->object == NULL)
vm_page_free(pp);
- vm_page_unlock_queues();
vm_page_unlock(pp);
}
diff --git a/sys/netgraph/ng_ksocket.c b/sys/netgraph/ng_ksocket.c
index 260eba9..f6cbccc 100644
--- a/sys/netgraph/ng_ksocket.c
+++ b/sys/netgraph/ng_ksocket.c
@@ -1272,7 +1272,7 @@ ng_ksocket_finish_accept(priv_p priv)
soupcall_set(so, SO_RCV, ng_ksocket_incoming, node);
SOCKBUF_UNLOCK(&so->so_rcv);
SOCKBUF_LOCK(&so->so_snd);
- soupcall_set(so, SO_RCV, ng_ksocket_incoming, node);
+ soupcall_set(so, SO_SND, ng_ksocket_incoming, node);
SOCKBUF_UNLOCK(&so->so_snd);
/* Fill in the response data and send it or return it to the caller */
diff --git a/sys/nfsclient/nfs_bio.c b/sys/nfsclient/nfs_bio.c
index c93d677..37da34b 100644
--- a/sys/nfsclient/nfs_bio.c
+++ b/sys/nfsclient/nfs_bio.c
@@ -132,9 +132,7 @@ nfs_getpages(struct vop_getpages_args *ap)
for (i = 0; i < npages; ++i) {
if (i != ap->a_reqpage) {
vm_page_lock(pages[i]);
- vm_page_lock_queues();
vm_page_free(pages[i]);
- vm_page_unlock_queues();
vm_page_unlock(pages[i]);
}
}
@@ -175,9 +173,7 @@ nfs_getpages(struct vop_getpages_args *ap)
for (i = 0; i < npages; ++i) {
if (i != ap->a_reqpage) {
vm_page_lock(pages[i]);
- vm_page_lock_queues();
vm_page_free(pages[i]);
- vm_page_unlock_queues();
vm_page_unlock(pages[i]);
}
}
diff --git a/sys/sparc64/sparc64/pmap.c b/sys/sparc64/sparc64/pmap.c
index daba4b7..0a90b40 100644
--- a/sys/sparc64/sparc64/pmap.c
+++ b/sys/sparc64/sparc64/pmap.c
@@ -1834,14 +1834,19 @@ boolean_t
pmap_page_is_mapped(vm_page_t m)
{
struct tte *tp;
+ boolean_t rv;
+ rv = FALSE;
if ((m->flags & (PG_FICTITIOUS | PG_UNMANAGED)) != 0)
- return (FALSE);
- mtx_assert(&vm_page_queue_mtx, MA_OWNED);
+ return (rv);
+ vm_page_lock_queues();
TAILQ_FOREACH(tp, &m->md.tte_list, tte_link)
- if ((tp->tte_data & TD_PV) != 0)
- return (TRUE);
- return (FALSE);
+ if ((tp->tte_data & TD_PV) != 0) {
+ rv = TRUE;
+ break;
+ }
+ vm_page_unlock_queues();
+ return (rv);
}
/*
diff --git a/sys/sys/conf.h b/sys/sys/conf.h
index a18d699..937414d 100644
--- a/sys/sys/conf.h
+++ b/sys/sys/conf.h
@@ -262,8 +262,10 @@ struct cdev *make_dev(struct cdevsw *_devsw, int _unit, uid_t _uid, gid_t _gid,
struct cdev *make_dev_cred(struct cdevsw *_devsw, int _unit,
struct ucred *_cr, uid_t _uid, gid_t _gid, int _perms,
const char *_fmt, ...) __printflike(7, 8);
-#define MAKEDEV_REF 0x1
-#define MAKEDEV_WHTOUT 0x2
+#define MAKEDEV_REF 0x1
+#define MAKEDEV_WHTOUT 0x2
+#define MAKEDEV_NOWAIT 0x4
+#define MAKEDEV_WAITOK 0x8
struct cdev *make_dev_credf(int _flags,
struct cdevsw *_devsw, int _unit,
struct ucred *_cr, uid_t _uid, gid_t _gid, int _mode,
diff --git a/sys/sys/vnode.h b/sys/sys/vnode.h
index 7c4ae32..64b3ce4 100644
--- a/sys/sys/vnode.h
+++ b/sys/sys/vnode.h
@@ -655,6 +655,8 @@ int vn_rdwr_inchunks(enum uio_rw rw, struct vnode *vp, void *base,
size_t len, off_t offset, enum uio_seg segflg, int ioflg,
struct ucred *active_cred, struct ucred *file_cred, size_t *aresid,
struct thread *td);
+int vn_rlimit_fsize(const struct vnode *vn, const struct uio *uio,
+ const struct thread *td);
int vn_stat(struct vnode *vp, struct stat *sb, struct ucred *active_cred,
struct ucred *file_cred, struct thread *td);
int vn_start_write(struct vnode *vp, struct mount **mpp, int flags);
@@ -670,6 +672,7 @@ int vn_extattr_rm(struct vnode *vp, int ioflg, int attrnamespace,
int vn_vget_ino(struct vnode *vp, ino_t ino, int lkflags,
struct vnode **rvp);
+
int vfs_cache_lookup(struct vop_lookup_args *ap);
void vfs_timestamp(struct timespec *);
void vfs_write_resume(struct mount *mp);
@@ -780,7 +783,6 @@ struct dirent;
int vfs_read_dirent(struct vop_readdir_args *ap, struct dirent *dp, off_t off);
int vfs_unixify_accmode(accmode_t *accmode);
-int vn_rlimit_fsize(const struct vnode *vn, const struct uio *uio, const struct thread *td);
#endif /* _KERNEL */
diff --git a/sys/ufs/ffs/ffs_vnops.c b/sys/ufs/ffs/ffs_vnops.c
index a2fee4e..96d0c7a 100644
--- a/sys/ufs/ffs/ffs_vnops.c
+++ b/sys/ufs/ffs/ffs_vnops.c
@@ -850,9 +850,7 @@ ffs_getpages(ap)
for (i = 0; i < pcount; i++) {
if (i != ap->a_reqpage) {
vm_page_lock(ap->a_m[i]);
- vm_page_lock_queues();
vm_page_free(ap->a_m[i]);
- vm_page_unlock_queues();
vm_page_unlock(ap->a_m[i]);
}
}
diff --git a/sys/vm/device_pager.c b/sys/vm/device_pager.c
index 996f740..7d8d361 100644
--- a/sys/vm/device_pager.c
+++ b/sys/vm/device_pager.c
@@ -255,9 +255,7 @@ dev_pager_getpages(object, m, count, reqpage)
for (i = 0; i < count; i++) {
if (i != reqpage) {
vm_page_lock(m[i]);
- vm_page_lock_queues();
vm_page_free(m[i]);
- vm_page_unlock_queues();
vm_page_unlock(m[i]);
}
}
@@ -272,9 +270,7 @@ dev_pager_getpages(object, m, count, reqpage)
TAILQ_INSERT_TAIL(&object->un_pager.devp.devp_pglist, page, pageq);
for (i = 0; i < count; i++) {
vm_page_lock(m[i]);
- vm_page_lock_queues();
vm_page_free(m[i]);
- vm_page_unlock_queues();
vm_page_unlock(m[i]);
}
vm_page_insert(page, object, offset);
diff --git a/sys/vm/sg_pager.c b/sys/vm/sg_pager.c
index 845401a..a7b3736 100644
--- a/sys/vm/sg_pager.c
+++ b/sys/vm/sg_pager.c
@@ -200,9 +200,7 @@ sg_pager_getpages(vm_object_t object, vm_page_t *m, int count, int reqpage)
/* Free the original pages and insert this fake page into the object. */
for (i = 0; i < count; i++) {
vm_page_lock(m[i]);
- vm_page_lock_queues();
vm_page_free(m[i]);
- vm_page_unlock_queues();
vm_page_unlock(m[i]);
}
vm_page_insert(page, object, offset);
diff --git a/sys/vm/vm_contig.c b/sys/vm/vm_contig.c
index c1c8618..1286c17 100644
--- a/sys/vm/vm_contig.c
+++ b/sys/vm/vm_contig.c
@@ -168,8 +168,10 @@ vm_contig_launder(int queue)
if ((m->flags & PG_MARKER) != 0)
continue;
- if (!vm_page_trylock(m))
- continue;
+ if (!vm_pageout_page_lock(m, &next)) {
+ vm_page_unlock(m);
+ return (FALSE);
+ }
KASSERT(VM_PAGE_INQUEUE2(m, queue),
("vm_contig_launder: page %p's queue is not %d", m, queue));
error = vm_contig_launder_page(m, &next);
diff --git a/sys/vm/vm_fault.c b/sys/vm/vm_fault.c
index 2978f7f..ae1ee29 100644
--- a/sys/vm/vm_fault.c
+++ b/sys/vm/vm_fault.c
@@ -164,9 +164,7 @@ unlock_and_deallocate(struct faultstate *fs)
if (fs->object != fs->first_object) {
VM_OBJECT_LOCK(fs->first_object);
vm_page_lock(fs->first_m);
- vm_page_lock_queues();
vm_page_free(fs->first_m);
- vm_page_unlock_queues();
vm_page_unlock(fs->first_m);
vm_object_pip_wakeup(fs->first_object);
VM_OBJECT_UNLOCK(fs->first_object);
@@ -348,9 +346,7 @@ RetryFault:;
if (fs.object != fs.first_object) {
VM_OBJECT_LOCK(fs.first_object);
vm_page_lock(fs.first_m);
- vm_page_lock_queues();
vm_page_free(fs.first_m);
- vm_page_unlock_queues();
vm_page_unlock(fs.first_m);
vm_object_pip_wakeup(fs.first_object);
VM_OBJECT_UNLOCK(fs.first_object);
@@ -638,9 +634,7 @@ vnode_locked:
if (((fs.map != kernel_map) && (rv == VM_PAGER_ERROR)) ||
(rv == VM_PAGER_BAD)) {
vm_page_lock(fs.m);
- vm_page_lock_queues();
vm_page_free(fs.m);
- vm_page_unlock_queues();
vm_page_unlock(fs.m);
fs.m = NULL;
unlock_and_deallocate(&fs);
@@ -648,9 +642,7 @@ vnode_locked:
}
if (fs.object != fs.first_object) {
vm_page_lock(fs.m);
- vm_page_lock_queues();
vm_page_free(fs.m);
- vm_page_unlock_queues();
vm_page_unlock(fs.m);
fs.m = NULL;
/*
@@ -764,13 +756,11 @@ vnode_locked:
* We don't chase down the shadow chain
*/
fs.object == fs.first_object->backing_object) {
- vm_page_lock(fs.first_m);
- vm_page_lock_queues();
/*
* get rid of the unnecessary page
*/
+ vm_page_lock(fs.first_m);
vm_page_free(fs.first_m);
- vm_page_unlock_queues();
vm_page_unlock(fs.first_m);
/*
* grab the page and put it into the
diff --git a/sys/vm/vm_glue.c b/sys/vm/vm_glue.c
index f86212f..0b9d92a 100644
--- a/sys/vm/vm_glue.c
+++ b/sys/vm/vm_glue.c
@@ -258,9 +258,7 @@ vm_imgact_hold_page(vm_object_t object, vm_ooffset_t offset)
goto out;
if (rv != VM_PAGER_OK) {
vm_page_lock(m);
- vm_page_lock_queues();
vm_page_free(m);
- vm_page_unlock_queues();
vm_page_unlock(m);
m = NULL;
goto out;
@@ -437,10 +435,8 @@ vm_thread_stack_dispose(vm_object_t ksobj, vm_offset_t ks, int pages)
if (m == NULL)
panic("vm_thread_dispose: kstack already missing?");
vm_page_lock(m);
- vm_page_lock_queues();
vm_page_unwire(m, 0);
vm_page_free(m);
- vm_page_unlock_queues();
vm_page_unlock(m);
}
VM_OBJECT_UNLOCK(ksobj);
diff --git a/sys/vm/vm_object.c b/sys/vm/vm_object.c
index f8c50bc..3986d14 100644
--- a/sys/vm/vm_object.c
+++ b/sys/vm/vm_object.c
@@ -2046,9 +2046,7 @@ vm_object_populate(vm_object_t object, vm_pindex_t start, vm_pindex_t end)
break;
if (rv != VM_PAGER_OK) {
vm_page_lock(m);
- vm_page_lock_queues();
vm_page_free(m);
- vm_page_unlock_queues();
vm_page_unlock(m);
break;
}
diff --git a/sys/vm/vm_page.c b/sys/vm/vm_page.c
index cc34c1b..9cbd2ef 100644
--- a/sys/vm/vm_page.c
+++ b/sys/vm/vm_page.c
@@ -563,11 +563,8 @@ vm_page_unhold(vm_page_t mem)
vm_page_lock_assert(mem, MA_OWNED);
--mem->hold_count;
KASSERT(mem->hold_count >= 0, ("vm_page_unhold: hold count < 0!!!"));
- if (mem->hold_count == 0 && VM_PAGE_INQUEUE2(mem, PQ_HOLD)) {
- vm_page_lock_queues();
+ if (mem->hold_count == 0 && VM_PAGE_INQUEUE2(mem, PQ_HOLD))
vm_page_free_toq(mem);
- vm_page_unlock_queues();
- }
}
/*
@@ -1448,10 +1445,11 @@ void
vm_page_free_toq(vm_page_t m)
{
- if (VM_PAGE_GETQUEUE(m) != PQ_NONE)
- mtx_assert(&vm_page_queue_mtx, MA_OWNED);
- KASSERT(!pmap_page_is_mapped(m),
- ("vm_page_free_toq: freeing mapped page %p", m));
+ if ((m->flags & PG_UNMANAGED) == 0) {
+ vm_page_lock_assert(m, MA_OWNED);
+ KASSERT(!pmap_page_is_mapped(m),
+ ("vm_page_free_toq: freeing mapped page %p", m));
+ }
PCPU_INC(cnt.v_tfree);
if (m->busy || VM_PAGE_IS_FREE(m)) {
@@ -1471,7 +1469,11 @@ vm_page_free_toq(vm_page_t m)
* callback routine until after we've put the page on the
* appropriate free queue.
*/
- vm_pageq_remove(m);
+ if (VM_PAGE_GETQUEUE(m) != PQ_NONE) {
+ vm_page_lock_queues();
+ vm_pageq_remove(m);
+ vm_page_unlock_queues();
+ }
vm_page_remove(m);
/*
@@ -1493,9 +1495,10 @@ vm_page_free_toq(vm_page_t m)
panic("vm_page_free: freeing wired page");
}
if (m->hold_count != 0) {
- vm_page_lock_assert(m, MA_OWNED);
m->flags &= ~PG_ZERO;
+ vm_page_lock_queues();
vm_page_enqueue(PQ_HOLD, m);
+ vm_page_unlock_queues();
} else {
/*
* Restore the default memory attribute to the page.
diff --git a/sys/vm/vm_page.h b/sys/vm/vm_page.h
index da4d42a..ef790ae 100644
--- a/sys/vm/vm_page.h
+++ b/sys/vm/vm_page.h
@@ -107,13 +107,13 @@ struct vm_page {
vm_pindex_t pindex; /* offset into object (O,Q) */
vm_paddr_t phys_addr; /* physical address of page */
struct md_page md; /* machine dependant stuff */
- uint8_t queue; /* page queue index */
+ uint8_t queue; /* page queue index (P,Q) */
int8_t segind;
u_short flags; /* see below */
uint8_t order; /* index of the buddy queue */
uint8_t pool;
u_short cow; /* page cow mapping count (Q) */
- u_int wire_count; /* wired down maps refs (Q) */
+ u_int wire_count; /* wired down maps refs (P) */
short hold_count; /* page hold count (P) */
u_short oflags; /* page flags (O) */
u_char act_count; /* page usage count (Q) */
diff --git a/sys/vm/vm_pageout.c b/sys/vm/vm_pageout.c
index 9921a84..a84b6d4 100644
--- a/sys/vm/vm_pageout.c
+++ b/sys/vm/vm_pageout.c
@@ -215,6 +215,17 @@ static void vm_req_vmdaemon(int req);
#endif
static void vm_pageout_page_stats(void);
+static void
+vm_pageout_init_marker(vm_page_t marker, u_short queue)
+{
+
+ bzero(marker, sizeof(*marker));
+ marker->flags = PG_FICTITIOUS | PG_MARKER;
+ marker->oflags = VPO_BUSY;
+ marker->queue = queue;
+ marker->wire_count = 1;
+}
+
/*
* vm_pageout_fallback_object_lock:
*
@@ -237,16 +248,8 @@ vm_pageout_fallback_object_lock(vm_page_t m, vm_page_t *next)
u_short queue;
vm_object_t object;
- /*
- * Initialize our marker
- */
- bzero(&marker, sizeof(marker));
- marker.flags = PG_FICTITIOUS | PG_MARKER;
- marker.oflags = VPO_BUSY;
- marker.queue = m->queue;
- marker.wire_count = 1;
-
queue = m->queue;
+ vm_pageout_init_marker(&marker, queue);
object = m->object;
TAILQ_INSERT_AFTER(&vm_page_queues[queue].pl,
@@ -268,6 +271,43 @@ vm_pageout_fallback_object_lock(vm_page_t m, vm_page_t *next)
}
/*
+ * Lock the page while holding the page queue lock. Use marker page
+ * to detect page queue changes and maintain notion of next page on
+ * page queue. Return TRUE if no changes were detected, FALSE
+ * otherwise. The page is locked on return. The page queue lock might
+ * be dropped and reacquired.
+ *
+ * This function depends on normal struct vm_page being type stable.
+ */
+boolean_t
+vm_pageout_page_lock(vm_page_t m, vm_page_t *next)
+{
+ struct vm_page marker;
+ boolean_t unchanged;
+ u_short queue;
+
+ vm_page_lock_assert(m, MA_NOTOWNED);
+ mtx_assert(&vm_page_queue_mtx, MA_OWNED);
+
+ if (vm_page_trylock(m))
+ return (TRUE);
+
+ queue = m->queue;
+ vm_pageout_init_marker(&marker, queue);
+
+ TAILQ_INSERT_AFTER(&vm_page_queues[queue].pl, m, &marker, pageq);
+ vm_page_unlock_queues();
+ vm_page_lock(m);
+ vm_page_lock_queues();
+
+ /* Page queue might have changed. */
+ *next = TAILQ_NEXT(&marker, pageq);
+ unchanged = (m->queue == queue && &marker == TAILQ_NEXT(m, pageq));
+ TAILQ_REMOVE(&vm_page_queues[queue].pl, &marker, pageq);
+ return (unchanged);
+}
+
+/*
* vm_pageout_clean:
*
* Clean the page and remove it from the laundry.
@@ -777,7 +817,11 @@ rescan0:
if (m->flags & PG_MARKER)
continue;
- if (!vm_page_trylock(m)) {
+ /*
+ * Lock the page.
+ */
+ if (!vm_pageout_page_lock(m, &next)) {
+ vm_page_unlock(m);
addl_page_shortage++;
continue;
}
@@ -1112,7 +1156,9 @@ unlock_and_continue:
m = next;
continue;
}
- if (!vm_page_trylock(m) || (object = m->object) == NULL) {
+ if (!vm_pageout_page_lock(m, &next) ||
+ (object = m->object) == NULL) {
+ vm_page_unlock(m);
m = next;
continue;
}
@@ -1375,7 +1421,9 @@ vm_pageout_page_stats()
continue;
}
vm_page_lock_assert(m, MA_NOTOWNED);
- if (vm_page_trylock(m) == 0 || (object = m->object) == NULL) {
+ if (!vm_pageout_page_lock(m, &next) ||
+ (object = m->object) == NULL) {
+ vm_page_unlock(m);
m = next;
continue;
}
diff --git a/sys/vm/vm_pageout.h b/sys/vm/vm_pageout.h
index 15ca570..4759dd7 100644
--- a/sys/vm/vm_pageout.h
+++ b/sys/vm/vm_pageout.h
@@ -104,5 +104,6 @@ extern void vm_waitpfault(void);
boolean_t vm_pageout_fallback_object_lock(vm_page_t, vm_page_t *);
int vm_pageout_flush(vm_page_t *, int, int);
void vm_pageout_oom(int shortage);
+boolean_t vm_pageout_page_lock(vm_page_t, vm_page_t *);
#endif
#endif /* _VM_VM_PAGEOUT_H_ */
diff --git a/sys/vm/vnode_pager.c b/sys/vm/vnode_pager.c
index eb21c60..69fd5d1 100644
--- a/sys/vm/vnode_pager.c
+++ b/sys/vm/vnode_pager.c
@@ -725,9 +725,7 @@ vnode_pager_generic_getpages(vp, m, bytecount, reqpage)
for (i = 0; i < count; i++)
if (i != reqpage) {
vm_page_lock(m[i]);
- vm_page_lock_queues();
vm_page_free(m[i]);
- vm_page_unlock_queues();
vm_page_unlock(m[i]);
}
PCPU_INC(cnt.v_vnodein);
@@ -740,9 +738,7 @@ vnode_pager_generic_getpages(vp, m, bytecount, reqpage)
for (i = 0; i < count; i++)
if (i != reqpage) {
vm_page_lock(m[i]);
- vm_page_lock_queues();
vm_page_free(m[i]);
- vm_page_unlock_queues();
vm_page_unlock(m[i]);
}
VM_OBJECT_UNLOCK(object);
@@ -759,9 +755,7 @@ vnode_pager_generic_getpages(vp, m, bytecount, reqpage)
for (i = 0; i < count; i++)
if (i != reqpage) {
vm_page_lock(m[i]);
- vm_page_lock_queues();
vm_page_free(m[i]);
- vm_page_unlock_queues();
vm_page_unlock(m[i]);
}
VM_OBJECT_UNLOCK(object);
@@ -780,9 +774,7 @@ vnode_pager_generic_getpages(vp, m, bytecount, reqpage)
for (i = 0; i < count; i++)
if (i != reqpage) {
vm_page_lock(m[i]);
- vm_page_lock_queues();
vm_page_free(m[i]);
- vm_page_unlock_queues();
vm_page_unlock(m[i]);
}
VM_OBJECT_UNLOCK(object);
@@ -795,9 +787,7 @@ vnode_pager_generic_getpages(vp, m, bytecount, reqpage)
for (i = 0; i < count; i++)
if (i != reqpage) {
vm_page_lock(m[i]);
- vm_page_lock_queues();
vm_page_free(m[i]);
- vm_page_unlock_queues();
vm_page_unlock(m[i]);
}
VM_OBJECT_UNLOCK(object);
@@ -821,9 +811,7 @@ vnode_pager_generic_getpages(vp, m, bytecount, reqpage)
for (; i < count; i++)
if (i != reqpage) {
vm_page_lock(m[i]);
- vm_page_lock_queues();
vm_page_free(m[i]);
- vm_page_unlock_queues();
vm_page_unlock(m[i]);
}
VM_OBJECT_UNLOCK(object);
@@ -840,9 +828,7 @@ vnode_pager_generic_getpages(vp, m, bytecount, reqpage)
(uintmax_t)object->un_pager.vnp.vnp_size);
}
vm_page_lock(m[i]);
- vm_page_lock_queues();
vm_page_free(m[i]);
- vm_page_unlock_queues();
vm_page_unlock(m[i]);
VM_OBJECT_UNLOCK(object);
runend = i + 1;
@@ -854,9 +840,7 @@ vnode_pager_generic_getpages(vp, m, bytecount, reqpage)
VM_OBJECT_LOCK(object);
for (j = i; j < runend; j++) {
vm_page_lock(m[j]);
- vm_page_lock_queues();
vm_page_free(m[j]);
- vm_page_unlock_queues();
vm_page_unlock(m[j]);
}
VM_OBJECT_UNLOCK(object);
@@ -865,9 +849,7 @@ vnode_pager_generic_getpages(vp, m, bytecount, reqpage)
VM_OBJECT_LOCK(object);
for (i = first + runpg; i < count; i++) {
vm_page_lock(m[i]);
- vm_page_lock_queues();
vm_page_free(m[i]);
- vm_page_unlock_queues();
vm_page_unlock(m[i]);
}
VM_OBJECT_UNLOCK(object);
diff --git a/usr.bin/calendar/io.c b/usr.bin/calendar/io.c
index 42abca6..f1ba1ae 100644
--- a/usr.bin/calendar/io.c
+++ b/usr.bin/calendar/io.c
@@ -155,15 +155,15 @@ cal(void)
}
/* Get rid of leading spaces (non-standard) */
- while (isspace(buf[0]))
- memcpy(buf, buf + 1, strlen(buf) - 1);
+ while (isspace((unsigned char)buf[0]))
+ memcpy(buf, buf + 1, strlen(buf));
/* No tab in the line, then not a valid line */
if ((pp = strchr(buf, '\t')) == NULL)
continue;
/* Trim spaces in front of the tab */
- while (isspace(pp[-1]))
+ while (isspace((unsigned char)pp[-1]))
pp--;
p = *pp;
diff --git a/usr.bin/calendar/parsedata.c b/usr.bin/calendar/parsedata.c
index 4fab640..6482fd3 100644
--- a/usr.bin/calendar/parsedata.c
+++ b/usr.bin/calendar/parsedata.c
@@ -872,7 +872,7 @@ isonlydigits(char *s, int nostar)
for (i = 0; s[i] != '\0'; i++) {
if (nostar == 0 && s[i] == '*' && s[i + 1] == '\0')
return 1;
- if (!isdigit(s[i]))
+ if (!isdigit((unsigned char)s[i]))
return (0);
}
return (1);
diff --git a/usr.bin/find/find.c b/usr.bin/find/find.c
index 35ef5b2..cc2d797 100644
--- a/usr.bin/find/find.c
+++ b/usr.bin/find/find.c
@@ -32,10 +32,15 @@
* 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.
- *
- * @(#)find.c 8.5 (Berkeley) 8/5/94
*/
+#ifndef lint
+#if 0
+static char sccsid[] = "@(#)find.c 8.5 (Berkeley) 8/5/94";
+#else
+#endif
+#endif /* not lint */
+
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
diff --git a/usr.bin/find/function.c b/usr.bin/find/function.c
index 4329887..1714627 100644
--- a/usr.bin/find/function.c
+++ b/usr.bin/find/function.c
@@ -32,10 +32,14 @@
* 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.
- *
- * @(#)function.c 8.10 (Berkeley) 5/4/95
*/
+#ifndef lint
+#if 0
+static const char sccsid[] = "@(#)function.c 8.10 (Berkeley) 5/4/95";
+#endif
+#endif /* not lint */
+
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
diff --git a/usr.bin/find/ls.c b/usr.bin/find/ls.c
index e96994b..88e4593 100644
--- a/usr.bin/find/ls.c
+++ b/usr.bin/find/ls.c
@@ -29,10 +29,14 @@
* 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.
- *
- * @(#)ls.c 8.1 (Berkeley) 6/6/93
*/
+#ifndef lint
+#if 0
+static char sccsid[] = "@(#)ls.c 8.1 (Berkeley) 6/6/93";
+#endif
+#endif /* not lint */
+
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
diff --git a/usr.bin/find/main.c b/usr.bin/find/main.c
index 7d4c24a..8e2b42c 100644
--- a/usr.bin/find/main.c
+++ b/usr.bin/find/main.c
@@ -32,8 +32,6 @@
* 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.
- *
- * @(#)main.c 8.4 (Berkeley) 5/4/95
*/
#ifndef lint
@@ -42,6 +40,12 @@ char copyright[] =
The Regents of the University of California. All rights reserved.\n";
#endif /* not lint */
+#ifndef lint
+#if 0
+static char sccsid[] = "@(#)main.c 8.4 (Berkeley) 5/4/95";
+#endif
+#endif /* not lint */
+
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
diff --git a/usr.bin/find/misc.c b/usr.bin/find/misc.c
index 3696c13..1532906 100644
--- a/usr.bin/find/misc.c
+++ b/usr.bin/find/misc.c
@@ -32,10 +32,15 @@
* 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.
- *
- * @(#)misc.c 8.2 (Berkeley) 4/1/94
*/
+#ifndef lint
+#if 0
+static char sccsid[] = "@(#)misc.c 8.2 (Berkeley) 4/1/94";
+#else
+#endif
+#endif /* not lint */
+
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
diff --git a/usr.bin/find/operator.c b/usr.bin/find/operator.c
index d1a7ea8..c774efa 100644
--- a/usr.bin/find/operator.c
+++ b/usr.bin/find/operator.c
@@ -32,10 +32,14 @@
* 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.
- *
- * @(#)operator.c 8.1 (Berkeley) 6/6/93
*/
+#ifndef lint
+#if 0
+static char sccsid[] = "@(#)operator.c 8.1 (Berkeley) 6/6/93";
+#endif
+#endif /* not lint */
+
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
diff --git a/usr.bin/find/option.c b/usr.bin/find/option.c
index 6ae3958..02287c9 100644
--- a/usr.bin/find/option.c
+++ b/usr.bin/find/option.c
@@ -32,10 +32,14 @@
* 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.
- *
- * @(#)option.c 8.2 (Berkeley) 4/16/94
*/
+#ifndef lint
+/*
+static char sccsid[] = "@(#)option.c 8.2 (Berkeley) 4/16/94";
+*/
+#endif /* not lint */
+
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
@@ -51,7 +55,7 @@ __FBSDID("$FreeBSD$");
#include "find.h"
-int typecompare(const void *, const void *);
+static int typecompare(const void *, const void *);
/* NB: the following table must be sorted lexically. */
/* Options listed with C++ comments are in gnu find, but not our find */
@@ -190,7 +194,7 @@ lookup_option(const char *name)
sizeof(options)/sizeof(OPTION), sizeof(OPTION), typecompare));
}
-int
+static int
typecompare(const void *a, const void *b)
{
return (strcmp(((const OPTION *)a)->name, ((const OPTION *)b)->name));
diff --git a/usr.bin/lastcomm/lastcomm.1 b/usr.bin/lastcomm/lastcomm.1
index 1d714c5..8cb2039 100644
--- a/usr.bin/lastcomm/lastcomm.1
+++ b/usr.bin/lastcomm/lastcomm.1
@@ -168,7 +168,7 @@ while
will print details of each terminating command.
.Sh SEE ALSO
.Xr last 1 ,
-.Xr sigvec 2 ,
+.Xr sigaction 2 ,
.Xr acct 5 ,
.Xr core 5
.Sh HISTORY
diff --git a/usr.bin/rpcgen/rpc_cout.c b/usr.bin/rpcgen/rpc_cout.c
index 8bbd5d3..4c36ce6 100644
--- a/usr.bin/rpcgen/rpc_cout.c
+++ b/usr.bin/rpcgen/rpc_cout.c
@@ -489,6 +489,7 @@ inline_struct(definition *def, int flag)
}
size = 0;
i = 0;
+ free(sizestr);
sizestr = NULL;
print_stat(indent + 1, &dl->decl);
}
diff --git a/usr.sbin/mountd/mountd.c b/usr.sbin/mountd/mountd.c
index 340afd3..41a845f 100644
--- a/usr.sbin/mountd/mountd.c
+++ b/usr.sbin/mountd/mountd.c
@@ -2881,16 +2881,16 @@ check_options(dp)
syslog(LOG_ERR, "-mask and /masklen are mutually exclusive");
return (1);
}
- if ((opt_flags & OP_ALLDIRS) && dp->dp_left) {
- syslog(LOG_ERR, "-alldirs has multiple directories");
- return (1);
- }
if (v4root_phase > 0 &&
(opt_flags &
~(OP_SEC | OP_MASK | OP_NET | OP_HAVEMASK | OP_MASKLEN)) != 0) {
syslog(LOG_ERR,"only -sec,-net,-mask options allowed on V4:");
return (1);
}
+ if ((opt_flags & OP_ALLDIRS) && dp->dp_left) {
+ syslog(LOG_ERR, "-alldirs has multiple directories");
+ return (1);
+ }
return (0);
}
diff --git a/usr.sbin/pmcstat/pmcstat_log.c b/usr.sbin/pmcstat/pmcstat_log.c
index 6d8c57a..3458bd3 100644
--- a/usr.sbin/pmcstat/pmcstat_log.c
+++ b/usr.sbin/pmcstat/pmcstat_log.c
@@ -539,6 +539,8 @@ pmcstat_image_add_symbols(struct pmcstat_image *image, Elf *e,
return;
if (GELF_ST_TYPE(sym.st_info) != STT_FUNC)
continue;
+ if (sym.st_shndx == STN_UNDEF)
+ continue;
if (!firsttime && pmcstat_symbol_search(image, sym.st_value))
continue; /* We've seen this symbol already. */
OpenPOWER on IntegriCloud