On 04/09/2023 10:11, bot crack wrote:
The jailhouse system hangs when running on the 4*A55 board

jailhouse-config-check:
/Reading configuration set:
   Architecture:  arm64
   Root cell:     RootCell (a55-main.cell)
Overlapping memory regions inside cell: None
Overlapping memory regions with hypervisor: None
Missing PCI MMCONFIG interceptions: None
Missing resource interceptions for architecture arm64: None/

jailhouse Started output:/
Initializing Jailhouse hypervisor  on CPU 3
Code location: 0x0000ffffc0200800
Page pool usage after early setup: mem 39/992, remap 0/131072
Initializing processors:
  CPU 3... OK
  CPU 2... OK
  CPU 0... OK
  CPU 1... OK
Initializing unit: irqchip
Initializing unit: ARM SMMU v3
Initializing unit: ARM SMMU
Initializing unit: PVU IOMMU
Initializing unit: PCI
Adding virtual PCI device 00:00.0 to cell "RootCell"
Page pool usage after late setup: mem 64/992, remap 144/131072
Activating hypervisor/





1. When I run the weston (using openGL ES) program on Linux in the root cell, it will cause a CPU to occupy 100%. I use ftrace to track the CPU and display(See attachment for full output):
/# tracer: function_graph
#
# CPU  DURATION                  FUNCTION CALLS
# |     |   |                     |   |   |   |
  2)               |            _raw_spin_lock_irqsave() {
  2)   0.583 us    |              do_raw_spin_lock();
  2)   3.500 us    |            }
  2)               |            ktime_get_update_offsets_now() {
  2)   0.583 us    |              arch_counter_read();
  2)   1.750 us    |            }
  2)               |            __hrtimer_run_queues() {
  2)               |              _raw_spin_unlock_irqrestore() {
  2)   0.583 us    |                do_raw_spin_unlock();
  2)   1.750 us    |              }
  2)               |              tick_sched_timer() {
  2)               |                ktime_get() {
  2)   0.875 us    |                  arch_counter_read();
  2)   1.750 us    |                }
  2)               |                tick_sched_do_timer() {
  2)               |                  tick_do_update_jiffies64.part.0() {
  2)               |                    _raw_spin_lock() {
  2)   0.583 us    |                      do_raw_spin_lock();
  2)   1.750 us    |                    }
  2)               |                    do_timer() {
  2)   0.584 us    |                      calc_global_load();
  2)   1.750 us    |                    }
  2)               |                    _raw_spin_unlock() {
  2)   0.584 us    |                      do_raw_spin_unlock();
  2)   1.750 us    |                    }
  2)               |                    update_wall_time() {
  2)               |                      timekeeping_advance() {
  2)               |                        _raw_spin_lock_irqsave() {
  2)   0.584 us    |                          do_raw_spin_lock();
  2)   2.042 us    |                        }
  2)   0.584 us    |                        arch_counter_read();
  2)   0.583 us    |                        ntp_tick_length();
  2)   0.583 us    |                        ntp_tick_length();
  2)               |                        timekeeping_update() {
  2)   0.583 us    |                          ntp_get_next_leap();
  2)   0.875 us    |                          update_vsyscall();
  2)   0.583 us    |                          raw_notifier_call_chain();
  2)   4.375 us    |                        }
  2)               |                        _raw_spin_unlock_irqrestore() {
  2)   0.583 us    |                          do_raw_spin_unlock();
  2)   1.750 us    |                        }
  2) + 14.000 us   |                      }
  2) + 15.166 us   |                    }
  2) + 23.334 us   |                  }
  2) + 24.500 us   |                }
  2)               |                update_process_times() {
  2)               |                  account_process_tick() {
  2)               |                    account_system_time() {
  2)               |                      account_system_index_time() {
  2)               |                        cpuacct_account_field() {
  2)   0.583 us    |                          __rcu_read_lock();
  2)   0.584 us    |                          __rcu_read_unlock();
  2)   3.208 us    |                        }
  2)   0.584 us    |                        __rcu_read_lock();
  2)   0.583 us    |                        __rcu_read_unlock();
  2)               |                        cpufreq_acct_update_power() {
  2)               |                          _raw_spin_lock_irqsave() {
  2)   0.584 us    |                            do_raw_spin_lock();
  2)   1.750 us    |                          }
 2)               |  _raw_spin_unlock_irqrestore() {
  2)   0.583 us    |                            do_raw_spin_unlock();
  2)   1.750 us    |                          }
  2)   5.250 us    |                        }
  2) + 12.542 us   |                      }
  2) + 13.708 us   |                    }
  2) + 14.875 us   |                  }
  2)               |                  run_local_timers() {
  2)   0.584 us    |                    hrtimer_run_queues();
  2)   1.750 us    |                  }
  2)               |                  rcu_sched_clock_irq() {
  2)   0.875 us    |                    rcu_is_cpu_rrupt_from_idle();
  2)   0.584 us    |                    rcu_qs();
  2)   0.583 us    |                    rcu_is_cpu_rrupt_from_idle();
  2)   0.583 us    |                    rcu_segcblist_ready_cbs();
  2)   5.541 us    |                  }
  2)               |                  scheduler_tick() {
  2)               |                    _raw_spin_lock() {
  2)   0.584 us    |                      do_raw_spin_lock();
  2)   1.750 us    |                    }
  2)   0.584 us    |                    update_rq_clock();
  2)   0.875 us    |                    update_thermal_load_avg();
  2)               |                    task_tick_fair() {
  2)               |                      update_curr() {
  2)   0.583 us    |                        update_min_vruntime();
  2)               |                        cpuacct_charge() {
  2)   0.583 us    |                          __rcu_read_lock();
  2)   0.875 us    |                          __rcu_read_unlock();
  2)   4.083 us    |                        }
  2)   0.584 us    |                        __rcu_read_lock();
  2)   0.583 us    |                        __rcu_read_unlock();
  2)   9.041 us    |                      }
  2)   0.875 us    |                      __update_load_avg_se();
  2)               |                      __update_load_avg_cfs_rq() {
  2)   0.875 us    |                        __accumulate_pelt_segments();
  2)   2.042 us    |                      }
  2)   0.584 us    |                      update_cfs_group();
  2)   0.583 us    |                      hrtimer_active();
  2) + 16.625 us   |                    }
  2)   0.583 us    |                    calc_global_load_tick();
  2)               |                    _raw_spin_unlock() {
  2)   0.875 us    |                      do_raw_spin_unlock();
  2)   2.042 us    |                    }
  2)               |                    trigger_load_balance() {
  2)   1.166 us    |                      nohz_balance_exit_idle();
  2)   0.583 us    |                      __rcu_read_lock();
  2)   0.583 us    |                      __rcu_read_unlock();
  2)   4.959 us    |                    }
  2) + 32.083 us   |                  }
  2)   0.584 us    |                  run_posix_cpu_timers();
  2) + 58.333 us   |                }
  2)   0.584 us    |                hrtimer_forward();
  2) + 88.375 us   |              }
  2)               |              _raw_spin_lock_irq() {
  2)   0.583 us    |                do_raw_spin_lock();
  2)   1.750 us    |              }
  2)   0.875 us    |              enqueue_hrtimer();
  2) + 95.666 us   |            }
  2)   0.875 us    |            __hrtimer_next_event_base();
  2)   0.875 us    |            __hrtimer_next_event_base();
  2)               |            _raw_spin_unlock_irqrestore() {
  2)   0.583 us    |              do_raw_spin_unlock();
  2)   1.750 us    |            }
  2)               |            tick_program_event() {
  2)               |              clockevents_program_event() {
  2)               |                ktime_get() {
  2)   0.583 us    |                  arch_counter_read();
  2)   1.750 us    |                }
  2)   0.875 us    |                arch_timer_set_next_event_phys();
  2)   4.084 us    |              }
  2)   5.250 us    |            }
  2) ! 114.333 us  |          } /* hrtimer_interrupt */
  2) ! 115.792 us  |        } /* arch_timer_handler_phys */
  2)   0.583 us    |        gic_eoimode1_eoi_irq();
  2) ! 118.125 us  |      } /* handle_percpu_devid_irq */
  2)               |      irq_exit() {
  2)   0.584 us    |        idle_cpu();
  2)   1.750 us    |      }
  2) ! 127.750 us  |    } /* __handle_domain_irq */
  2) ! 130.084 us  |  } /* gic_handle_irq */
  2)   <========== |
  2)   ==========> |
  2)               |  gic_handle_irq() {
  2)   0.583 us    |    gic_read_iar();
  2)               |    __handle_domain_irq() {
  2)               |      irq_find_mapping() {
  2)   0.584 us    |        __rcu_read_lock();
  2)   0.583 us    |        __rcu_read_unlock();
  2)   2.917 us    |      }
  2)               |      irq_enter() {
  2)   0.583 us    |        irq_enter_rcu();
  2)   1.750 us    |      }
  2)               |      handle_percpu_devid_irq() {
  2)               |        arch_timer_handler_phys() {
  2)               |          hrtimer_interrupt() {
  2)               |            _raw_spin_lock_irqsave() {
  2)   0.583 us    |              do_raw_spin_lock();
  2)   2.042 us    |            }
  2)               |            ktime_get_update_offsets_now() {
  2)   0.584 us    |              arch_counter_read();
  2)   2.042 us    |            }
  2)               |            __hrtimer_run_queues() {
  2)               |              _raw_spin_unlock_irqrestore() {
  2)   1.166 us    |                do_raw_spin_unlock();
  2)   2.042 us    |              }
  2)               |              tick_sched_timer() {
  2)               |                ktime_get() {
  2)   0.583 us    |                  arch_counter_read();
  2)   2.042 us    |                }
  2)               |                tick_sched_do_timer() {
  2)               |                  tick_do_update_jiffies64.part.0() {
  2)               |                    _raw_spin_lock() {
  2)   0.875 us    |                      do_raw_spin_lock();
  2)   1.750 us    |                    }
  2)               |                    do_timer() {
  2)   0.583 us    |                      calc_global_load();
  2)   2.333 us    |                    }
  2)               |                    _raw_spin_unlock() {
  2)   0.583 us    |                      do_raw_spin_unlock();
  2)   1.750 us    |                    }
  2)               |                    update_wall_time() {
  2)               |                      timekeeping_advance() {
  2)               |                        _raw_spin_lock_irqsave() {
  2)   0.583 us    |                          do_raw_spin_lock();
  2)   2.333 us    |                        }
  2)   0.584 us    |                        arch_counter_read();
  2)   0.583 us    |                        ntp_tick_length();
  2)   0.584 us    |                        ntp_tick_length();
  2)               |                        timekeeping_update() {
  2)   0.583 us    |                          ntp_get_next_leap();
  2)   0.875 us    |                          update_vsyscall();
  2)   0.583 us    |                          raw_notifier_call_chain();
  2)   4.375 us    |                        }
  2)               |                        _raw_spin_unlock_irqrestore() {
  2)   0.875 us    |                          do_raw_spin_unlock();
  2)   1.750 us    |                        }
  2) + 14.875 us   |                      }
  2) + 16.042 us   |                    }
  2) + 24.792 us   |                  }
  2) + 25.959 us   |                }/



