All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jeremy Fitzhardinge <jeremy@goop.org>
To: Dave Boutcher <boutcher@cs.umn.edu>
Cc: Chris Wright <chrisw@sous-sol.org>,
	linux-kernel@vger.kernel.org, virtualization@lists.osdl.org,
	xen-devel@lists.xensource.com, Andi Kleen <ak@suse.de>,
	Andrew Morton <akpm@osdl.org>,
	Rusty Russell <rusty@rustcorp.com.au>,
	Zachary Amsden <zach@vmware.com>,
	Ian Pratt <ian.pratt@xensource.com>,
	Christian Limpach <Christian.Limpach@cl.cam.ac.uk>
Subject: Re: [RFC PATCH 33/33] Add Xen virtual block device driver.
Date: Tue, 18 Jul 2006 14:22:01 -0700	[thread overview]
Message-ID: <44BD50F9.2010905@goop.org> (raw)
In-Reply-To: <17596.56260.541661.919437@hound.rchland.ibm.com>

Dave Boutcher wrote:
> On Tue, 18 Jul 2006 00:00:33 -0700, Chris Wright <chrisw@sous-sol.org> said:
>   
>> The block device frontend driver allows the kernel to access block
>> devices exported exported by a virtual machine containing a physical
>> block device driver.
>>     
>
> First, I think this belongs in drivers/block (and the network driver
> belongs in drivers/net).  If we're going to bring xen to the party,
> lets not leave it hiding out in a corner.
>
>   
>> +static void connect(struct blkfront_info *);
>> +static void blkfront_closing(struct xenbus_device *);
>> +static int blkfront_remove(struct xenbus_device *);
>> +static int talk_to_backend(struct xenbus_device *, struct blkfront_info *);
>> +static int setup_blkring(struct xenbus_device *, struct blkfront_info *);
>> +
>> +static void kick_pending_request_queues(struct blkfront_info *);
>> +
>> +static irqreturn_t blkif_int(int irq, void *dev_id, struct pt_regs *ptregs);
>> +static void blkif_restart_queue(void *arg);
>> +static void blkif_recover(struct blkfront_info *);
>> +static void blkif_completion(struct blk_shadow *);
>> +static void blkif_free(struct blkfront_info *, int);
>>     
>
> I'm pretty sure you can rearrange the code to get rid of the forward
> references. 
>
>   
>> +/**
>> + * We are reconnecting to the backend, due to a suspend/resume, or a backend
>> + * driver restart.  We tear down our blkif structure and recreate it, but
>> + * leave the device-layer structures intact so that this is transparent to the
>> + * rest of the kernel.
>> + */
>> +static int blkfront_resume(struct xenbus_device *dev)
>> +{
>> +	struct blkfront_info *info = dev->dev.driver_data;
>> +	int err;
>> +
>> +	DPRINTK("blkfront_resume: %s\n", dev->nodename);
>> +
>> +	blkif_free(info, 1);
>> +
>> +	err = talk_to_backend(dev, info);
>> +	if (!err)
>> +		blkif_recover(info);
>> +
>> +	return err;
>> +}
>>     
> Should blkfront_resume grab blkif_io_lock?
>   

There should be no concurrent activity until info->connected has been 
set to BLKIF_STATE_CONNECTED, which doesn't happen until blkif_recover 
has completed successfully.  blkif_queue_request and blkif_int both test 
the connection state before doing anything.  (Not sure if a concurrent 
XenBus event can happen though.)

