Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 14 Dec 2018 17:45:14 -0500
From:      Alexander Motin <mav@FreeBSD.org>
To:        araujo@freebsd.org
Cc:        src-committers <src-committers@freebsd.org>, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-12@freebsd.org
Subject:   Re: svn commit: r342083 - stable/12/usr.sbin/bhyve
Message-ID:  <34b5b58b-3abc-9142-2dc8-2a9780a51304@FreeBSD.org>
In-Reply-To: <CAOfEmZgVUNMgeBjdhjSDtohCkBK7Q9_s7jdsa7DNVZVxckOuyA@mail.gmail.com>
References:  <201812141449.wBEEn5eQ001337@repo.freebsd.org> <CAOfEmZgVUNMgeBjdhjSDtohCkBK7Q9_s7jdsa7DNVZVxckOuyA@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
Generally you are right.  But I considered previous state of this code
in stable/12 as worse then what can happen from this change.  And I'll
be around to help if anything is found.

On 14.12.2018 17:16, Marcelo Araujo wrote:
> Your mfc was quite fast less than 1 week, usually we take a bit more of
> time before we do the mfc! 
> 
> On Fri, Dec 14, 2018, 10:49 PM Alexander Motin <mav@freebsd.org
> <mailto:mav@freebsd.org> wrote:
> 
>     Author: mav
>     Date: Fri Dec 14 14:49:04 2018
>     New Revision: 342083
>     URL: https://svnweb.freebsd.org/changeset/base/342083
> 
>     Log:
>       MFC r341829: Allow CTL device specification in bhyve virtio-scsi.
> 
>       There was a large refactoring done in CTL to allow multiple ioctl
>     frontend
>       ports (and respective devices) to be created, particularly for bhyve.
>       Unfortunately, respective part of bhyve functionality got lost
>     somehow from
>       the original virtio-scsi commit.  This change allows wanted device
>     path to
>       be specified in either of two ways:
>        -s 6,virtio-scsi,/dev/cam/ctl1.1
>        -s 6,virtio-scsi,dev=/dev/cam/ctl2.3
>       If neither is specified, the default /dev/cam/ctl device is used.
> 
>       While there, remove per-queue CTL device opening, which makes no
>     sense at
>       this point.
> 
>     Modified:
>       stable/12/usr.sbin/bhyve/bhyve.8
>       stable/12/usr.sbin/bhyve/pci_virtio_scsi.c
>     Directory Properties:
>       stable/12/   (props changed)
> 
>     Modified: stable/12/usr.sbin/bhyve/bhyve.8
>     ==============================================================================
>     --- stable/12/usr.sbin/bhyve/bhyve.8    Fri Dec 14 14:46:35 2018   
>         (r342082)
>     +++ stable/12/usr.sbin/bhyve/bhyve.8    Fri Dec 14 14:49:04 2018   
>         (r342083)
>     @@ -24,7 +24,7 @@
>      .\"
>      .\" $FreeBSD$
>      .\"
>     -.Dd October 24, 2018
>     +.Dd December 11, 2018
>      .Dt BHYVE 8
>      .Os
>      .Sh NAME
>     @@ -298,7 +298,16 @@ if not explicitly specified.
>      .Pp
>      SCSI devices:
>      .Bl -tag -width 10n
>     -.It Pa /dev/cam/ Ns Oo , Ns Ar port and initiator_id Oc
>     +.It Pa /dev/cam/ctl Ns Oo Ar pp . Ns Ar vp Oc Ns Oo , Ns Ar
>     scsi-device-options Oc
>     +.El
>     +.Pp
>     +The
>     +.Ar scsi-device-options
>     +are:
>     +.Bl -tag -width 10n
>     +.It Li iid= Ns Ar IID
>     +Initiator ID to use when sending requests to specified CTL port.
>     +The default value is 0.
>      .El
>      .Pp
>      TTY devices:
> 
>     Modified: stable/12/usr.sbin/bhyve/pci_virtio_scsi.c
>     ==============================================================================
>     --- stable/12/usr.sbin/bhyve/pci_virtio_scsi.c  Fri Dec 14 14:46:35
>     2018        (r342082)
>     +++ stable/12/usr.sbin/bhyve/pci_virtio_scsi.c  Fri Dec 14 14:49:04
>     2018        (r342083)
>     @@ -105,7 +105,6 @@ struct pci_vtscsi_config {
>      struct pci_vtscsi_queue {
>             struct pci_vtscsi_softc *         vsq_sc;
>             struct vqueue_info *              vsq_vq;
>     -       int                               vsq_ctl_fd;
>             pthread_mutex_t                   vsq_mtx;
>             pthread_mutex_t                   vsq_qmtx;
>             pthread_cond_t                    vsq_cv;
>     @@ -529,7 +528,7 @@ pci_vtscsi_request_handle(struct
>     pci_vtscsi_queue *q,
>                     sbuf_delete(sb);
>             }
> 
>     -       err = ioctl(q->vsq_ctl_fd, CTL_IO, io);
>     +       err = ioctl(sc->vss_ctl_fd, CTL_IO, io);
>             if (err != 0) {
>                     WPRINTF(("CTL_IO: err=%d (%s)\n", errno,
>     strerror(errno)));
>                     cmd_wr->response = VIRTIO_SCSI_S_FAILURE;
>     @@ -639,14 +638,8 @@ pci_vtscsi_init_queue(struct pci_vtscsi_softc *sc,
>             int i;
> 
>             queue->vsq_sc = sc;
>     -       queue->vsq_ctl_fd = open("/dev/cam/ctl", O_RDWR);
>             queue->vsq_vq = &sc->vss_vq[num + 2];
> 
>     -       if (queue->vsq_ctl_fd < 0) {
>     -               WPRINTF(("cannot open /dev/cam/ctl: %s\n",
>     strerror(errno)));
>     -               return (-1);
>     -       }
>     -
>             pthread_mutex_init(&queue->vsq_mtx, NULL);
>             pthread_mutex_init(&queue->vsq_qmtx, NULL);
>             pthread_cond_init(&queue->vsq_cv, NULL);
>     @@ -672,24 +665,34 @@ static int
>      pci_vtscsi_init(struct vmctx *ctx, struct pci_devinst *pi, char *opts)
>      {
>             struct pci_vtscsi_softc *sc;
>     -       char *optname = NULL;
>     -       char *opt;
>     -       int i;
>     +       char *opt, *optname;
>     +       const char *devname;
>     +       int i, optidx = 0;
> 
>             sc = calloc(1, sizeof(struct pci_vtscsi_softc));
>     -       sc->vss_ctl_fd = open("/dev/cam/ctl", O_RDWR);
>     +       devname = "/dev/cam/ctl";
>     +       while ((opt = strsep(&opts, ",")) != NULL) {
>     +               optname = strsep(&opt, "=");
>     +               if (opt == NULL && optidx == 0) {
>     +                       if (optname[0] != 0)
>     +                               devname = optname;
>     +               } else if (strcmp(optname, "dev") == 0 && opt != NULL) {
>     +                       devname = opt;
>     +               } else if (strcmp(optname, "iid") == 0 && opt != NULL) {
>     +                       sc->vss_iid = strtoul(opt, NULL, 10);
>     +               } else {
>     +                       fprintf(stderr, "Invalid option %s\n", optname);
>     +                       free(sc);
>     +                       return (1);
>     +               }
>     +               optidx++;
>     +       }
> 
>     +       sc->vss_ctl_fd = open(devname, O_RDWR);
>             if (sc->vss_ctl_fd < 0) {
>     -               WPRINTF(("cannot open /dev/cam/ctl: %s\n",
>     strerror(errno)));
>     +               WPRINTF(("cannot open %s: %s\n", devname,
>     strerror(errno)));
>     +               free(sc);
>                     return (1);
>     -       }
>     -
>     -       while ((opt = strsep(&opts, ",")) != NULL) {
>     -               if ((optname = strsep(&opt, "=")) != NULL) {
>     -                       if (strcmp(optname, "iid") == 0) {
>     -                               sc->vss_iid = strtoul(opt, NULL, 10);
>     -                       }
>     -               }
>             }
> 
>             vi_softc_linkup(&sc->vss_vs, &vtscsi_vi_consts, sc, pi,
>     sc->vss_vq);
> 

-- 
Alexander Motin



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?34b5b58b-3abc-9142-2dc8-2a9780a51304>