[Qemu-devel] [PATCH] tcg: remove softfloat from --disable-tcg builds

Paolo Bonzini posted 1 patch 5 years, 11 months ago
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/qemu tags/patchew/20180522192034.13318-1-pbonzini@redhat.com
Test checkpatch failed
Test docker-mingw@fedora passed
Test docker-quick@centos7 passed
Test s390x passed
Makefile.target          |   2 +-
hw/i386/x86-iommu-stub.c | 132 +++++++++++++++++++++++++++++++++++++++
2 files changed, 133 insertions(+), 1 deletion(-)
create mode 100644 hw/i386/x86-iommu-stub.c
[Qemu-devel] [PATCH] tcg: remove softfloat from --disable-tcg builds
Posted by Paolo Bonzini 5 years, 11 months ago
Even though the presence of softfloat does not cause --disable-tcg builds to fail,
it is the single largest .o file in them.  Remove it, since TCG is the only client.

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
 Makefile.target          |   2 +-
 hw/i386/x86-iommu-stub.c | 132 +++++++++++++++++++++++++++++++++++++++
 2 files changed, 133 insertions(+), 1 deletion(-)
 create mode 100644 hw/i386/x86-iommu-stub.c

diff --git a/Makefile.target b/Makefile.target
index d0ec77a307..dad2cf8778 100644
--- a/Makefile.target
+++ b/Makefile.target
@@ -97,7 +97,7 @@ obj-$(CONFIG_TCG) += tcg/tcg.o tcg/tcg-op.o tcg/tcg-op-vec.o tcg/tcg-op-gvec.o
 obj-$(CONFIG_TCG) += tcg/tcg-common.o tcg/optimize.o
 obj-$(CONFIG_TCG_INTERPRETER) += tcg/tci.o
 obj-$(CONFIG_TCG_INTERPRETER) += disas/tci.o
-obj-y += fpu/softfloat.o
+obj-$(CONFIG_TCG) += fpu/softfloat.o
 obj-y += target/$(TARGET_BASE_ARCH)/
 obj-y += disas.o
 obj-$(call notempty,$(TARGET_XML_FILES)) += gdbstub-xml.o
diff --git a/hw/i386/x86-iommu-stub.c b/hw/i386/x86-iommu-stub.c
new file mode 100644
index 0000000000..8a01a2dd25
--- /dev/null
+++ b/hw/i386/x86-iommu-stub.c
@@ -0,0 +1,132 @@
+/*
+ * QEMU emulation of common X86 IOMMU
+ *
+ * Copyright (C) 2016 Peter Xu, Red Hat <peterx@redhat.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "qemu/osdep.h"
+#include "hw/sysbus.h"
+#include "hw/boards.h"
+#include "hw/i386/x86-iommu.h"
+#include "hw/i386/pc.h"
+#include "qapi/error.h"
+#include "qemu/error-report.h"
+#include "trace.h"
+
+void x86_iommu_iec_register_notifier(X86IOMMUState *iommu,
+                                     iec_notify_fn fn, void *data)
+{
+    IEC_Notifier *notifier = g_new0(IEC_Notifier, 1);
+
+    notifier->iec_notify = fn;
+    notifier->private = data;
+
+    QLIST_INSERT_HEAD(&iommu->iec_notifiers, notifier, list);
+}
+
+void x86_iommu_iec_notify_all(X86IOMMUState *iommu, bool global,
+                              uint32_t index, uint32_t mask)
+{
+    IEC_Notifier *notifier;
+
+    trace_x86_iommu_iec_notify(global, index, mask);
+
+    QLIST_FOREACH(notifier, &iommu->iec_notifiers, list) {
+        if (notifier->iec_notify) {
+            notifier->iec_notify(notifier->private, global,
+                                 index, mask);
+        }
+    }
+}
+
+/* Default X86 IOMMU device */
+static X86IOMMUState *x86_iommu_default = NULL;
+
+static void x86_iommu_set_default(X86IOMMUState *x86_iommu)
+{
+    assert(x86_iommu);
+
+    if (x86_iommu_default) {
+        error_report("QEMU does not support multiple vIOMMUs "
+                     "for x86 yet.");
+        exit(1);
+    }
+
+    x86_iommu_default = x86_iommu;
+}
+
+X86IOMMUState *x86_iommu_get_default(void)
+{
+    return x86_iommu_default;
+}
+
+IommuType x86_iommu_get_type(void)
+{
+    return x86_iommu_default->type;
+}
+
+static void x86_iommu_realize(DeviceState *dev, Error **errp)
+{
+    X86IOMMUState *x86_iommu = X86_IOMMU_DEVICE(dev);
+    X86IOMMUClass *x86_class = X86_IOMMU_GET_CLASS(dev);
+    MachineState *ms = MACHINE(qdev_get_machine());
+    MachineClass *mc = MACHINE_GET_CLASS(ms);
+    PCMachineState *pcms =
+        PC_MACHINE(object_dynamic_cast(OBJECT(ms), TYPE_PC_MACHINE));
+    QLIST_INIT(&x86_iommu->iec_notifiers);
+
+    if (!pcms || !pcms->bus) {
+        error_setg(errp, "Machine-type '%s' not supported by IOMMU",
+                   mc->name);
+        return;
+    }
+
+    if (x86_class->realize) {
+        x86_class->realize(dev, errp);
+    }
+
+    x86_iommu_set_default(X86_IOMMU_DEVICE(dev));
+}
+
+static Property x86_iommu_properties[] = {
+    DEFINE_PROP_BOOL("intremap", X86IOMMUState, intr_supported, false),
+    DEFINE_PROP_BOOL("device-iotlb", X86IOMMUState, dt_supported, false),
+    DEFINE_PROP_BOOL("pt", X86IOMMUState, pt_supported, true),
+    DEFINE_PROP_END_OF_LIST(),
+};
+
+static void x86_iommu_class_init(ObjectClass *klass, void *data)
+{
+    DeviceClass *dc = DEVICE_CLASS(klass);
+    dc->realize = x86_iommu_realize;
+    dc->props = x86_iommu_properties;
+}
+
+static const TypeInfo x86_iommu_info = {
+    .name          = TYPE_X86_IOMMU_DEVICE,
+    .parent        = TYPE_SYS_BUS_DEVICE,
+    .instance_size = sizeof(X86IOMMUState),
+    .class_init    = x86_iommu_class_init,
+    .class_size    = sizeof(X86IOMMUClass),
+    .abstract      = true,
+};
+
+static void x86_iommu_register_types(void)
+{
+    type_register_static(&x86_iommu_info);
+}
+
+type_init(x86_iommu_register_types)
-- 
2.17.0


Re: [Qemu-devel] [PATCH] tcg: remove softfloat from --disable-tcg builds
Posted by no-reply@patchew.org 5 years, 11 months ago
Hi,

This series seems to have some coding style problems. See output below for
more information:

Type: series
Message-id: 20180522192034.13318-1-pbonzini@redhat.com
Subject: [Qemu-devel] [PATCH] tcg: remove softfloat from --disable-tcg builds

=== TEST SCRIPT BEGIN ===
#!/bin/bash

BASE=base
n=1
total=$(git log --oneline $BASE.. | wc -l)
failed=0

git config --local diff.renamelimit 0
git config --local diff.renames True
git config --local diff.algorithm histogram

commits="$(git log --format=%H --reverse $BASE..)"
for c in $commits; do
    echo "Checking PATCH $n/$total: $(git log -n 1 --format=%s $c)..."
    if ! git show $c --format=email | ./scripts/checkpatch.pl --mailback -; then
        failed=1
        echo
    fi
    n=$((n+1))
done

exit $failed
=== TEST SCRIPT END ===

Updating 3c8cf5a9c21ff8782164d1def7f44bd888713384
From https://github.com/patchew-project/qemu
 * [new tag]               patchew/20180522192034.13318-1-pbonzini@redhat.com -> patchew/20180522192034.13318-1-pbonzini@redhat.com
