qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] [PATCH v4 00/16] gdbstub: support for the multiprocess


From: Luc Michel
Subject: Re: [Qemu-devel] [PATCH v4 00/16] gdbstub: support for the multiprocess extension
Date: Fri, 9 Nov 2018 09:36:44 +0100
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.2.1

On 11/8/18 5:09 PM, Philippe Mathieu-Daudé wrote:
> On 6/11/18 12:05, Luc Michel wrote:
>> changes since v3:
>>    - patch 1    cpu_cluster.h: remove QEMU_ from the multiple includes
>>                 guard #ifdef/#define [Alistair]
>>
>>    - patch 1    cpu_cluster.c: include osdep.h first [Alistair]
>>
>>    - patch 1    use uint64_t for cluster ID for prosperity :) [Philippe]
> 
> Actually my comment about 32-bit had the opposite meaning, I suppose
> having 256 kind of cpu cores in the same SoC is probably enough for a
> long time IMHO.
Oops sorry about that :) I thought you were referring to an old quote
from a guy at Redmond about 640KiB of RAM ;)

A case I was thinking about that would require more than 8- or 16-bit ID
is if for whatever reason we need to model a SoC with sparse
(non-continuous) cluster IDs.

Anyway, I can put back the uint32_t for the next re-roll, I think it's a
good compromise.

Thanks.

Luc

> 
>>
>>    - patch 1    auto-assign a cluster ID to newly created clusters
>> [Philippe]
>>
>>    - patch 2    fix mid-code variable declaration [Alistair]
>>
>>    - patch 3    add a comment in gdb_get_cpu_pid() when retrieving CPU
>>                 parent canonical path [Alistair]
>>
>>    - patch 14   fix a typo in the commit message [Alistair]
>>
>> changes since v2:
>>    - patch 1    introducing the cpu-cluster type. I didn't opt for an
>>                 Interface, but I can add one if you think it's necessary.
>>                 For now this class inherits from Device and has a
>>                 cluster-id property, used by the GDB stub to compute a
>>                 PID.
>>
>>    - patch 2    removed GDB group related code as it has been replaced
>>                 with CPU clusters
>>
>>    - patch 2/8  moved GDBProcess target_xml field introduction into patch
>>                 8 [Philippe]
>>
>>    - patch 3    gdb_get_cpu_pid() now search for CPU being a child of a
>>                 cpu-cluster object. Use the cluster-id to compute the
>> PID.
>>
>>    - patch 4    gdb_get_process() does not rely on s->processes array
>>                 indices anymore as PIDs can now be sparse. Instead,
>> iterate
>>                 over the array to find the process.
>>
>>    - patch 3/4  removed Reviewed-by tags because of substantial changes.
>>
>>    - patch 4/7  read_thread_id() hardening [Philippe]
>>
>>    - patch 12   safer vAttach packet parsing [Phillipe]
>>
>>    - patch 16   put APUs and RPUs in different clusters instead of GDB
>>                 groups
>>
>> changes since v1:
>>    - rename qemu_get_thread_id() to gdb_fmt_thread_id() [Philippe]
>>    - check qemu_strtoul() return value for 'D' packets [Philippe]
>>
>>
>> This series adds support for the multiprocess extension of the GDB
>> remote protocol in the QEMU GDB stub.
>>
>> This extension is useful to split QEMU emulated CPUs in different
>> processes from the point of view of the GDB client. It adds the
>> possibility to debug different kind of processors (e.g. an AArch64 and
>> an ARMv7 CPU) at the same time (it is not possible otherwise since GDB
>> expects an SMP view at the thread granularity.
>>
>> CPUs are grouped using specially named QOM containers. CPUs that are
>> children of such a container are grouped under the same GDB process.
>>
>> The last patch groups the CPUs of different model in the zynqmp machines
>> into separate processes.
>>
>> To test this patchset, you can use the following commands:
>>
>> (Note that this requires a recent enough GDB, I think GDB 7.2 is OK.
>> Also, it must be compiled to support both ARM and AArch64 architectures)
>>
>> Run QEMU: (-smp 6 in xlnx-zcu102 enables both cortex-a53 and cortex-r5
>> CPUs)
>>
>> qemu-system-aarch64 -M xlnx-zcu102 -gdb tcp::1234 -S -smp 6
>>
>> Run the following commands in GDB:
>>
>> target extended :1234
>> add-inferior
>> inferior 2
>> attach 2
>> info threads
>>
>> I want to thanks the Xilinx's QEMU team who sponsored this work for
>> their collaboration and their prototype implementation.
>>
>> Luc Michel (16):
>>    hw/cpu: introduce CPU clusters
>>    gdbstub: introduce GDB processes
>>    gdbstub: add multiprocess support to '?' packets
>>    gdbstub: add multiprocess support to 'H' and 'T' packets
>>    gdbstub: add multiprocess support to vCont packets
>>    gdbstub: add multiprocess support to 'sC' packets
>>    gdbstub: add multiprocess support to (f|s)ThreadInfo and
>>      ThreadExtraInfo
>>    gdbstub: add multiprocess support to Xfer:features:read:
>>    gdbstub: add multiprocess support to gdb_vm_state_change()
>>    gdbstub: add multiprocess support to 'D' packets
>>    gdbstub: add support for extended mode packet
>>    gdbstub: add support for vAttach packets
>>    gdbstub: processes initialization on new peer connection
>>    gdbstub: gdb_set_stop_cpu: ignore request when process is not attached
>>    gdbstub: add multiprocess extension support
>>    arm/xlnx-zynqmp: put APUs and RPUs in separate CPU clusters
>>
>>   include/hw/arm/xlnx-zynqmp.h |   3 +
>>   include/hw/cpu/cluster.h     |  38 +++
>>   gdbstub.c                    | 632 ++++++++++++++++++++++++++++++-----
>>   hw/arm/xlnx-zynqmp.c         |  21 +-
>>   hw/cpu/cluster.c             |  59 ++++
>>   hw/cpu/Makefile.objs         |   2 +-
>>   6 files changed, 674 insertions(+), 81 deletions(-)
>>   create mode 100644 include/hw/cpu/cluster.h
>>   create mode 100644 hw/cpu/cluster.c
>>



reply via email to

[Prev in Thread] Current Thread [Next in Thread]