[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Minios-devel] [UNIKRAFT PATCH 7/7] lib/ukconsdev: Enable interrupts on console device



So far it looks okay. What happens with your receive (read) function when interrupts are used? When reading from the ring/queue are the interrupts temporarily disabled until you read everything. Is this the case when the receive function returns 0? Otherwise interrupts are internally switched off?
You probably should add an explanation to your read function.

Thanks,

Simon

On 19.06.19 15:35, Birlea Costin wrote:
Signed-off-by: Birlea Costin <costin.birlea@xxxxxxxxx>
---
  lib/ukconsdev/consdev.c                 |  2 ++
  lib/ukconsdev/exportsyms.uk             |  2 ++
  lib/ukconsdev/include/uk/consdev.h      | 44 +++++++++++++++++++++++++++++++++
  lib/ukconsdev/include/uk/consdev_core.h |  8 ++++++
  4 files changed, 56 insertions(+)

diff --git a/lib/ukconsdev/consdev.c b/lib/ukconsdev/consdev.c
index b91b0a7f..fd01540b 100644
--- a/lib/ukconsdev/consdev.c
+++ b/lib/ukconsdev/consdev.c
@@ -445,6 +445,8 @@ int uk_consdev_drv_register(struct uk_consdev *dev, struct 
uk_alloc *a,
        UK_ASSERT(dev->ops->rx_configure);
        UK_ASSERT(dev->ops->tx_configure);
        UK_ASSERT(dev->ops->release);
+       UK_ASSERT((dev->ops->rx_intr_enable && dev->ops->rx_intr_disable)
+               || (!dev->ops->rx_intr_enable && !dev->ops->rx_intr_disable));
        UK_ASSERT(dev->ops->write);
        UK_ASSERT(dev->ops->read);
        UK_ASSERT(dev->ops->start);
diff --git a/lib/ukconsdev/exportsyms.uk b/lib/ukconsdev/exportsyms.uk
index 4d39941d..4b68d711 100644
--- a/lib/ukconsdev/exportsyms.uk
+++ b/lib/ukconsdev/exportsyms.uk
@@ -7,6 +7,8 @@ uk_consdev_tx_configure
  uk_consdev_release
  uk_consdev_start
  uk_consdev_stop
+uk_consdev_rx_intr_enable
+uk_consdev_rx_intr_disable
  uk_consdev_write
  uk_consdev_read
  uk_consdev_count
diff --git a/lib/ukconsdev/include/uk/consdev.h 
b/lib/ukconsdev/include/uk/consdev.h
index 9f2f0567..844c2aca 100644
--- a/lib/ukconsdev/include/uk/consdev.h
+++ b/lib/ukconsdev/include/uk/consdev.h
@@ -219,6 +219,50 @@ int uk_consdev_start(struct uk_consdev *dev);
  int uk_consdev_stop(struct uk_consdev *dev);
/**
+ * Enable interrupts for rx.
+ *
+ * @param dev
+ *     The Unikraft Console Device in running state.
+ * @return
+ *     - (0): Success, interrupts enabled.
+ *     - (-ENOTSUP): Driver does not support interrupts.
+ */
+static inline int uk_consdev_rx_intr_enable(struct uk_consdev *dev)
+{
+       UK_ASSERT(dev);
+       UK_ASSERT(dev->ops);
+       UK_ASSERT(dev->_data);
+       UK_ASSERT(dev->_data->state == UK_CONSDEV_RUNNING);
+
+       if (unlikely(!dev->ops->rx_intr_enable))
+               return -ENOTSUP;
+
+       return dev->ops->rx_intr_enable(dev);
+}
+
+/**
+ * Disable interrupts for rx.
+ *
+ * @param dev
+ *     The Unikraft Console Device in running state.
+ * @return
+ *     - (0): Success, interrupts disabled.
+ *     - (-ENOTSUP): Driver does not support interrupts.
+ */
+static inline int uk_consdev_rx_intr_disable(struct uk_consdev *dev)
+{
+       UK_ASSERT(dev);
+       UK_ASSERT(dev->_data);
+       UK_ASSERT(dev->ops);
+       UK_ASSERT(dev->_data->state == UK_CONSDEV_RUNNING);
+
+       if (unlikely(!dev->ops->rx_intr_disable))
+               return -ENOTSUP;
+
+       return dev->ops->rx_intr_disable(dev);
+}
+
+/**
   * @param dev
   *  The Unikraft Console Device in running state.
   * @param buf
diff --git a/lib/ukconsdev/include/uk/consdev_core.h 
b/lib/ukconsdev/include/uk/consdev_core.h
index 6c675fa7..d30655ef 100644
--- a/lib/ukconsdev/include/uk/consdev_core.h
+++ b/lib/ukconsdev/include/uk/consdev_core.h
@@ -170,6 +170,12 @@ typedef int (*uk_consdev_tx_configure_t)(struct uk_consdev 
*dev,
  /** Driver callback type to release a configured Unikraft console device */
  typedef int (*uk_consdev_release_t)(struct uk_consdev *dev);
+/** Driver callback type to enable interrupts of an Unikraft console device. */
+typedef int (*uk_consdev_rx_intr_enable_t)(struct uk_consdev *dev);
+
+/** Driver callback type to disable interrupts of an Unikraft console device. 
*/
+typedef int (*uk_consdev_rx_intr_disable_t)(struct uk_consdev *dev);
+
  /** Driver callback type to start a configured Unikraft console device. */
  typedef int (*uk_consdev_start_t)(struct uk_consdev *dev);
@@ -197,6 +203,8 @@ struct uk_consdev_ops {
        uk_consdev_tx_configure_t           tx_configure;
        uk_consdev_start_t                  start;
        uk_consdev_stop_t                   stop;
+       uk_consdev_rx_intr_enable_t         rx_intr_enable;
+       uk_consdev_rx_intr_disable_t        rx_intr_disable;
        uk_consdev_write_t                  write;
        uk_consdev_read_t                   read;
        uk_consdev_close_t                  close;


_______________________________________________
Minios-devel mailing list
Minios-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/minios-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.