On 06/22/2016 09:22 PM, Fam Zheng wrote: > On Wed, 06/22 17:35, Colin Lord wrote: >> This commit moves the initialization of the QemuOptsList qemu_iscsi_opts >> struct out of block/iscsi.c in order to allow it to be dynamically >> loaded. Drivers that perform init operations other than registering >> themselves can't be modularized, so this moves the initialization of >> this struct into the main binary. >> >> Signed-off-by: Colin Lord <cl...@redhat.com> >> --- >> block/iscsi.c | 36 ------------------------------------ >> vl.c | 36 ++++++++++++++++++++++++++++++++++++ >> 2 files changed, 36 insertions(+), 36 deletions(-) >> >> diff --git a/block/iscsi.c b/block/iscsi.c >> index 7e78ade..6193499 100644 >> --- a/block/iscsi.c >> +++ b/block/iscsi.c >> @@ -1879,45 +1879,9 @@ static BlockDriver bdrv_iscsi = { >> .bdrv_attach_aio_context = iscsi_attach_aio_context, >> }; >> >> -static QemuOptsList qemu_iscsi_opts = { >> - .name = "iscsi", >> - .head = QTAILQ_HEAD_INITIALIZER(qemu_iscsi_opts.head), >> - .desc = { >> - { >> - .name = "user", >> - .type = QEMU_OPT_STRING, >> - .help = "username for CHAP authentication to target", >> - },{ >> - .name = "password", >> - .type = QEMU_OPT_STRING, >> - .help = "password for CHAP authentication to target", >> - },{ >> - .name = "password-secret", >> - .type = QEMU_OPT_STRING, >> - .help = "ID of the secret providing password for CHAP " >> - "authentication to target", >> - },{ >> - .name = "header-digest", >> - .type = QEMU_OPT_STRING, >> - .help = "HeaderDigest setting. " >> - "{CRC32C|CRC32C-NONE|NONE-CRC32C|NONE}", >> - },{ >> - .name = "initiator-name", >> - .type = QEMU_OPT_STRING, >> - .help = "Initiator iqn name to use when connecting", >> - },{ >> - .name = "timeout", >> - .type = QEMU_OPT_NUMBER, >> - .help = "Request timeout in seconds (default 0 = no timeout)", >> - }, >> - { /* end of list */ } >> - }, >> -}; >> - >> static void iscsi_block_init(void) >> { >> bdrv_register(&bdrv_iscsi); >> - qemu_add_opts(&qemu_iscsi_opts); >> } >> >> block_init(iscsi_block_init); >> diff --git a/vl.c b/vl.c >> index 45eff56..4f04daa 100644 >> --- a/vl.c >> +++ b/vl.c >> @@ -526,6 +526,41 @@ static QemuOptsList qemu_fw_cfg_opts = { >> }, >> }; >> >> +static QemuOptsList qemu_iscsi_opts = { >> + .name = "iscsi", >> + .head = QTAILQ_HEAD_INITIALIZER(qemu_iscsi_opts.head), >> + .desc = { >> + { >> + .name = "user", >> + .type = QEMU_OPT_STRING, >> + .help = "username for CHAP authentication to target", >> + },{ >> + .name = "password", >> + .type = QEMU_OPT_STRING, >> + .help = "password for CHAP authentication to target", >> + },{ >> + .name = "password-secret", >> + .type = QEMU_OPT_STRING, >> + .help = "ID of the secret providing password for CHAP " >> + "authentication to target", >> + },{ >> + .name = "header-digest", >> + .type = QEMU_OPT_STRING, >> + .help = "HeaderDigest setting. " >> + "{CRC32C|CRC32C-NONE|NONE-CRC32C|NONE}", >> + },{ >> + .name = "initiator-name", >> + .type = QEMU_OPT_STRING, >> + .help = "Initiator iqn name to use when connecting", >> + },{ >> + .name = "timeout", >> + .type = QEMU_OPT_NUMBER, >> + .help = "Request timeout in seconds (default 0 = no timeout)", >> + }, >> + { /* end of list */ } >> + }, >> +}; >> + >> /** >> * Get machine options >> * >> @@ -3006,6 +3041,7 @@ int main(int argc, char **argv, char **envp) >> qemu_add_opts(&qemu_icount_opts); >> qemu_add_opts(&qemu_semihosting_config_opts); >> qemu_add_opts(&qemu_fw_cfg_opts); >> + qemu_add_opts(&qemu_iscsi_opts); > > Should the new code still be conditional on CONFIG_LIBISCSI? Because > previously it was.
Yeah, I think that should still be the case. Thanks for catching that. > > Fam > >> module_call_init(MODULE_INIT_OPTS); >> >> runstate_init(); >> -- >> 2.5.5 >> >>