Configure pci bridge setting to test ivshmem on 'q35'.
Signed-off-by: Michael Labiuk <michael.labiuk@virtuozzo.com>
---
tests/qtest/ivshmem-test.c | 30 ++++++++++++++++++++++++++++++
1 file changed, 30 insertions(+)
diff --git a/tests/qtest/ivshmem-test.c b/tests/qtest/ivshmem-test.c
index 9611d05eb5..0f9755abc6 100644
--- a/tests/qtest/ivshmem-test.c
+++ b/tests/qtest/ivshmem-test.c
@@ -378,6 +378,32 @@ static void test_ivshmem_server(void)
close(thread.pipe[0]);
}
+static void device_del(QTestState *qtest, const char *id)
+{
+ QDict *resp;
+
+ resp = qtest_qmp(qtest,
+ "{'execute': 'device_del',"
+ " 'arguments': { 'id': %s } }", id);
+
+ g_assert(qdict_haskey(resp, "return"));
+ qobject_unref(resp);
+}
+
+static void test_ivshmem_hotplug_q35(void)
+{
+ QTestState *qts = qtest_init("-object memory-backend-ram,size=1M,id=mb1 "
+ "-device pcie-root-port,id=p1 "
+ "-device pcie-pci-bridge,bus=p1,id=b1 "
+ "-machine q35");
+
+ qtest_qmp_device_add(qts, "ivshmem-plain", "iv1",
+ "{'memdev': 'mb1', 'bus': 'b1'}");
+ device_del(qts, "iv1");
+
+ qtest_quit(qts);
+}
+
#define PCI_SLOT_HP 0x06
static void test_ivshmem_hotplug(void)
@@ -469,6 +495,7 @@ int main(int argc, char **argv)
{
int ret, fd;
gchar dir[] = "/tmp/ivshmem-test.XXXXXX";
+ const char *arch = qtest_get_arch();
g_test_init(&argc, &argv, NULL);
@@ -494,6 +521,9 @@ int main(int argc, char **argv)
qtest_add_func("/ivshmem/pair", test_ivshmem_pair);
qtest_add_func("/ivshmem/server", test_ivshmem_server);
}
+ if (!strcmp(arch, "x86_64")) {
+ qtest_add_func("/ivshmem/hotplug-q35", test_ivshmem_hotplug_q35);
+ }
out:
ret = g_test_run();
--
2.34.1
On 9/15/22 15:14, Michael Labiuk wrote:
> Configure pci bridge setting to test ivshmem on 'q35'.
< empty line here is needed
> Signed-off-by: Michael Labiuk <michael.labiuk@virtuozzo.com>
> ---
> tests/qtest/ivshmem-test.c | 30 ++++++++++++++++++++++++++++++
> 1 file changed, 30 insertions(+)
>
> diff --git a/tests/qtest/ivshmem-test.c b/tests/qtest/ivshmem-test.c
> index 9611d05eb5..0f9755abc6 100644
> --- a/tests/qtest/ivshmem-test.c
> +++ b/tests/qtest/ivshmem-test.c
> @@ -378,6 +378,32 @@ static void test_ivshmem_server(void)
> close(thread.pipe[0]);
> }
>
> +static void device_del(QTestState *qtest, const char *id)
> +{
> + QDict *resp;
> +
> + resp = qtest_qmp(qtest,
> + "{'execute': 'device_del',"
> + " 'arguments': { 'id': %s } }", id);
> +
> + g_assert(qdict_haskey(resp, "return"));
> + qobject_unref(resp);
> +}
hmmm, why do we need this helper if it is not used anywhere in next
and this patches?
it is also unclear to me why don't we do 'device_del' for other archs.
May be this is to be clarified in the patch description or worth
additional patch.
> +
> +static void test_ivshmem_hotplug_q35(void)
> +{
> + QTestState *qts = qtest_init("-object memory-backend-ram,size=1M,id=mb1 "
> + "-device pcie-root-port,id=p1 "
> + "-device pcie-pci-bridge,bus=p1,id=b1 "
> + "-machine q35");
> +
> + qtest_qmp_device_add(qts, "ivshmem-plain", "iv1",
> + "{'memdev': 'mb1', 'bus': 'b1'}");
> + device_del(qts, "iv1");
> +
> + qtest_quit(qts);
> +}
> +
> #define PCI_SLOT_HP 0x06
>
> static void test_ivshmem_hotplug(void)
> @@ -469,6 +495,7 @@ int main(int argc, char **argv)
> {
> int ret, fd;
> gchar dir[] = "/tmp/ivshmem-test.XXXXXX";
> + const char *arch = qtest_get_arch();
>
> g_test_init(&argc, &argv, NULL);
>
> @@ -494,6 +521,9 @@ int main(int argc, char **argv)
> qtest_add_func("/ivshmem/pair", test_ivshmem_pair);
> qtest_add_func("/ivshmem/server", test_ivshmem_server);
> }
> + if (!strcmp(arch, "x86_64")) {
> + qtest_add_func("/ivshmem/hotplug-q35", test_ivshmem_hotplug_q35);
> + }
>
> out:
> ret = g_test_run();
On 9/19/22 16:13, Denis V. Lunev wrote:
> On 9/15/22 15:14, Michael Labiuk wrote:
>> diff --git a/tests/qtest/ivshmem-test.c b/tests/qtest/ivshmem-test.c
>> index 9611d05eb5..0f9755abc6 100644
>> --- a/tests/qtest/ivshmem-test.c
>> +++ b/tests/qtest/ivshmem-test.c
>> @@ -378,6 +378,32 @@ static void test_ivshmem_server(void)
>> close(thread.pipe[0]);
>> }
>> +static void device_del(QTestState *qtest, const char *id)
>> +{
>> + QDict *resp;
>> +
>> + resp = qtest_qmp(qtest,
>> + "{'execute': 'device_del',"
>> + " 'arguments': { 'id': %s } }", id);
>> +
>> + g_assert(qdict_haskey(resp, "return"));
>> + qobject_unref(resp);
>> +}
> hmmm, why do we need this helper if it is not used anywhere in next
> and this patches?
>
> it is also unclear to me why don't we do 'device_del' for other archs.
> May be this is to be clarified in the patch description or worth
> additional patch.
device_del() used instead of qpci_unplug_acpi_device_test() because
unplug_acpi is supported for x86 i440fx only.
Also "DEVICE_DELETED" will not being emitted for 'q35' pci-e device
without support from guest side.
These are the reasons for custom unplugging function.
© 2016 - 2026 Red Hat, Inc.