)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"054a79085aa95205eba6d2e9d73aa7ddf86700ec","unresolved":false,"context_lines":[{"line_number":11,"context_line":"restricted the options only to \"PCID\" (refer to its commit message for"},{"line_number":12,"context_line":"why)."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"In this change we lift the restriction of choices, and allow to"},{"line_number":15,"context_line":"specify multiple CPU feature flags:"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"     [libvirt]"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"9f6a8fd7_9e2a707c","line":14,"updated":"2018-04-25 16:04:51.000000000","message":"You will need a release note for the feature.","commit_id":"9b8a7dcd8a6ea973239af827fcdf017282dd45b3"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"bdf81e95358e7e12ab6627c53180f9ae4ae9e5d8","unresolved":false,"context_lines":[{"line_number":11,"context_line":"restricted the options only to \"PCID\" (refer to its commit message for"},{"line_number":12,"context_line":"why)."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"In this change we lift the restriction of choices, and allow to"},{"line_number":15,"context_line":"specify multiple CPU feature flags:"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"     [libvirt]"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"9f6a8fd7_bd8c0780","line":14,"in_reply_to":"9f6a8fd7_175ab482","updated":"2018-04-26 11:54:05.000000000","message":"Good point, and yeah probably should do that. Note that that release note is \u0027released\u0027 via the 18.0.0.0b1 tag, but I think it\u0027s OK to amend it for the 18.0.0 GA.","commit_id":"9b8a7dcd8a6ea973239af827fcdf017282dd45b3"},{"author":{"_account_id":6962,"name":"Kashyap Chamarthy","email":"kchamart@redhat.com","username":"kashyapc"},"change_message_id":"301b92c463f0996e3d326f48e8b2d9d16326a0fc","unresolved":false,"context_lines":[{"line_number":11,"context_line":"restricted the options only to \"PCID\" (refer to its commit message for"},{"line_number":12,"context_line":"why)."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"In this change we lift the restriction of choices, and allow to"},{"line_number":15,"context_line":"specify multiple CPU feature flags:"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"     [libvirt]"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"9f6a8fd7_175ab482","line":14,"in_reply_to":"9f6a8fd7_9e2a707c","updated":"2018-04-26 10:35:41.000000000","message":"Not sure if you saw my question on PS-1. \n\nShould I modify / adjust the existing note here (since \u0027Rocky\u0027 isn\u0027t released yet)?\n\nhttp://git.openstack.org/cgit/openstack/nova/diff/releasenotes/notes/libvirt-cpu-model-extra-flags-a23085f58bd22d27.yaml?id\u003d6b601b7","commit_id":"9b8a7dcd8a6ea973239af827fcdf017282dd45b3"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"054a79085aa95205eba6d2e9d73aa7ddf86700ec","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    AMD \u0027svm\u0027 flags for the level-1 Nova guest CPU models.  (Assuming"},{"line_number":35,"context_line":"    the \u0027nested\u0027 flag is enabled on the level-0 / bare-metal kernel.)"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"Closes-Bug: #1766208"},{"line_number":38,"context_line":"Change-Id: I9a862619f379057bb48cb85a84dfc50d763030a6"},{"line_number":39,"context_line":"BluePrint: libvirt-cpu-model-extra-flags"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"9f6a8fd7_63e8297b","line":37,"updated":"2018-04-25 16:04:51.000000000","message":"Remove this, it\u0027s not a bug, it\u0027s a feature, which is tracked via the blueprint.","commit_id":"9b8a7dcd8a6ea973239af827fcdf017282dd45b3"},{"author":{"_account_id":6962,"name":"Kashyap Chamarthy","email":"kchamart@redhat.com","username":"kashyapc"},"change_message_id":"301b92c463f0996e3d326f48e8b2d9d16326a0fc","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    AMD \u0027svm\u0027 flags for the level-1 Nova guest CPU models.  (Assuming"},{"line_number":35,"context_line":"    the \u0027nested\u0027 flag is enabled on the level-0 / bare-metal kernel.)"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"Closes-Bug: #1766208"},{"line_number":38,"context_line":"Change-Id: I9a862619f379057bb48cb85a84dfc50d763030a6"},{"line_number":39,"context_line":"BluePrint: libvirt-cpu-model-extra-flags"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"9f6a8fd7_d7251c0c","line":37,"in_reply_to":"9f6a8fd7_63e8297b","updated":"2018-04-26 10:35:41.000000000","message":"I know what you mean, I consciously did it to track it as a separate item (it\u0027s mostly a habit from Bugzilla thing, though; and even on Launchpad, I hear: \"Fix this deprecation warning\" bugs).  \n\nIf you don\u0027t mind, I\u0027d like like to track this item specifically.  But if you insist, I\u0027d let it go.","commit_id":"9b8a7dcd8a6ea973239af827fcdf017282dd45b3"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"bdf81e95358e7e12ab6627c53180f9ae4ae9e5d8","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    AMD \u0027svm\u0027 flags for the level-1 Nova guest CPU models.  (Assuming"},{"line_number":35,"context_line":"    the \u0027nested\u0027 flag is enabled on the level-0 / bare-metal kernel.)"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"Closes-Bug: #1766208"},{"line_number":38,"context_line":"Change-Id: I9a862619f379057bb48cb85a84dfc50d763030a6"},{"line_number":39,"context_line":"BluePrint: libvirt-cpu-model-extra-flags"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"9f6a8fd7_1df17302","line":37,"in_reply_to":"9f6a8fd7_d7251c0c","updated":"2018-04-26 11:54:05.000000000","message":"I insist, it\u0027s not a bug, and not how we track features in nova.","commit_id":"9b8a7dcd8a6ea973239af827fcdf017282dd45b3"}],"nova/conf/libvirt.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"c5ab5603685c78c805eeb465fe68ca0d938f46e0","unresolved":false,"context_lines":[{"line_number":534,"context_line":"        ),"},{"line_number":535,"context_line":"        default\u003d[],"},{"line_number":536,"context_line":"        help\u003d\"\"\""},{"line_number":537,"context_line":"This allows specifying granular CPU feature flags when specifying CPU"},{"line_number":538,"context_line":"models.  For example, to explicitly specify the ``pcid``"},{"line_number":539,"context_line":"(Process-Context ID, an Intel processor feature) flag, which is now"},{"line_number":540,"context_line":"required to address the guest performance degradation as a result of"},{"line_number":541,"context_line":"applying the \"Meltdown\" CVE fixes, and the ``vmx`` flag to the"},{"line_number":542,"context_line":"\"IvyBridge\" virtual CPU model::"},{"line_number":543,"context_line":""},{"line_number":544,"context_line":"    [libvirt]"},{"line_number":545,"context_line":"    cpu_mode \u003d custom"},{"line_number":546,"context_line":"    cpu_model \u003d IvyBridge"},{"line_number":547,"context_line":"    cpu_model_extra_flags \u003d pcid, vmx"},{"line_number":548,"context_line":""},{"line_number":549,"context_line":""},{"line_number":550,"context_line":"The options are case-insensitive (so ``PCID``, ``VMX`` are also valid)."},{"line_number":551,"context_line":""},{"line_number":552,"context_line":"Note that when using this config attribute to set the \u0027PCID\u0027 CPU flag,"},{"line_number":553,"context_line":"not all virtual (i.e. libvirt / QEMU) CPU models need it:"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f6a8fd7_1b90c994","line":550,"range":{"start_line":537,"start_character":0,"end_line":550,"end_character":71},"updated":"2018-04-24 18:07:45.000000000","message":"i would maybe give two exampls here in stead of one.\n\none for pcid to resolved teh meltdown performance issue and \na second for multiple options where you can also demonstrate that its case insensitive.","commit_id":"08e2e4455536c3514c58bd93ac9305e5405d4a43"},{"author":{"_account_id":6962,"name":"Kashyap Chamarthy","email":"kchamart@redhat.com","username":"kashyapc"},"change_message_id":"d5a0fe621c904dd2e1e194eb13bfa13d247a755e","unresolved":false,"context_lines":[{"line_number":534,"context_line":"        ),"},{"line_number":535,"context_line":"        default\u003d[],"},{"line_number":536,"context_line":"        help\u003d\"\"\""},{"line_number":537,"context_line":"This allows specifying granular CPU feature flags when specifying CPU"},{"line_number":538,"context_line":"models.  For example, to explicitly specify the ``pcid``"},{"line_number":539,"context_line":"(Process-Context ID, an Intel processor feature) flag, which is now"},{"line_number":540,"context_line":"required to address the guest performance degradation as a result of"},{"line_number":541,"context_line":"applying the \"Meltdown\" CVE fixes, and the ``vmx`` flag to the"},{"line_number":542,"context_line":"\"IvyBridge\" virtual CPU model::"},{"line_number":543,"context_line":""},{"line_number":544,"context_line":"    [libvirt]"},{"line_number":545,"context_line":"    cpu_mode \u003d custom"},{"line_number":546,"context_line":"    cpu_model \u003d IvyBridge"},{"line_number":547,"context_line":"    cpu_model_extra_flags \u003d pcid, vmx"},{"line_number":548,"context_line":""},{"line_number":549,"context_line":""},{"line_number":550,"context_line":"The options are case-insensitive (so ``PCID``, ``VMX`` are also valid)."},{"line_number":551,"context_line":""},{"line_number":552,"context_line":"Note that when using this config attribute to set the \u0027PCID\u0027 CPU flag,"},{"line_number":553,"context_line":"not all virtual (i.e. libvirt / QEMU) CPU models need it:"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f6a8fd7_71a9dc8d","line":550,"range":{"start_line":537,"start_character":0,"end_line":550,"end_character":71},"in_reply_to":"9f6a8fd7_1b90c994","updated":"2018-04-25 08:00:49.000000000","message":"Yeah, that\u0027s a good point, it\u0027ll be much clearer; let me go do that.","commit_id":"08e2e4455536c3514c58bd93ac9305e5405d4a43"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"054a79085aa95205eba6d2e9d73aa7ddf86700ec","unresolved":false,"context_lines":[{"line_number":538,"context_line":"models.  For example, to explicitly specify the ``pcid``"},{"line_number":539,"context_line":"(Process-Context ID, an Intel processor feature) flag, which is now"},{"line_number":540,"context_line":"required to address the guest performance degradation as a result of"},{"line_number":541,"context_line":"applying the \"Meltdown\" CVE fixes), to the \"IvyBridge\" virtual CPU"},{"line_number":542,"context_line":"model::"},{"line_number":543,"context_line":""},{"line_number":544,"context_line":"    [libvirt]"}],"source_content_type":"text/x-python","patch_set":3,"id":"9f6a8fd7_238b11c3","line":541,"range":{"start_line":541,"start_character":33,"end_line":541,"end_character":34},"updated":"2018-04-25 16:04:51.000000000","message":"There is no opening parenthesis for this.","commit_id":"9b8a7dcd8a6ea973239af827fcdf017282dd45b3"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"054a79085aa95205eba6d2e9d73aa7ddf86700ec","unresolved":false,"context_lines":[{"line_number":548,"context_line":""},{"line_number":549,"context_line":"To specify multiple CPU flags (e.g. the Intel ``VMX`` to expose the"},{"line_number":550,"context_line":"virtualization extensions to the guest, or ``pdpe1gb`` to configure 1GB"},{"line_number":551,"context_line":"huge pages for CPU models that don\u0027t provide it):"},{"line_number":552,"context_line":""},{"line_number":553,"context_line":"    [libvirt]"},{"line_number":554,"context_line":"    cpu_mode \u003d custom"}],"source_content_type":"text/x-python","patch_set":3,"id":"9f6a8fd7_038ccdd4","line":551,"range":{"start_line":551,"start_character":31,"end_line":551,"end_character":36},"updated":"2018-04-25 16:04:51.000000000","message":"nit: do not","commit_id":"9b8a7dcd8a6ea973239af827fcdf017282dd45b3"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"fa3ea84113a0f142a659d98d41777cd2242c1fcd","unresolved":false,"context_lines":[{"line_number":559,"context_line":"attribute is case insensitive.  And it is valid in combination with all"},{"line_number":560,"context_line":"the three possible values for ``cpu_mode``: ``custom`` (this also"},{"line_number":561,"context_line":"requires an explicit ``cpu_model`` to be specified), ``host-model``, or"},{"line_number":562,"context_line":"``host-passthrough``.  (A valid example for allowing extra CPU flags"},{"line_number":563,"context_line":"even for ``host-passthrough`` mode is that sometimes QEMU may disable"},{"line_number":564,"context_line":"certain CPU features -- e.g. Intel\u0027s \"invtsc\", Invariable Time Stamp"},{"line_number":565,"context_line":"Counter, CPU flag.  And if you need to expose that CPU flag to the Nova"}],"source_content_type":"text/x-python","patch_set":5,"id":"9f6a8fd7_a1112baf","line":562,"range":{"start_line":562,"start_character":23,"end_line":562,"end_character":24},"updated":"2018-04-27 13:25:04.000000000","message":"nit: I don\u0027t think this sentence needs to be in parenthesis.","commit_id":"4366490207681db0b8564ede79576f64e02973bd"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"fa3ea84113a0f142a659d98d41777cd2242c1fcd","unresolved":false,"context_lines":[{"line_number":563,"context_line":"even for ``host-passthrough`` mode is that sometimes QEMU may disable"},{"line_number":564,"context_line":"certain CPU features -- e.g. Intel\u0027s \"invtsc\", Invariable Time Stamp"},{"line_number":565,"context_line":"Counter, CPU flag.  And if you need to expose that CPU flag to the Nova"},{"line_number":566,"context_line":"instance, the you need to explicitly specify ask for it.)"},{"line_number":567,"context_line":""},{"line_number":568,"context_line":"Note that when using this config attribute to set the \u0027PCID\u0027 CPU flag"},{"line_number":569,"context_line":"with the ``custom`` CPU mode, not all virtual (i.e. libvirt / QEMU) CPU"}],"source_content_type":"text/x-python","patch_set":5,"id":"9f6a8fd7_61231307","line":566,"range":{"start_line":566,"start_character":37,"end_line":566,"end_character":44},"updated":"2018-04-27 13:25:04.000000000","message":"s/specify//","commit_id":"4366490207681db0b8564ede79576f64e02973bd"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"995c80700016e2efcc95c67b3df1ad301171bba3","unresolved":false,"context_lines":[{"line_number":553,"context_line":"    [libvirt]"},{"line_number":554,"context_line":"    cpu_mode \u003d custom"},{"line_number":555,"context_line":"    cpu_model \u003d Haswell-noTSX-IBRS"},{"line_number":556,"context_line":"    cpu_model_extra_flags \u003d PCID, VMX, pdpe1gb"},{"line_number":557,"context_line":""},{"line_number":558,"context_line":"As it can be noticed from above, the ``cpu_model_extra_flags`` config"},{"line_number":559,"context_line":"attribute is case insensitive.  And it is valid in combination with all"}],"source_content_type":"text/x-python","patch_set":6,"id":"9f6a8fd7_b7ee4989","line":556,"updated":"2018-04-27 14:48:16.000000000","message":"FYI  feature names are case-sensitive from libvirt POV, and I don\u0027t see code in nova that\u0027s canonicalizing to lowercase. So I\u0027d suggest this doc should be fixed to use lowercase to avoid misleading users.","commit_id":"493392d760946d5291ee637be8525edab87e016a"},{"author":{"_account_id":6962,"name":"Kashyap Chamarthy","email":"kchamart@redhat.com","username":"kashyapc"},"change_message_id":"23060dff9d5624eae8ec4a5f3da3ca61c8424fab","unresolved":false,"context_lines":[{"line_number":553,"context_line":"    [libvirt]"},{"line_number":554,"context_line":"    cpu_mode \u003d custom"},{"line_number":555,"context_line":"    cpu_model \u003d Haswell-noTSX-IBRS"},{"line_number":556,"context_line":"    cpu_model_extra_flags \u003d PCID, VMX, pdpe1gb"},{"line_number":557,"context_line":""},{"line_number":558,"context_line":"As it can be noticed from above, the ``cpu_model_extra_flags`` config"},{"line_number":559,"context_line":"attribute is case insensitive.  And it is valid in combination with all"}],"source_content_type":"text/x-python","patch_set":6,"id":"9f6a8fd7_1303880f","line":556,"in_reply_to":"9f6a8fd7_b7ee4989","updated":"2018-04-27 15:21:39.000000000","message":"Darn, that\u0027s a good point, I didn\u0027t quite realize that.  \n\nI\u0027ll rework this patch and try to maintain backward compat. (As the current Git / master code also allows PCID or \u0027pcid\u0027.  Damn, I first normalized it to lower-case by using str.lower(), but then later removed that code.)","commit_id":"493392d760946d5291ee637be8525edab87e016a"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"269d31fd154d90a5bcedd677af40463db61bf9fd","unresolved":false,"context_lines":[{"line_number":555,"context_line":"    cpu_model \u003d Haswell-noTSX-IBRS"},{"line_number":556,"context_line":"    cpu_model_extra_flags \u003d PCID, VMX, pdpe1gb"},{"line_number":557,"context_line":""},{"line_number":558,"context_line":"As it can be noticed from above, the ``cpu_model_extra_flags`` config"},{"line_number":559,"context_line":"attribute is case insensitive.  And it is valid in combination with all"},{"line_number":560,"context_line":"the three possible values for ``cpu_mode``: ``custom`` (this also"},{"line_number":561,"context_line":"requires an explicit ``cpu_model`` to be specified), ``host-model``, or"},{"line_number":562,"context_line":"``host-passthrough``.  A valid example for allowing extra CPU flags"}],"source_content_type":"text/x-python","patch_set":6,"id":"9f6a8fd7_77443175","line":559,"range":{"start_line":558,"start_character":0,"end_line":559,"end_character":30},"updated":"2018-04-27 14:51:44.000000000","message":"Hmm, then this is wrong.","commit_id":"493392d760946d5291ee637be8525edab87e016a"},{"author":{"_account_id":6962,"name":"Kashyap Chamarthy","email":"kchamart@redhat.com","username":"kashyapc"},"change_message_id":"23060dff9d5624eae8ec4a5f3da3ca61c8424fab","unresolved":false,"context_lines":[{"line_number":555,"context_line":"    cpu_model \u003d Haswell-noTSX-IBRS"},{"line_number":556,"context_line":"    cpu_model_extra_flags \u003d PCID, VMX, pdpe1gb"},{"line_number":557,"context_line":""},{"line_number":558,"context_line":"As it can be noticed from above, the ``cpu_model_extra_flags`` config"},{"line_number":559,"context_line":"attribute is case insensitive.  And it is valid in combination with all"},{"line_number":560,"context_line":"the three possible values for ``cpu_mode``: ``custom`` (this also"},{"line_number":561,"context_line":"requires an explicit ``cpu_model`` to be specified), ``host-model``, or"},{"line_number":562,"context_line":"``host-passthrough``.  A valid example for allowing extra CPU flags"}],"source_content_type":"text/x-python","patch_set":6,"id":"9f6a8fd7_d35f5070","line":559,"range":{"start_line":558,"start_character":0,"end_line":559,"end_character":30},"in_reply_to":"9f6a8fd7_77443175","updated":"2018-04-27 15:21:39.000000000","message":"We can still make it case insensitive from a Nova POV (and retain strict backward compatability), if I do something like this in driver.py:\n\n    -        extra_flags \u003d CONF.libvirt.cpu_model_extra_flags\n    +        extra_flags \u003d set([flag.lower() for flag in\n    +            CONF.libvirt.cpu_model_extra_flags]","commit_id":"493392d760946d5291ee637be8525edab87e016a"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"0b7c23d104d534643cf17ed4ad02e26a2e0ae6fd","unresolved":false,"context_lines":[{"line_number":534,"context_line":"        ),"},{"line_number":535,"context_line":"        default\u003d[],"},{"line_number":536,"context_line":"        help\u003d\"\"\""},{"line_number":537,"context_line":"This allows specifying granular CPU feature flags when configuring CPU"},{"line_number":538,"context_line":"models.  For example, to explicitly specify the ``pcid``"},{"line_number":539,"context_line":"(Process-Context ID, an Intel processor feature -- which is now required"},{"line_number":540,"context_line":"to address the guest performance degradation as a result of applying the"},{"line_number":541,"context_line":"\"Meltdown\" CVE fixes to certain Intel CPU models) flag to the"},{"line_number":542,"context_line":"\"IvyBridge\" virtual CPU model::"},{"line_number":543,"context_line":""},{"line_number":544,"context_line":"    [libvirt]"},{"line_number":545,"context_line":"    cpu_mode \u003d custom"},{"line_number":546,"context_line":"    cpu_model \u003d IvyBridge"},{"line_number":547,"context_line":"    cpu_model_extra_flags \u003d pcid"},{"line_number":548,"context_line":""},{"line_number":549,"context_line":"To specify multiple CPU flags (e.g. the Intel ``VMX`` to expose the"},{"line_number":550,"context_line":"virtualization extensions to the guest, or ``pdpe1gb`` to configure 1GB"},{"line_number":551,"context_line":"huge pages for CPU models that do not provide it):"},{"line_number":552,"context_line":""},{"line_number":553,"context_line":"    [libvirt]"},{"line_number":554,"context_line":"    cpu_mode \u003d custom"},{"line_number":555,"context_line":"    cpu_model \u003d Haswell-noTSX-IBRS"},{"line_number":556,"context_line":"    cpu_model_extra_flags \u003d PCID, VMX, pdpe1gb"},{"line_number":557,"context_line":""},{"line_number":558,"context_line":"As it can be noticed from above, the ``cpu_model_extra_flags`` config"},{"line_number":559,"context_line":"attribute is case insensitive.  And it is valid in combination with all"}],"source_content_type":"text/x-python","patch_set":8,"id":"9f6a8fd7_352a2790","line":556,"range":{"start_line":537,"start_character":0,"end_line":556,"end_character":46},"updated":"2018-04-28 02:42:27.000000000","message":"Hi, I\u0027m confused with the possible values for this cpu_model_extra_flags, the examples looks good, it clearly ilustrated what is the meaning of pcid, vms and pdpe1gb, but is those the only possible value for this config option? or what is the limitation about this config values? or where could I find all the possible values. it seems unclear from the help message","commit_id":"f40ed1de29430739513fc408657972bf1ff9188b"},{"author":{"_account_id":6962,"name":"Kashyap Chamarthy","email":"kchamart@redhat.com","username":"kashyapc"},"change_message_id":"cb856de343f91e7789417b301592c81fc8b11c6a","unresolved":false,"context_lines":[{"line_number":534,"context_line":"        ),"},{"line_number":535,"context_line":"        default\u003d[],"},{"line_number":536,"context_line":"        help\u003d\"\"\""},{"line_number":537,"context_line":"This allows specifying granular CPU feature flags when configuring CPU"},{"line_number":538,"context_line":"models.  For example, to explicitly specify the ``pcid``"},{"line_number":539,"context_line":"(Process-Context ID, an Intel processor feature -- which is now required"},{"line_number":540,"context_line":"to address the guest performance degradation as a result of applying the"},{"line_number":541,"context_line":"\"Meltdown\" CVE fixes to certain Intel CPU models) flag to the"},{"line_number":542,"context_line":"\"IvyBridge\" virtual CPU model::"},{"line_number":543,"context_line":""},{"line_number":544,"context_line":"    [libvirt]"},{"line_number":545,"context_line":"    cpu_mode \u003d custom"},{"line_number":546,"context_line":"    cpu_model \u003d IvyBridge"},{"line_number":547,"context_line":"    cpu_model_extra_flags \u003d pcid"},{"line_number":548,"context_line":""},{"line_number":549,"context_line":"To specify multiple CPU flags (e.g. the Intel ``VMX`` to expose the"},{"line_number":550,"context_line":"virtualization extensions to the guest, or ``pdpe1gb`` to configure 1GB"},{"line_number":551,"context_line":"huge pages for CPU models that do not provide it):"},{"line_number":552,"context_line":""},{"line_number":553,"context_line":"    [libvirt]"},{"line_number":554,"context_line":"    cpu_mode \u003d custom"},{"line_number":555,"context_line":"    cpu_model \u003d Haswell-noTSX-IBRS"},{"line_number":556,"context_line":"    cpu_model_extra_flags \u003d PCID, VMX, pdpe1gb"},{"line_number":557,"context_line":""},{"line_number":558,"context_line":"As it can be noticed from above, the ``cpu_model_extra_flags`` config"},{"line_number":559,"context_line":"attribute is case insensitive.  And it is valid in combination with all"}],"source_content_type":"text/x-python","patch_set":8,"id":"9f6a8fd7_e5907c51","line":556,"range":{"start_line":537,"start_character":0,"end_line":556,"end_character":46},"in_reply_to":"9f6a8fd7_352a2790","updated":"2018-04-28 17:43:21.000000000","message":"\u003e Hi, I\u0027m confused with the possible values for this\n \u003e cpu_model_extra_flags, the examples looks good, it clearly\n \u003e ilustrated what is the meaning of pcid, vms and pdpe1gb, but is\n \u003e those the only possible value for this config option? or what is\n \u003e the limitation about this config values? or where could I find all\n \u003e the possible values. it seems unclear from the help message\n\nNo, what is shown here in examples are certainly not the only possible values.  CPU feature flags are dependent on *what* CPU model you have.  You can find the possible values in here (as \"\u003cfeature name\u003e\" for each different CPU model): /usr/share/libvirt/cpu_map.xml\n\nI will add a note to that effect.  Thanks for raising it.","commit_id":"f40ed1de29430739513fc408657972bf1ff9188b"}],"nova/tests/unit/virt/libvirt/test_driver.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"054a79085aa95205eba6d2e9d73aa7ddf86700ec","unresolved":false,"context_lines":[{"line_number":6415,"context_line":"        self.assertFalse(mock_warn.called)"},{"line_number":6416,"context_line":""},{"line_number":6417,"context_line":"    @mock.patch.object(libvirt_driver.LOG, \u0027warning\u0027)"},{"line_number":6418,"context_line":"    def test_get_guest_cpu_config_custom_with_multiple_extra_flags(self,"},{"line_number":6419,"context_line":"            mock_warn):"},{"line_number":6420,"context_line":"        drvr \u003d libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), True)"},{"line_number":6421,"context_line":"        instance_ref \u003d objects.Instance(**self.test_instance)"}],"source_content_type":"text/x-python","patch_set":3,"id":"9f6a8fd7_7e0afc1f","line":6418,"updated":"2018-04-25 16:04:51.000000000","message":"I can\u0027t tell if gerrit is just making the diff confusing, but it looks like you modified an existing test for host-model to use custom, and then added back the existing host-model test below. Maybe if you make test_get_guest_cpu_config_custom_with_multiple_extra_flags after test_get_guest_cpu_config_host_model_with_extra_flags it will be more clear that you\u0027re adding a new test for custom.","commit_id":"9b8a7dcd8a6ea973239af827fcdf017282dd45b3"},{"author":{"_account_id":6962,"name":"Kashyap Chamarthy","email":"kchamart@redhat.com","username":"kashyapc"},"change_message_id":"301b92c463f0996e3d326f48e8b2d9d16326a0fc","unresolved":false,"context_lines":[{"line_number":6415,"context_line":"        self.assertFalse(mock_warn.called)"},{"line_number":6416,"context_line":""},{"line_number":6417,"context_line":"    @mock.patch.object(libvirt_driver.LOG, \u0027warning\u0027)"},{"line_number":6418,"context_line":"    def test_get_guest_cpu_config_custom_with_multiple_extra_flags(self,"},{"line_number":6419,"context_line":"            mock_warn):"},{"line_number":6420,"context_line":"        drvr \u003d libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), True)"},{"line_number":6421,"context_line":"        instance_ref \u003d objects.Instance(**self.test_instance)"}],"source_content_type":"text/x-python","patch_set":3,"id":"9f6a8fd7_97fb2446","line":6418,"in_reply_to":"9f6a8fd7_7e0afc1f","updated":"2018-04-26 10:35:41.000000000","message":"Yeah, I did that slopp thing; sorry about it.  It was confusing for me too re-reading my own `diff`.  I\u0027ll address that.","commit_id":"9b8a7dcd8a6ea973239af827fcdf017282dd45b3"},{"author":{"_account_id":6962,"name":"Kashyap Chamarthy","email":"kchamart@redhat.com","username":"kashyapc"},"change_message_id":"a36df4f03ccdaf793b7eddd5a61a9ac5045c0ff8","unresolved":false,"context_lines":[{"line_number":6415,"context_line":"        self.assertFalse(mock_warn.called)"},{"line_number":6416,"context_line":""},{"line_number":6417,"context_line":"    @mock.patch.object(libvirt_driver.LOG, \u0027warning\u0027)"},{"line_number":6418,"context_line":"    def test_get_guest_cpu_config_custom_with_multiple_extra_flags(self,"},{"line_number":6419,"context_line":"            mock_warn):"},{"line_number":6420,"context_line":"        drvr \u003d libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), True)"},{"line_number":6421,"context_line":"        instance_ref \u003d objects.Instance(**self.test_instance)"}],"source_content_type":"text/x-python","patch_set":3,"id":"9f6a8fd7_e0ac18f0","line":6418,"in_reply_to":"9f6a8fd7_97fb2446","updated":"2018-04-26 12:46:17.000000000","message":"It is actually Gerrit that is making confusing; locally, the `diff` looks clear..  With my patch, the order of tests is a bit more systematic by keeping all the three \u0027*_cpu_config_custom_*\u0027 variant tests clustered together; it\u0027s also a bit more intuitive when someone unfamiliar is reading it:\n\n  [...]\n  - test_get_guest_cpu_config_custom()\n  - test_get_guest_cpu_config_custom_with_extra_flags() \n  - test_get_guest_cpu_config_custom_with_multiple_extra_flags()\n  - test_get_guest_cpu_config_host_model_with_extra_flags()\n  - test_get_guest_cpu_config_host_passthrough_with_extra_flags()\n  [...]","commit_id":"9b8a7dcd8a6ea973239af827fcdf017282dd45b3"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"2f973af8751c940965f3bf0a6aacaa7a9c45cde9","unresolved":false,"context_lines":[{"line_number":6398,"context_line":"        self.assertEqual(conf.cpu.sockets, instance_ref.flavor.vcpus)"},{"line_number":6399,"context_line":"        self.assertEqual(conf.cpu.cores, 1)"},{"line_number":6400,"context_line":"        self.assertEqual(conf.cpu.threads, 1)"},{"line_number":6401,"context_line":"        self.assertFalse(mock_warn.called)"},{"line_number":6402,"context_line":""},{"line_number":6403,"context_line":"    @mock.patch.object(libvirt_driver.LOG, \u0027warning\u0027)"},{"line_number":6404,"context_line":"    def test_get_guest_cpu_config_host_model_with_extra_flags(self,"}],"source_content_type":"text/x-python","patch_set":10,"id":"9f6a8fd7_e0492632","line":6401,"range":{"start_line":6401,"start_character":8,"end_line":6401,"end_character":42},"updated":"2018-05-01 15:44:31.000000000","message":"mock_warn.assert_not_called()","commit_id":"7cdddad4a09140e1d3d07835d532122eb14f20fb"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"2f973af8751c940965f3bf0a6aacaa7a9c45cde9","unresolved":false,"context_lines":[{"line_number":6426,"context_line":"        self.assertEqual(conf.cpu.threads, 1)"},{"line_number":6427,"context_line":"        # For \u0027host-model\u0027, it is now valid to use \u0027extra_flags\u0027;"},{"line_number":6428,"context_line":"        # assert that no warning is thrown"},{"line_number":6429,"context_line":"        self.assertFalse(mock_warn.called)"},{"line_number":6430,"context_line":""},{"line_number":6431,"context_line":"    @mock.patch.object(libvirt_driver.LOG, \u0027warning\u0027)"},{"line_number":6432,"context_line":"    def test_get_guest_cpu_config_host_passthrough_with_extra_flags(self,"}],"source_content_type":"text/x-python","patch_set":10,"id":"9f6a8fd7_605f56e5","line":6429,"updated":"2018-05-01 15:44:31.000000000","message":"mock_warn.assert_not_called()","commit_id":"7cdddad4a09140e1d3d07835d532122eb14f20fb"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"2f973af8751c940965f3bf0a6aacaa7a9c45cde9","unresolved":false,"context_lines":[{"line_number":6454,"context_line":"        self.assertEqual(conf.cpu.threads, 1)"},{"line_number":6455,"context_line":"        # We have lifted the restriction for \u0027host-passthrough\u0027 as well;"},{"line_number":6456,"context_line":"        # so here too, assert that no warning is thrown"},{"line_number":6457,"context_line":"        self.assertFalse(mock_warn.called)"},{"line_number":6458,"context_line":""},{"line_number":6459,"context_line":"    def test_get_guest_cpu_topology(self):"},{"line_number":6460,"context_line":"        instance_ref \u003d objects.Instance(**self.test_instance)"}],"source_content_type":"text/x-python","patch_set":10,"id":"9f6a8fd7_405c92ec","line":6457,"updated":"2018-05-01 15:44:31.000000000","message":"mock_warn.assert_not_called()","commit_id":"7cdddad4a09140e1d3d07835d532122eb14f20fb"}],"nova/virt/libvirt/driver.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"054a79085aa95205eba6d2e9d73aa7ddf86700ec","unresolved":false,"context_lines":[{"line_number":3863,"context_line":"        elif (mode \u003d\u003d \"host-passthrough\" and extra_flags):"},{"line_number":3864,"context_line":"            extra_flags \u003d []"},{"line_number":3865,"context_line":"            LOG.warning(\"Setting extra CPU flags is only valid in \""},{"line_number":3866,"context_line":"                        \"combination with a custom CPU model. Refer \""},{"line_number":3867,"context_line":"                        \"to the \u0027nova.conf\u0027 documentation for \""},{"line_number":3868,"context_line":"                        \"\u0027[libvirt]/cpu_model_extra_flags\u0027\")"},{"line_number":3869,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"9f6a8fd7_833c5de1","line":3866,"range":{"start_line":3866,"start_character":44,"end_line":3866,"end_character":50},"updated":"2018-04-25 16:04:51.000000000","message":"\"custom or host-model\" now?","commit_id":"9b8a7dcd8a6ea973239af827fcdf017282dd45b3"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"bdf81e95358e7e12ab6627c53180f9ae4ae9e5d8","unresolved":false,"context_lines":[{"line_number":3863,"context_line":"        elif (mode \u003d\u003d \"host-passthrough\" and extra_flags):"},{"line_number":3864,"context_line":"            extra_flags \u003d []"},{"line_number":3865,"context_line":"            LOG.warning(\"Setting extra CPU flags is only valid in \""},{"line_number":3866,"context_line":"                        \"combination with a custom CPU model. Refer \""},{"line_number":3867,"context_line":"                        \"to the \u0027nova.conf\u0027 documentation for \""},{"line_number":3868,"context_line":"                        \"\u0027[libvirt]/cpu_model_extra_flags\u0027\")"},{"line_number":3869,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"9f6a8fd7_7dd50f43","line":3866,"range":{"start_line":3866,"start_character":44,"end_line":3866,"end_character":50},"in_reply_to":"9f6a8fd7_37d498bd","updated":"2018-04-26 11:54:05.000000000","message":"\u003e Indeed; eagle eyes.  I\u0027ll rephrase it properly.\n\nIt\u0027s also in the release note you pointed out so be aware of that (and maybe the config option help too, I haven\u0027t gone back to double check).","commit_id":"9b8a7dcd8a6ea973239af827fcdf017282dd45b3"},{"author":{"_account_id":6962,"name":"Kashyap Chamarthy","email":"kchamart@redhat.com","username":"kashyapc"},"change_message_id":"301b92c463f0996e3d326f48e8b2d9d16326a0fc","unresolved":false,"context_lines":[{"line_number":3863,"context_line":"        elif (mode \u003d\u003d \"host-passthrough\" and extra_flags):"},{"line_number":3864,"context_line":"            extra_flags \u003d []"},{"line_number":3865,"context_line":"            LOG.warning(\"Setting extra CPU flags is only valid in \""},{"line_number":3866,"context_line":"                        \"combination with a custom CPU model. Refer \""},{"line_number":3867,"context_line":"                        \"to the \u0027nova.conf\u0027 documentation for \""},{"line_number":3868,"context_line":"                        \"\u0027[libvirt]/cpu_model_extra_flags\u0027\")"},{"line_number":3869,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"9f6a8fd7_37d498bd","line":3866,"range":{"start_line":3866,"start_character":44,"end_line":3866,"end_character":50},"in_reply_to":"9f6a8fd7_833c5de1","updated":"2018-04-26 10:35:41.000000000","message":"Indeed; eagle eyes.  I\u0027ll rephrase it properly.","commit_id":"9b8a7dcd8a6ea973239af827fcdf017282dd45b3"},{"author":{"_account_id":6962,"name":"Kashyap Chamarthy","email":"kchamart@redhat.com","username":"kashyapc"},"change_message_id":"7af83849a3b3686512ad48111d956ad4ef56519e","unresolved":false,"context_lines":[{"line_number":3860,"context_line":"        # FIXME(kchamart) Revisit and fix the warnings / exception"},{"line_number":3861,"context_line":"        # handling for different combinations of CPU modes and"},{"line_number":3862,"context_line":"        # \u0027extra_flags\u0027."},{"line_number":3863,"context_line":"        elif (mode \u003d\u003d \"host-passthrough\" and extra_flags):"},{"line_number":3864,"context_line":"            extra_flags \u003d []"},{"line_number":3865,"context_line":"            LOG.warning(\"Setting extra CPU flags is only valid in \""},{"line_number":3866,"context_line":"                        \"combination with a custom CPU model or when \""}],"source_content_type":"text/x-python","patch_set":4,"id":"9f6a8fd7_0ccce35f","line":3863,"updated":"2018-04-26 15:26:18.000000000","message":"After talking to libvirt / QEMU developers, I was reminded that it also makes sense to allow CPU feature flags for \"host-passthrough\".  Refer below.\n\nFor example, the Intel CPU feature \u0027invtsc\u0027 (Invariant Time Stamp\nCounter\") is visible in the guest CPU  *only* when you explicitly\npassing that CPU flag to QEMU, via \u0027host-passthrough\u0027 (in QEMU parlance,\nit is \"-cpu host+invtsc\").   This can be verified by noticing the\npresence of the flag \"nonstop_tsc\" when you run `cat /proc/cpuinfo`.\n\nWhen you run Nova with just \u0027host-passthrough\u0027 (in QEMU parlance: `-cpu \nhost`), you will *not* see the \"nonstop_tsc\" feature flag when you run\n`proc/cpuinfo` in the guest:\n\n    $ cat /proc/cpuinfo | grep nonstop_tsc\n    $ echo $?\n    1\n\nHowever, when you _do_ explicitly supply the \u0027invtsc\u0027 flag to QEMU (as \nin: `-cpu host,+invtsc`) and log into the guest, you will see the\n\u0027nonstop_tsc\u0027: \n\n    $ cat /proc/cpuinfo | grep nonstop_tsc\n    flags               : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc up arch_perfmon rep_good nopl xtopology nonstop_tsc pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch arat xsaveopt fsgsbase bmi1 avx2 smep bmi2 erms\n\nI\u0027ve got a couple of simple scripts that will demonstrate the above via QEMU command-line (before you run them, ensure you\u0027ve got a CirrOS disk image called \u0027base.qcow2\u0027 in your $PWD):\nhttps://kashyapc.fedorapeople.org/CPU-flags-and-host-passthrough/","commit_id":"e62295151f1d1855b9f4483b4513d9b35b0077de"},{"author":{"_account_id":6962,"name":"Kashyap Chamarthy","email":"kchamart@redhat.com","username":"kashyapc"},"change_message_id":"27f2fe7f9217d46986b80ce3161db43a7e2ac56d","unresolved":false,"context_lines":[{"line_number":3816,"context_line":"        model \u003d CONF.libvirt.cpu_model"},{"line_number":3817,"context_line":"        extra_flags \u003d set([flag.lower() for flag in"},{"line_number":3818,"context_line":"            CONF.libvirt.cpu_model_extra_flags])"},{"line_number":3819,"context_line":""},{"line_number":3820,"context_line":"        if (CONF.libvirt.virt_type \u003d\u003d \"kvm\" or"},{"line_number":3821,"context_line":"            CONF.libvirt.virt_type \u003d\u003d \"qemu\"):"},{"line_number":3822,"context_line":"            if mode is None:"}],"source_content_type":"text/x-python","patch_set":8,"id":"9f6a8fd7_162cd697","line":3819,"updated":"2018-04-27 15:36:12.000000000","message":"Idea: As Sean Mooney suggested on IRC, maybe I should make this casing canonicalization change on *top* of this patch, so that it can be backported — because it affects even the existing stable branches that has the restricted choices change)?\n\nAny opinions?","commit_id":"f40ed1de29430739513fc408657972bf1ff9188b"},{"author":{"_account_id":6962,"name":"Kashyap Chamarthy","email":"kchamart@redhat.com","username":"kashyapc"},"change_message_id":"9d8798b67ba99834f814d77b14211876cf2472df","unresolved":false,"context_lines":[{"line_number":3816,"context_line":"        model \u003d CONF.libvirt.cpu_model"},{"line_number":3817,"context_line":"        extra_flags \u003d set([flag.lower() for flag in"},{"line_number":3818,"context_line":"            CONF.libvirt.cpu_model_extra_flags])"},{"line_number":3819,"context_line":""},{"line_number":3820,"context_line":"        if (CONF.libvirt.virt_type \u003d\u003d \"kvm\" or"},{"line_number":3821,"context_line":"            CONF.libvirt.virt_type \u003d\u003d \"qemu\"):"},{"line_number":3822,"context_line":"            if mode is None:"}],"source_content_type":"text/x-python","patch_set":8,"id":"9f6a8fd7_56efaeaf","line":3819,"in_reply_to":"9f6a8fd7_162cd697","updated":"2018-04-27 15:53:12.000000000","message":"\u003e Idea: As Sean Mooney suggested on IRC, maybe I should make this\n \u003e casing canonicalization change on *top* of this patch, so that it\n \u003e can be backported — because it affects even the existing stable\n \u003e branches that has the restricted choices change)?\n\nThinking out loud: I\u0027d swear that in my original local functional test of the restricted choices patch, I tried both casings (\u0027PCID\u0027 and \u0027pcid\u0027) and the instance was generated with the right XML.  I\u0027m re-doing the functional test with that patch to double-check to ensure I\u0027m not hallucinating.","commit_id":"f40ed1de29430739513fc408657972bf1ff9188b"},{"author":{"_account_id":6962,"name":"Kashyap Chamarthy","email":"kchamart@redhat.com","username":"kashyapc"},"change_message_id":"5edb2d1b9517d23f805d4280bd49e86e5f62f29d","unresolved":false,"context_lines":[{"line_number":3816,"context_line":"        model \u003d CONF.libvirt.cpu_model"},{"line_number":3817,"context_line":"        extra_flags \u003d set([flag.lower() for flag in"},{"line_number":3818,"context_line":"            CONF.libvirt.cpu_model_extra_flags])"},{"line_number":3819,"context_line":""},{"line_number":3820,"context_line":"        if (CONF.libvirt.virt_type \u003d\u003d \"kvm\" or"},{"line_number":3821,"context_line":"            CONF.libvirt.virt_type \u003d\u003d \"qemu\"):"},{"line_number":3822,"context_line":"            if mode is None:"}],"source_content_type":"text/x-python","patch_set":8,"id":"9f6a8fd7_9cfec069","line":3819,"in_reply_to":"9f6a8fd7_56efaeaf","updated":"2018-04-27 21:33:55.000000000","message":"[...]\n\n \u003e Thinking out loud: I\u0027d swear that in my original local functional\n \u003e test of the restricted choices patch, I tried both casings (\u0027PCID\u0027\n \u003e and \u0027pcid\u0027) and the instance was generated with the right XML.  I\u0027m\n \u003e re-doing the functional test with that patch to double-check to\n \u003e ensure I\u0027m not hallucinating.\n\nOkay, I was right and wrong: I went back and checked my old test environment -- I tested a variant[*] of the restricted choices patch (Change-ID: I9a8626) which _did_ normalize the casing using str.lower().  But, unfortunately, I removed that and went with a variant *without* normalizing the casing.\n\nIOW, this casing change needs to be a separate patch, and have to be backported to stable branches.  Otherwise specifying capital \"PCID\" will break libvirt with:\n\n2018-04-27 19:11:05.356+0000: 15632: error : x86ModelFromCPU:1085 : internal error: Unknown CPU feature PCID\n    \u003cfeature name\u003d\"PCID\" policy\u003d\"require\"/\u003e\n\n\n[*] Which you could even see here: https://review.openstack.org/#/c/534384/17/nova/virt/libvirt/driver.py@3866","commit_id":"f40ed1de29430739513fc408657972bf1ff9188b"}]}
