Hey Peter, I need some advice. I'm adding a -dtb option to qemu for specifying a dtb filename to be passed on to the kernel, similar to how the -initrd flag works. The dtb filename needs to then be passed on to the selected machine, and it looks like the machine->init() callback is the best way to do that.
However, the current init callback prototype looks like this: typedef void QEMUMachineInitFunc(ram_addr_t ram_size, const char *boot_device, const char *kernel_filename, const char *kernel_cmdline, const char *initrd_filename, const char *cpu_model); Now, I could simply add an new "dtb_filename" to the argument list and fix up all of the users (looks to be about 90 machines), but that seems like a lot of churn that will need to be repeated the next time a new argument needs to be passed to the init func. Alternately, I could do something like this: struct machine_args { ram_addr_t ram_size; const char *boot_device; const char *kernel_filename, const char *kernel_cmdline, const char *initrd_filename, const char *dtb_filename, const char *cpu_model, }; typedef void QEMUMachineInitFunc(const struct machine_args *args); And then I'd fix up all the users, which would be about the same amount of churn, but subsequent additions would be a lot easier. A third option would be to add a new ".dt_init()" that is executed instead of .init() if populated, but that seems like an ugly band-aid to me. How should I approach this? Or is there a better way to pass data to so that it is available at machine->init() time? g.