All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Daniel P. Berrangé" <berrange@redhat.com>
To: Zhenzhong Duan <zhenzhong.duan@intel.com>
Cc: qemu-devel@nongnu.org, alex.williamson@redhat.com,
	clg@redhat.com, jgg@nvidia.com, nicolinc@nvidia.com,
	joao.m.martins@oracle.com, eric.auger@redhat.com,
	peterx@redhat.com, jasowang@redhat.com, kevin.tian@intel.com,
	yi.l.liu@intel.com, yi.y.sun@intel.com, chao.p.peng@intel.com
Subject: Re: [PATCH v1 17/22] util/char_dev: Add open_cdev()
Date: Wed, 20 Sep 2023 13:39:02 +0100	[thread overview]
Message-ID: <ZQrn5oyrdIXw2A7Y@redhat.com> (raw)
In-Reply-To: <20230830103754.36461-18-zhenzhong.duan@intel.com>

On Wed, Aug 30, 2023 at 06:37:49PM +0800, Zhenzhong Duan wrote:
> From: Yi Liu <yi.l.liu@intel.com>
> 
> /dev/vfio/devices/vfioX may not exist. In that case it is still possible
> to open /dev/char/$major:$minor instead. Add helper function to abstract
> the cdev open.
> 
> Suggested-by: Jason Gunthorpe <jgg@nvidia.com>
> Signed-off-by: Yi Liu <yi.l.liu@intel.com>
> Signed-off-by: Zhenzhong Duan <zhenzhong.duan@intel.com>
> ---
>  MAINTAINERS             |  6 ++++
>  include/qemu/char_dev.h | 16 +++++++++++
>  util/chardev_open.c     | 61 +++++++++++++++++++++++++++++++++++++++++

Using the same naming scheme for the .c and .h is strongly desired.

>  util/meson.build        |  1 +
>  4 files changed, 84 insertions(+)
>  create mode 100644 include/qemu/char_dev.h
>  create mode 100644 util/chardev_open.c
> 
> diff --git a/MAINTAINERS b/MAINTAINERS
> index 04663fbb6f..74d18593fe 100644
> --- a/MAINTAINERS
> +++ b/MAINTAINERS
> @@ -3372,6 +3372,12 @@ S: Maintained
>  F: include/qemu/iova-tree.h
>  F: util/iova-tree.c
>  
> +cdev Open
> +M: Yi Liu <yi.l.liu@intel.com>
> +S: Maintained
> +F: include/qemu/char_dev.h
> +F: util/chardev_open.c
> +


> diff --git a/util/chardev_open.c b/util/chardev_open.c
> new file mode 100644
> index 0000000000..d03e415131
> --- /dev/null
> +++ b/util/chardev_open.c
> @@ -0,0 +1,61 @@
> +/*
> + * Copyright (C) 2023 Intel Corporation.
> + * Copyright (c) 2019, Mellanox Technologies. All rights reserved.
> + *
> + * Authors: Yi Liu <yi.l.liu@intel.com>
> + *
> + * This work is licensed under the terms of the GNU GPL, version 2.  See
> + * the COPYING file in the top-level directory.
> + *
> + * Copied from
> + * https://github.com/linux-rdma/rdma-core/blob/master/util/open_cdev.c
> + *
> + */

Since this is GPL-2.0-only, IMHO it would be preferrable to keep it
out of the util/ directory, as we're aiming to not add further 2.0
only code, except for specific subdirs. This only appears to be used
by code under hw/vfio/, whcih is one of the dirs still permitting
2.0-only code. So I think better to keep this file where it is used.

> +#ifndef _GNU_SOURCE
> +#define _GNU_SOURCE
> +#endif

This is set globally for building all files in QEMU

> +#include "qemu/osdep.h"
> +#include "qemu/char_dev.h"
> +
> +static int open_cdev_internal(const char *path, dev_t cdev)
> +{
> +    struct stat st;
> +    int fd;
> +
> +    fd = qemu_open_old(path, O_RDWR);
> +    if (fd == -1) {
> +        return -1;
> +    }
> +    if (fstat(fd, &st) || !S_ISCHR(st.st_mode) ||
> +        (cdev != 0 && st.st_rdev != cdev)) {
> +        close(fd);
> +        return -1;
> +    }
> +    return fd;
> +}
> +
> +static int open_cdev_robust(dev_t cdev)
> +{
> +    char *devpath;

g_autofree for this...

> +    int ret;
> +
> +    /*
> +     * This assumes that udev is being used and is creating the /dev/char/
> +     * symlinks.
> +     */
> +    devpath = g_strdup_printf("/dev/char/%u:%u", major(cdev), minor(cdev));
> +    ret = open_cdev_internal(devpath, cdev);
> +    g_free(devpath);

...avoids the need for g_free, and also avoids the need for
the intermediate 'ret' variable.

> +    return ret;
> +}
> +
> +int open_cdev(const char *devpath, dev_t cdev)
> +{
> +    int fd;
> +
> +    fd = open_cdev_internal(devpath, cdev);
> +    if (fd == -1 && cdev != 0) {
> +        return open_cdev_robust(cdev);
> +    }
> +    return fd;
> +}
> diff --git a/util/meson.build b/util/meson.build
> index a375160286..d5313d858f 100644
> --- a/util/meson.build
> +++ b/util/meson.build
> @@ -107,6 +107,7 @@ if have_block
>      util_ss.add(files('filemonitor-stub.c'))
>    endif
>    util_ss.add(when: 'CONFIG_LINUX', if_true: files('vfio-helpers.c'))
> +  util_ss.add(when: 'CONFIG_LINUX', if_true: files('chardev_open.c'))
>  endif
>  
>  if cpu == 'aarch64'
> -- 
> 2.34.1
> 
> 

With regards,
Daniel
-- 
|: https://berrange.com      -o-    https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org         -o-            https://fstop138.berrange.com :|
|: https://entangle-photo.org    -o-    https://www.instagram.com/dberrange :|



  reply	other threads:[~2023-09-20 12:40 UTC|newest]

Thread overview: 109+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-08-30 10:37 [PATCH v1 00/22] vfio: Adopt iommufd Zhenzhong Duan
2023-08-30 10:37 ` [PATCH v1 01/22] scripts/update-linux-headers: Add iommufd.h Zhenzhong Duan
2023-08-30 10:37 ` [PATCH v1 02/22] Update linux-header to support iommufd cdev and hwpt alloc Zhenzhong Duan
2023-09-14 14:46   ` Eric Auger
2023-09-15  3:02     ` Duan, Zhenzhong
2023-09-20 11:04       ` Eric Auger
2023-09-20 11:15         ` Duan, Zhenzhong
2023-08-30 10:37 ` [PATCH v1 03/22] vfio/common: Move IOMMU agnostic helpers to a separate file Zhenzhong Duan
2023-08-30 10:37 ` [PATCH v1 04/22] vfio/common: Introduce vfio_container_add|del_section_window() Zhenzhong Duan
2023-09-20 11:23   ` Eric Auger
2023-09-20 12:18     ` Duan, Zhenzhong
2023-09-21  8:28   ` Cédric Le Goater
2023-09-21 10:14     ` Duan, Zhenzhong
2023-09-21 10:55       ` Cédric Le Goater
2023-09-27  2:08       ` Duan, Zhenzhong
2023-09-27  6:50         ` Cédric Le Goater
2023-08-30 10:37 ` [PATCH v1 05/22] vfio/common: Extract out vfio_kvm_device_[add/del]_fd Zhenzhong Duan
2023-09-20 11:49   ` Eric Auger
2023-09-21  2:04     ` Duan, Zhenzhong
2023-09-21  8:42     ` Cédric Le Goater
2023-09-21 10:22       ` Duan, Zhenzhong
2023-09-21 10:53         ` Cédric Le Goater
2023-09-20 21:39   ` Alex Williamson
2023-09-21  6:03     ` Duan, Zhenzhong
2023-08-30 10:37 ` [PATCH v1 06/22] vfio/common: Add a vfio device iterator Zhenzhong Duan
2023-09-20 12:25   ` Eric Auger
2023-09-21  2:27     ` Duan, Zhenzhong
2023-09-20 22:16   ` Alex Williamson
2023-09-21  2:16     ` Duan, Zhenzhong
2023-08-30 10:37 ` [PATCH v1 07/22] vfio/common: Refactor vfio_viommu_preset() to be group agnostic Zhenzhong Duan
2023-09-20 13:00   ` Eric Auger
2023-09-21  2:52     ` Duan, Zhenzhong
2023-09-20 22:51   ` Alex Williamson
2023-09-21  6:13     ` Duan, Zhenzhong
2023-08-30 10:37 ` [PATCH v1 08/22] vfio/common: Move legacy VFIO backend code into separate container.c Zhenzhong Duan
2023-09-20 13:12   ` Eric Auger
2023-09-21  3:02     ` Duan, Zhenzhong
2023-08-30 10:37 ` [PATCH v1 09/22] vfio/container: Introduce vfio_[attach/detach]_device Zhenzhong Duan
2023-09-20 13:33   ` Eric Auger
2023-09-21  3:08     ` Duan, Zhenzhong
2023-09-21  9:44   ` Cédric Le Goater
2023-09-21 10:26     ` Duan, Zhenzhong
2023-08-30 10:37 ` [PATCH v1 10/22] vfio/platform: Use vfio_[attach/detach]_device Zhenzhong Duan
2023-09-21 12:17   ` Cédric Le Goater
2023-08-30 10:37 ` [PATCH v1 11/22] vfio/ap: " Zhenzhong Duan
2023-08-30 10:37 ` [PATCH v1 12/22] vfio/ccw: " Zhenzhong Duan
2023-09-21 12:19   ` Cédric Le Goater
2023-09-21 13:00     ` Duan, Zhenzhong
2023-09-21 13:24       ` Cédric Le Goater
2023-08-30 10:37 ` [PATCH v1 13/22] vfio: Add base container Zhenzhong Duan
2023-09-19 17:23   ` Cédric Le Goater
2023-09-20  8:48     ` Duan, Zhenzhong
2023-09-20 12:57       ` Cédric Le Goater
2023-09-20 13:58         ` Eric Auger
2023-09-21  2:51         ` Duan, Zhenzhong
2023-09-20 13:53     ` Eric Auger
2023-09-21  3:12       ` Duan, Zhenzhong
2023-09-20 17:31     ` Eric Auger
2023-09-21  3:35       ` Duan, Zhenzhong
2023-09-21  6:28         ` Eric Auger
2023-09-21 17:20         ` Eric Auger
2023-09-22  2:52           ` Duan, Zhenzhong
2023-08-30 10:37 ` [PATCH v1 14/22] vfio/common: Simplify vfio_viommu_preset() Zhenzhong Duan
2023-09-19 16:01   ` Cédric Le Goater
2023-09-20  2:59     ` Duan, Zhenzhong
2023-08-30 10:37 ` [PATCH v1 15/22] Add iommufd configure option Zhenzhong Duan
2023-09-19 17:07   ` Cédric Le Goater
2023-09-20  3:42     ` Duan, Zhenzhong
2023-09-20 12:19       ` Cédric Le Goater
2023-09-20 12:51         ` Jason Gunthorpe
2023-09-20 13:01           ` Daniel P. Berrangé
2023-09-20 13:07             ` Jason Gunthorpe
2023-09-20 13:02           ` Cédric Le Goater
2023-09-20 17:37             ` Eric Auger
2023-09-20 17:49               ` Jason Gunthorpe
2023-09-20 18:17                 ` Alex Williamson
2023-09-20 18:19                   ` Jason Gunthorpe
2023-09-21  3:43                     ` Duan, Zhenzhong
2023-09-26  6:05                     ` Tian, Kevin
2023-09-21  4:00             ` Duan, Zhenzhong
2023-09-21  2:11         ` Duan, Zhenzhong
2023-09-20 18:01       ` Alex Williamson
2023-09-20 18:12         ` Jason Gunthorpe
2023-09-20 20:29           ` Alex Williamson
2023-09-20 18:15         ` Daniel P. Berrangé
2023-08-30 10:37 ` [PATCH v1 16/22] backends/iommufd: Introduce the iommufd object Zhenzhong Duan
2023-09-22  7:15   ` Cédric Le Goater
2023-09-22  8:39     ` Duan, Zhenzhong
2023-08-30 10:37 ` [PATCH v1 17/22] util/char_dev: Add open_cdev() Zhenzhong Duan
2023-09-20 12:39   ` Daniel P. Berrangé [this message]
2023-09-20 12:53     ` Jason Gunthorpe
2023-09-20 12:56       ` Daniel P. Berrangé
2023-09-21  2:37     ` Duan, Zhenzhong
2023-08-30 10:37 ` [PATCH v1 18/22] vfio/iommufd: Implement the iommufd backend Zhenzhong Duan
2023-08-30 10:37 ` [PATCH v1 19/22] vfio/iommufd: Add vfio device iterator callback for iommufd Zhenzhong Duan
2023-08-30 10:37 ` [PATCH v1 20/22] vfio/pci: Adapt vfio pci hot reset support with iommufd BE Zhenzhong Duan
2023-08-30 10:37 ` [PATCH v1 21/22] vfio/pci: Allow the selection of a given iommu backend Zhenzhong Duan
2023-09-06 18:10   ` Jason Gunthorpe
2023-09-06 19:09     ` Alex Williamson
2023-09-07  1:10       ` Jason Gunthorpe
2023-09-07  2:27         ` Duan, Zhenzhong
2023-08-30 10:37 ` [PATCH v1 22/22] vfio/pci: Make vfio cdev pre-openable by passing a file handle Zhenzhong Duan
2023-09-14  9:04 ` [PATCH v1 00/22] vfio: Adopt iommufd Eric Auger
2023-09-14  9:27   ` Duan, Zhenzhong
2023-09-15 12:42 ` Cédric Le Goater
2023-09-15 13:14   ` Duan, Zhenzhong
2023-09-18 11:51   ` Jason Gunthorpe
2023-09-18 12:23     ` Cédric Le Goater
2023-09-18 17:56       ` Jason Gunthorpe

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=ZQrn5oyrdIXw2A7Y@redhat.com \
    --to=berrange@redhat.com \
    --cc=alex.williamson@redhat.com \
    --cc=chao.p.peng@intel.com \
    --cc=clg@redhat.com \
    --cc=eric.auger@redhat.com \
    --cc=jasowang@redhat.com \
    --cc=jgg@nvidia.com \
    --cc=joao.m.martins@oracle.com \
    --cc=kevin.tian@intel.com \
    --cc=nicolinc@nvidia.com \
    --cc=peterx@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=yi.l.liu@intel.com \
    --cc=yi.y.sun@intel.com \
    --cc=zhenzhong.duan@intel.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.