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 <m...@freebsd.org
> <mailto:m...@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
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to