Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 14 Jan 2009 17:25:28 +0000 (UTC)
From:      Luigi Rizzo <luigi@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-user@freebsd.org
Subject:   svn commit: r187227 - in user/luigi/geom_sched/sys: conf dev/ata geom
Message-ID:  <200901141725.n0EHPS1I049234@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: luigi
Date: Wed Jan 14 17:25:28 2009
New Revision: 187227
URL: http://svn.freebsd.org/changeset/base/187227

Log:
  revert the changes for the in-driver scheduler.
  They are not used now and interfere with debugging
  of the other code.

Modified:
  user/luigi/geom_sched/sys/conf/files
  user/luigi/geom_sched/sys/dev/ata/ata-all.h
  user/luigi/geom_sched/sys/dev/ata/ata-disk.c
  user/luigi/geom_sched/sys/dev/ata/ata-queue.c
  user/luigi/geom_sched/sys/geom/geom_disk.c
  user/luigi/geom_sched/sys/geom/geom_disk.h
  user/luigi/geom_sched/sys/geom/geom_io.c

Modified: user/luigi/geom_sched/sys/conf/files
==============================================================================
--- user/luigi/geom_sched/sys/conf/files	Wed Jan 14 16:27:04 2009	(r187226)
+++ user/luigi/geom_sched/sys/conf/files	Wed Jan 14 17:25:28 2009	(r187227)
@@ -1283,7 +1283,7 @@ geom/geom_mbr_enc.c		optional geom_mbr
 geom/geom_pc98.c		optional geom_pc98
 geom/geom_pc98_enc.c		optional geom_pc98
 geom/geom_slice.c		standard
-geom/geom_sched.c		standard
+# geom/geom_sched.c		standard
 geom/geom_subr.c		standard
 geom/geom_sunlabel.c		optional geom_sunlabel
 geom/geom_sunlabel_enc.c	optional geom_sunlabel

Modified: user/luigi/geom_sched/sys/dev/ata/ata-all.h
==============================================================================
--- user/luigi/geom_sched/sys/dev/ata/ata-all.h	Wed Jan 14 16:27:04 2009	(r187226)
+++ user/luigi/geom_sched/sys/dev/ata/ata-all.h	Wed Jan 14 17:25:28 2009	(r187227)
@@ -510,7 +510,6 @@ struct ata_channel {
     TAILQ_HEAD(, ata_request)   ata_queue;      /* head of ATA queue */
     struct ata_request          *freezepoint;   /* composite freezepoint */
     struct ata_request          *running;       /* currently running request */
-    struct disk			*disks[2];	/* disks, if any */
 };
 
 /* disk bay/enclosure related */
@@ -547,9 +546,6 @@ int ata_wmode(struct ata_params *ap);
 int ata_umode(struct ata_params *ap);
 int ata_limit_mode(device_t dev, int mode, int maxmode);
 
-/* ata-disk.c */
-struct ata_request *ata_create_request(struct bio *bp, int full);
-
 /* ata-queue.c: */
 int ata_controlcmd(device_t dev, u_int8_t command, u_int16_t feature, u_int64_t lba, u_int16_t count);
 int ata_atapicmd(device_t dev, u_int8_t *ccb, caddr_t data, int count, int flags, int timeout);

Modified: user/luigi/geom_sched/sys/dev/ata/ata-disk.c
==============================================================================
--- user/luigi/geom_sched/sys/dev/ata/ata-disk.c	Wed Jan 14 16:27:04 2009	(r187226)
+++ user/luigi/geom_sched/sys/dev/ata/ata-disk.c	Wed Jan 14 17:25:28 2009	(r187227)
@@ -60,7 +60,6 @@ static void ad_describe(device_t dev);
 static int ad_version(u_int16_t);
 static disk_strategy_t ad_strategy;
 static disk_ioctl_t ad_ioctl;
-static disk_kick_t ad_kick;
 static dumper_t ad_dump;
 
 /*
@@ -149,7 +148,6 @@ ad_attach(device_t dev)
     adp->disk = disk_alloc();
     adp->disk->d_strategy = ad_strategy;
     adp->disk->d_ioctl = ad_ioctl;
-    adp->disk->d_kick = ad_kick;
     adp->disk->d_dump = ad_dump;
     adp->disk->d_name = "ad";
     adp->disk->d_drv1 = dev;
@@ -170,7 +168,6 @@ ad_attach(device_t dev)
     snprintf(adp->disk->d_ident, sizeof(adp->disk->d_ident), "ad:%s",
 	atadev->param.serial);
     disk_create(adp->disk, DISK_VERSION);
-    ch->disks[atadev->unit == ATA_SLAVE] = adp->disk;
     device_add_child(dev, "subdisk", device_get_unit(dev));
     ad_firmware_geom_adjust(dev, adp->disk);
     bus_generic_attach(dev);
@@ -182,7 +179,6 @@ ad_attach(device_t dev)
 static int
 ad_detach(device_t dev)
 {
-    struct ata_channel *ch = device_get_softc(device_get_parent(dev));
     struct ad_softc *adp = device_get_ivars(dev);
     struct ata_device *atadev = device_get_softc(dev);
     device_t *children;
@@ -203,8 +199,6 @@ ad_detach(device_t dev)
 	free(children, M_TEMP);
     }
 
-    ch->disks[atadev->unit == ATA_SLAVE] = NULL;
-
     /* detroy disk from the system so we dont get any further requests */
     disk_destroy(adp->disk);
 
@@ -272,13 +266,13 @@ ad_spindown(void *priv)
     ata_queue_request(request);
 }
 
-struct ata_request * 
-ata_create_request(struct bio *bp, int full)
+
+static void 
+ad_strategy(struct bio *bp)
 {
-    device_t dev = bp->bio_disk->d_drv1;
+    device_t dev =  bp->bio_disk->d_drv1;
     struct ata_device *atadev = device_get_softc(dev);
     struct ata_request *request;
-    struct ata_channel *ch;
 
     if (atadev->spindown != 0)
 	callout_reset(&atadev->spindown_timer, hz * atadev->spindown,
@@ -287,7 +281,7 @@ ata_create_request(struct bio *bp, int f
     if (!(request = ata_alloc_request())) {
 	device_printf(dev, "FAILURE - out of memory in start\n");
 	biofinish(bp, NULL, ENOMEM);
-	return NULL;
+	return;
     }
 
     /* setup request */
@@ -350,32 +344,10 @@ ata_create_request(struct bio *bp, int f
 	device_printf(dev, "FAILURE - unknown BIO operation\n");
 	ata_free_request(request);
 	biofinish(bp, NULL, EIO);
-	return NULL;
+	return;
     }
     request->flags |= ATA_R_ORDERED;
-
-    if (full != 0) {
-	if ((request->parent = device_get_parent(dev)) == NULL) {
-	    ata_free_request(request);
-	    biofinish(bp, NULL, ENXIO);
-	    return NULL;
-	}
-
-	ch = device_get_softc(request->parent);
-	callout_init_mtx(&request->callout, &ch->state_mtx,
-			 CALLOUT_RETURNUNLOCKED);
-    }
-
-    return request;
-}
-
-static void
-ad_strategy(struct bio *bp)
-{
-    struct ata_request *request;
-
-    if ((request = ata_create_request(bp, 0)) != NULL)
-	ata_queue_request(request);
+    ata_queue_request(request);
 }
 
 static void
@@ -397,18 +369,6 @@ ad_ioctl(struct disk *disk, u_long cmd, 
     return ata_device_ioctl(disk->d_drv1, cmd, data);
 }
 
-static void
-ad_kick(struct disk *disk)
-{
-    device_t dev;
-    struct ata_channel *ch;
-
-    dev = disk->d_drv1;
-    ch = device_get_softc(device_get_parent(dev));
-    if (ch != NULL)
-	ata_start(ch->dev);
-}
-
 static int
 ad_dump(void *arg, void *virtual, vm_offset_t physical,
 	off_t offset, size_t length)

Modified: user/luigi/geom_sched/sys/dev/ata/ata-queue.c
==============================================================================
--- user/luigi/geom_sched/sys/dev/ata/ata-queue.c	Wed Jan 14 16:27:04 2009	(r187226)
+++ user/luigi/geom_sched/sys/dev/ata/ata-queue.c	Wed Jan 14 17:25:28 2009	(r187227)
@@ -42,7 +42,6 @@ __FBSDID("$FreeBSD$");
 #include <sys/rman.h>
 #include <dev/ata/ata-all.h>
 #include <ata_if.h>
-#include <geom/geom_sched.h>
 
 /* prototypes */
 static void ata_completed(void *, int);
@@ -172,25 +171,10 @@ ata_start(device_t dev)
     struct ata_channel *ch = device_get_softc(dev);
     struct ata_request *request;
     struct ata_composite *cptr;
-    struct disk *dp;
-    struct bio *bp;
-    int dependencies = 0, i;
-
-    mtx_lock(&ch->queue_mtx);
-    if (TAILQ_FIRST(&ch->ata_queue) == NULL) {
-	for (i = 0; i < 2; i++) {
-	    dp = ch->disks[i];
-	    while (dp != NULL && (bp = g_sched_next(dp)) != NULL) {
-		request = ata_create_request(bp, 1);
-		if (request != NULL) {
-		    ata_sort_queue(ch, request);
-		    break;
-		}
-	    }
-	}
-    }
+    int dependencies = 0;
 
     /* if we have a request on the queue try to get it running */
+    mtx_lock(&ch->queue_mtx);
     if ((request = TAILQ_FIRST(&ch->ata_queue))) {
 
 	/* we need the locking function to get the lock for this channel */

Modified: user/luigi/geom_sched/sys/geom/geom_disk.c
==============================================================================
--- user/luigi/geom_sched/sys/geom/geom_disk.c	Wed Jan 14 16:27:04 2009	(r187226)
+++ user/luigi/geom_sched/sys/geom/geom_disk.c	Wed Jan 14 17:25:28 2009	(r187227)
@@ -55,11 +55,9 @@ __FBSDID("$FreeBSD$");
 #include <geom/geom.h>
 #include <geom/geom_disk.h>
 #include <geom/geom_int.h>
-#include <geom/geom_sched.h>
 
 static struct mtx g_disk_done_mtx;
 
-static g_ctl_req_t g_disk_ctlreq;
 static g_access_t g_disk_access;
 static g_init_t g_disk_init;
 static g_fini_t g_disk_fini;
@@ -70,7 +68,6 @@ static g_dumpconf_t g_disk_dumpconf;
 static struct g_class g_disk_class = {
 	.name = "DISK",
 	.version = G_VERSION,
-	.ctlreq = g_disk_ctlreq,
 	.init = g_disk_init,
 	.fini = g_disk_fini,
 	.start = g_disk_start,
@@ -84,19 +81,16 @@ g_disk_init(struct g_class *mp __unused)
 {
 
 	mtx_init(&g_disk_done_mtx, "g_disk_done", NULL, MTX_DEF);
-	g_sched_init();
 }
 
 static void
 g_disk_fini(struct g_class *mp __unused)
 {
 
-	g_sched_fini();
 	mtx_destroy(&g_disk_done_mtx);
 }
 
 DECLARE_GEOM_CLASS(g_disk_class, g_disk);
-MODULE_VERSION(g_disk, 0);
 
 static void __inline
 g_disk_lock_giant(struct disk *dp)
@@ -112,83 +106,6 @@ g_disk_unlock_giant(struct disk *dp)
 		mtx_unlock(&Giant);
 }
 
-static void
-g_disk_configure(struct gctl_req *req, struct g_class *mp)
-{
-	struct disk *dp;
-	struct g_provider *pp;
-	const char *sched, *name;
-	char param[16];
-	int i, *nargs;
-
-	g_topology_assert();
-
-	nargs = gctl_get_paraml(req, "nargs", sizeof(*nargs));
-	if (nargs == NULL) {
-		gctl_error(req, "No '%s' argument.", "nargs");
-		return;
-	}
-
-	if (*nargs <= 0) {
-		gctl_error(req, "Missing devices.");
-		return;
-	}
-
-	sched = gctl_get_asciiparam(req, "iosched");
-	if (sched == NULL) {
-		gctl_error(req, "No '%s' argument.", "iosched");
-		return;
-	}
-
-	for (i = 0; i < *nargs; i++) {
-		snprintf(param, sizeof(param), "arg%d", i);
-		name = gctl_get_asciiparam(req, param);
-		if (name == NULL) {
-			gctl_error(req, "No '%s' argument.", param);
-			return;
-		}
-
-		if (strncmp(name, "/dev/", strlen("/dev/")) == 0)
-			name += strlen("/dev/");
-
-		pp = g_provider_by_name(name);
-		if (pp == NULL || pp->geom->class != mp) {
-			gctl_error(req, "Provider %s is invalid.", name);
-			return;
-		}
-
-		dp = pp->geom->softc;
-		if (g_sched_configure(dp, sched) != 0) {
-			gctl_error(req, "Could not set scheduler %s.", sched);
-			return;
-		}
-	}
-}
-
-static void
-g_disk_ctlreq(struct gctl_req *req, struct g_class *mp, const char *verb)
-{
-	uint32_t *version;
-
-	g_topology_assert();
-
-	version = gctl_get_paraml(req, "version", sizeof(*version));
-	if (version == NULL) {
-		gctl_error(req, "No '%s' argument.", "version");
-		return;
-	}
-
-	if (*version != G_VERSION) {
-		gctl_error(req, "Userland and kernel parts are out of sync.");
-		return;
-	}
-
-	if (strcmp(verb, "configure") == 0)
-		g_disk_configure(req, mp);
-	else
-		gctl_error(req, "Unknown verb.");
-}
-
 static int
 g_disk_access(struct g_provider *pp, int r, int w, int e)
 {
@@ -281,8 +198,6 @@ g_disk_done(struct bio *bp)
 	mtx_lock(&g_disk_done_mtx);
 	bp->bio_completed = bp->bio_length - bp->bio_resid;
 
-	g_sched_done(bp);
-
 	bp2 = bp->bio_parent;
 	if (bp2->bio_error == 0)
 		bp2->bio_error = bp->bio_error;
@@ -373,7 +288,7 @@ g_disk_start(struct bio *bp)
 			bp2->bio_disk = dp;
 			devstat_start_transaction_bio(dp->d_devstat, bp2);
 			g_disk_lock_giant(dp);
-			g_sched_start(dp, bp2);
+			dp->d_strategy(bp2);
 			g_disk_unlock_giant(dp);
 			bp2 = bp3;
 			bp3 = NULL;
@@ -551,7 +466,6 @@ disk_create(struct disk *dp, int version
 		    dp->d_sectorsize, DEVSTAT_ALL_SUPPORTED,
 		    DEVSTAT_TYPE_DIRECT, DEVSTAT_PRIORITY_MAX);
 	dp->d_geom = NULL;
-	g_sched_disk_init(dp);
 	g_disk_ident_adjust(dp->d_ident, sizeof(dp->d_ident));
 	g_post_event(g_disk_create, dp, M_WAITOK, dp, NULL);
 }
@@ -562,7 +476,6 @@ disk_destroy(struct disk *dp)
 
 	g_cancel_event(dp);
 	dp->d_destroyed = 1;
-	g_sched_disk_fini(dp);
 	if (dp->d_devstat != NULL)
 		devstat_remove_entry(dp->d_devstat);
 	g_post_event(g_disk_destroy, dp, M_WAITOK, NULL);
@@ -574,8 +487,6 @@ disk_gone(struct disk *dp)
 	struct g_geom *gp;
 	struct g_provider *pp;
 
-	g_sched_disk_gone(dp);
-
 	gp = dp->d_geom;
 	if (gp != NULL)
 		LIST_FOREACH(pp, &gp->provider, provider)

Modified: user/luigi/geom_sched/sys/geom/geom_disk.h
==============================================================================
--- user/luigi/geom_sched/sys/geom/geom_disk.h	Wed Jan 14 16:27:04 2009	(r187226)
+++ user/luigi/geom_sched/sys/geom/geom_disk.h	Wed Jan 14 17:25:28 2009	(r187227)
@@ -53,10 +53,7 @@ typedef	int	disk_ioctl_t(struct disk *, 
 			int fflag, struct thread *td);
 		/* NB: disk_ioctl_t SHALL be cast'able to d_ioctl_t */
 
-typedef void	disk_kick_t(struct disk *);
-
 struct g_geom;
-struct g_sched;
 struct devstat;
 
 struct disk {
@@ -77,7 +74,6 @@ struct disk {
 	disk_close_t		*d_close;
 	disk_strategy_t		*d_strategy;
 	disk_ioctl_t		*d_ioctl;
-	disk_kick_t		*d_kick;
 	dumper_t		*d_dump;
 
 	/* Info fields from driver to geom_disk.c. Valid when open */
@@ -90,13 +86,6 @@ struct disk {
 	u_int			d_stripesize;
 	char			d_ident[DISK_IDENT_SIZE];
 
-	/* Scheduler fields */
-	struct mtx		d_sched_lock;
-	u_int			d_sched_flags;
-	u_int			d_nr_sorted;
-	struct g_sched		*d_sched;
-	void			*d_sched_data;
-
 	/* Fields private to the driver */
 	void			*d_drv1;
 };

Modified: user/luigi/geom_sched/sys/geom/geom_io.c
==============================================================================
--- user/luigi/geom_sched/sys/geom/geom_io.c	Wed Jan 14 16:27:04 2009	(r187226)
+++ user/luigi/geom_sched/sys/geom/geom_io.c	Wed Jan 14 17:25:28 2009	(r187227)
@@ -562,8 +562,8 @@ g_io_schedule_down(struct thread *tp __u
 			break;
 		}
 		THREAD_NO_SLEEPING();
-		CTR4(KTR_GEOM, "g_down starting bp %p provider %s off %ld "
-		    "len %ld", bp, bp->bio_to->name, bp->bio_offset,
+		CTR4(KTR_GEOM, "g_down starting bp %p provider %s off %lld "
+		    "len %lld", bp, bp->bio_to->name, bp->bio_offset,
 		    bp->bio_length);
 		bp->bio_to->geom->start(bp);
 		THREAD_SLEEPING_OK();
@@ -610,7 +610,7 @@ g_io_schedule_up(struct thread *tp __unu
 			g_bioq_unlock(&g_bio_run_up);
 			THREAD_NO_SLEEPING();
 			CTR4(KTR_GEOM, "g_up biodone bp %p provider %s off "
-			    "%ld len %ld", bp, bp->bio_to->name,
+			    "%lld len %lld", bp, bp->bio_to->name,
 			    bp->bio_offset, bp->bio_length);
 			biodone(bp);
 			THREAD_SLEEPING_OK();



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200901141725.n0EHPS1I049234>