lkml.org 
[lkml]   [2021]   [Sep]   [13]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 3/9] virtio-console: switch to use .validate()
    Date
    This patch switches to use validate() to filter out the features that
    is not supported by the rproc.

    Cc: Amit Shah <amit@kernel.org>
    Signed-off-by: Jason Wang <jasowang@redhat.com>
    ---
    drivers/char/virtio_console.c | 41 ++++++++++++++++++++++-------------
    1 file changed, 26 insertions(+), 15 deletions(-)

    diff --git a/drivers/char/virtio_console.c b/drivers/char/virtio_console.c
    index 7eaf303a7a86..daeed31df622 100644
    --- a/drivers/char/virtio_console.c
    +++ b/drivers/char/virtio_console.c
    @@ -1172,9 +1172,7 @@ static void resize_console(struct port *port)

    vdev = port->portdev->vdev;

    - /* Don't test F_SIZE at all if we're rproc: not a valid feature! */
    - if (!is_rproc_serial(vdev) &&
    - virtio_has_feature(vdev, VIRTIO_CONSOLE_F_SIZE))
    + if (virtio_has_feature(vdev, VIRTIO_CONSOLE_F_SIZE))
    hvc_resize(port->cons.hvc, port->cons.ws);
    }

    @@ -1981,6 +1979,29 @@ static void virtcons_remove(struct virtio_device *vdev)
    kfree(portdev);
    }

    +static int virtcons_validate(struct virtio_device *vdev)
    +{
    + if (is_rproc_serial(vdev)) {
    + /* Don't test F_SIZE at all if we're rproc: not a
    + * valid feature! */
    + __virtio_clear_bit(vdev, VIRTIO_CONSOLE_F_SIZE);
    + /* Don't test MULTIPORT at all if we're rproc: not a
    + * valid feature! */
    + __virtio_clear_bit(vdev, VIRTIO_CONSOLE_F_MULTIPORT);
    + }
    +
    + /* We only need a config space if features are offered */
    + if (!vdev->config->get &&
    + (virtio_has_feature(vdev, VIRTIO_CONSOLE_F_SIZE)
    + || virtio_has_feature(vdev, VIRTIO_CONSOLE_F_MULTIPORT))) {
    + dev_err(&vdev->dev, "%s failure: config access disabled\n",
    + __func__);
    + return -EINVAL;
    + }
    +
    + return 0;
    +}
    +
    /*
    * Once we're further in boot, we get probed like any other virtio
    * device.
    @@ -1996,15 +2017,6 @@ static int virtcons_probe(struct virtio_device *vdev)
    bool multiport;
    bool early = early_put_chars != NULL;

    - /* We only need a config space if features are offered */
    - if (!vdev->config->get &&
    - (virtio_has_feature(vdev, VIRTIO_CONSOLE_F_SIZE)
    - || virtio_has_feature(vdev, VIRTIO_CONSOLE_F_MULTIPORT))) {
    - dev_err(&vdev->dev, "%s failure: config access disabled\n",
    - __func__);
    - return -EINVAL;
    - }
    -
    /* Ensure to read early_put_chars now */
    barrier();

    @@ -2031,9 +2043,7 @@ static int virtcons_probe(struct virtio_device *vdev)
    multiport = false;
    portdev->max_nr_ports = 1;

    - /* Don't test MULTIPORT at all if we're rproc: not a valid feature! */
    - if (!is_rproc_serial(vdev) &&
    - virtio_cread_feature(vdev, VIRTIO_CONSOLE_F_MULTIPORT,
    + if (virtio_cread_feature(vdev, VIRTIO_CONSOLE_F_MULTIPORT,
    struct virtio_console_config, max_nr_ports,
    &portdev->max_nr_ports) == 0) {
    multiport = true;
    @@ -2210,6 +2220,7 @@ static struct virtio_driver virtio_console = {
    .driver.name = KBUILD_MODNAME,
    .driver.owner = THIS_MODULE,
    .id_table = id_table,
    + .validate = virtcons_validate,
    .probe = virtcons_probe,
    .remove = virtcons_remove,
    .config_changed = config_intr,
    --
    2.25.1
    \
     
     \ /
      Last update: 2021-09-13 07:55    [W:4.347 / U:0.048 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site