Switched to a new branch 'test'
2b374b4a9d tcg: remove softfloat from --disable-tcg builds

=== OUTPUT BEGIN ===
Checking PATCH 1/1: tcg: remove softfloat from --disable-tcg builds...
WARNING: added, moved or deleted file(s), does MAINTAINERS need updating?
#26: 
new file mode 100644

ERROR: do not initialise statics to 0 or NULL
#86: FILE: hw/i386/x86-iommu-stub.c:56:
+static X86IOMMUState *x86_iommu_default = NULL;

total: 1 errors, 1 warnings, 140 lines checked

Your patch has style problems, please review.  If any of these errors
are false positives report them to the maintainer, see
CHECKPATCH in MAINTAINERS.

=== OUTPUT END ===

Test command exited with code: 1


---
Email generated automatically by Patchew [http://patchew.org/].
Please send your feedback to patchew-devel@redhat.com
Re: [Qemu-devel] [PATCH] tcg: remove softfloat from --disable-tcg builds
Posted by Peter Maydell 5 years, 11 months ago
On 22 May 2018 at 20:20, Paolo Bonzini <pbonzini@redhat.com> wrote:
> Even though the presence of softfloat does not cause --disable-tcg builds to fail,
> it is the single largest .o file in them.  Remove it, since TCG is the only client.
>
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
> ---
>  Makefile.target          |   2 +-
>  hw/i386/x86-iommu-stub.c | 132 +++++++++++++++++++++++++++++++++++++++
>  2 files changed, 133 insertions(+), 1 deletion(-)
>  create mode 100644 hw/i386/x86-iommu-stub.c

Is this new x86-iommu-stub.c file intended to be in this patch?

thanks
-- PMM

Re: [Qemu-devel] [PATCH] tcg: remove softfloat from --disable-tcg builds
Posted by Paolo Bonzini 5 years, 11 months ago
On 22/05/2018 21:27, Peter Maydell wrote:
> On 22 May 2018 at 20:20, Paolo Bonzini <pbonzini@redhat.com> wrote:
>> Even though the presence of softfloat does not cause --disable-tcg builds to fail,
>> it is the single largest .o file in them.  Remove it, since TCG is the only client.
>>
>> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
>> ---
>>  Makefile.target          |   2 +-
>>  hw/i386/x86-iommu-stub.c | 132 +++++++++++++++++++++++++++++++++++++++
>>  2 files changed, 133 insertions(+), 1 deletion(-)
>>  create mode 100644 hw/i386/x86-iommu-stub.c
> 
> Is this new x86-iommu-stub.c file intended to be in this patch?

No, of course not.  I probably fat fingered a "r" into "f" in git rebase
-i...

Paolo


Re: [Qemu-devel] [PATCH] tcg: remove softfloat from --disable-tcg builds
Posted by Richard Henderson 5 years, 11 months ago
On 05/22/2018 12:20 PM, Paolo Bonzini wrote:
> Even though the presence of softfloat does not cause --disable-tcg builds to fail,
> it is the single largest .o file in them.  Remove it, since TCG is the only client.
> 
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
> ---
>  Makefile.target          |   2 +-
>  hw/i386/x86-iommu-stub.c | 132 +++++++++++++++++++++++++++++++++++++++

Assuming this wasn't supposed to be here.

>  2 files changed, 133 insertions(+), 1 deletion(-)
>  create mode 100644 hw/i386/x86-iommu-stub.c
> 
> diff --git a/Makefile.target b/Makefile.target
> index d0ec77a307..dad2cf8778 100644
> --- a/Makefile.target
> +++ b/Makefile.target
> @@ -97,7 +97,7 @@ obj-$(CONFIG_TCG) += tcg/tcg.o tcg/tcg-op.o tcg/tcg-op-vec.o tcg/tcg-op-gvec.o
>  obj-$(CONFIG_TCG) += tcg/tcg-common.o tcg/optimize.o
>  obj-$(CONFIG_TCG_INTERPRETER) += tcg/tci.o
>  obj-$(CONFIG_TCG_INTERPRETER) += disas/tci.o
> -obj-y += fpu/softfloat.o
> +obj-$(CONFIG_TCG) += fpu/softfloat.o

But for this change alone,
Acked-by: Richard Henderson <richard.henderson@linaro.org>

r~

Re: [Qemu-devel] [PATCH] tcg: remove softfloat from --disable-tcg builds
Posted by Paolo Bonzini 5 years, 11 months ago
On 22/05/2018 22:53, Richard Henderson wrote:
> On 05/22/2018 12:20 PM, Paolo Bonzini wrote:
>> Even though the presence of softfloat does not cause --disable-tcg builds to fail,
>> it is the single largest .o file in them.  Remove it, since TCG is the only client.
>>
>> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
>> ---
>>  Makefile.target          |   2 +-
>>  hw/i386/x86-iommu-stub.c | 132 +++++++++++++++++++++++++++++++++++++++
> 
> Assuming this wasn't supposed to be here.

Oops, no it wasn't.  Thanks for the quick review!

Paolo

>>  2 files changed, 133 insertions(+), 1 deletion(-)
>>  create mode 100644 hw/i386/x86-iommu-stub.c
>>
>> diff --git a/Makefile.target b/Makefile.target
>> index d0ec77a307..dad2cf8778 100644
>> --- a/Makefile.target
>> +++ b/Makefile.target
>> @@ -97,7 +97,7 @@ obj-$(CONFIG_TCG) += tcg/tcg.o tcg/tcg-op.o tcg/tcg-op-vec.o tcg/tcg-op-gvec.o
>>  obj-$(CONFIG_TCG) += tcg/tcg-common.o tcg/optimize.o
>>  obj-$(CONFIG_TCG_INTERPRETER) += tcg/tci.o
>>  obj-$(CONFIG_TCG_INTERPRETER) += disas/tci.o
>> -obj-y += fpu/softfloat.o
>> +obj-$(CONFIG_TCG) += fpu/softfloat.o
> 
> But for this change alone,
> Acked-by: Richard Henderson <richard.henderson@linaro.org>
> 
> r~
> 


Re: [Qemu-devel] [PATCH] tcg: remove softfloat from --disable-tcg builds
Posted by Thomas Huth 5 years, 11 months ago
On 22.05.2018 21:20, Paolo Bonzini wrote:
> Even though the presence of softfloat does not cause --disable-tcg builds to fail,
> it is the single largest .o file in them.  Remove it, since TCG is the only client.
> 
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
> ---
>  Makefile.target          |   2 +-
>  hw/i386/x86-iommu-stub.c | 132 +++++++++++++++++++++++++++++++++++++++
>  2 files changed, 133 insertions(+), 1 deletion(-)
>  create mode 100644 hw/i386/x86-iommu-stub.c
> 
> diff --git a/Makefile.target b/Makefile.target
> index d0ec77a307..dad2cf8778 100644
> --- a/Makefile.target
> +++ b/Makefile.target
> @@ -97,7 +97,7 @@ obj-$(CONFIG_TCG) += tcg/tcg.o tcg/tcg-op.o tcg/tcg-op-vec.o tcg/tcg-op-gvec.o
>  obj-$(CONFIG_TCG) += tcg/tcg-common.o tcg/optimize.o
>  obj-$(CONFIG_TCG_INTERPRETER) += tcg/tci.o
>  obj-$(CONFIG_TCG_INTERPRETER) += disas/tci.o
> -obj-y += fpu/softfloat.o
> +obj-$(CONFIG_TCG) += fpu/softfloat.o
>  obj-y += target/$(TARGET_BASE_ARCH)/
>  obj-y += disas.o
>  obj-$(call notempty,$(TARGET_XML_FILES)) += gdbstub-xml.o

Without that x86-iommu-stub.c file:

Reviewed-by: Thomas Huth <thuth@redhat.com>