I recalled Zi had posted a related patch: [RFC] ARM: lockless get_user_pages_fast() [1], which I tested and was able to boot a guest OS.
So the LNG kernel *might* be able to use Zi's RFC as a workaround for now (I don't have a good sense of what the responses to the RFC mean in terms of stability).
Anyway, Zi has since added bug 1236949 to track the proper upstream friendly version of the lockless GUP for ARM implementation.
note: I'm not experiencing the udhcpc problem on my local board, but I am in the LAVA lab.
I traced the kernel where qemu was hanging, occupying 99% cpu to find __get_user_ pages_fast was being called:
##### CPU 0 buffer started #### arm-1743 [000] ....21. 99.008416: unpin_current_cpu <-migrate_enable arm-1743 [000] ....1.. 99.008417: handle_exit <-kvm_arch_ vcpu_ioctl_ run arm-1743 [000] ....1.. 99.008417: kvm_condition_valid <-handle_exit arm-1743 [000] ....1.. 99.008418: kvm_handle_ guest_abort <-handle_exit arm-1743 [000] ....1.. 99.008418: __srcu_read_lock <-kvm_handle_ guest_abort arm-1743 [000] ....1.. 99.008419: kvm_is_visible_gfn <-kvm_handle_ guest_abort arm-1743 [000] ....1.. 99.008420: gfn_to_memslot <-kvm_handle_ guest_abort arm-1743 [000] ....1.. 99.008421: gfn_to_hva <-kvm_handle_ guest_abort arm-1743 [000] ....1.. 99.008421: __gfn_to_hva_many <-gfn_to_hva arm-1743 [000] ....1.. 99.008422: rt_down_read <-kvm_handle_ guest_abort arm-1743 [000] ....1.. 99.008422: __rt_down_read <-kvm_handle_ guest_abort arm-1743 [000] ....1.. 99.008423: rt_mutex_lock <-__rt_down_read arm-1743 [000] ....1.. 99.008424: rt_mutex_slowlock <-__rt_down_read arm-1743 [000] ....1.. 99.008424: _raw_spin_lock <-rt_mutex_slowlock arm-1743 [000] ....2.. 99.008425: __try_to_ take_rt_ mutex <-rt_mutex_slowlock arm-1743 [000] ....2.. 99.008426: _raw_spin_unlock <-rt_mutex_slowlock arm-1743 [000] ....1.. 99.008427: find_vma <-kvm_handle_ guest_abort arm-1743 [000] ....1.. 99.008428: rt_up_read <-kvm_handle_ guest_abort arm-1743 [000] ....1.. 99.008428: rt_mutex_unlock <-kvm_handle_ guest_abort arm-1743 [000] ....1.. 99.008429: _raw_spin_lock <-rt_mutex_unlock arm-1743 [000] ....2.. 99.008430: _raw_spin_unlock <-kvm_handle_ guest_abort arm-1743 [000] ....1.. 99.008431: gfn_to_pfn_prot <-kvm_handle_ guest_abort arm-1743 [000] ....1.. 99.008431: __gfn_to_pfn <-gfn_to_pfn_prot arm-1743 [000] ....1.. 99.008432: __gfn_to_ pfn_memslot <-gfn_to_pfn_prot arm-1743 [000] ....1.. 99.008432: __gfn_to_hva_many <-__gfn_ to_pfn_ memslot arm-1743 [000] ....1.. 99.008433: get_user_pages_fast <-__gfn_ to_pfn_ memslot arm-1743 [000] ....1.. 99.008434: rt_down_read <-get_user_ pages_fast arm-1743 [000] ....1.. 99.008434: __rt_down_read <-get_user_ pages_fast arm-1743 [000] ....1.. 99.008435: rt_mutex_lock <-__rt_down_read arm-1743 [000] ....1.. 99.008436: rt_mutex_slowlock <-__rt_down_read arm-1743 [000] ....1.. 99.008436: _raw_spin_lock <-rt_mutex_slowlock arm-1743 [000] ....2.. 99.008437: __try_to_ take_rt_ mutex <-rt_mutex_slowlock arm-1743 [000] ....2.. 99.008438: _raw_spin_unlock <-rt_mutex_slowlock arm-1743 [000] ....1.. 99.008439: get_user_pages <-get_user_ pages_fast arm-1743 [000] ....1.. 99.008439: __get_user_pages <-get_user_ pages_fast arm-1743 [000] ....1.. 99.008440: find_extend_vma <-__get_user_pages arm-1743 [000] ....1.. 99.008441: find_vma <-find_extend_vma arm-1743 [000] ....1.. 99.008441: _cond_resched <-__get_user_pages arm-1743 [000] ....1.. 99.008442: follow_page_mask <-__get_user_pages arm-1743 [000] ....1.. 99.008442: follow_huge_addr <-follow_page_mask arm-1743 [000] ....1.. 99.008443: pud_huge <-follow_page_mask arm-1743 [000] ....1.. 99.008444: pmd_huge <-follow_page_mask arm-1743 [000] ....1.. 99.008444: migrate_disable <-follow_page_mask arm-1743 [000] ....21. 99.008445: pin_current_cpu <-migrate_disable arm-1743 [000] ....111 99.008445: rt_spin_lock <-follow_page_mask arm-1743 [000] ....111 99.008446: rt_spin_ lock_slowlock <-rt_spin_lock arm-1743 [000] ....111 99.008447: _raw_spin_lock <-rt_spin_ lock_slowlock arm-1743 [000] ....211 99.008448: __try_to_ take_rt_ mutex <-rt_spin_ lock_slowlock arm-1743 [000] ....211 99.008448: _raw_spin_unlock <-rt_spin_ lock_slowlock arm-1743 [000] ....111 99.008449: follow_ trans_huge_ pmd <-follow_page_mask arm-1743 [000] ....111 99.008450: rt_spin_unlock <-follow_page_mask arm-1743 [000] ....111 99.008451: rt_spin_ lock_slowunlock <-follow_page_mask arm-1743 [000] ....111 99.008451: _raw_spin_lock <-rt_spin_ lock_slowunlock arm-1743 [000] ....211 99.008452: _raw_spin_unlock <-follow_page_mask arm-1743 [000] ....111 99.008453: migrate_enable <-follow_page_mask arm-1743 [000] ....21. 99.008454: unpin_current_cpu <-migrate_enable arm-1743 [000] ....1.. 99.008454: flush_dcache_page <-__get_user_pages arm-1743 [000] ....1.. 99.008455: page_mapping <-flush_dcache_page arm-1743 [000] ....1.. 99.008455: __flush_dcache_page <-flush_dcache_page arm-1743 [000] ....1.. 99.008456: kmap_atomic <-__flush_ dcache_ page arm-1743 [000] ....1.. 99.008457: pagefault_disable <-kmap_atomic arm-1743 [000] ....1.. 99.008457: migrate_disable <-pagefault_disable arm-1743 [000] ....21. 99.008458: pin_current_cpu <-migrate_disable
qemu-system-
qemu-system-
qemu-system-
qemu-system-
qemu-system-
qemu-system-
qemu-system-
qemu-system-
qemu-system-
qemu-system-
qemu-system-
qemu-system-
qemu-system-
qemu-system-
qemu-system-
qemu-system-
qemu-system-
qemu-system-
qemu-system-
qemu-system-
qemu-system-
qemu-system-
qemu-system-
qemu-system-
qemu-system-
qemu-system-
qemu-system-
qemu-system-
qemu-system-
qemu-system-
qemu-system-
qemu-system-
qemu-system-
qemu-system-
qemu-system-
qemu-system-
qemu-system-
qemu-system-
qemu-system-
qemu-system-
qemu-system-
qemu-system-
qemu-system-
qemu-system-
qemu-system-
qemu-system-
qemu-system-
qemu-system-
qemu-system-
qemu-system-
qemu-system-
qemu-system-
qemu-system-
qemu-system-
qemu-system-
qemu-system-
qemu-system-
qemu-system-
qemu-system-
qemu-system-
qemu-system-
qemu-system-
qemu-system-
I recalled Zi had posted a related patch: [RFC] ARM: lockless get_user_ pages_fast( ) [1], which I tested and was able to boot a guest OS.
So the LNG kernel *might* be able to use Zi's RFC as a workaround for now (I don't have a good sense of what the responses to the RFC mean in terms of stability).
Anyway, Zi has since added bug 1236949 to track the proper upstream friendly version of the lockless GUP for ARM implementation.
[1] https:/ /groups. google. com/a/linaro. org/forum/ #!topic/ linaro- networking/ qr1-D6EaTKw