On Thu, 10 Jul 2025 14:08:17 +0800 Fan Gong wrote: > +u32 hinic3_hwif_read_reg(struct hinic3_hwif *hwif, u32 reg) > +{ > + void __iomem *addr = hinic3_reg_addr(hwif, reg); > + __be32 raw_val; > + > + raw_val = (__force __be32)readl(addr); > + > + return be32_to_cpu(raw_val); > +} > + > +void hinic3_hwif_write_reg(struct hinic3_hwif *hwif, u32 reg, u32 val) > +{ > + void __iomem *addr = hinic3_reg_addr(hwif, reg); > + __be32 raw_val = cpu_to_be32(val); > + > + writel((__force u32)raw_val, addr); You should probably use iowrite32be and ioread32be here > + queue_work_on(WORK_CPU_UNBOUND, aeqs->workq, &eq->aeq_work); What's the point of calling queue_work_on() if you're passing UNBOUND > + wmb(); /* Write the init values */ barriers are not a flush, you need to say what writes this is _separating_ > + err = request_irq(eq->irq_id, aeq_interrupt, 0, > + eq->irq_name, eq); > + > + return err; you can return request_irq()s retval directly > + synchronize_irq(eq->irq_id); > + free_irq(eq->irq_id, eq); no need to sync irq before free -- pw-bot: cr