Can't understand /proc/interrupts output for GICv3 case

2022-04-07 Thread Chan Kim
Hello all

I think I'm asking too many question recently but sometimes I get very big
help from here so please forgive me.
(and I think someone else can get help from this email thread)
I'm doing experiment for interrupt of a device called axpu on an arm64
virtual machine.
In QEMU virtual machine, the interrupts are assigned as below.
(These numbers are SPI(shared peripheral interrupt) numbers, 
and there are 16 SGI and 16 PPI before SPI, so we have to add 32 to get the
INTID value(hwirq number))

static const int a15irqmap[] = {
[AB21Q_UART] = 1,
[AB21Q_RTC] = 2,
[AB21Q_PCIE] = 3, /* ... to 6 */
[AB21Q_GPIO] = 7,
[AB21Q_SECURE_UART] = 8,
[AB21Q_ACPI_GED] = 9,
[AB21Q_MMIO] = 16, /* ...to 16 + NUM_VIRTIO_TRANSPORTS - 1 */
[AB21Q_GIC_V2M] = 48, /* ...to 48 + NUM_GICV2M_SPIS - 1 */
[AB21Q_SMMU] = 74,/* ...to 74 + NUM_SMMU_IRQS - 1 */
[AB21Q_PLATFORM_BUS] = 112, /* ...to 112 + PLATFORM_BUS_NUM_IRQS -1 */
[AB21Q_AXPU] = 15,
};

In the driver, when I do request_irq(32+15, axpu_irq_handler, IRQF_SHARED,
"axpu_irq", &axpu_cdev) for my device axpu,
the /proc/interrupts' looks like this. See the 10th item(axpu_irq).

   CPU0   
  1:  0 GICv3  25 Level vgic
  3:  0 GICv3  30 Level kvm guest ptimer
  4:  0 GICv3  27 Level kvm guest vtimer
  5:  20432 GICv3  26 Level arch_timer
 40:  0 GICv3 106 Edge  arm-smmu-v3-evtq
 43:  0 GICv3 109 Edge  arm-smmu-v3-gerror
 44:  0 GICv3  34 Level rtc-pl031
 45:164 GICv3  33 Level uart-pl011
 46:  0 GICv3  23 Level arm-pmu
 47:   7789 GICv3  36 Level virtio0, axpu_irq
 48:  0  903.pl061   3 Edge  GPIO Key Poweroff
IPI0: 0   Rescheduling interrupts
IPI1: 0   Function call interrupts
IPI2: 0   CPU stop interrupts
IPI3: 0   CPU stop (for crash dump) interrupts
IPI4: 0   Timer broadcast interrupts
IPI5: 0   IRQ work interrupts
IPI6: 0   CPU wake-up interrupts
Err:  0

There are two numbers. One in the first column and the other in the 4th
column.
After observing uart-pl011 driver's action(who's irq in 8th row), I found
the number in the first column is the one I should pass to the request_irq
funcion, and the second number in the 4th column is the input to the GICv3.
(uart was assigned SPI 1, so 32+1 = 33).
In my axpu driver case, I requested request_irq(47, ...) so hwirq is 47 but
I don't know why it was assigned to GICv3 input 36.
Shouldn't it be 47 too? (32+15=47).

Without fixing QEMU code(still using SPI 15), I tried doing request_irq(15,
axpu_irq_handler, ..) for test and this time it looks like this.(see the 5th
row)

   CPU0   
  1:  0 GICv3  25 Level vgic
  3:  0 GICv3  30 Level kvm guest ptimer
  4:  0 GICv3  27 Level kvm guest vtimer
  5:   8174 GICv3  26 Level arch_timer
 15:  0 GICv3  56 Edge  axpu_irq
 40:  0 GICv3 106 Edge  arm-smmu-v3-evtq
 43:  0 GICv3 109 Edge  arm-smmu-v3-gerror
 44:  0 GICv3  34 Level rtc-pl031
 45:175 GICv3  33 Level uart-pl011
 46:  0 GICv3  23 Level arm-pmu
 47:   7790 GICv3  36 Level virtio0
 48:  0  903.pl061   3 Edge  GPIO Key Poweroff
IPI0: 0   Rescheduling interrupts
IPI1: 0   Function call interrupts
IPI2: 0   CPU stop interrupts
IPI3: 0   CPU stop (for crash dump) interrupts
IPI4: 0   Timer broadcast interrupts
IPI5: 0   IRQ work interrupts
IPI6: 0   CPU wake-up interrupts
Err:  0

Now axpu_irq has moved to INTID 15 (as expected), but it changed to "GICv3
56 Edge".
How is this GICv3 number is assigned? (and I guess edge trigger is the
default for INTID < 16. Because it's SGI..?)

I thought I connected my device (axpu) to SPI 15 in qemu code but this GICv3
input number changes according to with what number I called reqeust_irq.
Could anyone tell me what is going on here?

Thank you.
Chan Kim






___
Kernelnewbies mailing list
Kernelnewbies@kernelnewbies.org
https://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies


Re: Linux kernel environment setup in VSCode

2022-04-07 Thread Minh Dang
Hi,

C/C++ IntelliSense in conjunction with Makefile Tools extension could
solve the problem
Indeed, any projects built with makefile (such as Linux kernel) should use
this combination in VSCode
Here is an introduction of Makefile Tools
https://devblogs.microsoft.com/cppblog/now-announcing-makefile-support-in-visual-studio-code/

I hope it helps

Best,
Dang
___
Kernelnewbies mailing list
Kernelnewbies@kernelnewbies.org
https://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies


Linux kernel environment setup in VSCode

2022-04-07 Thread Jasper Surmont

Hey,

I'm new to the Linux kernel development, and I wanted to set up a VSCode 
environment for navigating the code (I know, even though people tell me 
Vim is better but currently I'm really not comfortable with it yet).
My main goal is just navigating and understanding. I've been able to 
make a lot work, and using the C/C++ extension from Microsoft I have 
good IntelliSense.


However, some things are getting flagged by the extension as errors 
(which of course shouldn't, since I've been able to compile the kernel).
These are things like: identifiers being undefined (for example, in 
kernel/sched/cpudeadline.c u64 is undefined) and errors like: function 
returning array is not allowed (for example, in drivers/md/dm-zero.c on 
the bottom).
I'm wondering if I'm forgetting things such that all these things get 
resolved. Any tips are appreciated.



Thanks!


___
Kernelnewbies mailing list
Kernelnewbies@kernelnewbies.org
https://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies