From: Rob Landley <rob@landley.net>
To: Natalia Portillo <claunia@claunia.com>
Cc: Bryce Lanham <blanham@gmail.com>, qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [RFC][PATCH 000/111] QEMU m68k core additions
Date: Sun, 21 Aug 2011 17:14:22 -0500 [thread overview]
Message-ID: <4E51833E.8070404@landley.net> (raw)
In-Reply-To: <637D43FA-E012-4E7C-B7B1-32A07831CB89@claunia.com>
On 08/20/2011 09:02 PM, Natalia Portillo wrote:
> El 21/08/2011, a las 01:50, Rob Landley escribió:
>
>> On 08/20/2011 07:23 PM, Natalia Portillo wrote:
>>>>> Linux requires the MMU and an almost complete hardware
>>>>> emulation. Standard m68k emulations (UAE, Aranym and
>>>>> specially BasiliskII) try to patch the OS to work.
>>>>
>>>> That's kinda sad. Is there a web page anywhere that elaborates
>>>> on this?
>>>
>>> It is a known thing that Linux requires MMU, it appears on the
>>> installation guide of all m68k distros. On how and how much they
>>> patch the OS, check their sources.
>>
>> Actually coldfire was nommu and thus m68k was one of the first
>> nommu platforms. But what I was talking about was patching the
>> OS.
>>
>> The aranym patches (that i saw) were adding new virtual device
>> drivers. (A bit like virtio, only different implementations.)
>>
>>>>> Indeed BasiliskII is anything but a real macintosh emulator,
>>>>> as it patches heavily the Toolbox and Mac OS (that's why
>>>>> Linux and A/UX will never work on it)
>>>>
>>>> I believe toolbox is the ancient mac bios, correct? Does
>>>> Linux need/use it at all?
>>>
>>> Yes and no to both. Mac OS is a really complex operating system
>>> where everything is divided in little pieces that can be loaded
>>> individually and independently (the Grand Unified Model, the
>>> reason why resource forks exist). Toolbox is the most important
>>> part, the one that resides inside the ROM chip, provides the
>>> specific model drivers (and in the II models, loads the video
>>> driver from the NuBus card), and loads the rest of the system
>>> from the System file inside MacOS.
>>
>> CP/M got split into the BIOS and BDOS halves when Imsai asked
>> Digital Research to give them a driver pack they could tailor to
>> their non-Altair hardware, and then the other half could be
>> board-independent.
>>
>> This seems similarly relevant?
>
> No, CP/M's BIOS just initializes the hardware. BDOS contains the
> drivers.
The bios contains the drivers necessary to talk to the hardware you need
for booting. BDOS didn't duplicate drivers that were in the BIOS, there
was no room. It continue to use them.
DOS started as a more or less clone of CP/M, and continued to call into
the BIOS for things like disk access.
Linux, running on the same hardware, did not use the BIOS, or DOS, after
boot. LOADLIN was one option for booting Linux, but not the only one.
> PC BIOS do the same.
DOS continues to make fairly extensive use of BIOS calls after boot. I
used to program for DOS, I know this firsthand.
> Toolbox initializes the drivers, contains the HAL, the kernel, the
> resource fork manager, the window manager, the mouse pointer, the
> quickdraw functions. It's like having Windows 3.1 in ROM and the
> explorer.exe on disk.
And Linux uses neither. Why would the mac be different?
I'm aware there was an early microkernel-based mac port in the early
90's back before Linux had its 1.0 release, but that wasn't what got
merged into the kernel. Linux supports m68k on Atari and Amiga as well
as old mac, it doesn't need MacOS installed on Atari or Amiga. It has
drivers, which talk directly to chips.
>>> It does not expect a boot loader, it's the OS itself, indeed in
>>> an specific model the whole OS is contained in ROM.
>>>
>>> There is a table for OS functions that can be made to point to
>>> ROM (implemented on Toolbox) or in RAM (System file, bug or
>>> functionality updates).
>>
>> Linux is an OS. It generally doesn't call much out of PC bios or
>> openfirmware and so on after it boots up. You're saying m68k is
>> different?
>
> Yes, Mac OS must load Linux, not a bootloader. If Mac OS don't work,
> your chances of getting Linux to work (on a REAL macintosh emulator)
> are close to 0.
I don't want a real macintosh emulator then, I want qemu to emulate an
m68k and give me a board I can get a shell prompt on. I don't care if
it's closer to amiga, atari, or mac, since all three share the exact
same binary identical root filesystem (at least when you're not using
x11 and the drivers therein) and the only difference is kernel .config.
>>> BasiliskII patches that table inserting their own functions (for
>>> example, the floppy driver is "enhanced" to provide access to
>>> the host disk images, instead of calling to the SWIM chip that
>>> will manage the floppy drive in a real macintosh).
>>
>> I'm not even building the floppy driver in my kernel .config.
>> Does Linux really have to use this table instead of having actual
>> drivers that run the chips? (You're saying Linux calls the apple
>> bios to access devices?)
>
> Read it again, on Basilisk, Linux will find no storage device at all,
> no video device, no serial device, no nothing :p
Ctrl-alt-google, read the technical manual...
http://basilisk.cebix.net/TECH
Quote the technical manual at you:
More precisely spoken, MacOS under Basilisk II behaves like on a Mac
Classic or Mac II because, apart from the CPU, the RAM and the ROM,
absolutely no Mac hardware is emulated. Rather, Basilisk II provides
replacements (usually in the form of MacOS drivers) for the parts of
MacOS that access hardware.
The reason Linux does not find any devices is because basilisk does not
emulate any devices. This is because Basilisk is not a real emulator,
and when you say "on a REAL macintosh emulator" above, I do not think it
means what you think it means.
http://tvtropes.org/pmwiki/pmwiki.php/Main/DidNotDoTheResearch
>>> The Linux bootloader is nothing more than a Mac OS application
>>> that loads the Linux kernel and gives it access to the full RAM,
>>> where it can (and as you see in the compatibility list, does not
>>> so well) access to the whole Macintosh hardware bypassing both
>>> Toolbox and System.
>>
>> Real hardware needs bootloaders, yes. Read hardware tends to use
>> uboot and grub and so on depending on your platform.
>>
>> On qemu, we have the -kernel option that loads a kernel image into
>> the emulator's ram, and jumps to its entry point.
>
> That isn't so simple in Macs
This is how hardware works.
Look, on power up, a timing circuit holds the processor's reset line
until current supply and distribution stabilize, then it releases it to
start executing code in a known (simple) state at a known location. The
caches and MMU is generally disabled during this, and on SMP systems one
processor is designated the boot processor and the rest remain halted.
The physical address the boot processor starts executing code at has
non-volatile memory mapped at that location containing bootstrapping
code. (You can work around all this with a jtag and crank the bus by
hand from an external source, but this is how self-contained systems boot.)
The boot processor starts by initializing the DRAM controller (unless
the system has only SRAM, which is basically only really small embedded
systems), sets it to the right timing and waits for it to stabilize,
sometimes by interactively hunting for various parameters like voltage.
(Last month the other guy in my office had to debug a fun one where the
timing was too fast and 10% of the time the uboot search wouldn't
converge.) Coreboot (formerly the Linux Bios Project) does a fun little
trick where they set up a TLB entry and fault in a few cache lines, zero
them out, and then set the stack pointer to the start of that cached
memory, which lets them jump to C code early and set up the DRAM
controller in C instead of assembly. QEMU doesn't need to do this
becaue it doesn't emulate a DRAM controller, although getting uboot NOT
to do this and then try to copy itself out of flash into dram was a pain
for a long time...
At about THAT point you can start worry about finding the boot device,
loading your OS from it, and performing device enumeration.
Macs aren't magic. The ones we're talking about are 30 year old
technology, they're pretty simple by modern standards and work pretty
much the same way everyting else does.
>> I'm looking for an emulator capable of running Linux-m68k, yes.
>
> So the answer to your questions is simple:
>
> You don't want a macintosh emulator. :p
I want something that emulates the macintosh hardware, not just a CPU
emulator hooked up to a hacked copy of the MacOS roms that doesn't
emulating any of the actual underlying hardware, such as basilisk provides.
>>> SCSI (there is no scsi emulated at all, the driver is patched to
>>> call to host ASPI devices),
>>
>> Linux has drivers for rather a lot of scsi chips, we just need to
>> map it at the right location for the driver to find it.
>
> Check Linux-m68k, only one works on macs, whatever the other ones do
> have a driver or not, only one works :p
Largely because 68k macs stopped being sold 16 years ago and this is
retrocomputing, you mean?
I want to get the Dec Alpha running too, but that's lower on the list.
M68k used to be really widely deployed and some embedded systems use
m68k variants. Alpha died when DEC was bought by a windows company that
didn't make its own chips, and the chip design team was scooped up by
AMD and went on to design the Athlon and Opteron.
>> Again, this is about running an ancient macos version I haven't got
>> a license for. Half the OS was in ROM the other half was on disk.
>> As far as QEMU is concerned both are files you load. (One as -rom
>> one as -hda or similar... not my problem?)
>
> As far as Mac hardware is concerned, and Linux-mac-m68k is concerned,
> if you don't have both, it will not boot.
I'm fairly certain this is not true, but if it is I might be able to fix it.
> You can create a m68k target designed specifically for your
> Linux-m68k needs, but you have stated clear that a mac-m68k target is
> not what you need at all :p
Actually I'm pretty sure a mac-m68k target would work fine for my needs,
I just don't care that much what m68k board QEMU gives me. An existing
one is great, but a PC variant would work too, as would a bunch of
virtio devices if that ever gets documented. (Virtconsole is still a
black box that can't talk to qemu stdin/stdout.)
> (Have you read Linux-m68k compatibility pages? It's compatible with
> 5% of the models, 10% of the hardware at most.)
>
> No offense I think you're confusing things.
The m68k branch has the start of a quadra 800, but the actual board file
is a powerpc board with just about everything "#if 0"ed out.
Mostly i want an existing board so I don't have to perform extensive
surgery on Linux's kconfig to build a kernel for it. (Device trees
should eventually make that suck less. I look forward to them.)
> If you just need to boot Linux-m68k, a development board is a
> simpler, easier, faster to implement, and more suited to your needs,
> than Amiga, Atari or Apple hardware emulators (existent or not).
Care to suggest one? I'm not that familiar with what's available in
m68k land, I just know how the other dozen hardware platforms I've used
work.
Rob
next prev parent reply other threads:[~2011-08-21 22:14 UTC|newest]
Thread overview: 125+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-08-17 20:46 [Qemu-devel] [RFC][PATCH 000/111] QEMU m68k core additions Bryce Lanham
2011-08-17 20:46 ` [Qemu-devel] [PATCH 001/111] linux-user: Signals processing is not thread-safe Bryce Lanham
2011-08-17 20:46 ` [Qemu-devel] [PATCH 002/111] linux-user: add qemu-wrapper Bryce Lanham
2011-08-17 20:46 ` [Qemu-devel] [PATCH 003/111] linux-user: define default cpu model in configure instead of linux-user/main.c Bryce Lanham
2011-08-17 20:46 ` [Qemu-devel] [PATCH 004/111] linux-user: specify the cpu model during configure Bryce Lanham
2011-08-17 20:46 ` [Qemu-devel] [PATCH 005/111] linux-user,m68k: display default cpu Bryce Lanham
2011-08-17 20:46 ` [Qemu-devel] [PATCH 006/111] linux-user: define new environment variables Bryce Lanham
2011-08-17 20:46 ` [Qemu-devel] [PATCH 007/111] linux-user: define a script to set binfmt using debian flavored tools Bryce Lanham
2011-08-17 20:46 ` [Qemu-devel] [PATCH 008/111] linux-user: define default cpu model in configure instead of linux-user/main.c Bryce Lanham
2011-08-17 20:46 ` [Qemu-devel] [PATCH 009/111] m68k: add tcg_gen_debug_insn_start() Bryce Lanham
2011-08-17 20:46 ` [Qemu-devel] [PATCH 010/111] m68k: define m680x0 CPUs and features Bryce Lanham
2011-08-17 20:46 ` [Qemu-devel] [PATCH 011/111] m68k: add missing accessing modes for some instructions Bryce Lanham
2011-08-17 20:46 ` [Qemu-devel] [PATCH 012/111] m68k: add Motorola 680x0 family common instructions Bryce Lanham
2011-08-17 20:46 ` [Qemu-devel] [PATCH 013/111] m68k: add Scc instruction with memory operand Bryce Lanham
2011-08-17 20:46 ` [Qemu-devel] [PATCH 014/111] m68k: add DBcc instruction Bryce Lanham
2011-08-17 20:46 ` [Qemu-devel] [PATCH 015/111] m68k: modify movem instruction to manage word Bryce Lanham
2011-08-17 20:46 ` [Qemu-devel] [PATCH 016/111] m68k: add 64bit divide Bryce Lanham
2011-08-17 20:46 ` [Qemu-devel] [PATCH 017/111] m68k: add 32bit and 64bit multiply Bryce Lanham
2011-08-17 20:46 ` [Qemu-devel] [PATCH 018/111] m68k: add word data size for suba/adda Bryce Lanham
2011-08-17 20:46 ` [Qemu-devel] [PATCH 019/111] m68k: add fpu Bryce Lanham
2011-08-17 20:46 ` [Qemu-devel] [PATCH 020/111] m68k: add "byte", "word" and memory shift Bryce Lanham
2011-08-17 20:46 ` [Qemu-devel] [PATCH 021/111] m68k: add "byte", "word" and memory rotate Bryce Lanham
2011-08-17 20:46 ` [Qemu-devel] [PATCH 022/111] m68k: add bitfield_mem, bitfield_reg Bryce Lanham
2011-08-17 20:46 ` [Qemu-devel] [PATCH 023/111] m68k: add variable offset/width to bitfield_reg/bitfield_mem Bryce Lanham
2011-08-17 20:46 ` [Qemu-devel] [PATCH 024/111] m68k: add cas Bryce Lanham
2011-08-17 20:46 ` [Qemu-devel] [PATCH 025/111] " Bryce Lanham
2011-08-17 20:46 ` [Qemu-devel] [PATCH 026/111] m68k: define fcntl constants Bryce Lanham
2011-08-17 20:46 ` [Qemu-devel] [PATCH 027/111] m68k: add DBcc instruction Bryce Lanham
2011-08-17 20:46 ` [Qemu-devel] [PATCH 028/111] m68k: allow fpu to manage double data type Bryce Lanham
2011-08-17 20:46 ` [Qemu-devel] [PATCH 029/111] m68k: allow fpu to manage double data type with fmove to <ea> Bryce Lanham
2011-08-17 20:46 ` [Qemu-devel] [PATCH 030/111] m68k: add FScc instruction Bryce Lanham
2011-08-17 20:46 ` [Qemu-devel] [PATCH 031/111] m68k: add single data type to gen_ea Bryce Lanham
2011-08-17 20:46 ` [Qemu-devel] [PATCH 032/111] m68k: add linkl instruction Bryce Lanham
2011-08-17 20:46 ` [Qemu-devel] [PATCH 033/111] m68k: Add fmovecr Bryce Lanham
2011-08-17 20:46 ` [Qemu-devel] [PATCH 034/111] m68k: correct typo on f64_to_i32() return type Bryce Lanham
2011-08-17 20:46 ` [Qemu-devel] [PATCH 035/111] m68k: improve CC_OP_LOGIC Bryce Lanham
2011-08-17 20:46 ` [Qemu-devel] [PATCH 036/111] m68k: correct neg condition code flags computation Bryce Lanham
2011-08-17 20:46 ` [Qemu-devel] [PATCH 037/111] Correct invalid use of "const void *" with "const uint8_t *" Bryce Lanham
2011-08-17 20:46 ` [Qemu-devel] [PATCH 038/111] m68k: add EA support for negx Bryce Lanham
2011-08-17 20:46 ` [Qemu-devel] [PATCH 039/111] m68k: add abcd instruction Bryce Lanham
2011-08-17 20:46 ` [Qemu-devel] [PATCH 040/111] m68k: add sbcd instruction Bryce Lanham
2011-08-17 20:46 ` [Qemu-devel] [PATCH 041/111] mm68k: add nbcd instruction Bryce Lanham
2011-08-17 20:46 ` [Qemu-devel] [PATCH 042/111] m68k: set X flag according size of operand Set X flag correctly for addsub, arith_im, addsubq Bryce Lanham
2011-08-17 20:46 ` [Qemu-devel] [PATCH 043/111] m68k: on 0 bit shift, don't update X flag Bryce Lanham
2011-08-17 20:46 ` [Qemu-devel] [PATCH 044/111] m68k: improve addx instructions Add (byte, word) opsize Add memory access Bryce Lanham
2011-08-17 20:46 ` [Qemu-devel] [PATCH 045/111] m68k: improve subx, negx instructions Add (byte, word) opsize Add memory access (subx) Bryce Lanham
2011-08-17 20:46 ` [Qemu-devel] [PATCH 046/111] m68k: improve asl/asr evaluate correclty the missing V flag Bryce Lanham
2011-08-17 20:46 ` [Qemu-devel] [PATCH 047/111] m68k: use read_imm1() when it is possible Bryce Lanham
2011-08-17 20:46 ` [Qemu-devel] [PATCH 048/111] m68k: correct shift side effect for roxrl and roxll Bryce Lanham
2011-08-17 20:46 ` [Qemu-devel] [PATCH 049/111] m68k: asl/asr, clear C flag if shift count is 0 Bryce Lanham
2011-08-17 20:46 ` [Qemu-devel] [PATCH 050/111] m68k: lsl/lsr, " Bryce Lanham
2011-08-17 20:46 ` [Qemu-devel] [PATCH 051/111] m68k: correct divs.w and divu.w Bryce Lanham
2011-08-17 20:46 ` [Qemu-devel] [PATCH 052/111] m68k: correct flags with negl Bryce Lanham
2011-08-17 20:46 ` [Qemu-devel] [PATCH 053/111] m68k: for bitfield opcodes, correct operands corruption Bryce Lanham
2011-08-17 20:46 ` [Qemu-devel] [PATCH 054/111] m68k: Added ULL to 64 bit integer in helper.c Bryce Lanham
2011-08-17 20:47 ` [Qemu-devel] [PATCH 055/111] m68k: Correct bfclr in register case Bryce Lanham
2011-08-17 20:47 ` [Qemu-devel] [PATCH 056/111] m68k-linux-user: add '--enable-emulop' Bryce Lanham
2011-08-17 20:47 ` [Qemu-devel] [PATCH 057/111] m68k: correctly compute divsl Bryce Lanham
2011-08-17 20:47 ` [Qemu-devel] [PATCH 058/111] m68k: correctly compute divul Bryce Lanham
2011-08-17 20:47 ` [Qemu-devel] [PATCH 059/111] m68k: add m68030 definition Bryce Lanham
2011-08-17 20:47 ` [Qemu-devel] [PATCH 060/111] m68k: remove dead code Bryce Lanham
2011-08-17 20:47 ` [Qemu-devel] [PATCH 061/111] m68k: remove useless file m68k-qreg.h Bryce Lanham
2011-08-17 20:47 ` [Qemu-devel] [PATCH 062/111] m68k: FPU rework (draft) Bryce Lanham
2011-08-17 20:47 ` [Qemu-devel] [PATCH 063/111] m68k: some FPU debugging macros Bryce Lanham
2011-08-17 20:47 ` [Qemu-devel] [PATCH 064/111] m68k: more tests Bryce Lanham
2011-08-17 20:47 ` [Qemu-devel] [PATCH 065/111] m68k: correct compute gen_bitfield_cc() Bryce Lanham
2011-08-17 20:47 ` [Qemu-devel] [PATCH 066/111] m68k: add fgetexp Bryce Lanham
2011-08-17 20:47 ` [Qemu-devel] [PATCH 067/111] m68k: add fscale Bryce Lanham
2011-08-17 20:47 ` [Qemu-devel] [PATCH 068/111] m68k: correct addsubq Bryce Lanham
2011-08-17 20:47 ` [Qemu-devel] [PATCH 069/111] m68k: add fetox and flogn Bryce Lanham
2011-08-17 20:47 ` [Qemu-devel] [PATCH 070/111] m68k: initialize FRegs, define pickNaN() Bryce Lanham
2011-08-17 20:47 ` [Qemu-devel] [PATCH 071/111] m68k: correct cmpa comparison datatype Bryce Lanham
2011-08-17 20:47 ` [Qemu-devel] [PATCH 072/111] m68k: add flog10 Bryce Lanham
2011-08-17 20:47 ` [Qemu-devel] [PATCH 073/111] m68k: add cmpm instruction Bryce Lanham
2011-08-17 20:47 ` [Qemu-devel] [PATCH 074/111] m68k: add ftwotox instruction Bryce Lanham
2011-08-17 20:47 ` [Qemu-devel] [PATCH 075/111] m68k: better fpu traces Bryce Lanham
2011-08-17 20:47 ` [Qemu-devel] [PATCH 076/111] m68k: register source operand is always in extended size Bryce Lanham
2011-08-17 20:47 ` [Qemu-devel] [PATCH 077/111] m68k: add facos instruction Bryce Lanham
2011-08-17 20:47 ` [Qemu-devel] [PATCH 078/111] m68k: add ftan instruction Bryce Lanham
2011-08-17 20:47 ` [Qemu-devel] [PATCH 079/111] m68k: add fsin instruction Bryce Lanham
2011-08-17 20:47 ` [Qemu-devel] [PATCH 080/111] m68k: add fcos instruction Bryce Lanham
2011-08-17 20:47 ` [Qemu-devel] [PATCH 081/111] m68k: correct fpcr update Bryce Lanham
2011-08-17 20:47 ` [Qemu-devel] [PATCH 082/111] m68k: add fmod instruction Bryce Lanham
2011-08-17 20:47 ` [Qemu-devel] [PATCH 083/111] m68k: flush flags before negx instruction Bryce Lanham
2011-08-17 20:47 ` [Qemu-devel] [PATCH 084/111] m68k: correct fmovemx FP registers order Bryce Lanham
2011-08-17 20:47 ` [Qemu-devel] [PATCH 085/111] m68k: add fatan instruction Bryce Lanham
2011-08-17 20:47 ` [Qemu-devel] [PATCH 086/111] m68k: correct bfins instruction Bryce Lanham
2011-08-17 20:47 ` [Qemu-devel] [PATCH 087/111] m68k: fcmp correctly compares infinity Bryce Lanham
2011-08-17 22:35 ` [Qemu-devel] [RFC][PATCH 000/111] QEMU m68k core additions Anthony Liguori
2011-08-17 23:30 ` Bryce Lanham
2011-08-17 23:36 ` Peter Maydell
2011-08-18 16:05 ` Michael Roth
2011-08-18 7:02 ` Laurent Vivier
2011-08-18 11:12 ` François Revol
2011-08-18 14:02 ` Laurent Vivier
2011-08-18 19:42 ` Natalia Portillo
2011-08-18 19:57 ` Laurent Vivier
2011-08-18 20:13 ` Natalia Portillo
2011-08-18 20:51 ` Laurent Vivier
2011-08-19 2:14 ` Natalia Portillo
2011-08-19 8:55 ` François Revol
2011-08-19 15:52 ` Natalia Portillo
2011-08-19 16:07 ` Laurent Vivier
2011-08-19 20:08 ` Anthony Liguori
2011-08-20 22:12 ` Rob Landley
2011-08-20 22:12 ` Rob Landley
2011-08-20 22:16 ` Rob Landley
2011-08-20 21:06 ` Rob Landley
2011-08-20 20:57 ` Rob Landley
2011-08-20 21:16 ` Laurent Vivier
2011-08-20 22:28 ` Rob Landley
2011-08-20 22:39 ` Rob Landley
2011-08-20 23:24 ` Rob Landley
2011-08-20 20:55 ` Rob Landley
2011-08-20 23:17 ` Natalia Portillo
2011-08-20 23:42 ` Rob Landley
2011-08-21 0:23 ` Natalia Portillo
2011-08-21 0:50 ` Rob Landley
2011-08-21 2:02 ` Natalia Portillo
2011-08-21 22:14 ` Rob Landley [this message]
2011-08-22 2:15 ` Natalia Portillo
2011-08-23 12:30 ` Rob Landley
2011-08-21 10:04 ` Laurent Vivier
2011-08-21 13:11 ` Natalia Portillo
2011-08-21 22:23 ` Rob Landley
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4E51833E.8070404@landley.net \
--to=rob@landley.net \
--cc=blanham@gmail.com \
--cc=claunia@claunia.com \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).