2. When I use cat /sys/kernel/debug/clk/clk_summary, the entire system will hang without any output information.



How should I debug these two problems?

I have seen similar issues on a S32G board. It took me days to find out that we had unhandled SMCs. Return values were not checked in the kernel, the SMC was conducted, and miles later, the kernel hung up. Your bug has the smell that this could be the same issue. Would you please try the following patch to see if you have unhandled SMCs:

diff --git a/hypervisor/arch/arm-common/smccc.c b/hypervisor/arch/arm-common/smccc.c
index 65639b59..9b3af5b3 100644
--- a/hypervisor/arch/arm-common/smccc.c
+++ b/hypervisor/arch/arm-common/smccc.c
@@ -136,6 +136,7 @@ enum trap_return handle_smc(struct trap_context *ctx)
                break;

        default:
+               printk("We have unhandled SMCs\n");
                ret = TRAP_UNHANDLED;
        }



If you get reports of unhandled SMCs (Linux should handle this correctly by the way), you can, as a first workaround, simply allow to forward them with this patch:

https://github.com/lfd/jailhouse/commit/3a88b0b371aeb649bc496d8c272b5d3ab5de3982

  Ralf


--
You received this message because you are subscribed to the Google Groups "Jailhouse" group. To unsubscribe from this group and stop receiving emails from it, send an email to jailhouse-dev+unsubscr...@googlegroups.com <mailto:jailhouse-dev+unsubscr...@googlegroups.com>. To view this discussion on the web visit https://groups.google.com/d/msgid/jailhouse-dev/204a5f33-51e3-482a-95e5-14941c87154dn%40googlegroups.com <https://groups.google.com/d/msgid/jailhouse-dev/204a5f33-51e3-482a-95e5-14941c87154dn%40googlegroups.com?utm_medium=email&utm_source=footer>.

--
You received this message because you are subscribed to the Google Groups 
"Jailhouse" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to jailhouse-dev+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/jailhouse-dev/91e5a78e-6f0b-4492-b023-f3a9c8d239f6%40oth-regensburg.de.

Reply via email to