[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] Re: [PATCH 5/5] scsi-bsg: Add initial support for BSG based
From: |
Nicholas A. Bellinger |
Subject: |
[Qemu-devel] Re: [PATCH 5/5] scsi-bsg: Add initial support for BSG based SCSIDeviceInfo |
Date: |
Wed, 24 Nov 2010 01:08:06 -0800 |
On Wed, 2010-11-24 at 10:07 +0100, Paolo Bonzini wrote:
> On 11/24/2010 09:40 AM, Nicholas A. Bellinger wrote:
> > From: Nicholas Bellinger<address@hidden>
> >
> > This patch adds initial support for using the Linux BSG interface with
> > write/read vectored
> > AIO as a QEMU backstore (SCSIDeviceInfo) with hw/scsi-bus.c compatible HBA
> > emulation.
> >
> > So far it has been tested with x86_64 host and guest using hw/megasas.c and
> > TCM_Loop LLD
> > Port LUNs. Because this patch uses struct iovec for struct
> > sg_io_v4->d[out,in]_xferp payloads,
> > which currently requires a patch to linux/block/bsg.c:bsg_map_hdr() in
> > order to setup the
> > user -> kernel iovecs. This patch can be found in lio-core-2.6.git here:
> >
> > commit fec4e8457c744de50e1ead69a36d5c4ee089d1ac
> > Author: Nicholas Bellinger<address@hidden>
> > Date: Sun Jun 13 23:13:20 2010 -0700
> >
> > [BSG]: Add support for struct sg_io_v4->d[out,in]_iovec_count
> >
> > This also will only currently work with paired user/kernel (eg: 64bit user
> > / 64bit kernel)
> > because of different pointer sizes in struct iovec->iov_base.
> >
> > There are also two FIXMEs in hw/scsi-bsg.c:bsg_generic_initfn() related to
> > extraction of
> > SCSI LUN and device type values using BSG and required by QEMU-KVM.
>
> Any reason why this should be a different driver than scsi-generic, i.e.
> why the scsi-generic should not switch automatically between SG and BSG
> depending on the kind of device being opened?
>
> In fact, there is no reason why scsi-generic should use bounce buffers
> rather than sg_iovec_t, so that most of the differences between
> scsi-generic and scsi-bsg would go away.
>
Originally I split these up into a seperate scsi-bsg.c file because:
*) BSG uses aio_submit_len() and polling reads for interaction with the
BSG ioctl.
*) BSG uses a different struct API (struct sg_io_v4) for user <-> kernel
communication.
Between hw/scsi-generic.c with Hannes's and Co's recent cleanups
scsi-generic.c and scsi-bsg.c are more similar than they used to be in
v0.12.5 w/ v1 of Gerd's SCSI SGL passthrough, but I really don't have a
strong perference here.
Thanks!
--nab