public inbox for linuxppc-dev@ozlabs.org 
 help / color / mirror / Atom feed
From: Arnd Bergmann <arnd@arndb•de>
To: linuxppc-dev@ozlabs•org
Cc: Geert.Uytterhoeven@sonycom•com, linux-kernel@vger•kernel.org
Subject: Re: [patch 5/7] ps3: Disk Storage Driver
Date: Fri, 25 May 2007 18:26:25 +0200	[thread overview]
Message-ID: <200705251826.25572.arnd@arndb.de> (raw)
In-Reply-To: <20070525083632.575306000@sonycom.com>

On Friday 25 May 2007, Geert.Uytterhoeven@sonycom•com wrote:
> +static void ps3disk_scatter_gather(struct ps3_storage_device *dev,
> +				   struct request *req, int gather)
> +{
> +	unsigned int sectors = 0, offset = 0;
> +	struct bio *bio;
> +	sector_t sector;
> +	struct bio_vec *bvec;
> +	unsigned int i = 0, j;
> +	size_t size;
> +	void *buf;
> +
> +	rq_for_each_bio(bio, req) {
> +		sector = bio->bi_sector;
> +		dev_dbg(&dev->sbd.core,
> +			"%s:%u: bio %u: %u segs %u sectors from %lu\n",
> +			__func__, __LINE__, i, bio_segments(bio),
> +			bio_sectors(bio), sector);
> +		bio_for_each_segment(bvec, bio, j) {
> +			size = bio_cur_sectors(bio)*KERNEL_SECTOR_SIZE;
> +			buf = __bio_kmap_atomic(bio, j, KM_USER0);
> +			if (gather)
> +				memcpy(dev->bounce_buf+offset, buf, size);
> +			else
> +				memcpy(buf, dev->bounce_buf+offset, size);
> +			offset += size;
> +			__bio_kunmap_atomic(bio, KM_USER0);
> +		}
> +		sectors += bio_sectors(bio);
> +		i++;
> +	}
> +}

So the hypervison uses guest-real addresses here? I would have expected
it to use the kernel page tables, which lets you use vmap() to do
scatter-gather.

> +static int ps3disk_thread(void *data)
> +{
> +	struct ps3_storage_device *dev = data;
> +	struct ps3disk_private *priv = ps3disk_priv(dev);
> +	request_queue_t *q = priv->queue;
> +	struct request *req;
> +
> +	dev_dbg(&dev->sbd.core, "%s thread init\n", __func__);
> +
> +	current->flags |= PF_NOFREEZE;
> +
> +	while (!kthread_should_stop()) {
> +		spin_lock_irq(&priv->lock);
> +		set_current_state(TASK_INTERRUPTIBLE);
> +		req = elv_next_request(q);
> +		if (!req) {
> +			spin_unlock_irq(&priv->lock);
> +			schedule();
> +			continue;
> +		}
> +		if (!blk_fs_request(req)) {
> +			blk_dump_rq_flags(req, DEVICE_NAME " bad request");
> +			end_request(req, 0);
> +			spin_unlock_irq(&priv->lock);
> +			continue;
> +		}
> +		spin_unlock_irq(&priv->lock);
> +		ps3disk_handle_request_sg(dev, req);
> +	}
> +
> +	dev_dbg(&dev->sbd.core, "%s thread exit\n", __func__);
> +	return 0;
> +}

I don't really understand what the kthread is needed for. You probably
thought about multiple options and ended up with this, but having
a comment in front of it might be helpful.

	Arnd <><

  parent reply	other threads:[~2007-05-25 16:27 UTC|newest]

Thread overview: 48+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-05-25  8:36 [patch 0/7] RFC: PS3 Storage Drivers Geert.Uytterhoeven
2007-05-25  8:36 ` [patch 1/7] ps3: Preallocate bootmem memory for the PS3 FLASH ROM storage driver Geert.Uytterhoeven
2007-05-25 22:35   ` Benjamin Herrenschmidt
2007-05-26  8:51     ` Geert Uytterhoeven
2007-05-26 22:17       ` Benjamin Herrenschmidt
2007-05-27 18:24         ` Arnd Bergmann
2007-05-25  8:36 ` [patch 2/7] ps3: Extract ps3_repository_find_bus() Geert.Uytterhoeven
2007-05-25  8:36 ` [patch 3/7] ps3: Storage Driver Core Geert.Uytterhoeven
2007-05-25  8:36 ` [patch 4/7] ps3: Storage Driver Probing Geert.Uytterhoeven
2007-05-25 16:18   ` Arnd Bergmann
2007-05-25 17:09     ` Geoff Levand
2007-05-25 19:48     ` Geert Uytterhoeven
2007-05-25 22:54       ` Benjamin Herrenschmidt
2007-05-25 22:47     ` Benjamin Herrenschmidt
2007-05-26  8:56       ` Geert Uytterhoeven
2007-05-25  8:36 ` [patch 5/7] ps3: Disk Storage Driver Geert.Uytterhoeven
2007-05-25 11:45   ` Olaf Hering
2007-05-25 19:43     ` Geert Uytterhoeven
2007-05-25 20:47       ` Olaf Hering
2007-05-25 16:26   ` Arnd Bergmann [this message]
2007-05-25 19:40     ` Geert Uytterhoeven
2007-05-25 20:43       ` Arnd Bergmann
2007-05-25 21:22         ` Geert Uytterhoeven
2007-05-25 22:45           ` Arnd Bergmann
2007-05-25 22:53       ` Benjamin Herrenschmidt
2007-05-25 22:48     ` Benjamin Herrenschmidt
2007-05-25  8:36 ` [patch 6/7] ps3: ROM " Geert.Uytterhoeven
2007-05-25 11:24   ` Olaf Hering
2007-05-25 22:45     ` Benjamin Herrenschmidt
2007-05-26  8:52       ` Geert Uytterhoeven
2007-05-26 22:18         ` Benjamin Herrenschmidt
2007-05-29  9:55           ` Christoph Hellwig
2007-05-25 16:50   ` Arnd Bergmann
2007-05-25 19:36     ` Geert Uytterhoeven
2007-05-25 21:04       ` Arnd Bergmann
2007-05-29 10:51         ` Christoph Hellwig
2007-05-29 10:49   ` Christoph Hellwig
2007-05-29 11:11     ` Geert Uytterhoeven
2007-05-29 11:31       ` Benjamin Herrenschmidt
2007-05-30 10:13       ` Christoph Hellwig
2007-05-30 11:45         ` Benjamin Herrenschmidt
2007-05-30 17:18           ` Geoff Levand
2007-05-29 16:21     ` Geert Uytterhoeven
2007-05-30 10:01       ` Christoph Hellwig
2007-05-25  8:36 ` [patch 7/7] ps3: FLASH " Geert.Uytterhoeven
2007-05-29  9:53   ` Christoph Hellwig
2007-05-29  9:57     ` Geert Uytterhoeven
2007-05-29 10:51       ` Christoph Hellwig

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=200705251826.25572.arnd@arndb.de \
    --to=arnd@arndb$(echo .)de \
    --cc=Geert.Uytterhoeven@sonycom$(echo .)com \
    --cc=linux-kernel@vger$(echo .)kernel.org \
    --cc=linuxppc-dev@ozlabs$(echo .)org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox