svn commit: r186421 - in projects/releng_7_xen:
gnu/usr.bin/groff/tmac include include/arpa lib/libc
lib/libc/include/isc lib/libc/inet lib/libc/resolv
lib/libc/stdio lib/libthr lib/libthr/thread l...
Kip Macy
kmacy at FreeBSD.org
Mon Dec 22 21:00:07 PST 2008
Author: kmacy
Date: Tue Dec 23 05:00:00 2008
New Revision: 186421
URL: http://svn.freebsd.org/changeset/base/186421
Log:
IF_RELENG7 185850:186420
merge latest from 7 stable
Modified:
projects/releng_7_xen/gnu/usr.bin/groff/tmac/mdoc.local
projects/releng_7_xen/include/ (props changed)
projects/releng_7_xen/include/arpa/nameser.h
projects/releng_7_xen/include/resolv.h
projects/releng_7_xen/lib/libc/ (props changed)
projects/releng_7_xen/lib/libc/include/isc/eventlib.h (contents, props changed)
projects/releng_7_xen/lib/libc/inet/inet_net_pton.c
projects/releng_7_xen/lib/libc/resolv/res_debug.c
projects/releng_7_xen/lib/libc/resolv/res_mkquery.c
projects/releng_7_xen/lib/libc/resolv/res_query.c
projects/releng_7_xen/lib/libc/resolv/res_send.c
projects/releng_7_xen/lib/libc/stdio/fread.c
projects/releng_7_xen/lib/libthr/ (props changed)
projects/releng_7_xen/lib/libthr/thread/thr_rtld.c
projects/releng_7_xen/lib/libutil/kinfo_getfile.c
projects/releng_7_xen/lib/libutil/kinfo_getvmmap.c
projects/releng_7_xen/libexec/ftpd/extern.h
projects/releng_7_xen/libexec/ftpd/ftpcmd.y
projects/releng_7_xen/libexec/ftpd/ftpd.c
projects/releng_7_xen/release/doc/en_US.ISO8859-1/hardware/article.sgml
projects/releng_7_xen/share/man/man4/cxgb.4
projects/releng_7_xen/sys/ (props changed)
projects/releng_7_xen/sys/amd64/amd64/db_trace.c
projects/releng_7_xen/sys/compat/linprocfs/linprocfs.c
projects/releng_7_xen/sys/contrib/pf/ (props changed)
projects/releng_7_xen/sys/dev/bce/if_bce.c
projects/releng_7_xen/sys/dev/bge/if_bge.c
projects/releng_7_xen/sys/dev/cxgb/ (props changed)
projects/releng_7_xen/sys/dev/dc/if_dc.c
projects/releng_7_xen/sys/dev/dc/if_dcreg.h
projects/releng_7_xen/sys/dev/mfi/mfi.c
projects/releng_7_xen/sys/dev/mfi/mfi_pci.c
projects/releng_7_xen/sys/dev/vr/if_vr.c
projects/releng_7_xen/sys/fs/nullfs/null_vnops.c
projects/releng_7_xen/sys/fs/procfs/procfs_map.c
projects/releng_7_xen/sys/fs/unionfs/union.h
projects/releng_7_xen/sys/fs/unionfs/union_subr.c
projects/releng_7_xen/sys/fs/unionfs/union_vfsops.c
projects/releng_7_xen/sys/fs/unionfs/union_vnops.c
projects/releng_7_xen/sys/kern/kern_proc.c
projects/releng_7_xen/sys/kern/kern_sysctl.c
projects/releng_7_xen/sys/kern/uipc_domain.c
projects/releng_7_xen/sys/net/if.h
projects/releng_7_xen/sys/net/if_vlan.c
projects/releng_7_xen/sys/netinet/if_ether.c
projects/releng_7_xen/sys/netinet/in_pcb.h
projects/releng_7_xen/sys/netinet/tcp_syncache.c
projects/releng_7_xen/sys/netinet/tcp_var.h
projects/releng_7_xen/sys/nfsserver/nfs_serv.c
projects/releng_7_xen/sys/pc98/conf/GENERIC
projects/releng_7_xen/sys/ufs/ufs/ufs_quota.c
projects/releng_7_xen/usr.bin/ipcs/ (props changed)
projects/releng_7_xen/usr.bin/ipcs/ipcs.c
projects/releng_7_xen/usr.bin/procstat/procstat_files.c
projects/releng_7_xen/usr.bin/procstat/procstat_vm.c
projects/releng_7_xen/usr.bin/tar/ (props changed)
projects/releng_7_xen/usr.bin/tar/test/Makefile
projects/releng_7_xen/usr.bin/tar/util.c
projects/releng_7_xen/usr.sbin/fwcontrol/ (props changed)
projects/releng_7_xen/usr.sbin/fwcontrol/fwcontrol.8
projects/releng_7_xen/usr.sbin/fwcontrol/fwcontrol.c
projects/releng_7_xen/usr.sbin/fwcontrol/fwmpegts.c
Modified: projects/releng_7_xen/gnu/usr.bin/groff/tmac/mdoc.local
==============================================================================
--- projects/releng_7_xen/gnu/usr.bin/groff/tmac/mdoc.local Tue Dec 23 04:51:46 2008 (r186420)
+++ projects/releng_7_xen/gnu/usr.bin/groff/tmac/mdoc.local Tue Dec 23 05:00:00 2008 (r186421)
@@ -64,10 +64,12 @@
.ds doc-volume-as-arm arm
.
.\" Default .Os value
-.ds doc-default-operating-system FreeBSD\~7.0
+.ds doc-default-operating-system FreeBSD\~7.1
.
.\" FreeBSD releases not found in doc-common
.ds doc-operating-system-FreeBSD-6.3 6.3
+.ds doc-operating-system-FreeBSD-6.4 6.4
+.ds doc-operating-system-FreeBSD-7.1 7.1
.ds doc-operating-system-FreeBSD-8.0 8.0
.
.ec
Modified: projects/releng_7_xen/include/arpa/nameser.h
==============================================================================
--- projects/releng_7_xen/include/arpa/nameser.h Tue Dec 23 04:51:46 2008 (r186420)
+++ projects/releng_7_xen/include/arpa/nameser.h Tue Dec 23 05:00:00 2008 (r186421)
@@ -49,7 +49,7 @@
*/
/*
- * $Id: nameser.h,v 1.7.18.1 2005/04/27 05:00:50 sra Exp $
+ * $Id: nameser.h,v 1.7.18.2 2008/04/03 23:15:15 marka Exp $
* $FreeBSD$
*/
@@ -424,9 +424,10 @@ typedef enum __ns_cert_types {
#define NS_NXT_MAX 127
/*%
- * EDNS0 extended flags, host order.
+ * EDNS0 extended flags and option codes, host order.
*/
#define NS_OPT_DNSSEC_OK 0x8000U
+#define NS_OPT_NSID 3
/*%
* Inline versions of get/put short/long. Pointer is advanced.
Modified: projects/releng_7_xen/include/resolv.h
==============================================================================
--- projects/releng_7_xen/include/resolv.h Tue Dec 23 04:51:46 2008 (r186420)
+++ projects/releng_7_xen/include/resolv.h Tue Dec 23 05:00:00 2008 (r186421)
@@ -50,7 +50,7 @@
/*%
* @(#)resolv.h 8.1 (Berkeley) 6/2/93
- * $Id: resolv.h,v 1.19.18.3 2005/08/25 04:43:51 marka Exp $
+ * $Id: resolv.h,v 1.19.18.4 2008/04/03 23:15:15 marka Exp $
* $FreeBSD$
*/
@@ -245,6 +245,7 @@ union res_sockaddr_union {
#define RES_NOCHECKNAME 0x00008000 /*%< do not check names for sanity. */
#define RES_KEEPTSIG 0x00010000 /*%< do not strip TSIG records */
#define RES_BLAST 0x00020000 /*%< blast all recursive servers */
+#define RES_NSID 0x00040000 /*%< request name server ID */
#define RES_NOTLDQUERY 0x00100000 /*%< don't unqualified name as a tld */
#define RES_USE_DNSSEC 0x00200000 /*%< use DNSSEC using OK bit in OPT */
/* #define RES_DEBUG2 0x00400000 */ /* nslookup internal */
@@ -386,6 +387,7 @@ extern const struct res_sym __p_rcode_sy
#define sym_ntos __sym_ntos
#define sym_ston __sym_ston
#define res_nopt __res_nopt
+#define res_nopt_rdata __res_nopt_rdata
#define res_ndestroy __res_ndestroy
#define res_nametoclass __res_nametoclass
#define res_nametotype __res_nametotype
@@ -474,6 +476,8 @@ int res_findzonecut2(res_state, const c
union res_sockaddr_union *, int);
void res_nclose(res_state);
int res_nopt(res_state, int, u_char *, int, int);
+int res_nopt_rdata(res_state, int, u_char *, int, u_char *,
+ u_short, u_short, u_char *);
void res_send_setqhook(res_send_qhook);
void res_send_setrhook(res_send_rhook);
int __res_vinit(res_state, int);
Modified: projects/releng_7_xen/lib/libc/include/isc/eventlib.h
==============================================================================
--- projects/releng_7_xen/lib/libc/include/isc/eventlib.h Tue Dec 23 04:51:46 2008 (r186420)
+++ projects/releng_7_xen/lib/libc/include/isc/eventlib.h Tue Dec 23 05:00:00 2008 (r186421)
@@ -18,7 +18,7 @@
/* eventlib.h - exported interfaces for eventlib
* vix 09sep95 [initial]
*
- * $Id: eventlib.h,v 1.3.18.2 2005/07/28 07:38:07 marka Exp $
+ * $Id: eventlib.h,v 1.3.18.3 2008/01/23 02:12:01 marka Exp $
*/
#ifndef _EVENTLIB_H
@@ -29,6 +29,8 @@
#include <sys/time.h>
#include <stdio.h>
+#include <isc/platform.h>
+
#ifndef __P
# define __EVENTLIB_P_DEFINED
# ifdef __STDC__
Modified: projects/releng_7_xen/lib/libc/inet/inet_net_pton.c
==============================================================================
--- projects/releng_7_xen/lib/libc/inet/inet_net_pton.c Tue Dec 23 04:51:46 2008 (r186420)
+++ projects/releng_7_xen/lib/libc/inet/inet_net_pton.c Tue Dec 23 05:00:00 2008 (r186421)
@@ -16,7 +16,7 @@
*/
#if defined(LIBC_SCCS) && !defined(lint)
-static const char rcsid[] = "$Id: inet_net_pton.c,v 1.7.18.1 2005/04/27 05:00:53 sra Exp $";
+static const char rcsid[] = "$Id: inet_net_pton.c,v 1.7.18.2 2008/08/26 04:42:43 marka Exp $";
#endif
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
@@ -135,11 +135,11 @@ inet_net_pton_ipv4(const char *src, u_ch
assert(n >= 0 && n <= 9);
bits *= 10;
bits += n;
+ if (bits > 32)
+ goto enoent;
} while ((ch = *src++) != '\0' && isascii(ch) && isdigit(ch));
if (ch != '\0')
goto enoent;
- if (bits > 32)
- goto emsgsize;
}
/* Firey death and destruction unless we prefetched EOS. */
Modified: projects/releng_7_xen/lib/libc/resolv/res_debug.c
==============================================================================
--- projects/releng_7_xen/lib/libc/resolv/res_debug.c Tue Dec 23 04:51:46 2008 (r186420)
+++ projects/releng_7_xen/lib/libc/resolv/res_debug.c Tue Dec 23 05:00:00 2008 (r186421)
@@ -91,7 +91,7 @@
#if defined(LIBC_SCCS) && !defined(lint)
static const char sccsid[] = "@(#)res_debug.c 8.1 (Berkeley) 6/4/93";
-static const char rcsid[] = "$Id: res_debug.c,v 1.10.18.5 2005/07/28 07:38:11 marka Exp $";
+static const char rcsid[] = "$Id: res_debug.c,v 1.10.18.6 2008/04/03 23:15:15 marka Exp $";
#endif /* LIBC_SCCS and not lint */
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
@@ -187,10 +187,56 @@ do_section(const res_state statp,
p_type(ns_rr_type(rr)),
p_class(ns_rr_class(rr)));
else if (section == ns_s_ar && ns_rr_type(rr) == ns_t_opt) {
+ u_int16_t optcode, optlen, rdatalen = ns_rr_rdlen(rr);
u_int32_t ttl = ns_rr_ttl(rr);
+
fprintf(file,
"; EDNS: version: %u, udp=%u, flags=%04x\n",
(ttl>>16)&0xff, ns_rr_class(rr), ttl&0xffff);
+
+ while (rdatalen >= 4) {
+ const u_char *cp = ns_rr_rdata(rr);
+ int i;
+
+ GETSHORT(optcode, cp);
+ GETSHORT(optlen, cp);
+
+ if (optcode == NS_OPT_NSID) {
+ fputs("; NSID: ", file);
+ if (optlen == 0) {
+ fputs("; NSID\n", file);
+ } else {
+ fputs("; NSID: ", file);
+ for (i = 0; i < optlen; i++)
+ fprintf(file, "%02x ",
+ cp[i]);
+ fputs(" (",file);
+ for (i = 0; i < optlen; i++)
+ fprintf(file, "%c",
+ isprint(cp[i])?
+ cp[i] : '.');
+ fputs(")\n", file);
+ }
+ } else {
+ if (optlen == 0) {
+ fprintf(file, "; OPT=%u\n",
+ optcode);
+ } else {
+ fprintf(file, "; OPT=%u: ",
+ optcode);
+ for (i = 0; i < optlen; i++)
+ fprintf(file, "%02x ",
+ cp[i]);
+ fputs(" (",file);
+ for (i = 0; i < optlen; i++)
+ fprintf(file, "%c",
+ isprint(cp[i]) ?
+ cp[i] : '.');
+ fputs(")\n", file);
+ }
+ }
+ rdatalen -= 4 + optlen;
+ }
} else {
n = ns_sprintrr(handle, &rr, NULL, NULL,
buf, buflen);
@@ -202,7 +248,7 @@ do_section(const res_state statp,
buf = malloc(buflen += 1024);
if (buf == NULL) {
fprintf(file,
- ";; memory allocation failure\n");
+ ";; memory allocation failure\n");
return;
}
continue;
@@ -379,7 +425,7 @@ static const struct res_sym __p_default_
{ns_s_an, "ANSWER", (char *)0},
{ns_s_ns, "AUTHORITY", (char *)0},
{ns_s_ar, "ADDITIONAL", (char *)0},
- {0, (char *)0, (char *)0}
+ {0, (char *)0, (char *)0}
};
static const struct res_sym __p_update_section_syms[] = {
@@ -387,7 +433,7 @@ static const struct res_sym __p_update_s
{S_PREREQ, "PREREQUISITE", (char *)0},
{S_UPDATE, "UPDATE", (char *)0},
{S_ADDT, "ADDITIONAL", (char *)0},
- {0, (char *)0, (char *)0}
+ {0, (char *)0, (char *)0}
};
const struct res_sym __p_key_syms[] = {
@@ -615,6 +661,7 @@ p_option(u_long option) {
case RES_USE_INET6: return "inet6";
#ifdef RES_USE_EDNS0 /*%< KAME extension */
case RES_USE_EDNS0: return "edns0";
+ case RES_NSID: return "nsid";
#endif
#ifdef RES_USE_DNAME
case RES_USE_DNAME: return "dname";
Modified: projects/releng_7_xen/lib/libc/resolv/res_mkquery.c
==============================================================================
--- projects/releng_7_xen/lib/libc/resolv/res_mkquery.c Tue Dec 23 04:51:46 2008 (r186420)
+++ projects/releng_7_xen/lib/libc/resolv/res_mkquery.c Tue Dec 23 05:00:00 2008 (r186421)
@@ -66,7 +66,7 @@
#if defined(LIBC_SCCS) && !defined(lint)
static const char sccsid[] = "@(#)res_mkquery.c 8.1 (Berkeley) 6/4/93";
-static const char rcsid[] = "$Id: res_mkquery.c,v 1.5.18.1 2005/04/27 05:01:11 sra Exp $";
+static const char rcsid[] = "$Id: res_mkquery.c,v 1.5.18.2 2008/04/03 23:15:15 marka Exp $";
#endif /* LIBC_SCCS and not lint */
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
@@ -201,9 +201,6 @@ res_nmkquery(res_state statp,
#ifdef RES_USE_EDNS0
/* attach OPT pseudo-RR, as documented in RFC2671 (EDNS0). */
-#ifndef T_OPT
-#define T_OPT 41
-#endif
int
res_nopt(res_state statp,
@@ -228,15 +225,16 @@ res_nopt(res_state statp,
if ((ep - cp) < 1 + RRFIXEDSZ)
return (-1);
- *cp++ = 0; /*%< "." */
- ns_put16(T_OPT, cp); /*%< TYPE */
+ *cp++ = 0; /*%< "." */
+ ns_put16(ns_t_opt, cp); /*%< TYPE */
cp += INT16SZ;
if (anslen > 0xffff)
anslen = 0xffff; /* limit to 16bit value */
- ns_put16(anslen & 0xffff, cp); /*%< CLASS = UDP payload size */
+ ns_put16(anslen & 0xffff, cp); /*%< CLASS = UDP payload size */
cp += INT16SZ;
- *cp++ = NOERROR; /*%< extended RCODE */
- *cp++ = 0; /*%< EDNS version */
+ *cp++ = NOERROR; /*%< extended RCODE */
+ *cp++ = 0; /*%< EDNS version */
+
if (statp->options & RES_USE_DNSSEC) {
#ifdef DEBUG
if (statp->options & RES_DEBUG)
@@ -246,12 +244,60 @@ res_nopt(res_state statp,
}
ns_put16(flags, cp);
cp += INT16SZ;
- ns_put16(0, cp); /*%< RDLEN */
+
+ ns_put16(0U, cp); /*%< RDLEN */
cp += INT16SZ;
+
hp->arcount = htons(ntohs(hp->arcount) + 1);
return (cp - buf);
}
+
+/*
+ * Construct variable data (RDATA) block for OPT psuedo-RR, append it
+ * to the buffer, then update the RDLEN field (previously set to zero by
+ * res_nopt()) with the new RDATA length.
+ */
+int
+res_nopt_rdata(res_state statp,
+ int n0, /*%< current offset in buffer */
+ u_char *buf, /*%< buffer to put query */
+ int buflen, /*%< size of buffer */
+ u_char *rdata, /*%< ptr to start of opt rdata */
+ u_short code, /*%< OPTION-CODE */
+ u_short len, /*%< OPTION-LENGTH */
+ u_char *data) /*%< OPTION_DATA */
+{
+ register u_char *cp, *ep;
+
+#ifdef DEBUG
+ if ((statp->options & RES_DEBUG) != 0U)
+ printf(";; res_nopt_rdata()\n");
+#endif
+
+ cp = buf + n0;
+ ep = buf + buflen;
+
+ if ((ep - cp) < (4 + len))
+ return (-1);
+
+ if (rdata < (buf + 2) || rdata >= ep)
+ return (-1);
+
+ ns_put16(code, cp);
+ cp += INT16SZ;
+
+ ns_put16(len, cp);
+ cp += INT16SZ;
+
+ memcpy(cp, data, len);
+ cp += len;
+
+ len = cp - rdata;
+ ns_put16(len, rdata - 2); /* Update RDLEN field */
+
+ return (cp - buf);
+}
#endif
/*! \file */
Modified: projects/releng_7_xen/lib/libc/resolv/res_query.c
==============================================================================
--- projects/releng_7_xen/lib/libc/resolv/res_query.c Tue Dec 23 04:51:46 2008 (r186420)
+++ projects/releng_7_xen/lib/libc/resolv/res_query.c Tue Dec 23 05:00:00 2008 (r186421)
@@ -66,7 +66,7 @@
#if defined(LIBC_SCCS) && !defined(lint)
static const char sccsid[] = "@(#)res_query.c 8.1 (Berkeley) 6/4/93";
-static const char rcsid[] = "$Id: res_query.c,v 1.7.18.1 2005/04/27 05:01:11 sra Exp $";
+static const char rcsid[] = "$Id: res_query.c,v 1.7.18.2 2008/04/03 23:15:15 marka Exp $";
#endif /* LIBC_SCCS and not lint */
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
@@ -115,8 +115,9 @@ res_nquery(res_state statp,
{
u_char buf[MAXPACKET];
HEADER *hp = (HEADER *) answer;
- int n;
u_int oflags;
+ u_char *rdata;
+ int n;
oflags = statp->_flags;
@@ -131,8 +132,14 @@ again:
buf, sizeof(buf));
#ifdef RES_USE_EDNS0
if (n > 0 && (statp->_flags & RES_F_EDNS0ERR) == 0 &&
- (statp->options & (RES_USE_EDNS0|RES_USE_DNSSEC)) != 0U)
+ (statp->options & (RES_USE_EDNS0|RES_USE_DNSSEC|RES_NSID))) {
n = res_nopt(statp, n, buf, sizeof(buf), anslen);
+ rdata = &buf[n];
+ if (n > 0 && (statp->options & RES_NSID) != 0U) {
+ n = res_nopt_rdata(statp, n, buf, sizeof(buf), rdata,
+ NS_OPT_NSID, 0, NULL);
+ }
+ }
#endif
if (n <= 0) {
#ifdef DEBUG
@@ -142,6 +149,7 @@ again:
RES_SET_H_ERRNO(statp, NO_RECOVERY);
return (n);
}
+
n = res_nsend(statp, buf, n, answer, anslen);
if (n < 0) {
#ifdef RES_USE_EDNS0
Modified: projects/releng_7_xen/lib/libc/resolv/res_send.c
==============================================================================
--- projects/releng_7_xen/lib/libc/resolv/res_send.c Tue Dec 23 04:51:46 2008 (r186420)
+++ projects/releng_7_xen/lib/libc/resolv/res_send.c Tue Dec 23 05:00:00 2008 (r186421)
@@ -66,7 +66,7 @@
#if defined(LIBC_SCCS) && !defined(lint)
static const char sccsid[] = "@(#)res_send.c 8.1 (Berkeley) 6/4/93";
-static const char rcsid[] = "$Id: res_send.c,v 1.9.18.8 2006/10/16 23:00:58 marka Exp $";
+static const char rcsid[] = "$Id: res_send.c,v 1.9.18.10 2008/01/27 02:06:26 marka Exp $";
#endif /* LIBC_SCCS and not lint */
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
@@ -302,7 +302,7 @@ int
res_nsend(res_state statp,
const u_char *buf, int buflen, u_char *ans, int anssiz)
{
- int gotsomewhere, terrno, try, v_circuit, resplen, ns, n;
+ int gotsomewhere, terrno, tries, v_circuit, resplen, ns, n;
#ifdef USE_KQUEUE
int kq;
#endif
@@ -420,7 +420,7 @@ res_nsend(res_state statp,
/*
* Send request, RETRY times, or until successful.
*/
- for (try = 0; try < statp->retry; try++) {
+ for (tries = 0; tries < statp->retry; tries++) {
for (ns = 0; ns < statp->nscount; ns++) {
struct sockaddr *nsap;
int nsaplen;
@@ -471,7 +471,7 @@ res_nsend(res_state statp,
if (v_circuit) {
/* Use VC; at most one attempt per server. */
- try = statp->retry;
+ tries = statp->retry;
n = send_vc(statp, buf, buflen, ans, anssiz, &terrno,
ns);
if (n < 0)
@@ -486,7 +486,7 @@ res_nsend(res_state statp,
kq,
#endif
buf, buflen, ans, anssiz, &terrno,
- ns, try, &v_circuit, &gotsomewhere);
+ ns, tries, &v_circuit, &gotsomewhere);
if (n < 0)
goto fail;
if (n == 0)
@@ -632,6 +632,9 @@ send_vc(res_state statp,
u_short len;
u_char *cp;
void *tmp;
+#ifdef SO_NOSIGPIPE
+ int on = 1;
+#endif
nsap = get_nsaddr(statp, ns);
nsaplen = get_salen(nsap);
@@ -679,6 +682,17 @@ send_vc(res_state statp,
return (-1);
}
}
+#ifdef SO_NOSIGPIPE
+ /*
+ * Disable generation of SIGPIPE when writing to a closed
+ * socket. Write should return -1 and set errno to EPIPE
+ * instead.
+ *
+ * Push on even if setsockopt(SO_NOSIGPIPE) fails.
+ */
+ (void)_setsockopt(statp->_vcsock, SOL_SOCKET, SO_NOSIGPIPE, &on,
+ sizeof(on));
+#endif
errno = 0;
if (_connect(statp->_vcsock, nsap, nsaplen) < 0) {
*terrno = errno;
@@ -811,7 +825,7 @@ send_dg(res_state statp,
int kq,
#endif
const u_char *buf, int buflen, u_char *ans,
- int anssiz, int *terrno, int ns, int try, int *v_circuit,
+ int anssiz, int *terrno, int ns, int tries, int *v_circuit,
int *gotsomewhere)
{
const HEADER *hp = (const HEADER *) buf;
@@ -915,7 +929,7 @@ send_dg(res_state statp,
/*
* Wait for reply.
*/
- seconds = (statp->retrans << try);
+ seconds = (statp->retrans << tries);
if (ns > 0)
seconds /= statp->nscount;
if (seconds <= 0)
Modified: projects/releng_7_xen/lib/libc/stdio/fread.c
==============================================================================
--- projects/releng_7_xen/lib/libc/stdio/fread.c Tue Dec 23 04:51:46 2008 (r186420)
+++ projects/releng_7_xen/lib/libc/stdio/fread.c Tue Dec 23 05:00:00 2008 (r186421)
@@ -50,7 +50,7 @@ __FBSDID("$FreeBSD$");
size_t
fread(void * __restrict buf, size_t size, size_t count, FILE * __restrict fp)
{
- int ret;
+ size_t ret;
FLOCKFILE(fp);
ret = __fread(buf, size, count, fp);
Modified: projects/releng_7_xen/lib/libthr/thread/thr_rtld.c
==============================================================================
--- projects/releng_7_xen/lib/libthr/thread/thr_rtld.c Tue Dec 23 04:51:46 2008 (r186420)
+++ projects/releng_7_xen/lib/libthr/thread/thr_rtld.c Tue Dec 23 05:00:00 2008 (r186421)
@@ -214,7 +214,7 @@ _thr_rtld_init(void)
{
struct RtldLockInfo li;
struct pthread *curthread;
- long dummy;
+ long dummy = -1;
curthread = _get_curthread();
Modified: projects/releng_7_xen/lib/libutil/kinfo_getfile.c
==============================================================================
--- projects/releng_7_xen/lib/libutil/kinfo_getfile.c Tue Dec 23 04:51:46 2008 (r186420)
+++ projects/releng_7_xen/lib/libutil/kinfo_getfile.c Tue Dec 23 05:00:00 2008 (r186421)
@@ -19,6 +19,7 @@ kinfo_getfile(pid_t pid, int *cntp)
char *buf, *bp, *eb;
struct kinfo_file *kif, *kp, *kf;
+ *cntp = 0;
len = 0;
mib[0] = CTL_KERN;
mib[1] = KERN_PROC;
@@ -27,15 +28,15 @@ kinfo_getfile(pid_t pid, int *cntp)
error = sysctl(mib, 4, NULL, &len, NULL, 0);
if (error)
- return (0);
+ return (NULL);
len = len * 4 / 3;
buf = malloc(len);
if (buf == NULL)
- return (0);
+ return (NULL);
error = sysctl(mib, 4, buf, &len, NULL, 0);
if (error) {
free(buf);
- return (0);
+ return (NULL);
}
/* Pass 1: count items */
cnt = 0;
@@ -50,7 +51,7 @@ kinfo_getfile(pid_t pid, int *cntp)
kif = calloc(cnt, sizeof(*kif));
if (kif == NULL) {
free(buf);
- return (0);
+ return (NULL);
}
bp = buf;
eb = buf + len;
Modified: projects/releng_7_xen/lib/libutil/kinfo_getvmmap.c
==============================================================================
--- projects/releng_7_xen/lib/libutil/kinfo_getvmmap.c Tue Dec 23 04:51:46 2008 (r186420)
+++ projects/releng_7_xen/lib/libutil/kinfo_getvmmap.c Tue Dec 23 05:00:00 2008 (r186421)
@@ -19,6 +19,7 @@ kinfo_getvmmap(pid_t pid, int *cntp)
char *buf, *bp, *eb;
struct kinfo_vmentry *kiv, *kp, *kv;
+ *cntp = 0;
len = 0;
mib[0] = CTL_KERN;
mib[1] = KERN_PROC;
@@ -27,15 +28,15 @@ kinfo_getvmmap(pid_t pid, int *cntp)
error = sysctl(mib, 4, NULL, &len, NULL, 0);
if (error)
- return (0);
+ return (NULL);
len = len * 4 / 3;
buf = malloc(len);
if (buf == NULL)
- return (0);
+ return (NULL);
error = sysctl(mib, 4, buf, &len, NULL, 0);
if (error) {
free(buf);
- return (0);
+ return (NULL);
}
/* Pass 1: count items */
cnt = 0;
@@ -50,7 +51,7 @@ kinfo_getvmmap(pid_t pid, int *cntp)
kiv = calloc(cnt, sizeof(*kiv));
if (kiv == NULL) {
free(buf);
- return (0);
+ return (NULL);
}
bp = buf;
eb = buf + len;
Modified: projects/releng_7_xen/libexec/ftpd/extern.h
==============================================================================
--- projects/releng_7_xen/libexec/ftpd/extern.h Tue Dec 23 04:51:46 2008 (r186420)
+++ projects/releng_7_xen/libexec/ftpd/extern.h Tue Dec 23 05:00:00 2008 (r186421)
@@ -46,7 +46,7 @@ void fatalerror(char *);
void ftpd_logwtmp(char *, char *, struct sockaddr *addr);
int ftpd_pclose(FILE *);
FILE *ftpd_popen(char *, char *);
-char *getline(char *, int, FILE *);
+int getline(char *, int, FILE *);
void lreply(int, const char *, ...) __printflike(2, 3);
void makedir(char *);
void nack(char *);
Modified: projects/releng_7_xen/libexec/ftpd/ftpcmd.y
==============================================================================
--- projects/releng_7_xen/libexec/ftpd/ftpcmd.y Tue Dec 23 04:51:46 2008 (r186420)
+++ projects/releng_7_xen/libexec/ftpd/ftpcmd.y Tue Dec 23 05:00:00 2008 (r186421)
@@ -1191,7 +1191,7 @@ lookup(struct tab *p, char *cmd)
/*
* getline - a hacked up version of fgets to ignore TELNET escape codes.
*/
-char *
+int
getline(char *s, int n, FILE *iop)
{
int c;
@@ -1207,7 +1207,7 @@ getline(char *s, int n, FILE *iop)
if (ftpdebug)
syslog(LOG_DEBUG, "command: %s", s);
tmpline[0] = '\0';
- return(s);
+ return(0);
}
if (c == 0)
tmpline[0] = '\0';
@@ -1244,13 +1244,24 @@ getline(char *s, int n, FILE *iop)
}
}
*cs++ = c;
- if (--n <= 0 || c == '\n')
+ if (--n <= 0) {
+ /*
+ * If command doesn't fit into buffer, discard the
+ * rest of the command and indicate truncation.
+ * This prevents the command to be split up into
+ * multiple commands.
+ */
+ while (c != '\n' && (c = getc(iop)) != EOF)
+ ;
+ return (-2);
+ }
+ if (c == '\n')
break;
}
got_eof:
sigprocmask(SIG_SETMASK, &osset, NULL);
if (c == EOF && cs == s)
- return (NULL);
+ return (-1);
*cs++ = '\0';
if (ftpdebug) {
if (!guest && strncasecmp("pass ", s, 5) == 0) {
@@ -1270,7 +1281,7 @@ got_eof:
syslog(LOG_DEBUG, "command: %.*s", len, s);
}
}
- return (s);
+ return (0);
}
static void
@@ -1300,9 +1311,14 @@ yylex(void)
case CMD:
(void) signal(SIGALRM, toolong);
(void) alarm(timeout);
- if (getline(cbuf, sizeof(cbuf)-1, stdin) == NULL) {
+ n = getline(cbuf, sizeof(cbuf)-1, stdin);
+ if (n == -1) {
reply(221, "You could at least say goodbye.");
dologout(0);
+ } else if (n == -2) {
+ reply(500, "Command too long.");
+ (void) alarm(0);
+ continue;
}
(void) alarm(0);
#ifdef SETPROCTITLE
Modified: projects/releng_7_xen/libexec/ftpd/ftpd.c
==============================================================================
--- projects/releng_7_xen/libexec/ftpd/ftpd.c Tue Dec 23 04:51:46 2008 (r186420)
+++ projects/releng_7_xen/libexec/ftpd/ftpd.c Tue Dec 23 05:00:00 2008 (r186421)
@@ -2794,15 +2794,20 @@ static int
myoob(void)
{
char *cp;
+ int ret;
if (!transflag) {
syslog(LOG_ERR, "Internal: myoob() while no transfer");
return (0);
}
cp = tmpline;
- if (getline(cp, 7, stdin) == NULL) {
+ ret = getline(cp, 7, stdin);
+ if (ret == -1) {
reply(221, "You could at least say goodbye.");
dologout(0);
+ } else if (ret == -2) {
+ /* Ignore truncated command. */
+ return (0);
}
upper(cp);
if (strcmp(cp, "ABOR\r\n") == 0) {
Modified: projects/releng_7_xen/release/doc/en_US.ISO8859-1/hardware/article.sgml
==============================================================================
--- projects/releng_7_xen/release/doc/en_US.ISO8859-1/hardware/article.sgml Tue Dec 23 04:51:46 2008 (r186420)
+++ projects/releng_7_xen/release/doc/en_US.ISO8859-1/hardware/article.sgml Tue Dec 23 05:00:00 2008 (r186421)
@@ -92,21 +92,40 @@
</listitem>
<listitem>
- <para>&intel; 64-bit &xeon; (<quote>Nocona</quote>).
- This processor is fabricated on 90nm process technology, and operates
- with 2.80 to 3.60 GHz (FSB 800MHz) and &intel; E7520/E7525/E7320 chipsets.</para>
+ <para>All multi-core &intel; &xeon; processors except
+ Sossaman have EM64T support.</para>
</listitem>
<listitem>
- <para>&intel; &pentium; 4 Processor supporting &intel; EM64T
- (<quote>Prescott</quote>).
- This is fabricated on 90nm process technology,
- uses FC-LGA775 package, and operates with 3.20F/3.40F/3.60F GHz
- and &intel; 925X Express chipsets.
- The corresponding S-Spec numbers are SL7L9, SL7L8, SL7LA, SL7NZ, SL7PZ,
- and SL7PX. Note that processors marked as 5xx numbers do not support
- EM64T.</para>
+ <para>The single-core &intel; &xeon;
+ processors <quote>Nocona</quote>, <quote>Irwindale</quote>,
+ <quote>Potomac</quote>, and <quote>Cranford</quote> have
+ EM64T support.</para>
</listitem>
+
+ <listitem>
+ <para>All &intel; Core 2 (not Core Duo) and later
+ processors</para>
+ </listitem>
+
+ <listitem>
+ <para>All &intel; &pentium; D processors</para>
+ </listitem>
+
+ <listitem>
+ <para>&intel; &pentium; 4s and Celeron Ds using
+ the <quote>Cedar Mill</quote> core have EM64T
+ support.</para>
+ </listitem>
+
+ <listitem>
+ <para>Some &intel; &pentium; 4s and Celeron Ds using
+ the <quote>Prescott</quote> core have EM64T support. See
+ the <ulink url="http://processorfinder.intel.com">Intel
+ Processor Spec Finder</ulink> for the definitive answer about
+ EM64T support in Intel processors.</para>
+ </listitem>
+
</itemizedlist>
<para>&intel; EM64T is an extended version of IA-32 (x86) and
@@ -115,7 +134,7 @@
<quote>64-bit extension technology</quote> or <quote>IA-32e</quote>.</para>
<para>The largest tested
- memory configuration to date is 8GB. SMP support has been
+ memory configuration to date is 32GB. SMP support has been
recently completed and is reasonably robust.</para>
<para>In many respects, &os;/&arch.amd64; is similar to &os;/&arch.i386;, in
Modified: projects/releng_7_xen/share/man/man4/cxgb.4
==============================================================================
--- projects/releng_7_xen/share/man/man4/cxgb.4 Tue Dec 23 04:51:46 2008 (r186420)
+++ projects/releng_7_xen/share/man/man4/cxgb.4 Tue Dec 23 05:00:00 2008 (r186421)
@@ -1,4 +1,4 @@
-.\" Copyright (c) 2007, Chelsio Inc
+.\" Copyright (c) 2007-2008, Chelsio Inc
.\" All rights reserved.
.\"
.\" Redistribution and use in source and binary forms, with or without
@@ -56,7 +56,8 @@ if_cxgb_load="YES"
The
.Nm
driver supports Transmit/Receive checksum offload,
-Jumbo Frames as well as TCP segmentation offload (TSO).
+Jumbo Frames, TCP segmentation offload (TSO), Large Receive Offload (LRO),
+VLAN hardware insertion / extraction, and VLAN checksum offload.
For further hardware information, see
.Pa http://www.chelsio.com/ .
.Pp
@@ -76,7 +77,7 @@ For more information on configuring this
.Sh HARDWARE
The
.Nm
-driver supports 10 Gigabit Ethernet adapters based on the T3 and T3B chipset:
+driver supports 10 Gigabit and 1 Gigabit Ethernet adapters based on the T3 and T3B chipset:
.Pp
.Bl -bullet -compact
.It
@@ -111,7 +112,7 @@ go to the Chelsio support website at:
If an issue is identified with the released source code on the supported kernel
with a supported adapter, email the specific information related to the
issue to
-.Aq help at chelsio.com .
+.Aq support at chelsio.com .
.Sh SEE ALSO
.Xr altq 4 ,
.Xr arp 4 ,
Modified: projects/releng_7_xen/sys/amd64/amd64/db_trace.c
==============================================================================
--- projects/releng_7_xen/sys/amd64/amd64/db_trace.c Tue Dec 23 04:51:46 2008 (r186420)
+++ projects/releng_7_xen/sys/amd64/amd64/db_trace.c Tue Dec 23 05:00:00 2008 (r186421)
@@ -27,6 +27,8 @@
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
+#include "opt_compat.h"
+
#include <sys/param.h>
#include <sys/systm.h>
#include <sys/kdb.h>
@@ -318,6 +320,10 @@ db_nextframe(struct amd64_frame **fp, db
frame_type = INTERRUPT;
else if (strcmp(name, "Xfast_syscall") == 0)
frame_type = SYSCALL;
+#ifdef COMPAT_IA32
+ else if (strcmp(name, "Xint0x80_syscall") == 0)
+ frame_type = SYSCALL;
+#endif
/* XXX: These are interrupts with trap frames. */
else if (strcmp(name, "Xtimerint") == 0 ||
strcmp(name, "Xcpustop") == 0 ||
Modified: projects/releng_7_xen/sys/compat/linprocfs/linprocfs.c
==============================================================================
--- projects/releng_7_xen/sys/compat/linprocfs/linprocfs.c Tue Dec 23 04:51:46 2008 (r186420)
+++ projects/releng_7_xen/sys/compat/linprocfs/linprocfs.c Tue Dec 23 05:00:00 2008 (r186421)
@@ -74,6 +74,7 @@ __FBSDID("$FreeBSD$");
#include <net/if.h>
#include <vm/vm.h>
+#include <vm/vm_extern.h>
#include <vm/pmap.h>
#include <vm/vm_map.h>
#include <vm/vm_param.h>
@@ -269,8 +270,7 @@ linprocfs_docpuinfo(PFS_FILL_ARGS)
/* XXX per-cpu vendor / class / model / id? */
}
- sbuf_cat(sb,
- "flags\t\t:");
+ sbuf_cat(sb, "flags\t\t:");
if (!strcmp(cpu_vendor, "AuthenticAMD") && (class < 6)) {
flags[16] = "fcmov";
@@ -869,11 +869,14 @@ linprocfs_doprocenviron(PFS_FILL_ARGS)
static int
linprocfs_doprocmaps(PFS_FILL_ARGS)
{
- vm_map_t map = &p->p_vmspace->vm_map;
- vm_map_entry_t entry;
+ struct vmspace *vm;
+ vm_map_t map;
+ vm_map_entry_t entry, tmp_entry;
vm_object_t obj, tobj, lobj;
- vm_offset_t saved_end;
+ vm_offset_t e_start, e_end;
vm_ooffset_t off = 0;
+ vm_prot_t e_prot;
+ unsigned int last_timestamp;
char *name = "", *freename = NULL;
ino_t ino;
int ref_count, shadow_count, flags;
@@ -892,6 +895,10 @@ linprocfs_doprocmaps(PFS_FILL_ARGS)
return (EOPNOTSUPP);
error = 0;
+ vm = vmspace_acquire_ref(p);
+ if (vm == NULL)
+ return (ESRCH);
+ map = &vm->vm_map;
vm_map_lock_read(map);
for (entry = map->header.next; entry != &map->header;
entry = entry->next) {
@@ -899,7 +906,9 @@ linprocfs_doprocmaps(PFS_FILL_ARGS)
freename = NULL;
if (entry->eflags & MAP_ENTRY_IS_SUB_MAP)
continue;
- saved_end = entry->end;
+ e_prot = entry->protection;
+ e_start = entry->start;
+ e_end = entry->end;
obj = entry->object.vm_object;
for (lobj = tobj = obj; tobj; tobj = tobj->backing_object) {
VM_OBJECT_LOCK(tobj);
@@ -907,6 +916,8 @@ linprocfs_doprocmaps(PFS_FILL_ARGS)
VM_OBJECT_UNLOCK(lobj);
lobj = tobj;
}
+ last_timestamp = map->timestamp;
+ vm_map_unlock_read(map);
ino = 0;
if (lobj) {
off = IDX_TO_OFF(lobj->size);
@@ -944,10 +955,10 @@ linprocfs_doprocmaps(PFS_FILL_ARGS)
*/
error = sbuf_printf(sb,
"%08lx-%08lx %s%s%s%s %08lx %02x:%02x %lu%s%s\n",
- (u_long)entry->start, (u_long)entry->end,
- (entry->protection & VM_PROT_READ)?"r":"-",
- (entry->protection & VM_PROT_WRITE)?"w":"-",
- (entry->protection & VM_PROT_EXECUTE)?"x":"-",
+ (u_long)e_start, (u_long)e_end,
+ (e_prot & VM_PROT_READ)?"r":"-",
+ (e_prot & VM_PROT_WRITE)?"w":"-",
+ (e_prot & VM_PROT_EXECUTE)?"x":"-",
"p",
(u_long)off,
0,
@@ -958,12 +969,23 @@ linprocfs_doprocmaps(PFS_FILL_ARGS)
);
if (freename)
free(freename, M_TEMP);
+ vm_map_lock_read(map);
if (error == -1) {
error = 0;
break;
}
+ if (last_timestamp + 1 != map->timestamp) {
+ /*
+ * Look again for the entry because the map was
+ * modified while it was unlocked. Specifically,
+ * the entry may have been clipped, merged, or deleted.
+ */
+ vm_map_lookup_entry(map, e_end - 1, &tmp_entry);
+ entry = tmp_entry;
+ }
}
vm_map_unlock_read(map);
+ vmspace_free(vm);
return (error);
}
Modified: projects/releng_7_xen/sys/dev/bce/if_bce.c
==============================================================================
--- projects/releng_7_xen/sys/dev/bce/if_bce.c Tue Dec 23 04:51:46 2008 (r186420)
+++ projects/releng_7_xen/sys/dev/bce/if_bce.c Tue Dec 23 05:00:00 2008 (r186421)
@@ -5114,7 +5114,7 @@ bce_free_tx_chain(struct bce_softc *sc)
/* Unmap, unload, and free any mbufs still in the TX mbuf chain. */
for (i = 0; i < TOTAL_TX_BD; i++) {
if (sc->tx_mbuf_ptr[i] != NULL) {
- if (sc->tx_mbuf_map != NULL)
+ if (sc->tx_mbuf_map[i] != NULL)
bus_dmamap_sync(sc->tx_mbuf_tag, sc->tx_mbuf_map[i],
BUS_DMASYNC_POSTWRITE);
m_freem(sc->tx_mbuf_ptr[i]);
@@ -7408,7 +7408,6 @@ bce_stats_update(struct bce_softc *sc)
(u_long) sc->stat_IfInMBUFDiscards +
(u_long) sc->stat_Dot3StatsAlignmentErrors +
(u_long) sc->stat_Dot3StatsFCSErrors +
- (u_long) sc->stat_IfInFramesL2FilterDiscards +
(u_long) sc->stat_IfInRuleCheckerDiscards +
(u_long) sc->stat_IfInFTQDiscards +
(u_long) sc->com_no_buffers;
Modified: projects/releng_7_xen/sys/dev/bge/if_bge.c
==============================================================================
--- projects/releng_7_xen/sys/dev/bge/if_bge.c Tue Dec 23 04:51:46 2008 (r186420)
+++ projects/releng_7_xen/sys/dev/bge/if_bge.c Tue Dec 23 05:00:00 2008 (r186421)
@@ -1370,6 +1370,16 @@ bge_chipinit(struct bge_softc *sc)
BGE_MODECTL_TX_NO_PHDR_CSUM);
/*
+ * BCM5701 B5 have a bug causing data corruption when using
+ * 64-bit DMA reads, which can be terminated early and then
+ * completed later as 32-bit accesses, in combination with
+ * certain bridges.
+ */
+ if (sc->bge_asicrev == BGE_ASICREV_BCM5701 &&
+ sc->bge_chipid == BGE_CHIPID_BCM5701_B5)
+ BGE_SETBIT(sc, BGE_MODE_CTL, BGE_MODECTL_FORCE_PCI32);
+
+ /*
* Tell the firmware the driver is running
*/
if (sc->bge_asf_mode & ASF_STACKUP)
@@ -2465,26 +2475,21 @@ bge_attach(device_t dev)
*/
if (reg != 0)
sc->bge_flags |= BGE_FLAG_PCIE;
- } else if (pci_find_extcap(dev, PCIY_PCIX, ®) == 0) {
- if (reg != 0)
- sc->bge_flags |= BGE_FLAG_PCIX;
- }
-
#else
if (BGE_IS_5705_PLUS(sc)) {
reg = pci_read_config(dev, BGE_PCIE_CAPID_REG, 4);
if ((reg & 0xFF) == BGE_PCIE_CAPID)
sc->bge_flags |= BGE_FLAG_PCIE;
+#endif
} else {
/*
* Check if the device is in PCI-X Mode.
* (This bit is not valid on PCI Express controllers.)
*/
- if ((pci_read_config(sc->bge_dev, BGE_PCI_PCISTATE, 4) &
+ if ((pci_read_config(dev, BGE_PCI_PCISTATE, 4) &
BGE_PCISTATE_PCI_BUSMODE) == 0)
sc->bge_flags |= BGE_FLAG_PCIX;
}
-#endif
#if __FreeBSD_version > 602105
{
Modified: projects/releng_7_xen/sys/dev/dc/if_dc.c
==============================================================================
--- projects/releng_7_xen/sys/dev/dc/if_dc.c Tue Dec 23 04:51:46 2008 (r186420)
+++ projects/releng_7_xen/sys/dev/dc/if_dc.c Tue Dec 23 05:00:00 2008 (r186421)
@@ -607,15 +607,22 @@ dc_read_eeprom(struct dc_softc *sc, cadd
static void
dc_mii_writebit(struct dc_softc *sc, int bit)
{
+ uint32_t reg;
- if (bit)
- CSR_WRITE_4(sc, DC_SIO,
- DC_SIO_ROMCTL_WRITE | DC_SIO_MII_DATAOUT);
- else
- CSR_WRITE_4(sc, DC_SIO, DC_SIO_ROMCTL_WRITE);
-
- DC_SETBIT(sc, DC_SIO, DC_SIO_MII_CLK);
- DC_CLRBIT(sc, DC_SIO, DC_SIO_MII_CLK);
+ reg = DC_SIO_ROMCTL_WRITE | (bit != 0 ? DC_SIO_MII_DATAOUT : 0);
+ CSR_WRITE_4(sc, DC_SIO, reg);
+ CSR_BARRIER_4(sc, DC_SIO,
+ BUS_SPACE_BARRIER_READ | BUS_SPACE_BARRIER_WRITE);
+ DELAY(1);
+
+ CSR_WRITE_4(sc, DC_SIO, reg | DC_SIO_MII_CLK);
+ CSR_BARRIER_4(sc, DC_SIO,
+ BUS_SPACE_BARRIER_READ | BUS_SPACE_BARRIER_WRITE);
+ DELAY(1);
+ CSR_WRITE_4(sc, DC_SIO, reg);
+ CSR_BARRIER_4(sc, DC_SIO,
+ BUS_SPACE_BARRIER_READ | BUS_SPACE_BARRIER_WRITE);
+ DELAY(1);
}
*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***
More information about the svn-src-projects
mailing list