>   
>> +static inline int GET_ID_FROM_FREELIST(
>> +	struct blkfront_info *info)
>> +{
>> +	unsigned long free = info->shadow_free;
>> +	BUG_ON(free > BLK_RING_SIZE);
>> +	info->shadow_free = info->shadow[free].req.id;
>> +	info->shadow[free].req.id = 0x0fffffee; /* debug */
>> +	return free;
>> +}
>> +
>> +static inline void ADD_ID_TO_FREELIST(
>> +	struct blkfront_info *info, unsigned long id)
>> +{
>> +	info->shadow[id].req.id  = info->shadow_free;
>> +	info->shadow[id].request = 0;
>> +	info->shadow_free = id;
>> +}
>>     
>
> A real nit..but why are these routines SHOUTING?
>
>   
>> +int blkif_release(struct inode *inode, struct file *filep)
>> +{
>> +	struct blkfront_info *info = inode->i_bdev->bd_disk->private_data;
>> +	info->users--;
>> +	if (info->users == 0) {
>>     
>
> Hrm...this strikes me as racey.  Don't you need at least a memory
> barrier here to handle SMP?
>   
Hm.  Doesn't look good to me.

>> +static struct xlbd_major_info xvd_major_info = {
>> +	.major = 201,
>> +	.type = &xvd_type_info
>> +};
>>     
>
> I've forgotten what the current policy is around new major numbers. 
>   
This is wrong.  201 is allocated to Veritas, but 202 has been allocated 
for the Xen VBD.

    J


      parent reply	other threads:[~2006-07-18 22:57 UTC|newest]

Thread overview: 135+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-07-18  9:18 [RFC PATCH 00/33] Xen i386 paravirtualization support Chris Wright
2006-07-18  9:18 ` Chris Wright
2006-07-18  7:00 ` [RFC PATCH 01/33] Add apply_to_page_range() function Chris Wright
2006-07-18 10:38   ` Adrian Bunk
2006-07-18 19:29     ` Chris Wright
2006-07-18 19:29       ` Chris Wright
2006-07-20  6:17       ` Adrian Bunk
2006-07-18  7:00 ` [RFC PATCH 02/33] Add sync bitops Chris Wright
2006-07-18  9:56   ` Arjan van de Ven
2006-07-18 10:18     ` Keir Fraser
2006-07-18 10:18       ` Keir Fraser
2006-07-19 12:54     ` Andi Kleen
2006-07-18 10:34   ` Adrian Bunk
2006-07-18  7:00 ` [RFC PATCH 03/33] Add nosegneg capability to the vsyscall page notes Chris Wright
2006-07-18  7:00 ` [RFC PATCH 04/33] Add XEN config options and disable unsupported config options Chris Wright
2006-07-18  9:59   ` Arjan van de Ven
2006-07-18 10:21     ` Keir Fraser
2006-07-18 10:21       ` Keir Fraser
2006-07-18  7:00 ` [RFC PATCH 05/33] Makefile support to build Xen subarch Chris Wright
2006-07-18  7:00   ` Chris Wright
2006-07-18 10:00   ` Arjan van de Ven
2006-07-18 11:40     ` Andrew Morton
2006-07-18 20:41       ` Jeremy Fitzhardinge
2006-07-18 20:15     ` Jeremy Fitzhardinge
2006-07-18  7:00 ` [RFC PATCH 06/33] Add Xen interface header files Chris Wright
2006-07-18  7:00 ` [RFC PATCH 07/33] Hypervisor " Chris Wright
2006-07-18  7:00 ` [RFC PATCH 08/33] Add vmlinuz build target Chris Wright
2006-07-18  7:00 ` [RFC PATCH 09/33] Add start-of-day setup hooks to subarch Chris Wright
2006-07-18 10:03   ` Arjan van de Ven
2006-07-18 20:49     ` Jeremy Fitzhardinge
2006-07-20  6:07   ` Adrian Bunk
2006-07-20 12:10     ` Keir Fraser
2006-07-20 13:27       ` Jeremy Fitzhardinge
2006-07-18  7:00 ` [RFC PATCH 10/33] add support for Xen feature queries Chris Wright
2006-07-18  7:00   ` Chris Wright
2006-07-18  7:00 ` [RFC PATCH 11/33] Add Xen-specific memory management definitions Chris Wright
2006-07-18  7:00 ` [RFC PATCH 12/33] Change __FIXADDR_TOP to leave room for the hypervisor Chris Wright
2006-07-18  7:00   ` Chris Wright
2006-07-18  7:00 ` [RFC PATCH 13/33] Add a new head.S start-of-day file for booting on Xen Chris Wright
2006-07-18 10:06   ` Arjan van de Ven
2006-07-18 20:13     ` Jeremy Fitzhardinge
2006-07-18  7:00 ` [RFC PATCH 14/33] subarch support for controlling interrupt delivery Chris Wright
2006-07-18  7:00 ` [RFC PATCH 15/33] move segment checks to subarch Chris Wright
2006-07-18  7:00   ` Chris Wright
2006-07-18 10:09   ` Arjan van de Ven
2006-07-18 11:28     ` Zachary Amsden
2006-07-18 11:28       ` Zachary Amsden
2006-07-18 19:06   ` Rusty Russell
2006-07-18 19:06     ` Rusty Russell
2006-07-18 19:25     ` Chris Wright
2006-07-18 19:25       ` Chris Wright
2006-07-18 20:00       ` [Xen-devel] " Rusty Russell
2006-07-18  7:00 ` [RFC PATCH 16/33] Add support for Xen to entry.S Chris Wright
2006-07-18 10:11   ` Arjan van de Ven
2006-07-18 20:04     ` Jeremy Fitzhardinge
2006-07-18 19:17   ` Rusty Russell
2006-07-18 19:17     ` Rusty Russell
2006-07-18 20:43     ` Chris Wright
2006-07-18 20:43       ` Chris Wright
2006-07-18 23:03       ` Jeremy Fitzhardinge
2006-07-19  5:30         ` Chris Wright
2006-07-19  5:30           ` Chris Wright
2006-07-18  7:00 ` [RFC PATCH 17/33] Support loading an initrd when running on Xen Chris Wright
2006-07-18  7:00 ` [RFC PATCH 18/33] Subarch support for CPUID instruction Chris Wright
2006-07-18 10:14   ` Arjan van de Ven
2006-07-18 10:26     ` Keir Fraser
2006-07-18 10:26       ` Keir Fraser
2006-07-18 10:38       ` Arjan van de Ven
2006-07-18 11:33     ` Zachary Amsden
2006-07-18 11:33       ` Zachary Amsden
2006-07-18 20:46       ` David Miller
2006-07-18 21:00         ` Chris Wright
2006-07-18  7:00 ` [RFC PATCH 19/33] Support gdt/idt/ldt handling on Xen Chris Wright
2006-07-18  7:00 ` [RFC PATCH 20/33] subarch support for interrupt and exception gates Chris Wright
2006-07-18  7:00 ` [RFC PATCH 21/33] subarch support for control register accesses Chris Wright
2006-07-18  7:00   ` Chris Wright
2006-07-18  7:00 ` [RFC PATCH 22/33] subarch stack pointer update Chris Wright
2006-07-18  7:00 ` [RFC PATCH 23/33] subarch TLB support Chris Wright
2006-07-18 20:39   ` David Miller
2006-07-18 21:00     ` Chris Wright
2006-07-18 21:00       ` Chris Wright
2006-07-18  7:00 ` [RFC PATCH 24/33] Add support for Xen event channels Chris Wright
2006-07-18  7:00 ` [RFC PATCH 25/33] Implement timekeeping for Xen Chris Wright
2006-07-18  7:00   ` Chris Wright
2006-07-25  2:49   ` john stultz
2006-07-25 20:05     ` Jeremy Fitzhardinge
2006-07-18  7:00 ` [RFC PATCH 26/33] subarch suport for idle loop (NO_IDLE_HZ for Xen) Chris Wright
2006-07-18  7:00 ` [RFC PATCH 27/33] Add the Xen virtual console driver Chris Wright
2006-07-18  7:00   ` Chris Wright
2006-07-18 10:24   ` Arjan van de Ven
2006-07-18 10:31     ` Keir Fraser
2006-07-18 10:31       ` Keir Fraser
2006-07-27 15:05   ` Hollis Blanchard
2006-07-18  7:00 ` [RFC PATCH 28/33] Add Xen grant table support Chris Wright
2006-07-18  7:00   ` Chris Wright
2006-07-19 10:04   ` [Xen-devel] " Harry Butterworth
2006-07-19 10:04     ` Harry Butterworth
2006-07-25 18:30   ` Hollis Blanchard
2006-07-25 18:30     ` Hollis Blanchard
2006-07-25 18:45     ` Keir Fraser
2006-07-25 18:45       ` Keir Fraser
2006-07-25 19:06     ` Segher Boessenkool
2006-07-25 19:06       ` [XenPPC] " Segher Boessenkool
2006-07-18  7:00 ` [RFC PATCH 29/33] Add Xen driver utility functions Chris Wright
2006-07-18  7:00 ` [RFC PATCH 30/33] Add the Xenbus sysfs and virtual device hotplug driver Chris Wright
2006-07-18  7:00   ` Chris Wright
2006-07-18  7:00 ` [RFC PATCH 31/33] Add Xen subarch reboot support Chris Wright
2006-07-20  6:16   ` Adrian Bunk
2006-07-18  7:00 ` [RFC PATCH 32/33] Add the Xen virtual network device driver Chris Wright
2006-07-18 10:27   ` Arjan van de Ven
2006-07-18 10:35     ` Keir Fraser
2006-07-18 10:35       ` Keir Fraser
2006-07-18 10:42       ` Arjan van de Ven
2006-07-18 12:18         ` Dave Boutcher
2006-07-18 12:39     ` jamal
2006-07-18 13:08       ` Herbert Xu
2006-07-18 13:08         ` Herbert Xu
2006-07-18 13:25         ` John Haller
2006-07-18 15:22           ` Herbert Xu
2006-07-18 15:22             ` Herbert Xu
2006-07-18 15:44   ` Stephen Hemminger
2006-07-19  3:55     ` Herbert Xu
2006-07-19  3:55       ` Herbert Xu
2006-07-19  3:55       ` Herbert Xu
2006-07-18 20:42   ` David Miller
2006-07-18 21:09     ` Chris Wright
2006-07-18  7:00 ` [RFC PATCH 33/33] Add Xen virtual block " Chris Wright
2006-07-18 10:34   ` Arjan van de Ven
2006-07-18 20:57     ` Jeremy Fitzhardinge
2006-07-18 13:01   ` Dave Boutcher
2006-07-18 16:25     ` Jeff Garzik
2006-07-18 16:25       ` Jeff Garzik
2006-07-18 19:28     ` Chris Wright
2006-07-18 19:28       ` Chris Wright
2006-07-18 21:22     ` Jeremy Fitzhardinge [this message]

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=44BD50F9.2010905@goop.org \
    --to=jeremy@goop.org \
    --cc=Christian.Limpach@cl.cam.ac.uk \
    --cc=ak@suse.de \
    --cc=akpm@osdl.org \
    --cc=boutcher@cs.umn.edu \
    --cc=chrisw@sous-sol.org \
    --cc=ian.pratt@xensource.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=rusty@rustcorp.com.au \
    --cc=virtualization@lists.osdl.org \
    --cc=xen-devel@lists.xensource.com \
    --cc=zach@vmware.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.