|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Minios-devel] [UNIKRAFT PATCH 12/17] plat/xen/drivers/blk: Read device capabilities
This patch introduces the function which reads the capabilities
from Xenstore, after connection to backend.
Signed-off-by: Roxana Nicolescu <nicolescu.roxana1996@xxxxxxxxx>
---
plat/xen/drivers/blk/blkfront_xs.c | 43 ++++++++++++++++++++++++++++++++++++++
1 file changed, 43 insertions(+)
diff --git a/plat/xen/drivers/blk/blkfront_xs.c
b/plat/xen/drivers/blk/blkfront_xs.c
index 86aee13b..d7d5ee94 100644
--- a/plat/xen/drivers/blk/blkfront_xs.c
+++ b/plat/xen/drivers/blk/blkfront_xs.c
@@ -164,6 +164,43 @@ out:
return err;
}
+/*
+ * Get device capabilities (sector_size, etc)
+ * from the backend after it switched to Connected State.
+ */
+static int blkfront_xb_get_capabilities(struct blkfront_dev *blkdev)
+{
+ struct xenbus_device *xendev;
+ char *mode;
+ int err = 0;
+
+ UK_ASSERT(blkdev != NULL);
+ xendev = blkdev->xendev;
+ err = xs_scanf(XBT_NIL, xendev->otherend, "sectors",
+ "%lu", &blkdev->blkdev.capabilities.sectors);
+ if (err < 0) {
+ uk_pr_err("Failed to read nb_sectors from xs: %d\n", err);
+ return err;
+ }
+
+ err = xs_scanf(XBT_NIL, xendev->otherend, "sector-size",
+ "%lu", &blkdev->blkdev.capabilities.ssize);
+ if (err < 0) {
+ uk_pr_err("Failed to read ssize from xs: %d\n", err);
+ return err;
+ }
+
+ mode = xs_read(XBT_NIL, xendev->otherend, "mode");
+ if (PTRISERR(mode)) {
+ uk_pr_err("Failed to read mode from xs: %d.\n", err);
+ return PTR2ERR(mode);
+ }
+
+ blkdev->blkdev.capabilities.mode = (*mode == 'r') ? O_RDONLY : O_RDWR;
+
+ free(mode);
+ return 0;
+}
/* Write info for a specific queue in xenstore.
* If there is only one queue, the path does not
@@ -451,6 +488,12 @@ int blkfront_xb_connect(struct blkfront_dev *blkdev)
if (err)
goto err;
+ err = blkfront_xb_get_capabilities(blkdev);
+ if (err) {
+ uk_pr_err("Failed to extract info from backend: %d.\n", err);
+ goto err;
+ }
+
err:
return err;
}
--
2.11.0
_______________________________________________
Minios-devel mailing list
Minios-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/minios-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |