From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.8 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 6C144C5DF64 for ; Wed, 6 Nov 2019 13:41:14 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 1E7412173B for ; Wed, 6 Nov 2019 13:41:14 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="GITjHNDU" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731890AbfKFNlN (ORCPT ); Wed, 6 Nov 2019 08:41:13 -0500 Received: from us-smtp-delivery-1.mimecast.com ([205.139.110.120]:60913 "EHLO us-smtp-1.mimecast.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1731759AbfKFNlM (ORCPT ); Wed, 6 Nov 2019 08:41:12 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1573047670; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=wtvIi2yIPGS5MLETRkpjvruFht3By2opLcoYExxwXWY=; b=GITjHNDUwu1ToM+Nxa0q6x1+NltTTxHStqjHhaUZF2lRRtyR8MOz4dhe2hdQZjdIrnTr3b D5GyethY0cee2eY0XwOkHoBJ8goAPdaZqh/fyynnz0VbSzu/7n5Wr0vPbjP46W1xB/gQ/1 uUhrN/b0iHuYoxH03XqYwcxXmCVJOMo= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-132--hOtL8uHOJqStbIMTCX8Ig-1; Wed, 06 Nov 2019 08:41:08 -0500 Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.phx2.redhat.com [10.5.11.23]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 744B81800D6B; Wed, 6 Nov 2019 13:41:04 +0000 (UTC) Received: from jason-ThinkPad-X1-Carbon-6th.redhat.com (ovpn-12-193.pek2.redhat.com [10.72.12.193]) by smtp.corp.redhat.com (Postfix) with ESMTP id 73AAF19756; Wed, 6 Nov 2019 13:40:22 +0000 (UTC) From: Jason Wang To: kvm@vger.kernel.org, linux-s390@vger.kernel.org, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, intel-gfx@lists.freedesktop.org, intel-gvt-dev@lists.freedesktop.org, kwankhede@nvidia.com, alex.williamson@redhat.com, mst@redhat.com, tiwei.bie@intel.com Cc: virtualization@lists.linux-foundation.org, netdev@vger.kernel.org, cohuck@redhat.com, maxime.coquelin@redhat.com, cunming.liang@intel.com, zhihong.wang@intel.com, rob.miller@broadcom.com, xiao.w.wang@intel.com, haotian.wang@sifive.com, zhenyuw@linux.intel.com, zhi.a.wang@intel.com, jani.nikula@linux.intel.com, joonas.lahtinen@linux.intel.com, rodrigo.vivi@intel.com, airlied@linux.ie, daniel@ffwll.ch, farman@linux.ibm.com, pasic@linux.ibm.com, sebott@linux.ibm.com, oberpar@linux.ibm.com, heiko.carstens@de.ibm.com, gor@linux.ibm.com, borntraeger@de.ibm.com, akrowiak@linux.ibm.com, freude@linux.ibm.com, lingshan.zhu@intel.com, idos@mellanox.com, eperezma@redhat.com, lulu@redhat.com, parav@mellanox.com, christophe.de.dinechin@gmail.com, kevin.tian@intel.com, stefanha@redhat.com, Jason Wang Subject: [PATCH V10 4/6] mdev: introduce virtio device and its device ops Date: Wed, 6 Nov 2019 21:35:29 +0800 Message-Id: <20191106133531.693-5-jasowang@redhat.com> In-Reply-To: <20191106133531.693-1-jasowang@redhat.com> References: <20191106133531.693-1-jasowang@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.23 X-MC-Unique: -hOtL8uHOJqStbIMTCX8Ig-1 X-Mimecast-Spam-Score: 0 Content-Type: text/plain; charset=WINDOWS-1252 Content-Transfer-Encoding: quoted-printable Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This patch implements basic support for mdev driver that supports virtio transport for kernel virtio driver. Reviewed-by: Cornelia Huck Signed-off-by: Jason Wang --- MAINTAINERS | 1 + drivers/vfio/mdev/mdev_core.c | 21 +++++ drivers/vfio/mdev/mdev_private.h | 2 + include/linux/mdev.h | 6 ++ include/linux/mdev_virtio_ops.h | 147 +++++++++++++++++++++++++++++++ 5 files changed, 177 insertions(+) create mode 100644 include/linux/mdev_virtio_ops.h diff --git a/MAINTAINERS b/MAINTAINERS index f661d13344d6..4997957443df 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -17248,6 +17248,7 @@ F:=09include/linux/virtio*.h F:=09include/uapi/linux/virtio_*.h F:=09drivers/crypto/virtio/ F:=09mm/balloon_compaction.c +F:=09include/linux/mdev_virtio_ops.h =20 VIRTIO BLOCK AND SCSI DRIVERS M:=09"Michael S. Tsirkin" diff --git a/drivers/vfio/mdev/mdev_core.c b/drivers/vfio/mdev/mdev_core.c index 4e70f19ac145..c58253404ed5 100644 --- a/drivers/vfio/mdev/mdev_core.c +++ b/drivers/vfio/mdev/mdev_core.c @@ -78,6 +78,27 @@ const struct mdev_vfio_device_ops *mdev_get_vfio_ops(str= uct mdev_device *mdev) } EXPORT_SYMBOL(mdev_get_vfio_ops); =20 +/* + * Specify the virtio device ops for the mdev device, this + * must be called during create() callback for virtio mdev device. + */ +void mdev_set_virtio_ops(struct mdev_device *mdev, +=09=09=09 const struct mdev_virtio_device_ops *virtio_ops) +{ +=09mdev_set_class(mdev, MDEV_CLASS_ID_VIRTIO); +=09mdev->virtio_ops =3D virtio_ops; +} +EXPORT_SYMBOL(mdev_set_virtio_ops); + +/* Get the virtio device ops for the mdev device. */ +const struct mdev_virtio_device_ops * +mdev_get_virtio_ops(struct mdev_device *mdev) +{ +=09WARN_ON(mdev->class_id !=3D MDEV_CLASS_ID_VIRTIO); +=09return mdev->virtio_ops; +} +EXPORT_SYMBOL(mdev_get_virtio_ops); + struct device *mdev_dev(struct mdev_device *mdev) { =09return &mdev->dev; diff --git a/drivers/vfio/mdev/mdev_private.h b/drivers/vfio/mdev/mdev_priv= ate.h index 411227373625..2c74dd032409 100644 --- a/drivers/vfio/mdev/mdev_private.h +++ b/drivers/vfio/mdev/mdev_private.h @@ -11,6 +11,7 @@ #define MDEV_PRIVATE_H =20 #include +#include =20 int mdev_bus_register(void); void mdev_bus_unregister(void); @@ -38,6 +39,7 @@ struct mdev_device { =09u16 class_id; =09union { =09=09const struct mdev_vfio_device_ops *vfio_ops; +=09=09const struct mdev_virtio_device_ops *virtio_ops; =09}; }; =20 diff --git a/include/linux/mdev.h b/include/linux/mdev.h index 9e37506d1987..f3d75a60c2b5 100644 --- a/include/linux/mdev.h +++ b/include/linux/mdev.h @@ -17,6 +17,7 @@ =20 struct mdev_device; struct mdev_vfio_device_ops; +struct mdev_virtio_device_ops; =20 /* * Called by the parent device driver to set the device which represents @@ -112,6 +113,10 @@ void mdev_set_class(struct mdev_device *mdev, u16 id); void mdev_set_vfio_ops(struct mdev_device *mdev, =09=09 const struct mdev_vfio_device_ops *vfio_ops); const struct mdev_vfio_device_ops *mdev_get_vfio_ops(struct mdev_device *m= dev); +void mdev_set_virtio_ops(struct mdev_device *mdev, +=09=09=09 const struct mdev_virtio_device_ops *virtio_ops); +const struct mdev_virtio_device_ops * +mdev_get_virtio_ops(struct mdev_device *mdev); =20 extern struct bus_type mdev_bus_type; =20 @@ -127,6 +132,7 @@ struct mdev_device *mdev_from_dev(struct device *dev); =20 enum { =09MDEV_CLASS_ID_VFIO =3D 1, +=09MDEV_CLASS_ID_VIRTIO =3D 2, =09/* New entries must be added here */ }; =20 diff --git a/include/linux/mdev_virtio_ops.h b/include/linux/mdev_virtio_op= s.h new file mode 100644 index 000000000000..8951331c6629 --- /dev/null +++ b/include/linux/mdev_virtio_ops.h @@ -0,0 +1,147 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +/* + * Virtio mediated device driver + * + * Copyright 2019, Red Hat Corp. + * Author: Jason Wang + */ +#ifndef MDEV_VIRTIO_OPS_H +#define MDEV_VIRTIO_OPS_H + +#include +#include +#include + +#define VIRTIO_MDEV_DEVICE_API_STRING=09=09"virtio-mdev" + +struct virtio_mdev_callback { +=09irqreturn_t (*callback)(void *data); +=09void *private; +}; + +/** + * struct mdev_virtio_device_ops - Structure to be registered for each + * mdev device to register the device for virtio/vhost drivers. + * + * The callbacks are mandatory unless explicitly mentioned. + * + * @set_vq_address:=09=09Set the address of virtqueue + *=09=09=09=09@mdev: mediated device + *=09=09=09=09@idx: virtqueue index + *=09=09=09=09@desc_area: address of desc area + *=09=09=09=09@driver_area: address of driver area + *=09=09=09=09@device_area: address of device area + *=09=09=09=09Returns integer: success (0) or error (< 0) + * @set_vq_num:=09=09=09Set the size of virtqueue + *=09=09=09=09@mdev: mediated device + *=09=09=09=09@idx: virtqueue index + *=09=09=09=09@num: the size of virtqueue + * @kick_vq:=09=09=09Kick the virtqueue + *=09=09=09=09@mdev: mediated device + *=09=09=09=09@idx: virtqueue index + * @set_vq_cb:=09=09=09Set the interrupt callback function for + *=09=09=09=09a virtqueue + *=09=09=09=09@mdev: mediated device + *=09=09=09=09@idx: virtqueue index + *=09=09=09=09@cb: virtio-mdev interrupt callback structure + * @set_vq_ready:=09=09Set ready status for a virtqueue + *=09=09=09=09@mdev: mediated device + *=09=09=09=09@idx: virtqueue index + *=09=09=09=09@ready: ready (true) not ready(false) + * @get_vq_ready:=09=09Get ready status for a virtqueue + *=09=09=09=09@mdev: mediated device + *=09=09=09=09@idx: virtqueue index + *=09=09=09=09Returns boolean: ready (true) or not (false) + * @set_vq_state:=09=09Set the state for a virtqueue + *=09=09=09=09@mdev: mediated device + *=09=09=09=09@idx: virtqueue index + *=09=09=09=09@state: virtqueue state (last_avail_idx) + *=09=09=09=09Returns integer: success (0) or error (< 0) + * @get_vq_state:=09=09Get the state for a virtqueue + *=09=09=09=09@mdev: mediated device + *=09=09=09=09@idx: virtqueue index + *=09=09=09=09Returns virtqueue state (last_avail_idx) + * @get_vq_align:=09=09Get the virtqueue align requirement + *=09=09=09=09for the device + *=09=09=09=09@mdev: mediated device + *=09=09=09=09Returns virtqueue algin requirement + * @get_features:=09=09Get virtio features supported by the device + *=09=09=09=09@mdev: mediated device + *=09=09=09=09Returns the virtio features support by the + *=09=09=09=09device + * @set_features:=09=09Set virtio features supported by the driver + *=09=09=09=09@mdev: mediated device + *=09=09=09=09@features: feature support by the driver + *=09=09=09=09Returns integer: success (0) or error (< 0) + * @set_config_cb:=09=09Set the config interrupt callback + *=09=09=09=09@mdev: mediated device + *=09=09=09=09@cb: virtio-mdev interrupt callback structure + * @get_vq_num_max:=09=09Get the max size of virtqueue + *=09=09=09=09@mdev: mediated device + *=09=09=09=09Returns u16: max size of virtqueue + * @get_device_id:=09=09Get virtio device id + *=09=09=09=09@mdev: mediated device + *=09=09=09=09Returns u32: virtio device id + * @get_vendor_id:=09=09Get id for the vendor that provides this device + *=09=09=09=09@mdev: mediated device + *=09=09=09=09Returns u32: virtio vendor id + * @get_status:=09=09=09Get the device status + *=09=09=09=09@mdev: mediated device + *=09=09=09=09Returns u8: virtio device status + * @set_status:=09=09=09Set the device status + *=09=09=09=09@mdev: mediated device + *=09=09=09=09@status: virtio device status + * @get_config:=09=09=09Read from device specific configuration space + *=09=09=09=09@mdev: mediated device + *=09=09=09=09@offset: offset from the beginning of + *=09=09=09=09configuration space + *=09=09=09=09@buf: buffer used to read to + *=09=09=09=09@len: the length to read from + *=09=09=09=09configration space + * @set_config:=09=09=09Write to device specific configuration space + *=09=09=09=09@mdev: mediated device + *=09=09=09=09@offset: offset from the beginning of + *=09=09=09=09configuration space + *=09=09=09=09@buf: buffer used to write from + *=09=09=09=09@len: the length to write to + *=09=09=09=09configration space + * @get_generation:=09=09Get device config generaton (optional) + *=09=09=09=09@mdev: mediated device + *=09=09=09=09Returns u32: device generation + */ +struct mdev_virtio_device_ops { +=09/* Virtqueue ops */ +=09int (*set_vq_address)(struct mdev_device *mdev, +=09=09=09 u16 idx, u64 desc_area, u64 driver_area, +=09=09=09 u64 device_area); +=09void (*set_vq_num)(struct mdev_device *mdev, u16 idx, u32 num); +=09void (*kick_vq)(struct mdev_device *mdev, u16 idx); +=09void (*set_vq_cb)(struct mdev_device *mdev, u16 idx, +=09=09=09 struct virtio_mdev_callback *cb); +=09void (*set_vq_ready)(struct mdev_device *mdev, u16 idx, bool ready); +=09bool (*get_vq_ready)(struct mdev_device *mdev, u16 idx); +=09int (*set_vq_state)(struct mdev_device *mdev, u16 idx, u64 state); +=09u64 (*get_vq_state)(struct mdev_device *mdev, u16 idx); + +=09/* Virtio device ops */ +=09u16 (*get_vq_align)(struct mdev_device *mdev); +=09u64 (*get_features)(struct mdev_device *mdev); +=09int (*set_features)(struct mdev_device *mdev, u64 features); +=09void (*set_config_cb)(struct mdev_device *mdev, +=09=09=09 struct virtio_mdev_callback *cb); +=09u16 (*get_vq_num_max)(struct mdev_device *mdev); +=09u32 (*get_device_id)(struct mdev_device *mdev); +=09u32 (*get_vendor_id)(struct mdev_device *mdev); +=09u8 (*get_status)(struct mdev_device *mdev); +=09void (*set_status)(struct mdev_device *mdev, u8 status); +=09void (*get_config)(struct mdev_device *mdev, unsigned int offset, +=09=09=09 void *buf, unsigned int len); +=09void (*set_config)(struct mdev_device *mdev, unsigned int offset, +=09=09=09 const void *buf, unsigned int len); +=09u32 (*get_generation)(struct mdev_device *mdev); +}; + +void mdev_set_virtio_ops(struct mdev_device *mdev, +=09=09=09 const struct mdev_virtio_device_ops *virtio_ops); + +#endif --=20 2.19.1 From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jason Wang Subject: [PATCH V10 4/6] mdev: introduce virtio device and its device ops Date: Wed, 6 Nov 2019 21:35:29 +0800 Message-ID: <20191106133531.693-5-jasowang@redhat.com> References: <20191106133531.693-1-jasowang@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset=WINDOWS-1252 Content-Transfer-Encoding: quoted-printable Return-path: In-Reply-To: <20191106133531.693-1-jasowang@redhat.com> Sender: netdev-owner@vger.kernel.org To: kvm@vger.kernel.org, linux-s390@vger.kernel.org, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, intel-gfx@lists.freedesktop.org, intel-gvt-dev@lists.freedesktop.org, kwankhede@nvidia.com, alex.williamson@redhat.com, mst@redhat.com, tiwei.bie@intel.com Cc: virtualization@lists.linux-foundation.org, netdev@vger.kernel.org, cohuck@redhat.com, maxime.coquelin@redhat.com, cunming.liang@intel.com, zhihong.wang@intel.com, rob.miller@broadcom.com, xiao.w.wang@intel.com, haotian.wang@sifive.com, zhenyuw@linux.intel.com, zhi.a.wang@intel.com, jani.nikula@linux.intel.com, joonas.lahtinen@linux.intel.com, rodrigo.vivi@intel.com, airlied@linux.ie, daniel@ffwll.ch, farman@linux.ibm.com, pasic@linux.ibm.com, sebott@linux.ibm.com, oberpar@linux.ibm.com, heiko.carstens@de.ibm.com, gor@linux.ibm.com, borntraeger@de.ibm.com, akrowiak@linux.ibm.com, freude@linux.ibm.com, lingshan.zhu@intel.com, idos@mellanox.com, eperezma@redhat.com, lulu@redhat.com, parav@mellanox.com, christophe.de.dinechin@gmail.com, kevin.tian@intel.com, stefanha@redhat.com List-Id: dri-devel@lists.freedesktop.org This patch implements basic support for mdev driver that supports virtio transport for kernel virtio driver. Reviewed-by: Cornelia Huck Signed-off-by: Jason Wang --- MAINTAINERS | 1 + drivers/vfio/mdev/mdev_core.c | 21 +++++ drivers/vfio/mdev/mdev_private.h | 2 + include/linux/mdev.h | 6 ++ include/linux/mdev_virtio_ops.h | 147 +++++++++++++++++++++++++++++++ 5 files changed, 177 insertions(+) create mode 100644 include/linux/mdev_virtio_ops.h diff --git a/MAINTAINERS b/MAINTAINERS index f661d13344d6..4997957443df 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -17248,6 +17248,7 @@ F:=09include/linux/virtio*.h F:=09include/uapi/linux/virtio_*.h F:=09drivers/crypto/virtio/ F:=09mm/balloon_compaction.c +F:=09include/linux/mdev_virtio_ops.h =20 VIRTIO BLOCK AND SCSI DRIVERS M:=09"Michael S. Tsirkin" diff --git a/drivers/vfio/mdev/mdev_core.c b/drivers/vfio/mdev/mdev_core.c index 4e70f19ac145..c58253404ed5 100644 --- a/drivers/vfio/mdev/mdev_core.c +++ b/drivers/vfio/mdev/mdev_core.c @@ -78,6 +78,27 @@ const struct mdev_vfio_device_ops *mdev_get_vfio_ops(str= uct mdev_device *mdev) } EXPORT_SYMBOL(mdev_get_vfio_ops); =20 +/* + * Specify the virtio device ops for the mdev device, this + * must be called during create() callback for virtio mdev device. + */ +void mdev_set_virtio_ops(struct mdev_device *mdev, +=09=09=09 const struct mdev_virtio_device_ops *virtio_ops) +{ +=09mdev_set_class(mdev, MDEV_CLASS_ID_VIRTIO); +=09mdev->virtio_ops =3D virtio_ops; +} +EXPORT_SYMBOL(mdev_set_virtio_ops); + +/* Get the virtio device ops for the mdev device. */ +const struct mdev_virtio_device_ops * +mdev_get_virtio_ops(struct mdev_device *mdev) +{ +=09WARN_ON(mdev->class_id !=3D MDEV_CLASS_ID_VIRTIO); +=09return mdev->virtio_ops; +} +EXPORT_SYMBOL(mdev_get_virtio_ops); + struct device *mdev_dev(struct mdev_device *mdev) { =09return &mdev->dev; diff --git a/drivers/vfio/mdev/mdev_private.h b/drivers/vfio/mdev/mdev_priv= ate.h index 411227373625..2c74dd032409 100644 --- a/drivers/vfio/mdev/mdev_private.h +++ b/drivers/vfio/mdev/mdev_private.h @@ -11,6 +11,7 @@ #define MDEV_PRIVATE_H =20 #include +#include =20 int mdev_bus_register(void); void mdev_bus_unregister(void); @@ -38,6 +39,7 @@ struct mdev_device { =09u16 class_id; =09union { =09=09const struct mdev_vfio_device_ops *vfio_ops; +=09=09const struct mdev_virtio_device_ops *virtio_ops; =09}; }; =20 diff --git a/include/linux/mdev.h b/include/linux/mdev.h index 9e37506d1987..f3d75a60c2b5 100644 --- a/include/linux/mdev.h +++ b/include/linux/mdev.h @@ -17,6 +17,7 @@ =20 struct mdev_device; struct mdev_vfio_device_ops; +struct mdev_virtio_device_ops; =20 /* * Called by the parent device driver to set the device which represents @@ -112,6 +113,10 @@ void mdev_set_class(struct mdev_device *mdev, u16 id); void mdev_set_vfio_ops(struct mdev_device *mdev, =09=09 const struct mdev_vfio_device_ops *vfio_ops); const struct mdev_vfio_device_ops *mdev_get_vfio_ops(struct mdev_device *m= dev); +void mdev_set_virtio_ops(struct mdev_device *mdev, +=09=09=09 const struct mdev_virtio_device_ops *virtio_ops); +const struct mdev_virtio_device_ops * +mdev_get_virtio_ops(struct mdev_device *mdev); =20 extern struct bus_type mdev_bus_type; =20 @@ -127,6 +132,7 @@ struct mdev_device *mdev_from_dev(struct device *dev); =20 enum { =09MDEV_CLASS_ID_VFIO =3D 1, +=09MDEV_CLASS_ID_VIRTIO =3D 2, =09/* New entries must be added here */ }; =20 diff --git a/include/linux/mdev_virtio_ops.h b/include/linux/mdev_virtio_op= s.h new file mode 100644 index 000000000000..8951331c6629 --- /dev/null +++ b/include/linux/mdev_virtio_ops.h @@ -0,0 +1,147 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +/* + * Virtio mediated device driver + * + * Copyright 2019, Red Hat Corp. + * Author: Jason Wang + */ +#ifndef MDEV_VIRTIO_OPS_H +#define MDEV_VIRTIO_OPS_H + +#include +#include +#include + +#define VIRTIO_MDEV_DEVICE_API_STRING=09=09"virtio-mdev" + +struct virtio_mdev_callback { +=09irqreturn_t (*callback)(void *data); +=09void *private; +}; + +/** + * struct mdev_virtio_device_ops - Structure to be registered for each + * mdev device to register the device for virtio/vhost drivers. + * + * The callbacks are mandatory unless explicitly mentioned. + * + * @set_vq_address:=09=09Set the address of virtqueue + *=09=09=09=09@mdev: mediated device + *=09=09=09=09@idx: virtqueue index + *=09=09=09=09@desc_area: address of desc area + *=09=09=09=09@driver_area: address of driver area + *=09=09=09=09@device_area: address of device area + *=09=09=09=09Returns integer: success (0) or error (< 0) + * @set_vq_num:=09=09=09Set the size of virtqueue + *=09=09=09=09@mdev: mediated device + *=09=09=09=09@idx: virtqueue index + *=09=09=09=09@num: the size of virtqueue + * @kick_vq:=09=09=09Kick the virtqueue + *=09=09=09=09@mdev: mediated device + *=09=09=09=09@idx: virtqueue index + * @set_vq_cb:=09=09=09Set the interrupt callback function for + *=09=09=09=09a virtqueue + *=09=09=09=09@mdev: mediated device + *=09=09=09=09@idx: virtqueue index + *=09=09=09=09@cb: virtio-mdev interrupt callback structure + * @set_vq_ready:=09=09Set ready status for a virtqueue + *=09=09=09=09@mdev: mediated device + *=09=09=09=09@idx: virtqueue index + *=09=09=09=09@ready: ready (true) not ready(false) + * @get_vq_ready:=09=09Get ready status for a virtqueue + *=09=09=09=09@mdev: mediated device + *=09=09=09=09@idx: virtqueue index + *=09=09=09=09Returns boolean: ready (true) or not (false) + * @set_vq_state:=09=09Set the state for a virtqueue + *=09=09=09=09@mdev: mediated device + *=09=09=09=09@idx: virtqueue index + *=09=09=09=09@state: virtqueue state (last_avail_idx) + *=09=09=09=09Returns integer: success (0) or error (< 0) + * @get_vq_state:=09=09Get the state for a virtqueue + *=09=09=09=09@mdev: mediated device + *=09=09=09=09@idx: virtqueue index + *=09=09=09=09Returns virtqueue state (last_avail_idx) + * @get_vq_align:=09=09Get the virtqueue align requirement + *=09=09=09=09for the device + *=09=09=09=09@mdev: mediated device + *=09=09=09=09Returns virtqueue algin requirement + * @get_features:=09=09Get virtio features supported by the device + *=09=09=09=09@mdev: mediated device + *=09=09=09=09Returns the virtio features support by the + *=09=09=09=09device + * @set_features:=09=09Set virtio features supported by the driver + *=09=09=09=09@mdev: mediated device + *=09=09=09=09@features: feature support by the driver + *=09=09=09=09Returns integer: success (0) or error (< 0) + * @set_config_cb:=09=09Set the config interrupt callback + *=09=09=09=09@mdev: mediated device + *=09=09=09=09@cb: virtio-mdev interrupt callback structure + * @get_vq_num_max:=09=09Get the max size of virtqueue + *=09=09=09=09@mdev: mediated device + *=09=09=09=09Returns u16: max size of virtqueue + * @get_device_id:=09=09Get virtio device id + *=09=09=09=09@mdev: mediated device + *=09=09=09=09Returns u32: virtio device id + * @get_vendor_id:=09=09Get id for the vendor that provides this device + *=09=09=09=09@mdev: mediated device + *=09=09=09=09Returns u32: virtio vendor id + * @get_status:=09=09=09Get the device status + *=09=09=09=09@mdev: mediated device + *=09=09=09=09Returns u8: virtio device status + * @set_status:=09=09=09Set the device status + *=09=09=09=09@mdev: mediated device + *=09=09=09=09@status: virtio device status + * @get_config:=09=09=09Read from device specific configuration space + *=09=09=09=09@mdev: mediated device + *=09=09=09=09@offset: offset from the beginning of + *=09=09=09=09configuration space + *=09=09=09=09@buf: buffer used to read to + *=09=09=09=09@len: the length to read from + *=09=09=09=09configration space + * @set_config:=09=09=09Write to device specific configuration space + *=09=09=09=09@mdev: mediated device + *=09=09=09=09@offset: offset from the beginning of + *=09=09=09=09configuration space + *=09=09=09=09@buf: buffer used to write from + *=09=09=09=09@len: the length to write to + *=09=09=09=09configration space + * @get_generation:=09=09Get device config generaton (optional) + *=09=09=09=09@mdev: mediated device + *=09=09=09=09Returns u32: device generation + */ +struct mdev_virtio_device_ops { +=09/* Virtqueue ops */ +=09int (*set_vq_address)(struct mdev_device *mdev, +=09=09=09 u16 idx, u64 desc_area, u64 driver_area, +=09=09=09 u64 device_area); +=09void (*set_vq_num)(struct mdev_device *mdev, u16 idx, u32 num); +=09void (*kick_vq)(struct mdev_device *mdev, u16 idx); +=09void (*set_vq_cb)(struct mdev_device *mdev, u16 idx, +=09=09=09 struct virtio_mdev_callback *cb); +=09void (*set_vq_ready)(struct mdev_device *mdev, u16 idx, bool ready); +=09bool (*get_vq_ready)(struct mdev_device *mdev, u16 idx); +=09int (*set_vq_state)(struct mdev_device *mdev, u16 idx, u64 state); +=09u64 (*get_vq_state)(struct mdev_device *mdev, u16 idx); + +=09/* Virtio device ops */ +=09u16 (*get_vq_align)(struct mdev_device *mdev); +=09u64 (*get_features)(struct mdev_device *mdev); +=09int (*set_features)(struct mdev_device *mdev, u64 features); +=09void (*set_config_cb)(struct mdev_device *mdev, +=09=09=09 struct virtio_mdev_callback *cb); +=09u16 (*get_vq_num_max)(struct mdev_device *mdev); +=09u32 (*get_device_id)(struct mdev_device *mdev); +=09u32 (*get_vendor_id)(struct mdev_device *mdev); +=09u8 (*get_status)(struct mdev_device *mdev); +=09void (*set_status)(struct mdev_device *mdev, u8 status); +=09void (*get_config)(struct mdev_device *mdev, unsigned int offset, +=09=09=09 void *buf, unsigned int len); +=09void (*set_config)(struct mdev_device *mdev, unsigned int offset, +=09=09=09 const void *buf, unsigned int len); +=09u32 (*get_generation)(struct mdev_device *mdev); +}; + +void mdev_set_virtio_ops(struct mdev_device *mdev, +=09=09=09 const struct mdev_virtio_device_ops *virtio_ops); + +#endif --=20 2.19.1 From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.8 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 29B91C5DF63 for ; Wed, 6 Nov 2019 13:41:14 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 023CA2166E for ; Wed, 6 Nov 2019 13:41:14 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 023CA2166E Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id E03216ED4A; Wed, 6 Nov 2019 13:41:12 +0000 (UTC) Received: from us-smtp-1.mimecast.com (us-smtp-delivery-1.mimecast.com [205.139.110.120]) by gabe.freedesktop.org (Postfix) with ESMTPS id 756A46ED46 for ; Wed, 6 Nov 2019 13:41:11 +0000 (UTC) Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-132--hOtL8uHOJqStbIMTCX8Ig-1; Wed, 06 Nov 2019 08:41:08 -0500 Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.phx2.redhat.com [10.5.11.23]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 744B81800D6B; Wed, 6 Nov 2019 13:41:04 +0000 (UTC) Received: from jason-ThinkPad-X1-Carbon-6th.redhat.com (ovpn-12-193.pek2.redhat.com [10.72.12.193]) by smtp.corp.redhat.com (Postfix) with ESMTP id 73AAF19756; Wed, 6 Nov 2019 13:40:22 +0000 (UTC) From: Jason Wang To: kvm@vger.kernel.org, linux-s390@vger.kernel.org, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, intel-gfx@lists.freedesktop.org, intel-gvt-dev@lists.freedesktop.org, kwankhede@nvidia.com, alex.williamson@redhat.com, mst@redhat.com, tiwei.bie@intel.com Subject: [PATCH V10 4/6] mdev: introduce virtio device and its device ops Date: Wed, 6 Nov 2019 21:35:29 +0800 Message-Id: <20191106133531.693-5-jasowang@redhat.com> In-Reply-To: <20191106133531.693-1-jasowang@redhat.com> References: <20191106133531.693-1-jasowang@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.23 X-MC-Unique: -hOtL8uHOJqStbIMTCX8Ig-1 X-Mimecast-Spam-Score: 0 X-Mailman-Original-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1573047670; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=wtvIi2yIPGS5MLETRkpjvruFht3By2opLcoYExxwXWY=; b=GITjHNDUwu1ToM+Nxa0q6x1+NltTTxHStqjHhaUZF2lRRtyR8MOz4dhe2hdQZjdIrnTr3b D5GyethY0cee2eY0XwOkHoBJ8goAPdaZqh/fyynnz0VbSzu/7n5Wr0vPbjP46W1xB/gQ/1 uUhrN/b0iHuYoxH03XqYwcxXmCVJOMo= X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: christophe.de.dinechin@gmail.com, sebott@linux.ibm.com, airlied@linux.ie, Jason Wang , heiko.carstens@de.ibm.com, kevin.tian@intel.com, virtualization@lists.linux-foundation.org, rob.miller@broadcom.com, lulu@redhat.com, eperezma@redhat.com, pasic@linux.ibm.com, borntraeger@de.ibm.com, haotian.wang@sifive.com, zhi.a.wang@intel.com, farman@linux.ibm.com, idos@mellanox.com, gor@linux.ibm.com, cunming.liang@intel.com, rodrigo.vivi@intel.com, xiao.w.wang@intel.com, freude@linux.ibm.com, parav@mellanox.com, zhihong.wang@intel.com, stefanha@redhat.com, akrowiak@linux.ibm.com, netdev@vger.kernel.org, cohuck@redhat.com, oberpar@linux.ibm.com, maxime.coquelin@redhat.com, lingshan.zhu@intel.com Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" Message-ID: <20191106133529.x9_NvlOhTLHY5_VxPuupaH4qFjOxEZ2wsMwEtt5-WNE@z> VGhpcyBwYXRjaCBpbXBsZW1lbnRzIGJhc2ljIHN1cHBvcnQgZm9yIG1kZXYgZHJpdmVyIHRoYXQg c3VwcG9ydHMKdmlydGlvIHRyYW5zcG9ydCBmb3Iga2VybmVsIHZpcnRpbyBkcml2ZXIuCgpSZXZp ZXdlZC1ieTogQ29ybmVsaWEgSHVjayA8Y29odWNrQHJlZGhhdC5jb20+ClNpZ25lZC1vZmYtYnk6 IEphc29uIFdhbmcgPGphc293YW5nQHJlZGhhdC5jb20+Ci0tLQogTUFJTlRBSU5FUlMgICAgICAg ICAgICAgICAgICAgICAgfCAgIDEgKwogZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMgICAg fCAgMjEgKysrKysKIGRyaXZlcnMvdmZpby9tZGV2L21kZXZfcHJpdmF0ZS5oIHwgICAyICsKIGlu Y2x1ZGUvbGludXgvbWRldi5oICAgICAgICAgICAgIHwgICA2ICsrCiBpbmNsdWRlL2xpbnV4L21k ZXZfdmlydGlvX29wcy5oICB8IDE0NyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiA1 IGZpbGVzIGNoYW5nZWQsIDE3NyBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgaW5j bHVkZS9saW51eC9tZGV2X3ZpcnRpb19vcHMuaAoKZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIv TUFJTlRBSU5FUlMKaW5kZXggZjY2MWQxMzM0NGQ2Li40OTk3OTU3NDQzZGYgMTAwNjQ0Ci0tLSBh L01BSU5UQUlORVJTCisrKyBiL01BSU5UQUlORVJTCkBAIC0xNzI0OCw2ICsxNzI0OCw3IEBAIEY6 CWluY2x1ZGUvbGludXgvdmlydGlvKi5oCiBGOglpbmNsdWRlL3VhcGkvbGludXgvdmlydGlvXyou aAogRjoJZHJpdmVycy9jcnlwdG8vdmlydGlvLwogRjoJbW0vYmFsbG9vbl9jb21wYWN0aW9uLmMK K0Y6CWluY2x1ZGUvbGludXgvbWRldl92aXJ0aW9fb3BzLmgKIAogVklSVElPIEJMT0NLIEFORCBT Q1NJIERSSVZFUlMKIE06CSJNaWNoYWVsIFMuIFRzaXJraW4iIDxtc3RAcmVkaGF0LmNvbT4KZGlm ZiAtLWdpdCBhL2RyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jIGIvZHJpdmVycy92ZmlvL21k ZXYvbWRldl9jb3JlLmMKaW5kZXggNGU3MGYxOWFjMTQ1Li5jNTgyNTM0MDRlZDUgMTAwNjQ0Ci0t LSBhL2RyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jCisrKyBiL2RyaXZlcnMvdmZpby9tZGV2 L21kZXZfY29yZS5jCkBAIC03OCw2ICs3OCwyNyBAQCBjb25zdCBzdHJ1Y3QgbWRldl92ZmlvX2Rl dmljZV9vcHMgKm1kZXZfZ2V0X3ZmaW9fb3BzKHN0cnVjdCBtZGV2X2RldmljZSAqbWRldikKIH0K IEVYUE9SVF9TWU1CT0wobWRldl9nZXRfdmZpb19vcHMpOwogCisvKgorICogU3BlY2lmeSB0aGUg dmlydGlvIGRldmljZSBvcHMgZm9yIHRoZSBtZGV2IGRldmljZSwgdGhpcworICogbXVzdCBiZSBj YWxsZWQgZHVyaW5nIGNyZWF0ZSgpIGNhbGxiYWNrIGZvciB2aXJ0aW8gbWRldiBkZXZpY2UuCisg Ki8KK3ZvaWQgbWRldl9zZXRfdmlydGlvX29wcyhzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYsCisJ CQkgY29uc3Qgc3RydWN0IG1kZXZfdmlydGlvX2RldmljZV9vcHMgKnZpcnRpb19vcHMpCit7CisJ bWRldl9zZXRfY2xhc3MobWRldiwgTURFVl9DTEFTU19JRF9WSVJUSU8pOworCW1kZXYtPnZpcnRp b19vcHMgPSB2aXJ0aW9fb3BzOworfQorRVhQT1JUX1NZTUJPTChtZGV2X3NldF92aXJ0aW9fb3Bz KTsKKworLyogR2V0IHRoZSB2aXJ0aW8gZGV2aWNlIG9wcyBmb3IgdGhlIG1kZXYgZGV2aWNlLiAq LworY29uc3Qgc3RydWN0IG1kZXZfdmlydGlvX2RldmljZV9vcHMgKgorbWRldl9nZXRfdmlydGlv X29wcyhzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYpCit7CisJV0FSTl9PTihtZGV2LT5jbGFzc19p ZCAhPSBNREVWX0NMQVNTX0lEX1ZJUlRJTyk7CisJcmV0dXJuIG1kZXYtPnZpcnRpb19vcHM7Cit9 CitFWFBPUlRfU1lNQk9MKG1kZXZfZ2V0X3ZpcnRpb19vcHMpOworCiBzdHJ1Y3QgZGV2aWNlICpt ZGV2X2RldihzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYpCiB7CiAJcmV0dXJuICZtZGV2LT5kZXY7 CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3ByaXZhdGUuaCBiL2RyaXZlcnMv dmZpby9tZGV2L21kZXZfcHJpdmF0ZS5oCmluZGV4IDQxMTIyNzM3MzYyNS4uMmM3NGRkMDMyNDA5 IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3ByaXZhdGUuaAorKysgYi9kcml2 ZXJzL3ZmaW8vbWRldi9tZGV2X3ByaXZhdGUuaApAQCAtMTEsNiArMTEsNyBAQAogI2RlZmluZSBN REVWX1BSSVZBVEVfSAogCiAjaW5jbHVkZSA8bGludXgvbWRldl92ZmlvX29wcy5oPgorI2luY2x1 ZGUgPGxpbnV4L21kZXZfdmlydGlvX29wcy5oPgogCiBpbnQgIG1kZXZfYnVzX3JlZ2lzdGVyKHZv aWQpOwogdm9pZCBtZGV2X2J1c191bnJlZ2lzdGVyKHZvaWQpOwpAQCAtMzgsNiArMzksNyBAQCBz dHJ1Y3QgbWRldl9kZXZpY2UgewogCXUxNiBjbGFzc19pZDsKIAl1bmlvbiB7CiAJCWNvbnN0IHN0 cnVjdCBtZGV2X3ZmaW9fZGV2aWNlX29wcyAqdmZpb19vcHM7CisJCWNvbnN0IHN0cnVjdCBtZGV2 X3ZpcnRpb19kZXZpY2Vfb3BzICp2aXJ0aW9fb3BzOwogCX07CiB9OwogCmRpZmYgLS1naXQgYS9p bmNsdWRlL2xpbnV4L21kZXYuaCBiL2luY2x1ZGUvbGludXgvbWRldi5oCmluZGV4IDllMzc1MDZk MTk4Ny4uZjNkNzVhNjBjMmI1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21kZXYuaAorKysg Yi9pbmNsdWRlL2xpbnV4L21kZXYuaApAQCAtMTcsNiArMTcsNyBAQAogCiBzdHJ1Y3QgbWRldl9k ZXZpY2U7CiBzdHJ1Y3QgbWRldl92ZmlvX2RldmljZV9vcHM7CitzdHJ1Y3QgbWRldl92aXJ0aW9f ZGV2aWNlX29wczsKIAogLyoKICAqIENhbGxlZCBieSB0aGUgcGFyZW50IGRldmljZSBkcml2ZXIg dG8gc2V0IHRoZSBkZXZpY2Ugd2hpY2ggcmVwcmVzZW50cwpAQCAtMTEyLDYgKzExMywxMCBAQCB2 b2lkIG1kZXZfc2V0X2NsYXNzKHN0cnVjdCBtZGV2X2RldmljZSAqbWRldiwgdTE2IGlkKTsKIHZv aWQgbWRldl9zZXRfdmZpb19vcHMoc3RydWN0IG1kZXZfZGV2aWNlICptZGV2LAogCQkgICAgICAg Y29uc3Qgc3RydWN0IG1kZXZfdmZpb19kZXZpY2Vfb3BzICp2ZmlvX29wcyk7CiBjb25zdCBzdHJ1 Y3QgbWRldl92ZmlvX2RldmljZV9vcHMgKm1kZXZfZ2V0X3ZmaW9fb3BzKHN0cnVjdCBtZGV2X2Rl dmljZSAqbWRldik7Cit2b2lkIG1kZXZfc2V0X3ZpcnRpb19vcHMoc3RydWN0IG1kZXZfZGV2aWNl ICptZGV2LAorCQkJIGNvbnN0IHN0cnVjdCBtZGV2X3ZpcnRpb19kZXZpY2Vfb3BzICp2aXJ0aW9f b3BzKTsKK2NvbnN0IHN0cnVjdCBtZGV2X3ZpcnRpb19kZXZpY2Vfb3BzICoKK21kZXZfZ2V0X3Zp cnRpb19vcHMoc3RydWN0IG1kZXZfZGV2aWNlICptZGV2KTsKIAogZXh0ZXJuIHN0cnVjdCBidXNf dHlwZSBtZGV2X2J1c190eXBlOwogCkBAIC0xMjcsNiArMTMyLDcgQEAgc3RydWN0IG1kZXZfZGV2 aWNlICptZGV2X2Zyb21fZGV2KHN0cnVjdCBkZXZpY2UgKmRldik7CiAKIGVudW0gewogCU1ERVZf Q0xBU1NfSURfVkZJTyA9IDEsCisJTURFVl9DTEFTU19JRF9WSVJUSU8gPSAyLAogCS8qIE5ldyBl bnRyaWVzIG11c3QgYmUgYWRkZWQgaGVyZSAqLwogfTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9s aW51eC9tZGV2X3ZpcnRpb19vcHMuaCBiL2luY2x1ZGUvbGludXgvbWRldl92aXJ0aW9fb3BzLmgK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi44OTUxMzMxYzY2MjkKLS0t IC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L21kZXZfdmlydGlvX29wcy5oCkBAIC0wLDAg KzEsMTQ3IEBACisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovCisv KgorICogVmlydGlvIG1lZGlhdGVkIGRldmljZSBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgMjAx OSwgUmVkIEhhdCBDb3JwLgorICogICAgIEF1dGhvcjogSmFzb24gV2FuZyA8amFzb3dhbmdAcmVk aGF0LmNvbT4KKyAqLworI2lmbmRlZiBNREVWX1ZJUlRJT19PUFNfSAorI2RlZmluZSBNREVWX1ZJ UlRJT19PUFNfSAorCisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGlu dXgvbWRldi5oPgorI2luY2x1ZGUgPHVhcGkvbGludXgvdmhvc3QuaD4KKworI2RlZmluZSBWSVJU SU9fTURFVl9ERVZJQ0VfQVBJX1NUUklORwkJInZpcnRpby1tZGV2IgorCitzdHJ1Y3QgdmlydGlv X21kZXZfY2FsbGJhY2sgeworCWlycXJldHVybl90ICgqY2FsbGJhY2spKHZvaWQgKmRhdGEpOwor CXZvaWQgKnByaXZhdGU7Cit9OworCisvKioKKyAqIHN0cnVjdCBtZGV2X3ZpcnRpb19kZXZpY2Vf b3BzIC0gU3RydWN0dXJlIHRvIGJlIHJlZ2lzdGVyZWQgZm9yIGVhY2gKKyAqIG1kZXYgZGV2aWNl IHRvIHJlZ2lzdGVyIHRoZSBkZXZpY2UgZm9yIHZpcnRpby92aG9zdCBkcml2ZXJzLgorICoKKyAq IFRoZSBjYWxsYmFja3MgYXJlIG1hbmRhdG9yeSB1bmxlc3MgZXhwbGljaXRseSBtZW50aW9uZWQu CisgKgorICogQHNldF92cV9hZGRyZXNzOgkJU2V0IHRoZSBhZGRyZXNzIG9mIHZpcnRxdWV1ZQor ICoJCQkJQG1kZXY6IG1lZGlhdGVkIGRldmljZQorICoJCQkJQGlkeDogdmlydHF1ZXVlIGluZGV4 CisgKgkJCQlAZGVzY19hcmVhOiBhZGRyZXNzIG9mIGRlc2MgYXJlYQorICoJCQkJQGRyaXZlcl9h cmVhOiBhZGRyZXNzIG9mIGRyaXZlciBhcmVhCisgKgkJCQlAZGV2aWNlX2FyZWE6IGFkZHJlc3Mg b2YgZGV2aWNlIGFyZWEKKyAqCQkJCVJldHVybnMgaW50ZWdlcjogc3VjY2VzcyAoMCkgb3IgZXJy b3IgKDwgMCkKKyAqIEBzZXRfdnFfbnVtOgkJCVNldCB0aGUgc2l6ZSBvZiB2aXJ0cXVldWUKKyAq CQkJCUBtZGV2OiBtZWRpYXRlZCBkZXZpY2UKKyAqCQkJCUBpZHg6IHZpcnRxdWV1ZSBpbmRleAor ICoJCQkJQG51bTogdGhlIHNpemUgb2YgdmlydHF1ZXVlCisgKiBAa2lja192cToJCQlLaWNrIHRo ZSB2aXJ0cXVldWUKKyAqCQkJCUBtZGV2OiBtZWRpYXRlZCBkZXZpY2UKKyAqCQkJCUBpZHg6IHZp cnRxdWV1ZSBpbmRleAorICogQHNldF92cV9jYjoJCQlTZXQgdGhlIGludGVycnVwdCBjYWxsYmFj ayBmdW5jdGlvbiBmb3IKKyAqCQkJCWEgdmlydHF1ZXVlCisgKgkJCQlAbWRldjogbWVkaWF0ZWQg ZGV2aWNlCisgKgkJCQlAaWR4OiB2aXJ0cXVldWUgaW5kZXgKKyAqCQkJCUBjYjogdmlydGlvLW1k ZXYgaW50ZXJydXB0IGNhbGxiYWNrIHN0cnVjdHVyZQorICogQHNldF92cV9yZWFkeToJCVNldCBy ZWFkeSBzdGF0dXMgZm9yIGEgdmlydHF1ZXVlCisgKgkJCQlAbWRldjogbWVkaWF0ZWQgZGV2aWNl CisgKgkJCQlAaWR4OiB2aXJ0cXVldWUgaW5kZXgKKyAqCQkJCUByZWFkeTogcmVhZHkgKHRydWUp IG5vdCByZWFkeShmYWxzZSkKKyAqIEBnZXRfdnFfcmVhZHk6CQlHZXQgcmVhZHkgc3RhdHVzIGZv ciBhIHZpcnRxdWV1ZQorICoJCQkJQG1kZXY6IG1lZGlhdGVkIGRldmljZQorICoJCQkJQGlkeDog dmlydHF1ZXVlIGluZGV4CisgKgkJCQlSZXR1cm5zIGJvb2xlYW46IHJlYWR5ICh0cnVlKSBvciBu b3QgKGZhbHNlKQorICogQHNldF92cV9zdGF0ZToJCVNldCB0aGUgc3RhdGUgZm9yIGEgdmlydHF1 ZXVlCisgKgkJCQlAbWRldjogbWVkaWF0ZWQgZGV2aWNlCisgKgkJCQlAaWR4OiB2aXJ0cXVldWUg aW5kZXgKKyAqCQkJCUBzdGF0ZTogdmlydHF1ZXVlIHN0YXRlIChsYXN0X2F2YWlsX2lkeCkKKyAq CQkJCVJldHVybnMgaW50ZWdlcjogc3VjY2VzcyAoMCkgb3IgZXJyb3IgKDwgMCkKKyAqIEBnZXRf dnFfc3RhdGU6CQlHZXQgdGhlIHN0YXRlIGZvciBhIHZpcnRxdWV1ZQorICoJCQkJQG1kZXY6IG1l ZGlhdGVkIGRldmljZQorICoJCQkJQGlkeDogdmlydHF1ZXVlIGluZGV4CisgKgkJCQlSZXR1cm5z IHZpcnRxdWV1ZSBzdGF0ZSAobGFzdF9hdmFpbF9pZHgpCisgKiBAZ2V0X3ZxX2FsaWduOgkJR2V0 IHRoZSB2aXJ0cXVldWUgYWxpZ24gcmVxdWlyZW1lbnQKKyAqCQkJCWZvciB0aGUgZGV2aWNlCisg KgkJCQlAbWRldjogbWVkaWF0ZWQgZGV2aWNlCisgKgkJCQlSZXR1cm5zIHZpcnRxdWV1ZSBhbGdp biByZXF1aXJlbWVudAorICogQGdldF9mZWF0dXJlczoJCUdldCB2aXJ0aW8gZmVhdHVyZXMgc3Vw cG9ydGVkIGJ5IHRoZSBkZXZpY2UKKyAqCQkJCUBtZGV2OiBtZWRpYXRlZCBkZXZpY2UKKyAqCQkJ CVJldHVybnMgdGhlIHZpcnRpbyBmZWF0dXJlcyBzdXBwb3J0IGJ5IHRoZQorICoJCQkJZGV2aWNl CisgKiBAc2V0X2ZlYXR1cmVzOgkJU2V0IHZpcnRpbyBmZWF0dXJlcyBzdXBwb3J0ZWQgYnkgdGhl IGRyaXZlcgorICoJCQkJQG1kZXY6IG1lZGlhdGVkIGRldmljZQorICoJCQkJQGZlYXR1cmVzOiBm ZWF0dXJlIHN1cHBvcnQgYnkgdGhlIGRyaXZlcgorICoJCQkJUmV0dXJucyBpbnRlZ2VyOiBzdWNj ZXNzICgwKSBvciBlcnJvciAoPCAwKQorICogQHNldF9jb25maWdfY2I6CQlTZXQgdGhlIGNvbmZp ZyBpbnRlcnJ1cHQgY2FsbGJhY2sKKyAqCQkJCUBtZGV2OiBtZWRpYXRlZCBkZXZpY2UKKyAqCQkJ CUBjYjogdmlydGlvLW1kZXYgaW50ZXJydXB0IGNhbGxiYWNrIHN0cnVjdHVyZQorICogQGdldF92 cV9udW1fbWF4OgkJR2V0IHRoZSBtYXggc2l6ZSBvZiB2aXJ0cXVldWUKKyAqCQkJCUBtZGV2OiBt ZWRpYXRlZCBkZXZpY2UKKyAqCQkJCVJldHVybnMgdTE2OiBtYXggc2l6ZSBvZiB2aXJ0cXVldWUK KyAqIEBnZXRfZGV2aWNlX2lkOgkJR2V0IHZpcnRpbyBkZXZpY2UgaWQKKyAqCQkJCUBtZGV2OiBt ZWRpYXRlZCBkZXZpY2UKKyAqCQkJCVJldHVybnMgdTMyOiB2aXJ0aW8gZGV2aWNlIGlkCisgKiBA Z2V0X3ZlbmRvcl9pZDoJCUdldCBpZCBmb3IgdGhlIHZlbmRvciB0aGF0IHByb3ZpZGVzIHRoaXMg ZGV2aWNlCisgKgkJCQlAbWRldjogbWVkaWF0ZWQgZGV2aWNlCisgKgkJCQlSZXR1cm5zIHUzMjog dmlydGlvIHZlbmRvciBpZAorICogQGdldF9zdGF0dXM6CQkJR2V0IHRoZSBkZXZpY2Ugc3RhdHVz CisgKgkJCQlAbWRldjogbWVkaWF0ZWQgZGV2aWNlCisgKgkJCQlSZXR1cm5zIHU4OiB2aXJ0aW8g ZGV2aWNlIHN0YXR1cworICogQHNldF9zdGF0dXM6CQkJU2V0IHRoZSBkZXZpY2Ugc3RhdHVzCisg KgkJCQlAbWRldjogbWVkaWF0ZWQgZGV2aWNlCisgKgkJCQlAc3RhdHVzOiB2aXJ0aW8gZGV2aWNl IHN0YXR1cworICogQGdldF9jb25maWc6CQkJUmVhZCBmcm9tIGRldmljZSBzcGVjaWZpYyBjb25m aWd1cmF0aW9uIHNwYWNlCisgKgkJCQlAbWRldjogbWVkaWF0ZWQgZGV2aWNlCisgKgkJCQlAb2Zm c2V0OiBvZmZzZXQgZnJvbSB0aGUgYmVnaW5uaW5nIG9mCisgKgkJCQljb25maWd1cmF0aW9uIHNw YWNlCisgKgkJCQlAYnVmOiBidWZmZXIgdXNlZCB0byByZWFkIHRvCisgKgkJCQlAbGVuOiB0aGUg bGVuZ3RoIHRvIHJlYWQgZnJvbQorICoJCQkJY29uZmlncmF0aW9uIHNwYWNlCisgKiBAc2V0X2Nv bmZpZzoJCQlXcml0ZSB0byBkZXZpY2Ugc3BlY2lmaWMgY29uZmlndXJhdGlvbiBzcGFjZQorICoJ CQkJQG1kZXY6IG1lZGlhdGVkIGRldmljZQorICoJCQkJQG9mZnNldDogb2Zmc2V0IGZyb20gdGhl IGJlZ2lubmluZyBvZgorICoJCQkJY29uZmlndXJhdGlvbiBzcGFjZQorICoJCQkJQGJ1ZjogYnVm ZmVyIHVzZWQgdG8gd3JpdGUgZnJvbQorICoJCQkJQGxlbjogdGhlIGxlbmd0aCB0byB3cml0ZSB0 bworICoJCQkJY29uZmlncmF0aW9uIHNwYWNlCisgKiBAZ2V0X2dlbmVyYXRpb246CQlHZXQgZGV2 aWNlIGNvbmZpZyBnZW5lcmF0b24gKG9wdGlvbmFsKQorICoJCQkJQG1kZXY6IG1lZGlhdGVkIGRl dmljZQorICoJCQkJUmV0dXJucyB1MzI6IGRldmljZSBnZW5lcmF0aW9uCisgKi8KK3N0cnVjdCBt ZGV2X3ZpcnRpb19kZXZpY2Vfb3BzIHsKKwkvKiBWaXJ0cXVldWUgb3BzICovCisJaW50ICgqc2V0 X3ZxX2FkZHJlc3MpKHN0cnVjdCBtZGV2X2RldmljZSAqbWRldiwKKwkJCSAgICAgIHUxNiBpZHgs IHU2NCBkZXNjX2FyZWEsIHU2NCBkcml2ZXJfYXJlYSwKKwkJCSAgICAgIHU2NCBkZXZpY2VfYXJl YSk7CisJdm9pZCAoKnNldF92cV9udW0pKHN0cnVjdCBtZGV2X2RldmljZSAqbWRldiwgdTE2IGlk eCwgdTMyIG51bSk7CisJdm9pZCAoKmtpY2tfdnEpKHN0cnVjdCBtZGV2X2RldmljZSAqbWRldiwg dTE2IGlkeCk7CisJdm9pZCAoKnNldF92cV9jYikoc3RydWN0IG1kZXZfZGV2aWNlICptZGV2LCB1 MTYgaWR4LAorCQkJICBzdHJ1Y3QgdmlydGlvX21kZXZfY2FsbGJhY2sgKmNiKTsKKwl2b2lkICgq c2V0X3ZxX3JlYWR5KShzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYsIHUxNiBpZHgsIGJvb2wgcmVh ZHkpOworCWJvb2wgKCpnZXRfdnFfcmVhZHkpKHN0cnVjdCBtZGV2X2RldmljZSAqbWRldiwgdTE2 IGlkeCk7CisJaW50ICgqc2V0X3ZxX3N0YXRlKShzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYsIHUx NiBpZHgsIHU2NCBzdGF0ZSk7CisJdTY0ICgqZ2V0X3ZxX3N0YXRlKShzdHJ1Y3QgbWRldl9kZXZp Y2UgKm1kZXYsIHUxNiBpZHgpOworCisJLyogVmlydGlvIGRldmljZSBvcHMgKi8KKwl1MTYgKCpn ZXRfdnFfYWxpZ24pKHN0cnVjdCBtZGV2X2RldmljZSAqbWRldik7CisJdTY0ICgqZ2V0X2ZlYXR1 cmVzKShzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYpOworCWludCAoKnNldF9mZWF0dXJlcykoc3Ry dWN0IG1kZXZfZGV2aWNlICptZGV2LCB1NjQgZmVhdHVyZXMpOworCXZvaWQgKCpzZXRfY29uZmln X2NiKShzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYsCisJCQkgICAgICBzdHJ1Y3QgdmlydGlvX21k ZXZfY2FsbGJhY2sgKmNiKTsKKwl1MTYgKCpnZXRfdnFfbnVtX21heCkoc3RydWN0IG1kZXZfZGV2 aWNlICptZGV2KTsKKwl1MzIgKCpnZXRfZGV2aWNlX2lkKShzdHJ1Y3QgbWRldl9kZXZpY2UgKm1k ZXYpOworCXUzMiAoKmdldF92ZW5kb3JfaWQpKHN0cnVjdCBtZGV2X2RldmljZSAqbWRldik7CisJ dTggKCpnZXRfc3RhdHVzKShzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYpOworCXZvaWQgKCpzZXRf c3RhdHVzKShzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYsIHU4IHN0YXR1cyk7CisJdm9pZCAoKmdl dF9jb25maWcpKHN0cnVjdCBtZGV2X2RldmljZSAqbWRldiwgdW5zaWduZWQgaW50IG9mZnNldCwK KwkJCSAgIHZvaWQgKmJ1ZiwgdW5zaWduZWQgaW50IGxlbik7CisJdm9pZCAoKnNldF9jb25maWcp KHN0cnVjdCBtZGV2X2RldmljZSAqbWRldiwgdW5zaWduZWQgaW50IG9mZnNldCwKKwkJCSAgIGNv bnN0IHZvaWQgKmJ1ZiwgdW5zaWduZWQgaW50IGxlbik7CisJdTMyICgqZ2V0X2dlbmVyYXRpb24p KHN0cnVjdCBtZGV2X2RldmljZSAqbWRldik7Cit9OworCit2b2lkIG1kZXZfc2V0X3ZpcnRpb19v cHMoc3RydWN0IG1kZXZfZGV2aWNlICptZGV2LAorCQkJIGNvbnN0IHN0cnVjdCBtZGV2X3ZpcnRp b19kZXZpY2Vfb3BzICp2aXJ0aW9fb3BzKTsKKworI2VuZGlmCi0tIAoyLjE5LjEKCl9fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5n IGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVk ZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbA== From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.8 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 48C87C5DF62 for ; Wed, 6 Nov 2019 13:41:13 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 1A3BD2166E for ; Wed, 6 Nov 2019 13:41:13 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 1A3BD2166E Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=intel-gfx-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id AA3066ED46; Wed, 6 Nov 2019 13:41:12 +0000 (UTC) Received: from us-smtp-1.mimecast.com (us-smtp-delivery-1.mimecast.com [205.139.110.120]) by gabe.freedesktop.org (Postfix) with ESMTPS id 82AE46ED4A for ; Wed, 6 Nov 2019 13:41:11 +0000 (UTC) Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-132--hOtL8uHOJqStbIMTCX8Ig-1; Wed, 06 Nov 2019 08:41:08 -0500 Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.phx2.redhat.com [10.5.11.23]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 744B81800D6B; Wed, 6 Nov 2019 13:41:04 +0000 (UTC) Received: from jason-ThinkPad-X1-Carbon-6th.redhat.com (ovpn-12-193.pek2.redhat.com [10.72.12.193]) by smtp.corp.redhat.com (Postfix) with ESMTP id 73AAF19756; Wed, 6 Nov 2019 13:40:22 +0000 (UTC) From: Jason Wang To: kvm@vger.kernel.org, linux-s390@vger.kernel.org, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, intel-gfx@lists.freedesktop.org, intel-gvt-dev@lists.freedesktop.org, kwankhede@nvidia.com, alex.williamson@redhat.com, mst@redhat.com, tiwei.bie@intel.com Date: Wed, 6 Nov 2019 21:35:29 +0800 Message-Id: <20191106133531.693-5-jasowang@redhat.com> In-Reply-To: <20191106133531.693-1-jasowang@redhat.com> References: <20191106133531.693-1-jasowang@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.23 X-MC-Unique: -hOtL8uHOJqStbIMTCX8Ig-1 X-Mimecast-Spam-Score: 0 X-Mailman-Original-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1573047670; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=wtvIi2yIPGS5MLETRkpjvruFht3By2opLcoYExxwXWY=; b=GITjHNDUwu1ToM+Nxa0q6x1+NltTTxHStqjHhaUZF2lRRtyR8MOz4dhe2hdQZjdIrnTr3b D5GyethY0cee2eY0XwOkHoBJ8goAPdaZqh/fyynnz0VbSzu/7n5Wr0vPbjP46W1xB/gQ/1 uUhrN/b0iHuYoxH03XqYwcxXmCVJOMo= Subject: [Intel-gfx] [PATCH V10 4/6] mdev: introduce virtio device and its device ops X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: christophe.de.dinechin@gmail.com, sebott@linux.ibm.com, airlied@linux.ie, Jason Wang , heiko.carstens@de.ibm.com, virtualization@lists.linux-foundation.org, rob.miller@broadcom.com, lulu@redhat.com, eperezma@redhat.com, pasic@linux.ibm.com, borntraeger@de.ibm.com, haotian.wang@sifive.com, farman@linux.ibm.com, idos@mellanox.com, gor@linux.ibm.com, cunming.liang@intel.com, xiao.w.wang@intel.com, freude@linux.ibm.com, parav@mellanox.com, zhihong.wang@intel.com, stefanha@redhat.com, akrowiak@linux.ibm.com, netdev@vger.kernel.org, cohuck@redhat.com, oberpar@linux.ibm.com, maxime.coquelin@redhat.com, lingshan.zhu@intel.com Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" Message-ID: <20191106133529.IsLOu6Hd6_G0KQzkb-yb_BD-FZ87vey_E_lUWqagxI8@z> VGhpcyBwYXRjaCBpbXBsZW1lbnRzIGJhc2ljIHN1cHBvcnQgZm9yIG1kZXYgZHJpdmVyIHRoYXQg c3VwcG9ydHMKdmlydGlvIHRyYW5zcG9ydCBmb3Iga2VybmVsIHZpcnRpbyBkcml2ZXIuCgpSZXZp ZXdlZC1ieTogQ29ybmVsaWEgSHVjayA8Y29odWNrQHJlZGhhdC5jb20+ClNpZ25lZC1vZmYtYnk6 IEphc29uIFdhbmcgPGphc293YW5nQHJlZGhhdC5jb20+Ci0tLQogTUFJTlRBSU5FUlMgICAgICAg ICAgICAgICAgICAgICAgfCAgIDEgKwogZHJpdmVycy92ZmlvL21kZXYvbWRldl9jb3JlLmMgICAg fCAgMjEgKysrKysKIGRyaXZlcnMvdmZpby9tZGV2L21kZXZfcHJpdmF0ZS5oIHwgICAyICsKIGlu Y2x1ZGUvbGludXgvbWRldi5oICAgICAgICAgICAgIHwgICA2ICsrCiBpbmNsdWRlL2xpbnV4L21k ZXZfdmlydGlvX29wcy5oICB8IDE0NyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiA1 IGZpbGVzIGNoYW5nZWQsIDE3NyBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgaW5j bHVkZS9saW51eC9tZGV2X3ZpcnRpb19vcHMuaAoKZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIv TUFJTlRBSU5FUlMKaW5kZXggZjY2MWQxMzM0NGQ2Li40OTk3OTU3NDQzZGYgMTAwNjQ0Ci0tLSBh L01BSU5UQUlORVJTCisrKyBiL01BSU5UQUlORVJTCkBAIC0xNzI0OCw2ICsxNzI0OCw3IEBAIEY6 CWluY2x1ZGUvbGludXgvdmlydGlvKi5oCiBGOglpbmNsdWRlL3VhcGkvbGludXgvdmlydGlvXyou aAogRjoJZHJpdmVycy9jcnlwdG8vdmlydGlvLwogRjoJbW0vYmFsbG9vbl9jb21wYWN0aW9uLmMK K0Y6CWluY2x1ZGUvbGludXgvbWRldl92aXJ0aW9fb3BzLmgKIAogVklSVElPIEJMT0NLIEFORCBT Q1NJIERSSVZFUlMKIE06CSJNaWNoYWVsIFMuIFRzaXJraW4iIDxtc3RAcmVkaGF0LmNvbT4KZGlm ZiAtLWdpdCBhL2RyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jIGIvZHJpdmVycy92ZmlvL21k ZXYvbWRldl9jb3JlLmMKaW5kZXggNGU3MGYxOWFjMTQ1Li5jNTgyNTM0MDRlZDUgMTAwNjQ0Ci0t LSBhL2RyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jCisrKyBiL2RyaXZlcnMvdmZpby9tZGV2 L21kZXZfY29yZS5jCkBAIC03OCw2ICs3OCwyNyBAQCBjb25zdCBzdHJ1Y3QgbWRldl92ZmlvX2Rl dmljZV9vcHMgKm1kZXZfZ2V0X3ZmaW9fb3BzKHN0cnVjdCBtZGV2X2RldmljZSAqbWRldikKIH0K IEVYUE9SVF9TWU1CT0wobWRldl9nZXRfdmZpb19vcHMpOwogCisvKgorICogU3BlY2lmeSB0aGUg dmlydGlvIGRldmljZSBvcHMgZm9yIHRoZSBtZGV2IGRldmljZSwgdGhpcworICogbXVzdCBiZSBj YWxsZWQgZHVyaW5nIGNyZWF0ZSgpIGNhbGxiYWNrIGZvciB2aXJ0aW8gbWRldiBkZXZpY2UuCisg Ki8KK3ZvaWQgbWRldl9zZXRfdmlydGlvX29wcyhzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYsCisJ CQkgY29uc3Qgc3RydWN0IG1kZXZfdmlydGlvX2RldmljZV9vcHMgKnZpcnRpb19vcHMpCit7CisJ bWRldl9zZXRfY2xhc3MobWRldiwgTURFVl9DTEFTU19JRF9WSVJUSU8pOworCW1kZXYtPnZpcnRp b19vcHMgPSB2aXJ0aW9fb3BzOworfQorRVhQT1JUX1NZTUJPTChtZGV2X3NldF92aXJ0aW9fb3Bz KTsKKworLyogR2V0IHRoZSB2aXJ0aW8gZGV2aWNlIG9wcyBmb3IgdGhlIG1kZXYgZGV2aWNlLiAq LworY29uc3Qgc3RydWN0IG1kZXZfdmlydGlvX2RldmljZV9vcHMgKgorbWRldl9nZXRfdmlydGlv X29wcyhzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYpCit7CisJV0FSTl9PTihtZGV2LT5jbGFzc19p ZCAhPSBNREVWX0NMQVNTX0lEX1ZJUlRJTyk7CisJcmV0dXJuIG1kZXYtPnZpcnRpb19vcHM7Cit9 CitFWFBPUlRfU1lNQk9MKG1kZXZfZ2V0X3ZpcnRpb19vcHMpOworCiBzdHJ1Y3QgZGV2aWNlICpt ZGV2X2RldihzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYpCiB7CiAJcmV0dXJuICZtZGV2LT5kZXY7 CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3ByaXZhdGUuaCBiL2RyaXZlcnMv dmZpby9tZGV2L21kZXZfcHJpdmF0ZS5oCmluZGV4IDQxMTIyNzM3MzYyNS4uMmM3NGRkMDMyNDA5 IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZmaW8vbWRldi9tZGV2X3ByaXZhdGUuaAorKysgYi9kcml2 ZXJzL3ZmaW8vbWRldi9tZGV2X3ByaXZhdGUuaApAQCAtMTEsNiArMTEsNyBAQAogI2RlZmluZSBN REVWX1BSSVZBVEVfSAogCiAjaW5jbHVkZSA8bGludXgvbWRldl92ZmlvX29wcy5oPgorI2luY2x1 ZGUgPGxpbnV4L21kZXZfdmlydGlvX29wcy5oPgogCiBpbnQgIG1kZXZfYnVzX3JlZ2lzdGVyKHZv aWQpOwogdm9pZCBtZGV2X2J1c191bnJlZ2lzdGVyKHZvaWQpOwpAQCAtMzgsNiArMzksNyBAQCBz dHJ1Y3QgbWRldl9kZXZpY2UgewogCXUxNiBjbGFzc19pZDsKIAl1bmlvbiB7CiAJCWNvbnN0IHN0 cnVjdCBtZGV2X3ZmaW9fZGV2aWNlX29wcyAqdmZpb19vcHM7CisJCWNvbnN0IHN0cnVjdCBtZGV2 X3ZpcnRpb19kZXZpY2Vfb3BzICp2aXJ0aW9fb3BzOwogCX07CiB9OwogCmRpZmYgLS1naXQgYS9p bmNsdWRlL2xpbnV4L21kZXYuaCBiL2luY2x1ZGUvbGludXgvbWRldi5oCmluZGV4IDllMzc1MDZk MTk4Ny4uZjNkNzVhNjBjMmI1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21kZXYuaAorKysg Yi9pbmNsdWRlL2xpbnV4L21kZXYuaApAQCAtMTcsNiArMTcsNyBAQAogCiBzdHJ1Y3QgbWRldl9k ZXZpY2U7CiBzdHJ1Y3QgbWRldl92ZmlvX2RldmljZV9vcHM7CitzdHJ1Y3QgbWRldl92aXJ0aW9f ZGV2aWNlX29wczsKIAogLyoKICAqIENhbGxlZCBieSB0aGUgcGFyZW50IGRldmljZSBkcml2ZXIg dG8gc2V0IHRoZSBkZXZpY2Ugd2hpY2ggcmVwcmVzZW50cwpAQCAtMTEyLDYgKzExMywxMCBAQCB2 b2lkIG1kZXZfc2V0X2NsYXNzKHN0cnVjdCBtZGV2X2RldmljZSAqbWRldiwgdTE2IGlkKTsKIHZv aWQgbWRldl9zZXRfdmZpb19vcHMoc3RydWN0IG1kZXZfZGV2aWNlICptZGV2LAogCQkgICAgICAg Y29uc3Qgc3RydWN0IG1kZXZfdmZpb19kZXZpY2Vfb3BzICp2ZmlvX29wcyk7CiBjb25zdCBzdHJ1 Y3QgbWRldl92ZmlvX2RldmljZV9vcHMgKm1kZXZfZ2V0X3ZmaW9fb3BzKHN0cnVjdCBtZGV2X2Rl dmljZSAqbWRldik7Cit2b2lkIG1kZXZfc2V0X3ZpcnRpb19vcHMoc3RydWN0IG1kZXZfZGV2aWNl ICptZGV2LAorCQkJIGNvbnN0IHN0cnVjdCBtZGV2X3ZpcnRpb19kZXZpY2Vfb3BzICp2aXJ0aW9f b3BzKTsKK2NvbnN0IHN0cnVjdCBtZGV2X3ZpcnRpb19kZXZpY2Vfb3BzICoKK21kZXZfZ2V0X3Zp cnRpb19vcHMoc3RydWN0IG1kZXZfZGV2aWNlICptZGV2KTsKIAogZXh0ZXJuIHN0cnVjdCBidXNf dHlwZSBtZGV2X2J1c190eXBlOwogCkBAIC0xMjcsNiArMTMyLDcgQEAgc3RydWN0IG1kZXZfZGV2 aWNlICptZGV2X2Zyb21fZGV2KHN0cnVjdCBkZXZpY2UgKmRldik7CiAKIGVudW0gewogCU1ERVZf Q0xBU1NfSURfVkZJTyA9IDEsCisJTURFVl9DTEFTU19JRF9WSVJUSU8gPSAyLAogCS8qIE5ldyBl bnRyaWVzIG11c3QgYmUgYWRkZWQgaGVyZSAqLwogfTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9s aW51eC9tZGV2X3ZpcnRpb19vcHMuaCBiL2luY2x1ZGUvbGludXgvbWRldl92aXJ0aW9fb3BzLmgK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi44OTUxMzMxYzY2MjkKLS0t IC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L21kZXZfdmlydGlvX29wcy5oCkBAIC0wLDAg KzEsMTQ3IEBACisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovCisv KgorICogVmlydGlvIG1lZGlhdGVkIGRldmljZSBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgMjAx OSwgUmVkIEhhdCBDb3JwLgorICogICAgIEF1dGhvcjogSmFzb24gV2FuZyA8amFzb3dhbmdAcmVk aGF0LmNvbT4KKyAqLworI2lmbmRlZiBNREVWX1ZJUlRJT19PUFNfSAorI2RlZmluZSBNREVWX1ZJ UlRJT19PUFNfSAorCisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGlu dXgvbWRldi5oPgorI2luY2x1ZGUgPHVhcGkvbGludXgvdmhvc3QuaD4KKworI2RlZmluZSBWSVJU SU9fTURFVl9ERVZJQ0VfQVBJX1NUUklORwkJInZpcnRpby1tZGV2IgorCitzdHJ1Y3QgdmlydGlv X21kZXZfY2FsbGJhY2sgeworCWlycXJldHVybl90ICgqY2FsbGJhY2spKHZvaWQgKmRhdGEpOwor CXZvaWQgKnByaXZhdGU7Cit9OworCisvKioKKyAqIHN0cnVjdCBtZGV2X3ZpcnRpb19kZXZpY2Vf b3BzIC0gU3RydWN0dXJlIHRvIGJlIHJlZ2lzdGVyZWQgZm9yIGVhY2gKKyAqIG1kZXYgZGV2aWNl IHRvIHJlZ2lzdGVyIHRoZSBkZXZpY2UgZm9yIHZpcnRpby92aG9zdCBkcml2ZXJzLgorICoKKyAq IFRoZSBjYWxsYmFja3MgYXJlIG1hbmRhdG9yeSB1bmxlc3MgZXhwbGljaXRseSBtZW50aW9uZWQu CisgKgorICogQHNldF92cV9hZGRyZXNzOgkJU2V0IHRoZSBhZGRyZXNzIG9mIHZpcnRxdWV1ZQor ICoJCQkJQG1kZXY6IG1lZGlhdGVkIGRldmljZQorICoJCQkJQGlkeDogdmlydHF1ZXVlIGluZGV4 CisgKgkJCQlAZGVzY19hcmVhOiBhZGRyZXNzIG9mIGRlc2MgYXJlYQorICoJCQkJQGRyaXZlcl9h cmVhOiBhZGRyZXNzIG9mIGRyaXZlciBhcmVhCisgKgkJCQlAZGV2aWNlX2FyZWE6IGFkZHJlc3Mg b2YgZGV2aWNlIGFyZWEKKyAqCQkJCVJldHVybnMgaW50ZWdlcjogc3VjY2VzcyAoMCkgb3IgZXJy b3IgKDwgMCkKKyAqIEBzZXRfdnFfbnVtOgkJCVNldCB0aGUgc2l6ZSBvZiB2aXJ0cXVldWUKKyAq CQkJCUBtZGV2OiBtZWRpYXRlZCBkZXZpY2UKKyAqCQkJCUBpZHg6IHZpcnRxdWV1ZSBpbmRleAor ICoJCQkJQG51bTogdGhlIHNpemUgb2YgdmlydHF1ZXVlCisgKiBAa2lja192cToJCQlLaWNrIHRo ZSB2aXJ0cXVldWUKKyAqCQkJCUBtZGV2OiBtZWRpYXRlZCBkZXZpY2UKKyAqCQkJCUBpZHg6IHZp cnRxdWV1ZSBpbmRleAorICogQHNldF92cV9jYjoJCQlTZXQgdGhlIGludGVycnVwdCBjYWxsYmFj ayBmdW5jdGlvbiBmb3IKKyAqCQkJCWEgdmlydHF1ZXVlCisgKgkJCQlAbWRldjogbWVkaWF0ZWQg ZGV2aWNlCisgKgkJCQlAaWR4OiB2aXJ0cXVldWUgaW5kZXgKKyAqCQkJCUBjYjogdmlydGlvLW1k ZXYgaW50ZXJydXB0IGNhbGxiYWNrIHN0cnVjdHVyZQorICogQHNldF92cV9yZWFkeToJCVNldCBy ZWFkeSBzdGF0dXMgZm9yIGEgdmlydHF1ZXVlCisgKgkJCQlAbWRldjogbWVkaWF0ZWQgZGV2aWNl CisgKgkJCQlAaWR4OiB2aXJ0cXVldWUgaW5kZXgKKyAqCQkJCUByZWFkeTogcmVhZHkgKHRydWUp IG5vdCByZWFkeShmYWxzZSkKKyAqIEBnZXRfdnFfcmVhZHk6CQlHZXQgcmVhZHkgc3RhdHVzIGZv ciBhIHZpcnRxdWV1ZQorICoJCQkJQG1kZXY6IG1lZGlhdGVkIGRldmljZQorICoJCQkJQGlkeDog dmlydHF1ZXVlIGluZGV4CisgKgkJCQlSZXR1cm5zIGJvb2xlYW46IHJlYWR5ICh0cnVlKSBvciBu b3QgKGZhbHNlKQorICogQHNldF92cV9zdGF0ZToJCVNldCB0aGUgc3RhdGUgZm9yIGEgdmlydHF1 ZXVlCisgKgkJCQlAbWRldjogbWVkaWF0ZWQgZGV2aWNlCisgKgkJCQlAaWR4OiB2aXJ0cXVldWUg aW5kZXgKKyAqCQkJCUBzdGF0ZTogdmlydHF1ZXVlIHN0YXRlIChsYXN0X2F2YWlsX2lkeCkKKyAq CQkJCVJldHVybnMgaW50ZWdlcjogc3VjY2VzcyAoMCkgb3IgZXJyb3IgKDwgMCkKKyAqIEBnZXRf dnFfc3RhdGU6CQlHZXQgdGhlIHN0YXRlIGZvciBhIHZpcnRxdWV1ZQorICoJCQkJQG1kZXY6IG1l ZGlhdGVkIGRldmljZQorICoJCQkJQGlkeDogdmlydHF1ZXVlIGluZGV4CisgKgkJCQlSZXR1cm5z IHZpcnRxdWV1ZSBzdGF0ZSAobGFzdF9hdmFpbF9pZHgpCisgKiBAZ2V0X3ZxX2FsaWduOgkJR2V0 IHRoZSB2aXJ0cXVldWUgYWxpZ24gcmVxdWlyZW1lbnQKKyAqCQkJCWZvciB0aGUgZGV2aWNlCisg KgkJCQlAbWRldjogbWVkaWF0ZWQgZGV2aWNlCisgKgkJCQlSZXR1cm5zIHZpcnRxdWV1ZSBhbGdp biByZXF1aXJlbWVudAorICogQGdldF9mZWF0dXJlczoJCUdldCB2aXJ0aW8gZmVhdHVyZXMgc3Vw cG9ydGVkIGJ5IHRoZSBkZXZpY2UKKyAqCQkJCUBtZGV2OiBtZWRpYXRlZCBkZXZpY2UKKyAqCQkJ CVJldHVybnMgdGhlIHZpcnRpbyBmZWF0dXJlcyBzdXBwb3J0IGJ5IHRoZQorICoJCQkJZGV2aWNl CisgKiBAc2V0X2ZlYXR1cmVzOgkJU2V0IHZpcnRpbyBmZWF0dXJlcyBzdXBwb3J0ZWQgYnkgdGhl IGRyaXZlcgorICoJCQkJQG1kZXY6IG1lZGlhdGVkIGRldmljZQorICoJCQkJQGZlYXR1cmVzOiBm ZWF0dXJlIHN1cHBvcnQgYnkgdGhlIGRyaXZlcgorICoJCQkJUmV0dXJucyBpbnRlZ2VyOiBzdWNj ZXNzICgwKSBvciBlcnJvciAoPCAwKQorICogQHNldF9jb25maWdfY2I6CQlTZXQgdGhlIGNvbmZp ZyBpbnRlcnJ1cHQgY2FsbGJhY2sKKyAqCQkJCUBtZGV2OiBtZWRpYXRlZCBkZXZpY2UKKyAqCQkJ CUBjYjogdmlydGlvLW1kZXYgaW50ZXJydXB0IGNhbGxiYWNrIHN0cnVjdHVyZQorICogQGdldF92 cV9udW1fbWF4OgkJR2V0IHRoZSBtYXggc2l6ZSBvZiB2aXJ0cXVldWUKKyAqCQkJCUBtZGV2OiBt ZWRpYXRlZCBkZXZpY2UKKyAqCQkJCVJldHVybnMgdTE2OiBtYXggc2l6ZSBvZiB2aXJ0cXVldWUK KyAqIEBnZXRfZGV2aWNlX2lkOgkJR2V0IHZpcnRpbyBkZXZpY2UgaWQKKyAqCQkJCUBtZGV2OiBt ZWRpYXRlZCBkZXZpY2UKKyAqCQkJCVJldHVybnMgdTMyOiB2aXJ0aW8gZGV2aWNlIGlkCisgKiBA Z2V0X3ZlbmRvcl9pZDoJCUdldCBpZCBmb3IgdGhlIHZlbmRvciB0aGF0IHByb3ZpZGVzIHRoaXMg ZGV2aWNlCisgKgkJCQlAbWRldjogbWVkaWF0ZWQgZGV2aWNlCisgKgkJCQlSZXR1cm5zIHUzMjog dmlydGlvIHZlbmRvciBpZAorICogQGdldF9zdGF0dXM6CQkJR2V0IHRoZSBkZXZpY2Ugc3RhdHVz CisgKgkJCQlAbWRldjogbWVkaWF0ZWQgZGV2aWNlCisgKgkJCQlSZXR1cm5zIHU4OiB2aXJ0aW8g ZGV2aWNlIHN0YXR1cworICogQHNldF9zdGF0dXM6CQkJU2V0IHRoZSBkZXZpY2Ugc3RhdHVzCisg KgkJCQlAbWRldjogbWVkaWF0ZWQgZGV2aWNlCisgKgkJCQlAc3RhdHVzOiB2aXJ0aW8gZGV2aWNl IHN0YXR1cworICogQGdldF9jb25maWc6CQkJUmVhZCBmcm9tIGRldmljZSBzcGVjaWZpYyBjb25m aWd1cmF0aW9uIHNwYWNlCisgKgkJCQlAbWRldjogbWVkaWF0ZWQgZGV2aWNlCisgKgkJCQlAb2Zm c2V0OiBvZmZzZXQgZnJvbSB0aGUgYmVnaW5uaW5nIG9mCisgKgkJCQljb25maWd1cmF0aW9uIHNw YWNlCisgKgkJCQlAYnVmOiBidWZmZXIgdXNlZCB0byByZWFkIHRvCisgKgkJCQlAbGVuOiB0aGUg bGVuZ3RoIHRvIHJlYWQgZnJvbQorICoJCQkJY29uZmlncmF0aW9uIHNwYWNlCisgKiBAc2V0X2Nv bmZpZzoJCQlXcml0ZSB0byBkZXZpY2Ugc3BlY2lmaWMgY29uZmlndXJhdGlvbiBzcGFjZQorICoJ CQkJQG1kZXY6IG1lZGlhdGVkIGRldmljZQorICoJCQkJQG9mZnNldDogb2Zmc2V0IGZyb20gdGhl IGJlZ2lubmluZyBvZgorICoJCQkJY29uZmlndXJhdGlvbiBzcGFjZQorICoJCQkJQGJ1ZjogYnVm ZmVyIHVzZWQgdG8gd3JpdGUgZnJvbQorICoJCQkJQGxlbjogdGhlIGxlbmd0aCB0byB3cml0ZSB0 bworICoJCQkJY29uZmlncmF0aW9uIHNwYWNlCisgKiBAZ2V0X2dlbmVyYXRpb246CQlHZXQgZGV2 aWNlIGNvbmZpZyBnZW5lcmF0b24gKG9wdGlvbmFsKQorICoJCQkJQG1kZXY6IG1lZGlhdGVkIGRl dmljZQorICoJCQkJUmV0dXJucyB1MzI6IGRldmljZSBnZW5lcmF0aW9uCisgKi8KK3N0cnVjdCBt ZGV2X3ZpcnRpb19kZXZpY2Vfb3BzIHsKKwkvKiBWaXJ0cXVldWUgb3BzICovCisJaW50ICgqc2V0 X3ZxX2FkZHJlc3MpKHN0cnVjdCBtZGV2X2RldmljZSAqbWRldiwKKwkJCSAgICAgIHUxNiBpZHgs IHU2NCBkZXNjX2FyZWEsIHU2NCBkcml2ZXJfYXJlYSwKKwkJCSAgICAgIHU2NCBkZXZpY2VfYXJl YSk7CisJdm9pZCAoKnNldF92cV9udW0pKHN0cnVjdCBtZGV2X2RldmljZSAqbWRldiwgdTE2IGlk eCwgdTMyIG51bSk7CisJdm9pZCAoKmtpY2tfdnEpKHN0cnVjdCBtZGV2X2RldmljZSAqbWRldiwg dTE2IGlkeCk7CisJdm9pZCAoKnNldF92cV9jYikoc3RydWN0IG1kZXZfZGV2aWNlICptZGV2LCB1 MTYgaWR4LAorCQkJICBzdHJ1Y3QgdmlydGlvX21kZXZfY2FsbGJhY2sgKmNiKTsKKwl2b2lkICgq c2V0X3ZxX3JlYWR5KShzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYsIHUxNiBpZHgsIGJvb2wgcmVh ZHkpOworCWJvb2wgKCpnZXRfdnFfcmVhZHkpKHN0cnVjdCBtZGV2X2RldmljZSAqbWRldiwgdTE2 IGlkeCk7CisJaW50ICgqc2V0X3ZxX3N0YXRlKShzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYsIHUx NiBpZHgsIHU2NCBzdGF0ZSk7CisJdTY0ICgqZ2V0X3ZxX3N0YXRlKShzdHJ1Y3QgbWRldl9kZXZp Y2UgKm1kZXYsIHUxNiBpZHgpOworCisJLyogVmlydGlvIGRldmljZSBvcHMgKi8KKwl1MTYgKCpn ZXRfdnFfYWxpZ24pKHN0cnVjdCBtZGV2X2RldmljZSAqbWRldik7CisJdTY0ICgqZ2V0X2ZlYXR1 cmVzKShzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYpOworCWludCAoKnNldF9mZWF0dXJlcykoc3Ry dWN0IG1kZXZfZGV2aWNlICptZGV2LCB1NjQgZmVhdHVyZXMpOworCXZvaWQgKCpzZXRfY29uZmln X2NiKShzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYsCisJCQkgICAgICBzdHJ1Y3QgdmlydGlvX21k ZXZfY2FsbGJhY2sgKmNiKTsKKwl1MTYgKCpnZXRfdnFfbnVtX21heCkoc3RydWN0IG1kZXZfZGV2 aWNlICptZGV2KTsKKwl1MzIgKCpnZXRfZGV2aWNlX2lkKShzdHJ1Y3QgbWRldl9kZXZpY2UgKm1k ZXYpOworCXUzMiAoKmdldF92ZW5kb3JfaWQpKHN0cnVjdCBtZGV2X2RldmljZSAqbWRldik7CisJ dTggKCpnZXRfc3RhdHVzKShzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYpOworCXZvaWQgKCpzZXRf c3RhdHVzKShzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYsIHU4IHN0YXR1cyk7CisJdm9pZCAoKmdl dF9jb25maWcpKHN0cnVjdCBtZGV2X2RldmljZSAqbWRldiwgdW5zaWduZWQgaW50IG9mZnNldCwK KwkJCSAgIHZvaWQgKmJ1ZiwgdW5zaWduZWQgaW50IGxlbik7CisJdm9pZCAoKnNldF9jb25maWcp KHN0cnVjdCBtZGV2X2RldmljZSAqbWRldiwgdW5zaWduZWQgaW50IG9mZnNldCwKKwkJCSAgIGNv bnN0IHZvaWQgKmJ1ZiwgdW5zaWduZWQgaW50IGxlbik7CisJdTMyICgqZ2V0X2dlbmVyYXRpb24p KHN0cnVjdCBtZGV2X2RldmljZSAqbWRldik7Cit9OworCit2b2lkIG1kZXZfc2V0X3ZpcnRpb19v cHMoc3RydWN0IG1kZXZfZGV2aWNlICptZGV2LAorCQkJIGNvbnN0IHN0cnVjdCBtZGV2X3ZpcnRp b19kZXZpY2Vfb3BzICp2aXJ0aW9fb3BzKTsKKworI2VuZGlmCi0tIAoyLjE5LjEKCl9fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5n IGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVk ZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeA==