-
Notifications
You must be signed in to change notification settings - Fork 15
Fix qos-test and updated CI pipeline #50
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -33,6 +33,7 @@ | |
| #include "qemu/config-file.h" | ||
| #include "qemu/option.h" | ||
| #include "qemu/units.h" | ||
| #include "system/qtest.h" | ||
| #include "qemu/bswap.h" | ||
|
|
||
| /* Kernel boot protocol is specified in the kernel docs | ||
|
|
@@ -640,10 +641,18 @@ int arm_load_dtb(hwaddr addr, const struct arm_boot_info *binfo, | |
| * By default QEMU generates a 1 MiB FDT. | ||
| * Let's pack it to save some room. | ||
| */ | ||
| rc = fdt_pack(fdt); | ||
| /* Should only fail if we've built a corrupted tree */ | ||
| g_assert(rc == 0); | ||
| size = fdt_totalsize(fdt); | ||
| /* | ||
| * Skip in qtest mode — fdt_pack causes the aarch64 qos-test | ||
| * to hang for reasons that are not fully understood. Since no | ||
| * kernel boots in qtest, fdt_pack is unnecessary and skipping | ||
| * it allows the tests to pass. | ||
| */ | ||
| if (!qtest_enabled()) { | ||
| rc = fdt_pack(fdt); | ||
| /* Should only fail if we've built a corrupted tree */ | ||
|
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Thanks for the detailed commit message - but what exactly does "it triggers a BQL deadlock I know you probably don't have the answer right now. If you want to look into and find out, then can you update the commit message and this comment with that info? Otherwise, just drop the specifics and mention that this causes qtest issues for reasons that are unclear to us.
Collaborator
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Used GDB to look into this, and this is what I have found: The deadlock is between two threads during qos-test:
Regarding the size of the FDT, I am not sure.
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. ok - I ask because the fix appears to be to not pack the DTB for the qtest. I'm fine with that fix. But its not clear to me how the size of the DTB affects synchronization around the Big Qemu Lock (BQL). i'm pushing on it because conceptually the DTB and the virtio scsi data path have nothing to do with each other. if theres a race condition somewhere, it would be nice to know the exact steps that race and how we end up in the deadlock vs the normal functioning path. But like i said before, it's not necessary to find this answer for us to ship this fix.
Collaborator
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I have fixed the commit message. |
||
| g_assert(rc == 0); | ||
| size = fdt_totalsize(fdt); | ||
| } | ||
|
|
||
|
|
||
| /* Put the DTB into the memory map as a ROM image: this will ensure | ||
|
|
||
|
hungmtruong marked this conversation as resolved.
|
Uh oh!
There was an error while loading. Please reload this page.