Skip to content

龙芯的一些问题咨询 #202

@LiguangZhang

Description

@LiguangZhang
  1. 3a6000 8核心的支持情况

从手册上看,4-7 核 ipi 中断 和 extioi 中断的基址是 0x1fe10000, 从代码上看这一部分貌似并没有实现。请问下这块是否后续有支持计划。

  1. 对LIOINTC 中断的支持
    龙芯启动 root zone时,使用的设备树启动,其中把uart 中断(10) 从 设备树中拿掉了,没有使用LIOINTC( Legacy I/O Interrupt Controller) 中断控制器。我把这块加上后(uart 使用中断,acpi中的默认配置是这样的),启动root zone 后出现了无法输入的情况。请问下后续有对 liointc 的支持吗

  2. 单个zone 绑定多核的情况有问题,我把board.rs 中 分给root zone的cpu 改成了多个,然后启动root zone 后就起不来了。这个情况是正常的吗?也就是现在不支持一个zone分多个核心吗。

分析了下代码,现在linux上都基本是用iocsr 访问 ipi 的cpuintc的寄存器(0x1000-0x1048),iocsr 的模拟上对这部分直接走的 handle_generic_mmio 访存的cpuintc的寄存器地址。这块的寄存器地址我看手册上说需要加上 cpuid * 0x100 的地址偏移,这块是不是处理的有问题,没有加地址偏移。

另一个问题是从实现上来说, ipi 这块的模拟貌似做不到 hypervisor 和 guest 同时共用,因为cpuintc的寄存器对于 hypervisor 和 guest 来说只有一份。hypervisor 清了pending 会导致guest 查询出问题,不清pending 又会导致hypervisor 反复收ipi中断。

翻了下kvm的源码,发现kvm 是通过模拟 ipi 的寄存器的数据来做的,guest 没有直接访问 cpuintc 真实寄存器的能力,通过在ipi send 时写入pending 数据和clear 时清除pending,同时控制 gcsr_estat 来控制guest 收发ipi 中断。 通过vcpu kick 让cpu 从guest 下退出来然后植入 ipi 中断数据。 感觉这样更合理一些。 同时不会跟hypervisor 中的ipi action 混乱。

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions