* [Qemu-devel] [PATCH 0/2] tests: fw_cfg: add reboot-timeout test case
@ 2019-01-20 7:13 Li Qiang
2019-01-20 7:13 ` [Qemu-devel] [PATCH 1/2] tests: fw_cfg: add a function to get the fw_cfg file entry Li Qiang
2019-01-20 7:13 ` [Qemu-devel] [PATCH 2/2] tests: fw_cfg: add reboot_timeout test case Li Qiang
0 siblings, 2 replies; 10+ messages in thread
From: Li Qiang @ 2019-01-20 7:13 UTC (permalink / raw)
To: philmd, lersek, kraxel, thuth, lvivier, pbonzini
Cc: qemu-devel, liq3ea, Li Qiang
The first patch adds a util function to get
the fw_cfg file entry.
And second adds a reboot-timeout test case.
Li Qiang (2):
tests: fw_cfg: add a function to get the fw_cfg file entry
tests: fw_cfg: add reboot_timeout test case
tests/fw_cfg-test.c | 13 ++++++++++++-
tests/libqos/fw_cfg.c | 33 +++++++++++++++++++++++++++++++++
tests/libqos/fw_cfg.h | 2 ++
3 files changed, 47 insertions(+), 1 deletion(-)
--
2.17.1
^ permalink raw reply [flat|nested] 10+ messages in thread
* [Qemu-devel] [PATCH 1/2] tests: fw_cfg: add a function to get the fw_cfg file entry
2019-01-20 7:13 [Qemu-devel] [PATCH 0/2] tests: fw_cfg: add reboot-timeout test case Li Qiang
@ 2019-01-20 7:13 ` Li Qiang
2019-01-21 21:32 ` Laszlo Ersek
2019-01-20 7:13 ` [Qemu-devel] [PATCH 2/2] tests: fw_cfg: add reboot_timeout test case Li Qiang
1 sibling, 1 reply; 10+ messages in thread
From: Li Qiang @ 2019-01-20 7:13 UTC (permalink / raw)
To: philmd, lersek, kraxel, thuth, lvivier, pbonzini
Cc: qemu-devel, liq3ea, Li Qiang
This is useful to write qtest about fw_cfg file entry.
Signed-off-by: Li Qiang <liq3ea@163.com>
---
tests/libqos/fw_cfg.c | 33 +++++++++++++++++++++++++++++++++
tests/libqos/fw_cfg.h | 2 ++
2 files changed, 35 insertions(+)
diff --git a/tests/libqos/fw_cfg.c b/tests/libqos/fw_cfg.c
index d0889d1e22..e2b0cae7cd 100644
--- a/tests/libqos/fw_cfg.c
+++ b/tests/libqos/fw_cfg.c
@@ -16,6 +16,7 @@
#include "libqos/fw_cfg.h"
#include "libqtest.h"
#include "qemu/bswap.h"
+#include "standard-headers/linux/qemu_fw_cfg.h"
void qfw_cfg_select(QFWCFG *fw_cfg, uint16_t key)
{
@@ -54,6 +55,38 @@ uint64_t qfw_cfg_get_u64(QFWCFG *fw_cfg, uint16_t key)
return le64_to_cpu(value);
}
+size_t qfw_cfg_get_file(QFWCFG *fw_cfg, const char *filename,
+ void *data, size_t buflen)
+{
+ uint32_t count;
+ uint32_t i;
+ unsigned char *filesbuf = NULL;
+ uint32_t dsize;
+ struct fw_cfg_file *p;
+ size_t filesize = 0;
+
+ qfw_cfg_get(fw_cfg, FW_CFG_FILE_DIR, &count, sizeof(count));
+ count = be32_to_cpu(count);
+ dsize = sizeof(uint32_t) + count * sizeof(struct fw_cfg_file);
+ filesbuf = g_malloc0(dsize);
+ qfw_cfg_get(fw_cfg, FW_CFG_FILE_DIR, filesbuf, dsize);
+ p = (struct fw_cfg_file *)(filesbuf + sizeof(uint32_t));
+ for (i = 0; i < count; ++i, ++p) {
+ if (!strcmp(p->name, filename)) {
+ uint32_t len = be32_to_cpu(p->size);
+ uint16_t sel = be16_to_cpu(p->select);
+ filesize = len;
+ if (len > buflen) {
+ len = buflen;
+ }
+ qfw_cfg_get(fw_cfg, sel, data, len);
+ break;
+ }
+ }
+ g_free(filesbuf);
+ return filesize;
+}
+
static void mm_fw_cfg_select(QFWCFG *fw_cfg, uint16_t key)
{
qtest_writew(fw_cfg->qts, fw_cfg->base, key);
diff --git a/tests/libqos/fw_cfg.h b/tests/libqos/fw_cfg.h
index 0353416af0..de73722e67 100644
--- a/tests/libqos/fw_cfg.h
+++ b/tests/libqos/fw_cfg.h
@@ -31,6 +31,8 @@ void qfw_cfg_get(QFWCFG *fw_cfg, uint16_t key, void *data, size_t len);
uint16_t qfw_cfg_get_u16(QFWCFG *fw_cfg, uint16_t key);
uint32_t qfw_cfg_get_u32(QFWCFG *fw_cfg, uint16_t key);
uint64_t qfw_cfg_get_u64(QFWCFG *fw_cfg, uint16_t key);
+size_t qfw_cfg_get_file(QFWCFG *fw_cfg, const char *filename,
+ void *data, size_t buflen);
QFWCFG *mm_fw_cfg_init(QTestState *qts, uint64_t base);
QFWCFG *io_fw_cfg_init(QTestState *qts, uint16_t base);
--
2.17.1
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [Qemu-devel] [PATCH 2/2] tests: fw_cfg: add reboot_timeout test case
2019-01-20 7:13 [Qemu-devel] [PATCH 0/2] tests: fw_cfg: add reboot-timeout test case Li Qiang
2019-01-20 7:13 ` [Qemu-devel] [PATCH 1/2] tests: fw_cfg: add a function to get the fw_cfg file entry Li Qiang
@ 2019-01-20 7:13 ` Li Qiang
2019-01-21 21:38 ` Laszlo Ersek
1 sibling, 1 reply; 10+ messages in thread
From: Li Qiang @ 2019-01-20 7:13 UTC (permalink / raw)
To: philmd, lersek, kraxel, thuth, lvivier, pbonzini
Cc: qemu-devel, liq3ea, Li Qiang
Signed-off-by: Li Qiang <liq3ea@163.com>
---
tests/fw_cfg-test.c | 13 ++++++++++++-
1 file changed, 12 insertions(+), 1 deletion(-)
diff --git a/tests/fw_cfg-test.c b/tests/fw_cfg-test.c
index 1c5103fe1c..c28e6c3fb5 100644
--- a/tests/fw_cfg-test.c
+++ b/tests/fw_cfg-test.c
@@ -99,6 +99,15 @@ static void test_fw_cfg_boot_menu(void)
g_assert_cmpint(qfw_cfg_get_u16(fw_cfg, FW_CFG_BOOT_MENU), ==, boot_menu);
}
+static void test_fw_cfg_reboot_timeout(void)
+{
+ uint32_t reboot_timeout;
+
+ qfw_cfg_get_file(fw_cfg, "etc/boot-fail-wait",
+ &reboot_timeout, sizeof(reboot_timeout));
+ g_assert_cmpint(reboot_timeout, ==, 15);
+}
+
int main(int argc, char **argv)
{
QTestState *s;
@@ -106,7 +115,8 @@ int main(int argc, char **argv)
g_test_init(&argc, &argv, NULL);
- s = qtest_init("-uuid 4600cb32-38ec-4b2f-8acb-81c6ea54f2d8");
+ s = qtest_init("-uuid 4600cb32-38ec-4b2f-8acb-81c6ea54f2d8 "
+ "-boot reboot-timeout=15");
fw_cfg = pc_fw_cfg_init(s);
@@ -125,6 +135,7 @@ int main(int argc, char **argv)
qtest_add_func("fw_cfg/max_cpus", test_fw_cfg_max_cpus);
qtest_add_func("fw_cfg/numa", test_fw_cfg_numa);
qtest_add_func("fw_cfg/boot_menu", test_fw_cfg_boot_menu);
+ qtest_add_func("fw_cfg/reboot_timeout", test_fw_cfg_reboot_timeout);
ret = g_test_run();
--
2.17.1
^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [Qemu-devel] [PATCH 1/2] tests: fw_cfg: add a function to get the fw_cfg file entry
2019-01-20 7:13 ` [Qemu-devel] [PATCH 1/2] tests: fw_cfg: add a function to get the fw_cfg file entry Li Qiang
@ 2019-01-21 21:32 ` Laszlo Ersek
2019-01-22 1:21 ` Li Qiang
0 siblings, 1 reply; 10+ messages in thread
From: Laszlo Ersek @ 2019-01-21 21:32 UTC (permalink / raw)
To: Li Qiang, philmd, kraxel, thuth, lvivier, pbonzini; +Cc: qemu-devel, liq3ea
On 01/20/19 08:13, Li Qiang wrote:
> This is useful to write qtest about fw_cfg file entry.
>
> Signed-off-by: Li Qiang <liq3ea@163.com>
> ---
> tests/libqos/fw_cfg.c | 33 +++++++++++++++++++++++++++++++++
> tests/libqos/fw_cfg.h | 2 ++
> 2 files changed, 35 insertions(+)
>
> diff --git a/tests/libqos/fw_cfg.c b/tests/libqos/fw_cfg.c
> index d0889d1e22..e2b0cae7cd 100644
> --- a/tests/libqos/fw_cfg.c
> +++ b/tests/libqos/fw_cfg.c
> @@ -16,6 +16,7 @@
> #include "libqos/fw_cfg.h"
> #include "libqtest.h"
> #include "qemu/bswap.h"
> +#include "standard-headers/linux/qemu_fw_cfg.h"
>
> void qfw_cfg_select(QFWCFG *fw_cfg, uint16_t key)
> {
> @@ -54,6 +55,38 @@ uint64_t qfw_cfg_get_u64(QFWCFG *fw_cfg, uint16_t key)
> return le64_to_cpu(value);
> }
>
> +size_t qfw_cfg_get_file(QFWCFG *fw_cfg, const char *filename,
> + void *data, size_t buflen)
> +{
> + uint32_t count;
> + uint32_t i;
> + unsigned char *filesbuf = NULL;
> + uint32_t dsize;
dsize should be size_t
> + struct fw_cfg_file *p;
Please use a better variable name, such as "dir_entry" or similar.
> + size_t filesize = 0;
> +
> + qfw_cfg_get(fw_cfg, FW_CFG_FILE_DIR, &count, sizeof(count));
> + count = be32_to_cpu(count);
> + dsize = sizeof(uint32_t) + count * sizeof(struct fw_cfg_file);
where does "struct fw_cfg_file" come from?
... more precisely: why use it over the "FWCfgFile" typedef? (applies to
the declaration of "p" as well).
> + filesbuf = g_malloc0(dsize);
> + qfw_cfg_get(fw_cfg, FW_CFG_FILE_DIR, filesbuf, dsize);
> + p = (struct fw_cfg_file *)(filesbuf + sizeof(uint32_t));
> + for (i = 0; i < count; ++i, ++p) {
> + if (!strcmp(p->name, filename)) {
> + uint32_t len = be32_to_cpu(p->size);
> + uint16_t sel = be16_to_cpu(p->select);
> + filesize = len;
> + if (len > buflen) {
> + len = buflen;
> + }
> + qfw_cfg_get(fw_cfg, sel, data, len);
> + break;
> + }
> + }
> + g_free(filesbuf);
> + return filesize;
> +}
> +
> static void mm_fw_cfg_select(QFWCFG *fw_cfg, uint16_t key)
> {
> qtest_writew(fw_cfg->qts, fw_cfg->base, key);
> diff --git a/tests/libqos/fw_cfg.h b/tests/libqos/fw_cfg.h
> index 0353416af0..de73722e67 100644
> --- a/tests/libqos/fw_cfg.h
> +++ b/tests/libqos/fw_cfg.h
> @@ -31,6 +31,8 @@ void qfw_cfg_get(QFWCFG *fw_cfg, uint16_t key, void *data, size_t len);
> uint16_t qfw_cfg_get_u16(QFWCFG *fw_cfg, uint16_t key);
> uint32_t qfw_cfg_get_u32(QFWCFG *fw_cfg, uint16_t key);
> uint64_t qfw_cfg_get_u64(QFWCFG *fw_cfg, uint16_t key);
> +size_t qfw_cfg_get_file(QFWCFG *fw_cfg, const char *filename,
> + void *data, size_t buflen);
>
> QFWCFG *mm_fw_cfg_init(QTestState *qts, uint64_t base);
> QFWCFG *io_fw_cfg_init(QTestState *qts, uint16_t base);
>
Looks OK to me otherwise.
Thanks,
Laszlo
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [Qemu-devel] [PATCH 2/2] tests: fw_cfg: add reboot_timeout test case
2019-01-20 7:13 ` [Qemu-devel] [PATCH 2/2] tests: fw_cfg: add reboot_timeout test case Li Qiang
@ 2019-01-21 21:38 ` Laszlo Ersek
2019-01-22 1:28 ` Li Qiang
0 siblings, 1 reply; 10+ messages in thread
From: Laszlo Ersek @ 2019-01-21 21:38 UTC (permalink / raw)
To: Li Qiang, philmd, kraxel, thuth, lvivier, pbonzini; +Cc: qemu-devel, liq3ea
On 01/20/19 08:13, Li Qiang wrote:
> Signed-off-by: Li Qiang <liq3ea@163.com>
> ---
> tests/fw_cfg-test.c | 13 ++++++++++++-
> 1 file changed, 12 insertions(+), 1 deletion(-)
>
> diff --git a/tests/fw_cfg-test.c b/tests/fw_cfg-test.c
> index 1c5103fe1c..c28e6c3fb5 100644
> --- a/tests/fw_cfg-test.c
> +++ b/tests/fw_cfg-test.c
> @@ -99,6 +99,15 @@ static void test_fw_cfg_boot_menu(void)
> g_assert_cmpint(qfw_cfg_get_u16(fw_cfg, FW_CFG_BOOT_MENU), ==, boot_menu);
> }
>
> +static void test_fw_cfg_reboot_timeout(void)
> +{
> + uint32_t reboot_timeout;
> +
> + qfw_cfg_get_file(fw_cfg, "etc/boot-fail-wait",
> + &reboot_timeout, sizeof(reboot_timeout));
> + g_assert_cmpint(reboot_timeout, ==, 15);
> +}
> +
You don't check the return status of qfw_cfg_get_file(), before reading
"reboot_timeout". If the qfw_cfg_get_file() fails (returning 0), then
the comparison will refer to an indeterminate value. Also, it's
theoretically possible for qfw_cfg_get_file() to overwrite only part of
the "reboot_timeout" object.
So I think we need the function to transfer exactly (sizeof
reboot_timeout) bytes.
BTW, this reminds me, qfw_cfg_get_file() seems to return the number of
bytes that would be necessary for transferring the entire file. That
looks like a good idea, but it should be documented. Please add some
docs on top of qfw_cfg_get_file().
> int main(int argc, char **argv)
> {
> QTestState *s;
> @@ -106,7 +115,8 @@ int main(int argc, char **argv)
>
> g_test_init(&argc, &argv, NULL);
>
> - s = qtest_init("-uuid 4600cb32-38ec-4b2f-8acb-81c6ea54f2d8");
> + s = qtest_init("-uuid 4600cb32-38ec-4b2f-8acb-81c6ea54f2d8 "
> + "-boot reboot-timeout=15");
>
> fw_cfg = pc_fw_cfg_init(s);
>
> @@ -125,6 +135,7 @@ int main(int argc, char **argv)
> qtest_add_func("fw_cfg/max_cpus", test_fw_cfg_max_cpus);
> qtest_add_func("fw_cfg/numa", test_fw_cfg_numa);
> qtest_add_func("fw_cfg/boot_menu", test_fw_cfg_boot_menu);
> + qtest_add_func("fw_cfg/reboot_timeout", test_fw_cfg_reboot_timeout);
>
> ret = g_test_run();
>
>
Looks OK otherwise.
Thanks
Laszlo
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [Qemu-devel] [PATCH 1/2] tests: fw_cfg: add a function to get the fw_cfg file entry
2019-01-21 21:32 ` Laszlo Ersek
@ 2019-01-22 1:21 ` Li Qiang
0 siblings, 0 replies; 10+ messages in thread
From: Li Qiang @ 2019-01-22 1:21 UTC (permalink / raw)
To: Laszlo Ersek
Cc: Li Qiang, Philippe Mathieu-Daudé, Gerd Hoffmann, Thomas Huth,
lvivier, Paolo Bonzini, Qemu Developers
Laszlo Ersek <lersek@redhat.com> 于2019年1月22日周二 上午5:32写道:
> On 01/20/19 08:13, Li Qiang wrote:
> > This is useful to write qtest about fw_cfg file entry.
> >
> > Signed-off-by: Li Qiang <liq3ea@163.com>
> > ---
> > tests/libqos/fw_cfg.c | 33 +++++++++++++++++++++++++++++++++
> > tests/libqos/fw_cfg.h | 2 ++
> > 2 files changed, 35 insertions(+)
> >
> > diff --git a/tests/libqos/fw_cfg.c b/tests/libqos/fw_cfg.c
> > index d0889d1e22..e2b0cae7cd 100644
> > --- a/tests/libqos/fw_cfg.c
> > +++ b/tests/libqos/fw_cfg.c
> > @@ -16,6 +16,7 @@
> > #include "libqos/fw_cfg.h"
> > #include "libqtest.h"
> > #include "qemu/bswap.h"
> > +#include "standard-headers/linux/qemu_fw_cfg.h"
> >
> > void qfw_cfg_select(QFWCFG *fw_cfg, uint16_t key)
> > {
> > @@ -54,6 +55,38 @@ uint64_t qfw_cfg_get_u64(QFWCFG *fw_cfg, uint16_t key)
> > return le64_to_cpu(value);
> > }
> >
> > +size_t qfw_cfg_get_file(QFWCFG *fw_cfg, const char *filename,
> > + void *data, size_t buflen)
> > +{
> > + uint32_t count;
> > + uint32_t i;
> > + unsigned char *filesbuf = NULL;
> > + uint32_t dsize;
>
> dsize should be size_t
>
>
OK.
> > + struct fw_cfg_file *p;
>
> Please use a better variable name, such as "dir_entry" or similar.
>
>
OK.
> > + size_t filesize = 0;
> > +
> > + qfw_cfg_get(fw_cfg, FW_CFG_FILE_DIR, &count, sizeof(count));
> > + count = be32_to_cpu(count);
> > + dsize = sizeof(uint32_t) + count * sizeof(struct fw_cfg_file);
>
> where does "struct fw_cfg_file" come from?
>
>
>From include/standard-headers/linux/qemu_fw_cfg.h
> ... more precisely: why use it over the "FWCfgFile" typedef? (applies to
> the declaration of "p" as well).
>
>
Ok, I think we should use include/hw/nvram/fw_cfg.h.
Thanks,
Li Qiang
> > + filesbuf = g_malloc0(dsize);
> > + qfw_cfg_get(fw_cfg, FW_CFG_FILE_DIR, filesbuf, dsize);
> > + p = (struct fw_cfg_file *)(filesbuf + sizeof(uint32_t));
> > + for (i = 0; i < count; ++i, ++p) {
> > + if (!strcmp(p->name, filename)) {
> > + uint32_t len = be32_to_cpu(p->size);
> > + uint16_t sel = be16_to_cpu(p->select);
> > + filesize = len;
> > + if (len > buflen) {
> > + len = buflen;
> > + }
> > + qfw_cfg_get(fw_cfg, sel, data, len);
> > + break;
> > + }
> > + }
> > + g_free(filesbuf);
> > + return filesize;
> > +}
> > +
> > static void mm_fw_cfg_select(QFWCFG *fw_cfg, uint16_t key)
> > {
> > qtest_writew(fw_cfg->qts, fw_cfg->base, key);
> > diff --git a/tests/libqos/fw_cfg.h b/tests/libqos/fw_cfg.h
> > index 0353416af0..de73722e67 100644
> > --- a/tests/libqos/fw_cfg.h
> > +++ b/tests/libqos/fw_cfg.h
> > @@ -31,6 +31,8 @@ void qfw_cfg_get(QFWCFG *fw_cfg, uint16_t key, void
> *data, size_t len);
> > uint16_t qfw_cfg_get_u16(QFWCFG *fw_cfg, uint16_t key);
> > uint32_t qfw_cfg_get_u32(QFWCFG *fw_cfg, uint16_t key);
> > uint64_t qfw_cfg_get_u64(QFWCFG *fw_cfg, uint16_t key);
> > +size_t qfw_cfg_get_file(QFWCFG *fw_cfg, const char *filename,
> > + void *data, size_t buflen);
> >
> > QFWCFG *mm_fw_cfg_init(QTestState *qts, uint64_t base);
> > QFWCFG *io_fw_cfg_init(QTestState *qts, uint16_t base);
> >
>
> Looks OK to me otherwise.
>
> Thanks,
> Laszlo
>
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [Qemu-devel] [PATCH 2/2] tests: fw_cfg: add reboot_timeout test case
2019-01-21 21:38 ` Laszlo Ersek
@ 2019-01-22 1:28 ` Li Qiang
2019-01-22 12:10 ` Laszlo Ersek
0 siblings, 1 reply; 10+ messages in thread
From: Li Qiang @ 2019-01-22 1:28 UTC (permalink / raw)
To: Laszlo Ersek
Cc: Li Qiang, Philippe Mathieu-Daudé, Gerd Hoffmann, Thomas Huth,
lvivier, Paolo Bonzini, Qemu Developers
Laszlo Ersek <lersek@redhat.com> 于2019年1月22日周二 上午5:38写道:
> On 01/20/19 08:13, Li Qiang wrote:
> > Signed-off-by: Li Qiang <liq3ea@163.com>
> > ---
> > tests/fw_cfg-test.c | 13 ++++++++++++-
> > 1 file changed, 12 insertions(+), 1 deletion(-)
> >
> > diff --git a/tests/fw_cfg-test.c b/tests/fw_cfg-test.c
> > index 1c5103fe1c..c28e6c3fb5 100644
> > --- a/tests/fw_cfg-test.c
> > +++ b/tests/fw_cfg-test.c
> > @@ -99,6 +99,15 @@ static void test_fw_cfg_boot_menu(void)
> > g_assert_cmpint(qfw_cfg_get_u16(fw_cfg, FW_CFG_BOOT_MENU), ==,
> boot_menu);
> > }
> >
> > +static void test_fw_cfg_reboot_timeout(void)
> > +{
> > + uint32_t reboot_timeout;
> > +
> > + qfw_cfg_get_file(fw_cfg, "etc/boot-fail-wait",
> > + &reboot_timeout, sizeof(reboot_timeout));
> > + g_assert_cmpint(reboot_timeout, ==, 15);
> > +}
> > +
>
> You don't check the return status of qfw_cfg_get_file(), before reading
> "reboot_timeout". If the qfw_cfg_get_file() fails (returning 0), then
> the comparison will refer to an indeterminate value. Also, it's
> theoretically possible for qfw_cfg_get_file() to overwrite only part of
> the "reboot_timeout" object.
>
>
Right. I will change in the next revision.
> So I think we need the function to transfer exactly (sizeof
> reboot_timeout) bytes.
>
>
What does this mean? check the return of 'qfw_cfg_get_file' if it is
sizeof(reboot_timeout)?
> BTW, this reminds me, qfw_cfg_get_file() seems to return the number of
> bytes that would be necessary for transferring the entire file. That
> looks like a good idea, but it should be documented. Please add some
> docs on top of qfw_cfg_get_file().
>
>
The docs like "return 0 means failed and non-zero means successful but
the caller need check the exactly size to avoid partially file size" ?
Thanks,
Li Qiang
> > int main(int argc, char **argv)
> > {
> > QTestState *s;
> > @@ -106,7 +115,8 @@ int main(int argc, char **argv)
> >
> > g_test_init(&argc, &argv, NULL);
> >
> > - s = qtest_init("-uuid 4600cb32-38ec-4b2f-8acb-81c6ea54f2d8");
> > + s = qtest_init("-uuid 4600cb32-38ec-4b2f-8acb-81c6ea54f2d8 "
> > + "-boot reboot-timeout=15");
> >
> > fw_cfg = pc_fw_cfg_init(s);
> >
> > @@ -125,6 +135,7 @@ int main(int argc, char **argv)
> > qtest_add_func("fw_cfg/max_cpus", test_fw_cfg_max_cpus);
> > qtest_add_func("fw_cfg/numa", test_fw_cfg_numa);
> > qtest_add_func("fw_cfg/boot_menu", test_fw_cfg_boot_menu);
> > + qtest_add_func("fw_cfg/reboot_timeout", test_fw_cfg_reboot_timeout);
> >
> > ret = g_test_run();
> >
> >
>
> Looks OK otherwise.
>
> Thanks
> Laszlo
>
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [Qemu-devel] [PATCH 2/2] tests: fw_cfg: add reboot_timeout test case
2019-01-22 1:28 ` Li Qiang
@ 2019-01-22 12:10 ` Laszlo Ersek
0 siblings, 0 replies; 10+ messages in thread
From: Laszlo Ersek @ 2019-01-22 12:10 UTC (permalink / raw)
To: Li Qiang
Cc: Li Qiang, Philippe Mathieu-Daudé, Gerd Hoffmann, Thomas Huth,
lvivier, Paolo Bonzini, Qemu Developers
On 01/22/19 02:28, Li Qiang wrote:
> Laszlo Ersek <lersek@redhat.com> 于2019年1月22日周二 上午5:38写道:
>
>> On 01/20/19 08:13, Li Qiang wrote:
>>> Signed-off-by: Li Qiang <liq3ea@163.com>
>>> ---
>>> tests/fw_cfg-test.c | 13 ++++++++++++-
>>> 1 file changed, 12 insertions(+), 1 deletion(-)
>>>
>>> diff --git a/tests/fw_cfg-test.c b/tests/fw_cfg-test.c
>>> index 1c5103fe1c..c28e6c3fb5 100644
>>> --- a/tests/fw_cfg-test.c
>>> +++ b/tests/fw_cfg-test.c
>>> @@ -99,6 +99,15 @@ static void test_fw_cfg_boot_menu(void)
>>> g_assert_cmpint(qfw_cfg_get_u16(fw_cfg, FW_CFG_BOOT_MENU), ==,
>> boot_menu);
>>> }
>>>
>>> +static void test_fw_cfg_reboot_timeout(void)
>>> +{
>>> + uint32_t reboot_timeout;
>>> +
>>> + qfw_cfg_get_file(fw_cfg, "etc/boot-fail-wait",
>>> + &reboot_timeout, sizeof(reboot_timeout));
>>> + g_assert_cmpint(reboot_timeout, ==, 15);
>>> +}
>>> +
>>
>> You don't check the return status of qfw_cfg_get_file(), before reading
>> "reboot_timeout". If the qfw_cfg_get_file() fails (returning 0), then
>> the comparison will refer to an indeterminate value. Also, it's
>> theoretically possible for qfw_cfg_get_file() to overwrite only part of
>> the "reboot_timeout" object.
>>
>>
> Right. I will change in the next revision.
>
>
>
>> So I think we need the function to transfer exactly (sizeof
>> reboot_timeout) bytes.
>>
>>
> What does this mean? check the return of 'qfw_cfg_get_file' if it is
> sizeof(reboot_timeout)?
Yes, that's what I meant.
>> BTW, this reminds me, qfw_cfg_get_file() seems to return the number of
>> bytes that would be necessary for transferring the entire file. That
>> looks like a good idea, but it should be documented. Please add some
>> docs on top of qfw_cfg_get_file().
>>
>>
> The docs like "return 0 means failed and non-zero means successful but
> the caller need check the exactly size to avoid partially file size" ?
Yes. A bit more precisely, when the return value is nonzero, it means
that some bytes have been transferred. If the fw_cfg file in question is
smaller than the allocated & passed-in buffer, then the buffer has been
populated only in part.
Vice versa, if the fw_cfg file in question is larger than the passed-in
buffer, then the return value explains how much room would have been
necessary in total. And, while the caller's buffer has been fully
populated, it has received only a starting slice of the fw_cfg file.
In the comparison that follows qfw_cfg_get_file(), we want to be sure
that the "reboot_timeout" integer object has been fully populated,
*plus* that we aren't ignoring any trailing bytes from the fw_cfg file.
Hence the strict equality on the size.
Thanks
Laszlo
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [Qemu-devel] [PATCH 0/2] tests: fw_cfg: add reboot-timeout test case
[not found] ` <4359b7c8.12ac0.169c3e7ba5d.Coremail.liq3ea@163.com>
@ 2019-04-05 15:47 ` Philippe Mathieu-Daudé
2019-04-05 15:47 ` Philippe Mathieu-Daudé
0 siblings, 1 reply; 10+ messages in thread
From: Philippe Mathieu-Daudé @ 2019-04-05 15:47 UTC (permalink / raw)
To: 李强
Cc: thuth, lvivier, pbonzini, lersek, kraxel, qemu-devel, liq3ea
On 3/28/19 11:45 AM, 李强 wrote:
> Ping...
>
> What's your opinion, Philippe?
Eh sorry my email client tagged this series as reviewed since your
previous v1 was reviewed by Laszlo. I'll review your patches, but please
increase the version between series next time so I won't miss it that
easily ;)
>
> Thanks,
> Li Qiang
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [Qemu-devel] [PATCH 0/2] tests: fw_cfg: add reboot-timeout test case
2019-04-05 15:47 ` [Qemu-devel] [PATCH 0/2] tests: fw_cfg: add reboot-timeout " Philippe Mathieu-Daudé
@ 2019-04-05 15:47 ` Philippe Mathieu-Daudé
0 siblings, 0 replies; 10+ messages in thread
From: Philippe Mathieu-Daudé @ 2019-04-05 15:47 UTC (permalink / raw)
To: 李强
Cc: lvivier, thuth, liq3ea, qemu-devel, kraxel, pbonzini, lersek
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: text/plain; charset="UTF-8", Size: 326 bytes --]
On 3/28/19 11:45 AM, ÀîÇ¿ wrote:
> Ping...
>
> What's your opinion, Philippe?
Eh sorry my email client tagged this series as reviewed since your
previous v1 was reviewed by Laszlo. I'll review your patches, but please
increase the version between series next time so I won't miss it that
easily ;)
>
> Thanks,
> Li Qiang
^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2019-04-05 15:48 UTC | newest]
Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2019-01-20 7:13 [Qemu-devel] [PATCH 0/2] tests: fw_cfg: add reboot-timeout test case Li Qiang
2019-01-20 7:13 ` [Qemu-devel] [PATCH 1/2] tests: fw_cfg: add a function to get the fw_cfg file entry Li Qiang
2019-01-21 21:32 ` Laszlo Ersek
2019-01-22 1:21 ` Li Qiang
2019-01-20 7:13 ` [Qemu-devel] [PATCH 2/2] tests: fw_cfg: add reboot_timeout test case Li Qiang
2019-01-21 21:38 ` Laszlo Ersek
2019-01-22 1:28 ` Li Qiang
2019-01-22 12:10 ` Laszlo Ersek
[not found] <20190319023030.947-1-liq3ea@163.com>
[not found] ` <4359b7c8.12ac0.169c3e7ba5d.Coremail.liq3ea@163.com>
2019-04-05 15:47 ` [Qemu-devel] [PATCH 0/2] tests: fw_cfg: add reboot-timeout " Philippe Mathieu-Daudé
2019-04-05 15:47 ` Philippe Mathieu-Daudé
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).