svn commit: r221106 - in projects/altix/sys: amd64/amd64 amd64/conf
arm/conf cam cam/ata conf dev/usb/controller dev/usb/net
fs/nfsclient geom geom/concat geom/journal geom/mirror
geom/raid3 geom/s...
Marcel Moolenaar
marcel at FreeBSD.org
Wed Apr 27 02:12:02 UTC 2011
Author: marcel
Date: Wed Apr 27 02:12:01 2011
New Revision: 221106
URL: http://svn.freebsd.org/changeset/base/221106
Log:
Merge svn+ssh://svn.freebsd.org/base/head@221105
Added:
projects/altix/sys/sys/_callout.h
- copied unchanged from r221105, head/sys/sys/_callout.h
Modified:
projects/altix/sys/amd64/amd64/minidump_machdep.c
projects/altix/sys/amd64/conf/GENERIC
projects/altix/sys/arm/conf/CRB
projects/altix/sys/arm/conf/EP80219
projects/altix/sys/arm/conf/IQ31244
projects/altix/sys/cam/ata/ata_da.c
projects/altix/sys/cam/cam_xpt.c
projects/altix/sys/cam/cam_xpt.h
projects/altix/sys/conf/NOTES
projects/altix/sys/dev/usb/controller/ehci.c
projects/altix/sys/dev/usb/net/if_cdcereg.h
projects/altix/sys/fs/nfsclient/nfs_clvfsops.c
projects/altix/sys/geom/concat/g_concat.c
projects/altix/sys/geom/geom.h
projects/altix/sys/geom/geom_dev.c
projects/altix/sys/geom/geom_subr.c
projects/altix/sys/geom/journal/g_journal.c
projects/altix/sys/geom/mirror/g_mirror.c
projects/altix/sys/geom/raid3/g_raid3.c
projects/altix/sys/geom/shsec/g_shsec.c
projects/altix/sys/geom/stripe/g_stripe.c
projects/altix/sys/geom/virstor/g_virstor.c
projects/altix/sys/i386/conf/GENERIC
projects/altix/sys/i386/conf/XBOX
projects/altix/sys/kern/kern_intr.c
projects/altix/sys/kern/sched_4bsd.c
projects/altix/sys/kern/subr_taskqueue.c
projects/altix/sys/mips/conf/OCTEON1
projects/altix/sys/mips/conf/std.SWARM
projects/altix/sys/modules/cam/Makefile
projects/altix/sys/nfsclient/nfs_vfsops.c
projects/altix/sys/ofed/include/linux/file.h
projects/altix/sys/ofed/include/linux/workqueue.h
projects/altix/sys/pc98/conf/GENERIC
projects/altix/sys/sys/callout.h
projects/altix/sys/sys/taskqueue.h
projects/altix/sys/vm/swap_pager.c
projects/altix/sys/x86/cpufreq/powernow.c
Directory Properties:
projects/altix/lib/libstand/ (props changed)
projects/altix/sys/ (props changed)
projects/altix/sys/amd64/include/xen/ (props changed)
projects/altix/sys/boot/i386/efi/ (props changed)
projects/altix/sys/boot/ia64/efi/ (props changed)
projects/altix/sys/boot/ia64/ski/ (props changed)
projects/altix/sys/boot/powerpc/boot1.chrp/ (props changed)
projects/altix/sys/boot/powerpc/ofw/ (props changed)
projects/altix/sys/cddl/contrib/opensolaris/ (props changed)
projects/altix/sys/conf/ (props changed)
projects/altix/sys/contrib/dev/acpica/ (props changed)
projects/altix/sys/contrib/octeon-sdk/ (props changed)
projects/altix/sys/contrib/pf/ (props changed)
projects/altix/sys/contrib/x86emu/ (props changed)
projects/altix/sys/kern/subr_busdma.c (props changed)
Modified: projects/altix/sys/amd64/amd64/minidump_machdep.c
==============================================================================
--- projects/altix/sys/amd64/amd64/minidump_machdep.c Wed Apr 27 01:45:05 2011 (r221105)
+++ projects/altix/sys/amd64/amd64/minidump_machdep.c Wed Apr 27 02:12:01 2011 (r221106)
@@ -62,7 +62,7 @@ static off_t dumplo;
/* Handle chunked writes. */
static size_t fragsz;
static void *dump_va;
-static size_t counter, progress;
+static size_t counter, progress, dumpsize;
CTASSERT(sizeof(*vm_page_dump) == 8);
@@ -94,6 +94,40 @@ blk_flush(struct dumperinfo *di)
return (error);
}
+static struct {
+ int min_per;
+ int max_per;
+ int visited;
+} progress_track[10] = {
+ { 0, 10, 0},
+ { 10, 20, 0},
+ { 20, 30, 0},
+ { 30, 40, 0},
+ { 40, 50, 0},
+ { 50, 60, 0},
+ { 60, 70, 0},
+ { 70, 80, 0},
+ { 80, 90, 0},
+ { 90, 100, 0}
+};
+
+static void
+report_progress(size_t progress, size_t dumpsize)
+{
+ int sofar, i;
+
+ sofar = 100 - ((progress * 100) / dumpsize);
+ for (i = 0; i < 10; i++) {
+ if (sofar < progress_track[i].min_per || sofar > progress_track[i].max_per)
+ continue;
+ if (progress_track[i].visited)
+ return;
+ progress_track[i].visited = 1;
+ printf("..%d%%", sofar);
+ return;
+ }
+}
+
static int
blk_write(struct dumperinfo *di, char *ptr, vm_paddr_t pa, size_t sz)
{
@@ -130,7 +164,7 @@ blk_write(struct dumperinfo *di, char *p
counter += len;
progress -= len;
if (counter >> 24) {
- printf(" %ld", PG2MB(progress >> PAGE_SHIFT));
+ report_progress(progress, dumpsize);
counter &= (1<<24) - 1;
}
if (ptr) {
@@ -170,7 +204,6 @@ static pd_entry_t fakepd[NPDEPG];
void
minidumpsys(struct dumperinfo *di)
{
- uint64_t dumpsize;
uint32_t pmapsize;
vm_offset_t va;
int error;
@@ -290,8 +323,8 @@ minidumpsys(struct dumperinfo *di)
mkdumpheader(&kdh, KERNELDUMPMAGIC, KERNELDUMP_AMD64_VERSION, dumpsize, di->blocksize);
- printf("Physical memory: %ju MB\n", ptoa((uintmax_t)physmem) / 1048576);
- printf("Dumping %llu MB:", (long long)dumpsize >> 20);
+ printf("Dumping %llu out of %ju MB:", (long long)dumpsize >> 20,
+ ptoa((uintmax_t)physmem) / 1048576);
/* Dump leader */
error = dump_write(di, &kdh, 0, dumplo, sizeof(kdh));
Modified: projects/altix/sys/amd64/conf/GENERIC
==============================================================================
--- projects/altix/sys/amd64/conf/GENERIC Wed Apr 27 01:45:05 2011 (r221105)
+++ projects/altix/sys/amd64/conf/GENERIC Wed Apr 27 02:12:01 2011 (r221106)
@@ -93,6 +93,7 @@ device fdc
device ahci # AHCI-compatible SATA controllers
device ata # Legacy ATA/SATA controllers
options ATA_CAM # Handle legacy controllers with CAM
+options ATA_STATIC_ID # Static device numbering
device mvs # Marvell 88SX50XX/88SX60XX/88SX70XX/SoC SATA
device siis # SiliconImage SiI3124/SiI3132/SiI3531 SATA
Modified: projects/altix/sys/arm/conf/CRB
==============================================================================
--- projects/altix/sys/arm/conf/CRB Wed Apr 27 01:45:05 2011 (r221105)
+++ projects/altix/sys/arm/conf/CRB Wed Apr 27 02:12:01 2011 (r221106)
@@ -74,6 +74,7 @@ device pci
device ata
options ATA_CAM
+options ATA_STATIC_ID # Static device numbering
device scbus # SCSI bus (required for ATA/SCSI)
device cd # CD
Modified: projects/altix/sys/arm/conf/EP80219
==============================================================================
--- projects/altix/sys/arm/conf/EP80219 Wed Apr 27 01:45:05 2011 (r221105)
+++ projects/altix/sys/arm/conf/EP80219 Wed Apr 27 02:12:01 2011 (r221106)
@@ -74,6 +74,7 @@ device pci
device ata
options ATA_CAM
+options ATA_STATIC_ID # Static device numbering
device scbus # SCSI bus (required for ATA/SCSI)
device cd # CD
Modified: projects/altix/sys/arm/conf/IQ31244
==============================================================================
--- projects/altix/sys/arm/conf/IQ31244 Wed Apr 27 01:45:05 2011 (r221105)
+++ projects/altix/sys/arm/conf/IQ31244 Wed Apr 27 02:12:01 2011 (r221106)
@@ -73,6 +73,7 @@ device pci
device ata
options ATA_CAM
+options ATA_STATIC_ID # Static device numbering
device scbus # SCSI bus (required for ATA/SCSI)
device cd # CD
Modified: projects/altix/sys/cam/ata/ata_da.c
==============================================================================
--- projects/altix/sys/cam/ata/ata_da.c Wed Apr 27 01:45:05 2011 (r221105)
+++ projects/altix/sys/cam/ata/ata_da.c Wed Apr 27 02:12:01 2011 (r221106)
@@ -28,6 +28,7 @@
__FBSDID("$FreeBSD$");
#include "opt_ada.h"
+#include "opt_ata.h"
#include <sys/param.h>
@@ -183,6 +184,14 @@ static void adashutdown(void *arg, int
static void adasuspend(void *arg);
static void adaresume(void *arg);
+#ifndef ADA_DEFAULT_LEGACY_ALIASES
+#ifdef ATA_CAM
+#define ADA_DEFAULT_LEGACY_ALIASES 1
+#else
+#define ADA_DEFAULT_LEGACY_ALIASES 0
+#endif
+#endif
+
#ifndef ADA_DEFAULT_TIMEOUT
#define ADA_DEFAULT_TIMEOUT 30 /* Timeout in seconds */
#endif
@@ -215,6 +224,7 @@ static void adaresume(void *arg);
#define ata_disk_firmware_geom_adjust(disk)
#endif
+static int ada_legacy_aliases = ADA_DEFAULT_LEGACY_ALIASES;
static int ada_retry_count = ADA_DEFAULT_RETRY;
static int ada_default_timeout = ADA_DEFAULT_TIMEOUT;
static int ada_send_ordered = ADA_DEFAULT_SEND_ORDERED;
@@ -224,6 +234,9 @@ static int ada_write_cache = ADA_DEFAULT
SYSCTL_NODE(_kern_cam, OID_AUTO, ada, CTLFLAG_RD, 0,
"CAM Direct Access Disk driver");
+SYSCTL_INT(_kern_cam_ada, OID_AUTO, legacy_aliases, CTLFLAG_RW,
+ &ada_legacy_aliases, 0, "Create legacy-like device aliases");
+TUNABLE_INT("kern.cam.ada.legacy_aliases", &ada_legacy_aliases);
SYSCTL_INT(_kern_cam_ada, OID_AUTO, retry_count, CTLFLAG_RW,
&ada_retry_count, 0, "Normal I/O retry count");
TUNABLE_INT("kern.cam.ada.retry_count", &ada_retry_count);
@@ -723,10 +736,11 @@ adaregister(struct cam_periph *periph, v
struct ada_softc *softc;
struct ccb_pathinq cpi;
struct ccb_getdev *cgd;
- char announce_buf[80];
+ char announce_buf[80], buf1[32];
struct disk_params *dp;
caddr_t match;
u_int maxio;
+ int legacy_id;
cgd = (struct ccb_getdev *)arg;
if (periph == NULL) {
@@ -861,6 +875,22 @@ adaregister(struct cam_periph *periph, v
softc->disk->d_fwheads = softc->params.heads;
ata_disk_firmware_geom_adjust(softc->disk);
+ if (ada_legacy_aliases) {
+#ifdef ATA_STATIC_ID
+ legacy_id = xpt_path_legacy_ata_id(periph->path);
+#else
+ legacy_id = softc->disk->d_unit;
+#endif
+ if (legacy_id >= 0) {
+ snprintf(announce_buf, sizeof(announce_buf),
+ "kern.devalias.%s%d",
+ softc->disk->d_name, softc->disk->d_unit);
+ snprintf(buf1, sizeof(buf1),
+ "ad%d", legacy_id);
+ setenv(announce_buf, buf1);
+ }
+ } else
+ legacy_id = -1;
disk_create(softc->disk, DISK_VERSION);
mtx_lock(periph->sim->mtx);
cam_periph_unhold(periph);
@@ -874,6 +904,9 @@ adaregister(struct cam_periph *periph, v
dp->secsize, dp->heads,
dp->secs_per_track, dp->cylinders);
xpt_announce_periph(periph, announce_buf);
+ if (legacy_id >= 0)
+ printf("%s%d: Previously was known as ad%d\n",
+ periph->periph_name, periph->unit_number, legacy_id);
/*
* Create our sysctl variables, now that we know
Modified: projects/altix/sys/cam/cam_xpt.c
==============================================================================
--- projects/altix/sys/cam/cam_xpt.c Wed Apr 27 01:45:05 2011 (r221105)
+++ projects/altix/sys/cam/cam_xpt.c Wed Apr 27 02:12:01 2011 (r221106)
@@ -3569,6 +3569,42 @@ xpt_path_periph(struct cam_path *path)
return (path->periph);
}
+int
+xpt_path_legacy_ata_id(struct cam_path *path)
+{
+ struct cam_eb *bus;
+ int bus_id;
+
+ if ((strcmp(path->bus->sim->sim_name, "ata") != 0) &&
+ strcmp(path->bus->sim->sim_name, "ahcich") != 0 &&
+ strcmp(path->bus->sim->sim_name, "mvsch") != 0 &&
+ strcmp(path->bus->sim->sim_name, "siisch") != 0)
+ return (-1);
+
+ if (strcmp(path->bus->sim->sim_name, "ata") == 0 &&
+ path->bus->sim->unit_number < 2) {
+ bus_id = path->bus->sim->unit_number;
+ } else {
+ bus_id = 2;
+ xpt_lock_buses();
+ TAILQ_FOREACH(bus, &xsoftc.xpt_busses, links) {
+ if (bus == path->bus)
+ break;
+ if ((strcmp(bus->sim->sim_name, "ata") == 0 &&
+ bus->sim->unit_number >= 2) ||
+ strcmp(bus->sim->sim_name, "ahcich") == 0 ||
+ strcmp(bus->sim->sim_name, "mvsch") == 0 ||
+ strcmp(bus->sim->sim_name, "siisch") == 0)
+ bus_id++;
+ }
+ xpt_unlock_buses();
+ }
+ if (path->target != NULL)
+ return (bus_id * 2 + path->target->target_id);
+ else
+ return (bus_id * 2);
+}
+
/*
* Release a CAM control block for the caller. Remit the cost of the structure
* to the device referenced by the path. If the this device had no 'credits'
Modified: projects/altix/sys/cam/cam_xpt.h
==============================================================================
--- projects/altix/sys/cam/cam_xpt.h Wed Apr 27 01:45:05 2011 (r221105)
+++ projects/altix/sys/cam/cam_xpt.h Wed Apr 27 02:12:01 2011 (r221106)
@@ -113,6 +113,7 @@ int xpt_path_string(struct cam_path *p
path_id_t xpt_path_path_id(struct cam_path *path);
target_id_t xpt_path_target_id(struct cam_path *path);
lun_id_t xpt_path_lun_id(struct cam_path *path);
+int xpt_path_legacy_ata_id(struct cam_path *path);
struct cam_sim *xpt_path_sim(struct cam_path *path);
struct cam_periph *xpt_path_periph(struct cam_path *path);
void xpt_async(u_int32_t async_code, struct cam_path *path,
Modified: projects/altix/sys/conf/NOTES
==============================================================================
--- projects/altix/sys/conf/NOTES Wed Apr 27 01:45:05 2011 (r221105)
+++ projects/altix/sys/conf/NOTES Wed Apr 27 02:12:01 2011 (r221106)
@@ -1754,7 +1754,7 @@ hint.ata.1.irq="15"
# atapifd, atapist, atapicam) and all user-level APIs.
# cam(4) drivers and APIs will be connected instead.
-#options ATA_STATIC_ID
+options ATA_STATIC_ID
#options ATA_REQUEST_TIMEOUT=10
options ATA_CAM
Modified: projects/altix/sys/dev/usb/controller/ehci.c
==============================================================================
--- projects/altix/sys/dev/usb/controller/ehci.c Wed Apr 27 01:45:05 2011 (r221105)
+++ projects/altix/sys/dev/usb/controller/ehci.c Wed Apr 27 02:12:01 2011 (r221106)
@@ -1196,6 +1196,8 @@ ehci_data_toggle_update(struct usb_xfer
dt ^= 1; /* short packet at the end */
else if (actlen != xlen)
dt ^= 1; /* zero length packet at the end */
+ else if (xlen == 0)
+ dt ^= 1; /* zero length transfer */
xfer->endpoint->toggle_next ^= dt;
}
Modified: projects/altix/sys/dev/usb/net/if_cdcereg.h
==============================================================================
--- projects/altix/sys/dev/usb/net/if_cdcereg.h Wed Apr 27 01:45:05 2011 (r221105)
+++ projects/altix/sys/dev/usb/net/if_cdcereg.h Wed Apr 27 02:12:01 2011 (r221106)
@@ -39,7 +39,7 @@
#define CDCE_IND_SIZE_MAX 32 /* bytes */
#define CDCE_NCM_TX_MINLEN 512 /* bytes, must be power of two */
-#define CDCE_NCM_TX_MAXLEN (1UL << 14) /* bytes */
+#define CDCE_NCM_TX_MAXLEN (16384 + 4) /* bytes, must be short terminated */
#define CDCE_NCM_TX_FRAMES_MAX 8 /* units */
#define CDCE_NCM_RX_MAXLEN (1UL << 14) /* bytes */
Modified: projects/altix/sys/fs/nfsclient/nfs_clvfsops.c
==============================================================================
--- projects/altix/sys/fs/nfsclient/nfs_clvfsops.c Wed Apr 27 01:45:05 2011 (r221105)
+++ projects/altix/sys/fs/nfsclient/nfs_clvfsops.c Wed Apr 27 02:12:01 2011 (r221106)
@@ -137,10 +137,17 @@ VFS_SET(nfs_vfsops, newnfs, VFCF_NETWORK
MODULE_VERSION(newnfs, 1);
/*
- * This structure must be filled in by a primary bootstrap or bootstrap
- * server for a diskless/dataless machine. It is initialized below just
- * to ensure that it is allocated to initialized data (.data not .bss).
+ * This structure is now defined in sys/nfs/nfs_diskless.c so that it
+ * can be shared by both NFS clients. It is declared here so that it
+ * will be defined for kernels built without NFS_ROOT, although it
+ * isn't used in that case.
*/
+#if !defined(NFS_ROOT) && !defined(NFSCLIENT)
+struct nfs_diskless nfs_diskless = { { { 0 } } };
+struct nfsv3_diskless nfsv3_diskless = { { { 0 } } };
+int nfs_diskless_valid = 0;
+#endif
+
SYSCTL_INT(_vfs_newnfs, OID_AUTO, diskless_valid, CTLFLAG_RD,
&nfs_diskless_valid, 0,
"Has the diskless struct been filled correctly");
Modified: projects/altix/sys/geom/concat/g_concat.c
==============================================================================
--- projects/altix/sys/geom/concat/g_concat.c Wed Apr 27 01:45:05 2011 (r221105)
+++ projects/altix/sys/geom/concat/g_concat.c Wed Apr 27 02:12:01 2011 (r221106)
@@ -678,7 +678,8 @@ g_concat_taste(struct g_class *mp, struc
if (md.md_version < 4)
md.md_provsize = pp->mediasize;
- if (md.md_provider[0] != '\0' && strcmp(md.md_provider, pp->name) != 0)
+ if (md.md_provider[0] != '\0' &&
+ !g_compare_names(md.md_provider, pp->name))
return (NULL);
if (md.md_provsize != pp->mediasize)
return (NULL);
Modified: projects/altix/sys/geom/geom.h
==============================================================================
--- projects/altix/sys/geom/geom.h Wed Apr 27 01:45:05 2011 (r221105)
+++ projects/altix/sys/geom/geom.h Wed Apr 27 02:12:01 2011 (r221106)
@@ -238,6 +238,7 @@ void g_waitidlelock(void);
/* geom_subr.c */
int g_access(struct g_consumer *cp, int nread, int nwrite, int nexcl);
int g_attach(struct g_consumer *cp, struct g_provider *pp);
+int g_compare_names(const char *namea, const char *nameb);
void g_destroy_consumer(struct g_consumer *cp);
void g_destroy_geom(struct g_geom *pp);
void g_destroy_provider(struct g_provider *pp);
Modified: projects/altix/sys/geom/geom_dev.c
==============================================================================
--- projects/altix/sys/geom/geom_dev.c Wed Apr 27 01:45:05 2011 (r221105)
+++ projects/altix/sys/geom/geom_dev.c Wed Apr 27 02:12:01 2011 (r221106)
@@ -113,8 +113,9 @@ g_dev_taste(struct g_class *mp, struct g
{
struct g_geom *gp;
struct g_consumer *cp;
- int error;
- struct cdev *dev;
+ int error, len;
+ struct cdev *dev, *adev;
+ char buf[64], *val;
g_trace(G_T_TOPOLOGY, "dev_taste(%s,%s)", mp->name, pp->name);
g_topology_assert();
@@ -136,12 +137,35 @@ g_dev_taste(struct g_class *mp, struct g
g_destroy_geom(gp);
return (NULL);
}
+
+ /* Search for device alias name and create it if found. */
+ adev = NULL;
+ for (len = MIN(strlen(gp->name), sizeof(buf) - 15); len > 0; len--) {
+ snprintf(buf, sizeof(buf), "kern.devalias.%s", gp->name);
+ buf[14 + len] = 0;
+ val = getenv(buf);
+ if (val != NULL) {
+ snprintf(buf, sizeof(buf), "%s%s",
+ val, gp->name + len);
+ freeenv(val);
+ adev = make_dev_alias(dev, buf);
+ break;
+ }
+ }
+
if (pp->flags & G_PF_CANDELETE)
dev->si_flags |= SI_CANDELETE;
dev->si_iosize_max = MAXPHYS;
gp->softc = dev;
dev->si_drv1 = gp;
dev->si_drv2 = cp;
+ if (adev != NULL) {
+ if (pp->flags & G_PF_CANDELETE)
+ adev->si_flags |= SI_CANDELETE;
+ adev->si_iosize_max = MAXPHYS;
+ adev->si_drv1 = gp;
+ adev->si_drv2 = cp;
+ }
return (gp);
}
Modified: projects/altix/sys/geom/geom_subr.c
==============================================================================
--- projects/altix/sys/geom/geom_subr.c Wed Apr 27 01:45:05 2011 (r221105)
+++ projects/altix/sys/geom/geom_subr.c Wed Apr 27 02:12:01 2011 (r221106)
@@ -1017,6 +1017,43 @@ g_getattr__(const char *attr, struct g_c
return (0);
}
+static int
+g_get_device_prefix_len(const char *name)
+{
+ int len;
+
+ if (strncmp(name, "ada", 3) == 0)
+ len = 3;
+ else if (strncmp(name, "ad", 2) == 0)
+ len = 2;
+ else
+ return (0);
+ if (name[len] < '0' || name[len] > '9')
+ return (0);
+ do {
+ len++;
+ } while (name[len] >= '0' && name[len] <= '9');
+ return (len);
+}
+
+int
+g_compare_names(const char *namea, const char *nameb)
+{
+ int deva, devb;
+
+ if (strcmp(namea, nameb) == 0)
+ return (1);
+ deva = g_get_device_prefix_len(namea);
+ if (deva == 0)
+ return (0);
+ devb = g_get_device_prefix_len(nameb);
+ if (devb == 0)
+ return (0);
+ if (strcmp(namea + deva, nameb + devb) == 0)
+ return (1);
+ return (0);
+}
+
#if defined(DIAGNOSTIC) || defined(DDB)
/*
* This function walks the mesh and returns a non-zero integer if it
Modified: projects/altix/sys/geom/journal/g_journal.c
==============================================================================
--- projects/altix/sys/geom/journal/g_journal.c Wed Apr 27 01:45:05 2011 (r221105)
+++ projects/altix/sys/geom/journal/g_journal.c Wed Apr 27 02:12:01 2011 (r221106)
@@ -2527,7 +2527,8 @@ g_journal_taste(struct g_class *mp, stru
return (NULL);
gp = NULL;
- if (md.md_provider[0] != '\0' && strcmp(md.md_provider, pp->name) != 0)
+ if (md.md_provider[0] != '\0' &&
+ !g_compare_names(md.md_provider, pp->name))
return (NULL);
if (md.md_provsize != 0 && md.md_provsize != pp->mediasize)
return (NULL);
Modified: projects/altix/sys/geom/mirror/g_mirror.c
==============================================================================
--- projects/altix/sys/geom/mirror/g_mirror.c Wed Apr 27 01:45:05 2011 (r221105)
+++ projects/altix/sys/geom/mirror/g_mirror.c Wed Apr 27 02:12:01 2011 (r221106)
@@ -3007,7 +3007,8 @@ g_mirror_taste(struct g_class *mp, struc
return (NULL);
gp = NULL;
- if (md.md_provider[0] != '\0' && strcmp(md.md_provider, pp->name) != 0)
+ if (md.md_provider[0] != '\0' &&
+ !g_compare_names(md.md_provider, pp->name))
return (NULL);
if (md.md_provsize != 0 && md.md_provsize != pp->mediasize)
return (NULL);
Modified: projects/altix/sys/geom/raid3/g_raid3.c
==============================================================================
--- projects/altix/sys/geom/raid3/g_raid3.c Wed Apr 27 01:45:05 2011 (r221105)
+++ projects/altix/sys/geom/raid3/g_raid3.c Wed Apr 27 02:12:01 2011 (r221106)
@@ -3329,7 +3329,8 @@ g_raid3_taste(struct g_class *mp, struct
return (NULL);
gp = NULL;
- if (md.md_provider[0] != '\0' && strcmp(md.md_provider, pp->name) != 0)
+ if (md.md_provider[0] != '\0' &&
+ !g_compare_names(md.md_provider, pp->name))
return (NULL);
if (md.md_provsize != 0 && md.md_provsize != pp->mediasize)
return (NULL);
Modified: projects/altix/sys/geom/shsec/g_shsec.c
==============================================================================
--- projects/altix/sys/geom/shsec/g_shsec.c Wed Apr 27 01:45:05 2011 (r221105)
+++ projects/altix/sys/geom/shsec/g_shsec.c Wed Apr 27 02:12:01 2011 (r221106)
@@ -673,7 +673,8 @@ g_shsec_taste(struct g_class *mp, struct
if (md.md_version < 1)
md.md_provsize = pp->mediasize;
- if (md.md_provider[0] != '\0' && strcmp(md.md_provider, pp->name) != 0)
+ if (md.md_provider[0] != '\0' &&
+ !g_compare_names(md.md_provider, pp->name))
return (NULL);
if (md.md_provsize != pp->mediasize)
return (NULL);
Modified: projects/altix/sys/geom/stripe/g_stripe.c
==============================================================================
--- projects/altix/sys/geom/stripe/g_stripe.c Wed Apr 27 01:45:05 2011 (r221105)
+++ projects/altix/sys/geom/stripe/g_stripe.c Wed Apr 27 02:12:01 2011 (r221106)
@@ -952,7 +952,8 @@ g_stripe_taste(struct g_class *mp, struc
if (md.md_version < 3)
md.md_provsize = pp->mediasize;
- if (md.md_provider[0] != '\0' && strcmp(md.md_provider, pp->name) != 0)
+ if (md.md_provider[0] != '\0' &&
+ !g_compare_names(md.md_provider, pp->name))
return (NULL);
if (md.md_provsize != pp->mediasize)
return (NULL);
Modified: projects/altix/sys/geom/virstor/g_virstor.c
==============================================================================
--- projects/altix/sys/geom/virstor/g_virstor.c Wed Apr 27 01:45:05 2011 (r221105)
+++ projects/altix/sys/geom/virstor/g_virstor.c Wed Apr 27 02:12:01 2011 (r221106)
@@ -809,10 +809,9 @@ g_virstor_taste(struct g_class *mp, stru
/* If the provider name is hardcoded, use the offered provider only
* if it's been offered with its proper name (the one used in
* the label command). */
- if (md.provider[0] != '\0') {
- if (strcmp(md.provider, pp->name) != 0)
- return (NULL);
- }
+ if (md.provider[0] != '\0' &&
+ !g_compare_names(md.provider, pp->name))
+ return (NULL);
/* Iterate all geoms this class already knows about to see if a new
* geom instance of this class needs to be created (in case the provider
Modified: projects/altix/sys/i386/conf/GENERIC
==============================================================================
--- projects/altix/sys/i386/conf/GENERIC Wed Apr 27 01:45:05 2011 (r221105)
+++ projects/altix/sys/i386/conf/GENERIC Wed Apr 27 02:12:01 2011 (r221106)
@@ -95,6 +95,7 @@ device fdc
device ahci # AHCI-compatible SATA controllers
device ata # Legacy ATA/SATA controllers
options ATA_CAM # Handle legacy controllers with CAM
+options ATA_STATIC_ID # Static device numbering
device mvs # Marvell 88SX50XX/88SX60XX/88SX70XX/SoC SATA
device siis # SiliconImage SiI3124/SiI3132/SiI3531 SATA
Modified: projects/altix/sys/i386/conf/XBOX
==============================================================================
--- projects/altix/sys/i386/conf/XBOX Wed Apr 27 01:45:05 2011 (r221105)
+++ projects/altix/sys/i386/conf/XBOX Wed Apr 27 02:12:01 2011 (r221106)
@@ -52,6 +52,7 @@ device pci
# ATA and ATAPI devices
device ata
options ATA_CAM
+options ATA_STATIC_ID # Static device numbering
# ATA/SCSI peripherals
device scbus # SCSI bus (required for ATA/SCSI)
Modified: projects/altix/sys/kern/kern_intr.c
==============================================================================
--- projects/altix/sys/kern/kern_intr.c Wed Apr 27 01:45:05 2011 (r221105)
+++ projects/altix/sys/kern/kern_intr.c Wed Apr 27 02:12:01 2011 (r221106)
@@ -746,7 +746,6 @@ intr_handler_source(void *cookie)
void
_intr_drain(int irq)
{
- struct mtx *mtx;
struct intr_event *ie;
struct intr_thread *ithd;
struct thread *td;
@@ -758,13 +757,21 @@ _intr_drain(int irq)
return;
ithd = ie->ie_thread;
td = ithd->it_thread;
+ /*
+ * We set the flag and wait for it to be cleared to avoid
+ * long delays with potentially busy interrupt handlers
+ * were we to only sample TD_AWAITING_INTR() every tick.
+ */
thread_lock(td);
- mtx = td->td_lock;
if (!TD_AWAITING_INTR(td)) {
ithd->it_flags |= IT_WAIT;
- msleep_spin(ithd, mtx, "isync", 0);
+ while (ithd->it_flags & IT_WAIT) {
+ thread_unlock(td);
+ pause("idrain", 1);
+ thread_lock(td);
+ }
}
- mtx_unlock_spin(mtx);
+ thread_unlock(td);
return;
}
Modified: projects/altix/sys/kern/sched_4bsd.c
==============================================================================
--- projects/altix/sys/kern/sched_4bsd.c Wed Apr 27 01:45:05 2011 (r221105)
+++ projects/altix/sys/kern/sched_4bsd.c Wed Apr 27 02:12:01 2011 (r221106)
@@ -1246,25 +1246,27 @@ sched_add(struct thread *td, int flags)
}
TD_SET_RUNQ(td);
- if (td->td_pinned != 0) {
- cpu = td->td_lastcpu;
- ts->ts_runq = &runq_pcpu[cpu];
- single_cpu = 1;
- CTR3(KTR_RUNQ,
- "sched_add: Put td_sched:%p(td:%p) on cpu%d runq", ts, td,
- cpu);
- } else if (td->td_flags & TDF_BOUND) {
- /* Find CPU from bound runq. */
- KASSERT(SKE_RUNQ_PCPU(ts),
- ("sched_add: bound td_sched not on cpu runq"));
- cpu = ts->ts_runq - &runq_pcpu[0];
- single_cpu = 1;
- CTR3(KTR_RUNQ,
- "sched_add: Put td_sched:%p(td:%p) on cpu%d runq", ts, td,
- cpu);
- } else if (ts->ts_flags & TSF_AFFINITY) {
- /* Find a valid CPU for our cpuset */
- cpu = sched_pickcpu(td);
+ /*
+ * If SMP is started and the thread is pinned or otherwise limited to
+ * a specific set of CPUs, queue the thread to a per-CPU run queue.
+ * Otherwise, queue the thread to the global run queue.
+ *
+ * If SMP has not yet been started we must use the global run queue
+ * as per-CPU state may not be initialized yet and we may crash if we
+ * try to access the per-CPU run queues.
+ */
+ if (smp_started && (td->td_pinned != 0 || td->td_flags & TDF_BOUND ||
+ ts->ts_flags & TSF_AFFINITY)) {
+ if (td->td_pinned != 0)
+ cpu = td->td_lastcpu;
+ else if (td->td_flags & TDF_BOUND) {
+ /* Find CPU from bound runq. */
+ KASSERT(SKE_RUNQ_PCPU(ts),
+ ("sched_add: bound td_sched not on cpu runq"));
+ cpu = ts->ts_runq - &runq_pcpu[0];
+ } else
+ /* Find a valid CPU for our cpuset */
+ cpu = sched_pickcpu(td);
ts->ts_runq = &runq_pcpu[cpu];
single_cpu = 1;
CTR3(KTR_RUNQ,
Modified: projects/altix/sys/kern/subr_taskqueue.c
==============================================================================
--- projects/altix/sys/kern/subr_taskqueue.c Wed Apr 27 01:45:05 2011 (r221105)
+++ projects/altix/sys/kern/subr_taskqueue.c Wed Apr 27 02:12:01 2011 (r221106)
@@ -61,12 +61,15 @@ struct taskqueue {
int tq_tcount;
int tq_spin;
int tq_flags;
+ int tq_callouts;
};
#define TQ_FLAGS_ACTIVE (1 << 0)
#define TQ_FLAGS_BLOCKED (1 << 1)
#define TQ_FLAGS_PENDING (1 << 2)
+#define DT_CALLOUT_ARMED (1 << 0)
+
#define TQ_LOCK(tq) \
do { \
if ((tq)->tq_spin) \
@@ -83,6 +86,17 @@ struct taskqueue {
mtx_unlock(&(tq)->tq_mutex); \
} while (0)
+void
+_timeout_task_init(struct taskqueue *queue, struct timeout_task *timeout_task,
+ int priority, task_fn_t func, void *context)
+{
+
+ TASK_INIT(&timeout_task->t, priority, func, context);
+ callout_init_mtx(&timeout_task->c, &queue->tq_mutex, 0);
+ timeout_task->q = queue;
+ timeout_task->f = 0;
+}
+
static __inline int
TQ_SLEEP(struct taskqueue *tq, void *p, struct mtx *m, int pri, const char *wm,
int t)
@@ -129,7 +143,7 @@ static void
taskqueue_terminate(struct thread **pp, struct taskqueue *tq)
{
- while (tq->tq_tcount > 0) {
+ while (tq->tq_tcount > 0 || tq->tq_callouts > 0) {
wakeup(tq);
TQ_SLEEP(tq, pp, &tq->tq_mutex, PWAIT, "taskqueue_destroy", 0);
}
@@ -143,26 +157,24 @@ taskqueue_free(struct taskqueue *queue)
queue->tq_flags &= ~TQ_FLAGS_ACTIVE;
taskqueue_terminate(queue->tq_threads, queue);
KASSERT(TAILQ_EMPTY(&queue->tq_active), ("Tasks still running?"));
+ KASSERT(queue->tq_callouts == 0, ("Armed timeout tasks"));
mtx_destroy(&queue->tq_mutex);
free(queue->tq_threads, M_TASKQUEUE);
free(queue, M_TASKQUEUE);
}
-int
-taskqueue_enqueue(struct taskqueue *queue, struct task *task)
+static int
+taskqueue_enqueue_locked(struct taskqueue *queue, struct task *task)
{
struct task *ins;
struct task *prev;
- TQ_LOCK(queue);
-
/*
* Count multiple enqueues.
*/
if (task->ta_pending) {
task->ta_pending++;
- TQ_UNLOCK(queue);
- return 0;
+ return (0);
}
/*
@@ -190,9 +202,60 @@ taskqueue_enqueue(struct taskqueue *queu
else
queue->tq_flags |= TQ_FLAGS_PENDING;
+ return (0);
+}
+int
+taskqueue_enqueue(struct taskqueue *queue, struct task *task)
+{
+ int res;
+
+ TQ_LOCK(queue);
+ res = taskqueue_enqueue_locked(queue, task);
TQ_UNLOCK(queue);
- return 0;
+ return (res);
+}
+
+static void
+taskqueue_timeout_func(void *arg)
+{
+ struct taskqueue *queue;
+ struct timeout_task *timeout_task;
+
+ timeout_task = arg;
+ queue = timeout_task->q;
+ KASSERT((timeout_task->f & DT_CALLOUT_ARMED) != 0, ("Stray timeout"));
+ timeout_task->f &= ~DT_CALLOUT_ARMED;
+ queue->tq_callouts--;
+ taskqueue_enqueue_locked(timeout_task->q, &timeout_task->t);
+}
+
+int
+taskqueue_enqueue_timeout(struct taskqueue *queue,
+ struct timeout_task *timeout_task, int ticks)
+{
+ int res;
+
+ TQ_LOCK(queue);
+ KASSERT(timeout_task->q == NULL || timeout_task->q == queue,
+ ("Migrated queue"));
+ KASSERT(!queue->tq_spin, ("Timeout for spin-queue"));
+ timeout_task->q = queue;
+ res = timeout_task->t.ta_pending;
+ if (ticks == 0) {
+ taskqueue_enqueue_locked(queue, &timeout_task->t);
+ } else {
+ if ((timeout_task->f & DT_CALLOUT_ARMED) != 0) {
+ res++;
+ } else {
+ queue->tq_callouts++;
+ timeout_task->f |= DT_CALLOUT_ARMED;
+ }
+ callout_reset(&timeout_task->c, ticks, taskqueue_timeout_func,
+ timeout_task);
+ }
+ TQ_UNLOCK(queue);
+ return (res);
}
void
@@ -271,6 +334,19 @@ task_is_running(struct taskqueue *queue,
return (0);
}
+static int
+taskqueue_cancel_locked(struct taskqueue *queue, struct task *task,
+ u_int *pendp)
+{
+
+ if (task->ta_pending > 0)
+ STAILQ_REMOVE(&queue->tq_queue, task, task, ta_link);
+ if (pendp != NULL)
+ *pendp = task->ta_pending;
+ task->ta_pending = 0;
+ return (task_is_running(queue, task) ? EBUSY : 0);
+}
+
int
taskqueue_cancel(struct taskqueue *queue, struct task *task, u_int *pendp)
{
@@ -278,14 +354,31 @@ taskqueue_cancel(struct taskqueue *queue
int error;
TQ_LOCK(queue);
- if ((pending = task->ta_pending) > 0)
- STAILQ_REMOVE(&queue->tq_queue, task, task, ta_link);
- task->ta_pending = 0;
- error = task_is_running(queue, task) ? EBUSY : 0;
+ pending = task->ta_pending;
+ error = taskqueue_cancel_locked(queue, task, pendp);
+ TQ_UNLOCK(queue);
+
+ return (error);
+}
+
+int
+taskqueue_cancel_timeout(struct taskqueue *queue,
+ struct timeout_task *timeout_task, u_int *pendp)
+{
+ u_int pending, pending1;
+ int error;
+
+ TQ_LOCK(queue);
+ pending = !!callout_stop(&timeout_task->c);
+ error = taskqueue_cancel_locked(queue, &timeout_task->t, &pending1);
+ if ((timeout_task->f & DT_CALLOUT_ARMED) != 0) {
+ timeout_task->f &= ~DT_CALLOUT_ARMED;
+ queue->tq_callouts--;
+ }
TQ_UNLOCK(queue);
if (pendp != NULL)
- *pendp = pending;
+ *pendp = pending + pending1;
return (error);
}
@@ -302,6 +395,15 @@ taskqueue_drain(struct taskqueue *queue,
TQ_UNLOCK(queue);
}
+void
+taskqueue_drain_timeout(struct taskqueue *queue,
+ struct timeout_task *timeout_task)
+{
+
+ callout_drain(&timeout_task->c);
+ taskqueue_drain(queue, &timeout_task->t);
+}
+
static void
taskqueue_swi_enqueue(void *context)
{
Modified: projects/altix/sys/mips/conf/OCTEON1
==============================================================================
--- projects/altix/sys/mips/conf/OCTEON1 Wed Apr 27 01:45:05 2011 (r221105)
+++ projects/altix/sys/mips/conf/OCTEON1 Wed Apr 27 02:12:01 2011 (r221106)
@@ -99,6 +99,7 @@ device pci
device ahci # AHCI-compatible SATA controllers
device ata # Legacy ATA/SATA controllers
options ATA_CAM # Handle legacy controllers with CAM
+options ATA_STATIC_ID # Static device numbering
device mvs # Marvell 88SX50XX/88SX60XX/88SX70XX/SoC SATA
device siis # SiliconImage SiI3124/SiI3132/SiI3531 SATA
Modified: projects/altix/sys/mips/conf/std.SWARM
==============================================================================
--- projects/altix/sys/mips/conf/std.SWARM Wed Apr 27 01:45:05 2011 (r221105)
+++ projects/altix/sys/mips/conf/std.SWARM Wed Apr 27 02:12:01 2011 (r221106)
@@ -58,3 +58,4 @@ device pass
device ata
options ATA_CAM
+options ATA_STATIC_ID # Static device numbering
Modified: projects/altix/sys/modules/cam/Makefile
==============================================================================
--- projects/altix/sys/modules/cam/Makefile Wed Apr 27 01:45:05 2011 (r221105)
+++ projects/altix/sys/modules/cam/Makefile Wed Apr 27 02:12:01 2011 (r221106)
@@ -9,6 +9,7 @@ KMOD= cam
# See sys/conf/options for the flags that go into the different opt_*.h files.
SRCS= opt_cam.h
SRCS+= opt_ada.h
+SRCS+= opt_ata.h
SRCS+= opt_scsi.h
SRCS+= opt_cd.h
SRCS+= opt_pt.h
Modified: projects/altix/sys/nfsclient/nfs_vfsops.c
==============================================================================
--- projects/altix/sys/nfsclient/nfs_vfsops.c Wed Apr 27 01:45:05 2011 (r221105)
+++ projects/altix/sys/nfsclient/nfs_vfsops.c Wed Apr 27 02:12:01 2011 (r221106)
@@ -164,6 +164,18 @@ static struct nfs_rpcops nfs_rpcops = {
nfs_commit,
};
+/*
+ * This structure is now defined in sys/nfs/nfs_diskless.c so that it
+ * can be shared by both NFS clients. It is declared here so that it
+ * will be defined for kernels built without NFS_ROOT, although it
+ * isn't used in that case.
+ */
+#ifndef NFS_ROOT
+struct nfs_diskless nfs_diskless = { { { 0 } } };
+struct nfsv3_diskless nfsv3_diskless = { { { 0 } } };
+int nfs_diskless_valid = 0;
+#endif
+
SYSCTL_INT(_vfs_nfs, OID_AUTO, diskless_valid, CTLFLAG_RD,
&nfs_diskless_valid, 0,
"Has the diskless struct been filled correctly");
Modified: projects/altix/sys/ofed/include/linux/file.h
==============================================================================
--- projects/altix/sys/ofed/include/linux/file.h Wed Apr 27 01:45:05 2011 (r221105)
+++ projects/altix/sys/ofed/include/linux/file.h Wed Apr 27 02:12:01 2011 (r221106)
@@ -92,7 +92,7 @@ get_unused_fd(void)
int error;
int fd;
- error = falloc(curthread, &file, &fd);
+ error = falloc(curthread, &file, &fd, 0);
if (error)
return -error;
return fd;
Modified: projects/altix/sys/ofed/include/linux/workqueue.h
==============================================================================
--- projects/altix/sys/ofed/include/linux/workqueue.h Wed Apr 27 01:45:05 2011 (r221105)
+++ projects/altix/sys/ofed/include/linux/workqueue.h Wed Apr 27 02:12:01 2011 (r221106)
@@ -160,9 +160,11 @@ flush_taskqueue(struct taskqueue *tq)
{
struct task flushtask;
+ PHOLD(curproc);
TASK_INIT(&flushtask, 0, _flush_fn, NULL);
taskqueue_enqueue(tq, &flushtask);
taskqueue_drain(tq, &flushtask);
+ PRELE(curproc);
}
static inline int
Modified: projects/altix/sys/pc98/conf/GENERIC
==============================================================================
--- projects/altix/sys/pc98/conf/GENERIC Wed Apr 27 01:45:05 2011 (r221105)
+++ projects/altix/sys/pc98/conf/GENERIC Wed Apr 27 02:12:01 2011 (r221106)
@@ -91,6 +91,7 @@ device fdc
device ahci # AHCI-compatible SATA controllers
device ata # Legacy ATA/SATA controllers
options ATA_CAM # Handle legacy controllers with CAM
+options ATA_STATIC_ID # Static device numbering
device mvs # Marvell 88SX50XX/88SX60XX/88SX70XX/SoC SATA
device siis # SiliconImage SiI3124/SiI3132/SiI3531 SATA
Copied: projects/altix/sys/sys/_callout.h (from r221105, head/sys/sys/_callout.h)
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ projects/altix/sys/sys/_callout.h Wed Apr 27 02:12:01 2011 (r221106, copy of r221105, head/sys/sys/_callout.h)
@@ -0,0 +1,61 @@
+/*-
+ * Copyright (c) 1990, 1993
+ * The Regents of the University of California. All rights reserved.
+ * (c) UNIX System Laboratories, Inc.
+ * All or some portions of this file are derived from material licensed
+ * to the University of California by American Telephone and Telegraph
+ * Co. or Unix System Laboratories, Inc. and are reproduced herein with
+ * the permission of UNIX System Laboratories, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 4. Neither the name of the University nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * @(#)callout.h 8.2 (Berkeley) 1/21/94
+ * $FreeBSD$
+ */
+
+#ifndef _SYS__CALLOUT_H
+#define _SYS__CALLOUT_H
+
+#include <sys/queue.h>
+
+struct lock_object;
+
+SLIST_HEAD(callout_list, callout);
+TAILQ_HEAD(callout_tailq, callout);
+
+struct callout {
+ union {
+ SLIST_ENTRY(callout) sle;
+ TAILQ_ENTRY(callout) tqe;
+ } c_links;
+ int c_time; /* ticks to the event */
+ void *c_arg; /* function argument */
+ void (*c_func)(void *); /* function to call */
+ struct lock_object *c_lock; /* lock to handle */
+ int c_flags; /* state of this entry */
+ volatile int c_cpu; /* CPU we're scheduled on */
+};
+
+#endif
Modified: projects/altix/sys/sys/callout.h
==============================================================================
--- projects/altix/sys/sys/callout.h Wed Apr 27 01:45:05 2011 (r221105)
+++ projects/altix/sys/sys/callout.h Wed Apr 27 02:12:01 2011 (r221106)
@@ -38,25 +38,7 @@
#ifndef _SYS_CALLOUT_H_
#define _SYS_CALLOUT_H_
-#include <sys/queue.h>
-
-struct lock_object;
-
-SLIST_HEAD(callout_list, callout);
-TAILQ_HEAD(callout_tailq, callout);
-
-struct callout {
- union {
- SLIST_ENTRY(callout) sle;
- TAILQ_ENTRY(callout) tqe;
- } c_links;
- int c_time; /* ticks to the event */
- void *c_arg; /* function argument */
- void (*c_func)(void *); /* function to call */
- struct lock_object *c_lock; /* lock to handle */
- int c_flags; /* state of this entry */
- volatile int c_cpu; /* CPU we're scheduled on */
*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***
More information about the svn-src-projects
mailing list