当前位置:首页>Linux>Linux MSI IRQ Domain深度解析:msi_desc/msi_msg结构体与hwirq到virq的映射机制 【第12篇·共15篇】

Linux MSI IRQ Domain深度解析:msi_desc/msi_msg结构体与hwirq到virq的映射机制 【第12篇·共15篇】

  • 2026-07-02 16:51:32
Linux MSI IRQ Domain深度解析:msi_desc/msi_msg结构体与hwirq到virq的映射机制 【第12篇·共15篇】
摘要

本文是《Linux中断子系统》系列第3章的第四篇,聚焦于Linux内核MSI IRQ Domain的关键数据结构与映射机制。首先对比CONFIG_GENERIC_MSI_IRQ_DOMAIN与PCIe MSI的概念区别;随后详细讲解内核态MSI管理的四大数据结构:msi_desc(MSI描述符,包含irq号、设备指针、MSI消息缓存、PCI MSI/MSI-X属性字段)、msi_msg(MSI消息,包含address_lo/hi和data字段)、msi_domain_info(MSI中断域配置,含chip/ops/handler等)和msi_domain_ops(MSI域操作回调集合)。接着通过its_pci_msi_init调用链,分析GICv3-ITS-PCI MSI Domain的创建过程。最后结合gic_irq_domain_translate函数,详解hwirq到virq的映射流程(针对SPI/PPI/LPI/ESPI等中断类型的地址计算),并以dmesg输出为例说明实际效果。


3.2 MSI IRQ Domain与hwirq-virq映射

3.2(续)MSI IRQ Domain 注册

在讲PCIe中断服务之前需要明确一下MSI中断注册中几个重要的结构体。

在Linux内核中定义了一个通用的MSI Irq Domain,这个主要是通过CONFIG_GENERIC_MSI_IRQ_DOMAIN来进行控制,相关代码在kernel\irq\msi.c;而PCIe设备中有PCI MSI中断机制,这是PCIe设备特有的MSI中断机制的特定实现,与具体的PCI相关,代码位于driver\pci\msi.c;ARM GIC V3支持LPIs(消息中断机制,即MSI),主要实现模块是ITS,同样也有针对PCI设备的适配,代码位置在driver\irqchip\irqchip-gic-v3-its-pci-msi.c

CONFIG_GENERIC_MSI_IRQ_DOMAIN 和 PCIe 中的 MSI 在概念和应用上有所区别,但两者都涉及到 MSI(Message-Signaled Interrupts,消息信号中断)机制,主要区别如下:

  1. 功能和应用范围

    • CONFIG_GENERIC_MSI_IRQ_DOMAIN 是 Linux 内核的一个配置选项,用于启用对 MSI IRQ 域的支持,确保内核能够正确地响应和处理 MSI 设备产生的中断。

    • PCIe 中的 MSI 是一种中断机制,允许 PCI Express 设备通过向内存中的特定地址写入消息来产生中断,而不使用传统的 INTx 引脚。

  2. 配置和实现

    • CONFIG_GENERIC_MSI_IRQ_DOMAIN 在内核编译时通过配置工具进行配置,启用后内核将包含相应的 MSI IRQ 域支持代码。

    • PCIe 中的 MSI 在硬件级别实现,设备驱动程序与硬件设备协商确定用于 MSI 的内存地址,设备通过向这个地址写入消息来触发中断。

  3. 关注点

    • CONFIG_GENERIC_MSI_IRQ_DOMAIN 更侧重于内核对 MSI 机制的支持和管理。

    • PCIe 中的 MSI 则更侧重于硬件设备和驱动程序之间的通信机制。

两者协同工作,确保 MSI 设备能够正确地与 Linux 内核进行中断交互。

内核态MSI管理相关的数据结构

msi_desc

/** * struct msi_desc - Descriptor structure for MSI based interrupts * @list:	List head for management * @irq:	The base interrupt number * @nvec_used:	The number of vectors used * @dev:	Pointer to the device which uses this descriptor * @msg:	The last set MSI message cached for reuse * @affinity:	Optional pointer to a cpu affinity mask for this descriptor * * @write_msi_msg:	Callback that may be called when the MSI message *			address or data changes * @write_msi_msg_data:	Data parameter for the callback. * * @msi_mask:	[PCI MSI]   MSI cached mask bits * @msix_ctrl:	[PCI MSI-X] MSI-X cached per vector control bits * @is_msix:	[PCI MSI/X] True if MSI-X * @multiple:	[PCI MSI/X] log2 num of messages allocated * @multi_cap:	[PCI MSI/X] log2 num of messages supported * @maskbit:	[PCI MSI/X] Mask-Pending bit supported? * @is_64:	[PCI MSI/X] Address size: 0=32bit 1=64bit * @entry_nr:	[PCI MSI/X] Entry which is described by this descriptor * @default_irq:[PCI MSI/X] The default pre-assigned non-MSI irq * @mask_pos:	[PCI MSI]   Mask register position * @mask_base:	[PCI MSI-X] Mask register base address */struct msi_desc {/* Shared device/bus type independent data */struct list_head		list;unsigned int			irq;unsigned int			nvec_used;struct device			*dev;struct msi_msg			msg;struct irq_affinity_desc	*affinity;#ifdef CONFIG_IRQ_MSI_IOMMUconst void			*iommu_cookie;#endifvoid (*write_msi_msg)(struct msi_desc *entry, void *data);void *write_msi_msg_data;union {/* PCI MSI/X specific data */struct {union {				u32 msi_mask;				u32 msix_ctrl;			};struct {				u8	is_msix		: 1;				u8	multiple	: 3;				u8	multi_cap	: 3;				u8	maskbit		: 1;				u8	is_64		: 1;				u8	is_virtual	: 1;				u16	entry_nr;unsigned default_irq;			} msi_attrib;union {				u8	mask_pos;void __iomem *mask_base;			};		};struct platform_msi_desc platform;struct fsl_mc_msi_desc fsl_mc;struct ti_sci_inta_msi_desc inta;	};};

msi_desc 各字段说明:

  1. list:链表头,用于管理和组织MSI描述符。

  2. irq:该MSI描述符的基础中断号。

  3. nvec_used:已经使用的MSI向量的数量。

  4. dev:指向使用该MSI描述符的设备的指针。

  5. msg:缓存的最后一个MSI消息,用于重用。

  6. affinity:可选的CPU亲和性掩码指针。

  7. write_msi_msg 和 write_msi_msg_data:当MSI消息的地址或数据发生变化时可能会调用的回调函数和数据参数。

  8. msi_mask/msix_ctrl:MSI的缓存掩码位 / MSI-X的每向量控制位缓存。

  9. is_msix:指示是否使用MSI-X。

  10. multiple 和 multi_cap:分别表示已分配和支持的消息数的对数(log2)。

  11. maskbit:指示是否支持Mask-Pending位。

  12. is_64:指示地址大小是32位(0)还是64位(1)。

  13. entry_nr:由该描述符描述的MSI-X条目编号。

  14. default_irq:默认的非MSI预分配中断号。

  15. mask_pos / mask_base:MSI的掩码寄存器位置 / MSI-X的掩码寄存器基地址。

  16. platform, fsl_mc, inta:为特定平台或设备类型提供的MSI描述符数据。

msi_msg

/** * msi_msg - Representation of a MSI message * @address_lo:		Low 32 bits of msi message address * @arch_addrlo:	Architecture specific shadow of @address_lo * @address_hi:		High 32 bits of msi message address *			(only used when device supports it) * @arch_addrhi:	Architecture specific shadow of @address_hi * @data:		MSI message data (usually 16 bits) * @arch_data:		Architecture specific shadow of @data */struct msi_msg {	union {		u32			address_lo;		arch_msi_msg_addr_lo_t	arch_addr_lo;	};	union {		u32			address_hi;		arch_msi_msg_addr_hi_t	arch_addr_hi;	};	union {		u32			data;		arch_msi_msg_data_t	arch_data;	};};

msi_msg 各字段说明:

  1. address_lo:MSI消息地址的低32位,是设备将写入以触发中断的内存地址的一部分。

  2. arch_addrlo:架构特定的address_lo影子,通常用于驱动程序内部跟踪或修改这个值。

  3. address_hi:MSI消息地址的高32位(仅当设备支持64位地址时使用)。

  4. arch_addrhi:架构特定的address_hi影子。

  5. data:MSI消息数据(通常是16位),当设备写入MSI地址时同时发送的数据值,可用于区分不同的中断源。

  6. arch_data:架构特定的data影子。

msi_domain_info

/** * struct msi_domain_info - MSI interrupt domain data * @flags:		Flags to decribe features and capabilities * @ops:		The callback data structure * @chip:		Optional: associated interrupt chip * @chip_data:		Optional: associated interrupt chip data * @handler:		Optional: associated interrupt flow handler * @handler_data:	Optional: associated interrupt flow handler data * @handler_name:	Optional: associated interrupt flow handler name * @data:		Optional: domain specific data */struct msi_domain_info {	u32			flags;	struct msi_domain_ops	*ops;	struct irq_chip		*chip;void			*chip_data;	irq_flow_handler_t	handler;void			*handler_data;const char		*handler_name;void			*data;};

msi_domain_info 各字段说明:

  • flags:描述MSI中断域的功能和特性的标志字段。

  • ops:回调函数数据结构,包含用于操作MSI中断域的函数指针。

  • chip:可选字段,指向与MSI中断域关联的中断控制器芯片。

  • chip_data:可选字段,存储与中断控制器芯片关联的数据。

  • handler:可选字段,指向与MSI中断域关联的中断处理函数。

  • handler_data:可选字段,存储与中断处理函数关联的数据。

  • handler_name:可选字段,存储中断处理函数的名称(用于调试)。

  • data:可选字段,存储与MSI中断域关联的特定域数据。

msi_domain_ops

/** * struct msi_domain_ops - MSI interrupt domain callbacks * @get_hwirq:		Retrieve the resulting hw irq number * @msi_init:		Domain specific init function for MSI interrupts * @msi_free:		Domain specific function to free a MSI interrupts * @msi_check:		Callback for verification of the domain/info/dev data * @msi_prepare:	Prepare the allocation of the interrupts in the domain * @msi_finish:		Optional callback to finalize the allocation * @set_desc:		Set the msi descriptor for an interrupt * @handle_error:	Optional error handler if the allocation fails * @domain_alloc_irqs:	Optional function to override the default allocation * @domain_free_irqs:	Optional function to override the default free */struct msi_domain_ops {irq_hw_number_t	(*get_hwirq)(struct msi_domain_info *info,				     msi_alloc_info_t *arg);int		(*msi_init)(struct irq_domain *domain,				    struct msi_domain_info *info,				    unsigned int virq, irq_hw_number_t hwirq,				    msi_alloc_info_t *arg);void		(*msi_free)(struct irq_domain *domain,				    struct msi_domain_info *info,				    unsigned int virq);int		(*msi_check)(struct irq_domain *domain,				     struct msi_domain_info *info,				     struct device *dev);int		(*msi_prepare)(struct irq_domain *domain,				       struct device *dev, int nvec,				       msi_alloc_info_t *arg);void		(*msi_finish)(msi_alloc_info_t *arg, int retval);void		(*set_desc)(msi_alloc_info_t *arg,				    struct msi_desc *desc);int		(*handle_error)(struct irq_domain *domain,struct msi_desc *desc, int error);int		(*domain_alloc_irqs)(struct irq_domain *domain,					     struct device *dev, int nvec);void		(*domain_free_irqs)(struct irq_domain *domain,					    struct device *dev);};

msi_domain_ops 各回调函数说明:

  • get_hwirq:用于获取硬件中断号(hwirq number)。

  • msi_init:MSI中断域的初始化函数。

  • msi_free:用于释放MSI中断资源的函数。

  • msi_check:用于验证MSI中断域、中断信息以及设备数据的回调函数。

  • msi_prepare:准备MSI中断在域中的分配。

  • msi_finish:可选的回调函数,用于完成MSI中断的分配。

  • set_desc:设置MSI描述符的函数。

  • handle_error:可选的错误处理函数,用于处理MSI中断分配过程中的错误。

  • domain_alloc_irqs 和 domain_free_irqs:用于覆盖默认MSI中断分配和释放函数。

MSI IRQ Domain 初始化过程

在 irq-gic-v3-its-pci-msi.c 中会定义一个实例:

static struct of_device_id its_device_id[] = {	{	.compatible	= "arm,gic-v3-its",	},	{},};static struct msi_domain_info its_pci_msi_domain_info = {    .flags  =  MSI_FLAG_USE_DEF_DOM_OPS | MSI_FLAG_USE_DEF_CHIP_OPS |               MSI_FLAG_MULTI_PCI_MSI   | MSI_FLAG_PCI_MSIX,    .ops    =  &its_pci_msi_ops,    .chip   =  &its_msi_irq_chip,    // 这个成员是给irq domain 用的};static struct msi_domain_ops its_pci_msi_ops = {    .msi_prepare    = its_pci_msi_prepare,};static struct msi_domain_ops pci_msi_domain_ops_default = {	.set_desc	= pci_msi_domain_set_desc,	.msi_check	= pci_msi_domain_check_cap,	.handle_error	= pci_msi_domain_handle_error,};

创建一个 MSI IRQ PCI domain

GICv3-ITS-PCI msi-domain 初始化过程 early_initcall(its_pci_msi_init);

its_pci_msi_init	its_pci_of_msi_init		its_pci_msi_init_onepci_msi_create_irq_domain(handle, &its_pci_msi_domain_info, parent)				pci_msi_domain_update_dom_ops(info);					...pci_msi_domain_ops_defaultdomain = msi_create_irq_domain(fwnode, info, parent);					msi_domain_update_dom_ops(info);						...msi_domain_ops_defaultirq_domain_create_hierarchy(fwnode, &msi_domain_ops, info)						irq_domain_create_tree(fwnode, ops, host_data);							__irq_domain_add(fwnode, 0, ~00, ops, host_data)								domain->host_data = host_data;// host_data 是 its_pci_msi_domain_infostatic struct msi_domain_info its_pci_msi_domain_info = {    .flags  =  MSI_FLAG_USE_DEF_DOM_OPS | MSI_FLAG_USE_DEF_CHIP_OPS |               MSI_FLAG_MULTI_PCI_MSI   | MSI_FLAG_PCI_MSIX,    .ops    =  &its_pci_msi_ops,    .chip   =  &its_msi_irq_chip,};static struct msi_domain_ops its_pci_msi_ops = {    .msi_prepare    = its_pci_msi_prepare,};static struct msi_domain_ops pci_msi_domain_ops_default = {	.set_desc	= pci_msi_domain_set_desc,	.msi_check	= pci_msi_domain_check_cap,	.handle_error	= pci_msi_domain_handle_error,};

硬件中断号(hwirq)和软件中断号(virq)的映射过程

在具体的硬件初始化过程中,通常会获取到对应的hwirq(通过irq_of_parse_and_map),然后转换为virq,最后用于注册对应的中断。硬件中断号一般是通过解析设备树或者直接用板级数据获取,获取之后通过irq_of_parse_and_map函数转换为virq,再去注册中断。

gic_of_init    |- gic_of_setup_kvm_info  (在虚拟化平台下会调用)            |- irq_of_parse_and_map                    |- of_irq_parse_one                    |- irq_create_of_mapping                        |- irq_create_fwspec_mapping                            |- irq_domain_translate                                |- d->ops->translate                                    |- gic_irq_domain_translatestatic const struct irq_domain_ops gic_irq_domain_ops = {	.translate = gic_irq_domain_translate,	.alloc = gic_irq_domain_alloc,	.free = gic_irq_domain_free,	.select = gic_irq_domain_select,};

如何获取硬件中断号:

gic_irq_domain_translate 函数用于将设备树(Device Tree)中的中断规格(IRQ specification)转换为硬件中断号(hwirq)和中断类型(type)。

函数的主要流程如下:

  1. 参数检查:函数接收irq_domain指针、irq_fwspec指针,以及hwirqtype的输出指针。fwspec结构包含从GIC设备树节点中解析出来的参数。

  2. 处理简单情况:如果fwspec只有一个参数,且该参数小于16,则直接将此参数作为hwirq,并将中断类型设置为上升沿触发(IRQ_TYPE_EDGE_RISING)。

  3. 处理OF节点:根据fwspec的第一个参数(即中断类型)进行不同的处理:

    • SPI:hwirq设置为参数1加32。

    • PPI:hwirq设置为参数1加16。

    • ESPI和EPPI:hwirq设置为参数1加上对应的基准中断ID。

    • LPI和PARTITION:hwirq设置为参数1(PARTITION类型有额外偏移处理)。

  4. 处理IRQ芯片FW节点:确保fwspec有两个参数,hwirq设置为参数0,type设置为参数1。

  5. 错误处理:以上条件都不满足时,函数返回-EINVAL

static int gic_irq_domain_translate(struct irq_domain *d,				    struct irq_fwspec *fwspec,				    unsigned long *hwirq,				    unsigned int *type){if (fwspec->param_count == 1 && fwspec->param[0] < 16) {		*hwirq = fwspec->param[0];		*type = IRQ_TYPE_EDGE_RISING;return 0;	}if (is_of_node(fwspec->fwnode)) {if (fwspec->param_count < 3)return -EINVAL;switch (fwspec->param[0]) {case 0:			/* SPI */			*hwirq = fwspec->param[1] + 32;break;case 1:			/* PPI */			*hwirq = fwspec->param[1] + 16;break;case 2:			/* ESPI */			*hwirq = fwspec->param[1] + ESPI_BASE_INTID;break;case 3:			/* EPPI */			*hwirq = fwspec->param[1] + EPPI_BASE_INTID;break;case GIC_IRQ_TYPE_LPI:	/* LPI */			*hwirq = fwspec->param[1];break;case GIC_IRQ_TYPE_PARTITION:			*hwirq = fwspec->param[1];if (fwspec->param[1] >= 16)				*hwirq += EPPI_BASE_INTID - 16;else				*hwirq += 16;break;default:return -EINVAL;		}		*type = fwspec->param[2] & IRQ_TYPE_SENSE_MASK;		WARN_ON(*type == IRQ_TYPE_NONE &&			fwspec->param[0] != GIC_IRQ_TYPE_PARTITION);return 0;	}if (is_fwnode_irqchip(fwspec->fwnode)) {if(fwspec->param_count != 2)return -EINVAL;		*hwirq = fwspec->param[0];		*type = fwspec->param[1];		WARN_ON(*type == IRQ_TYPE_NONE);return 0;	}return -EINVAL;}

通过dmesg打印出来:

针对PCIe中MSI/MSI-X中断的映射有单独的处理流程,是在整个PCIe枚举之后进行中断分配。

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-07-03 15:34:11 HTTP/2.0 GET : https://f.mffb.com.cn/a/495295.html
  2. 运行时间 : 0.139310s [ 吞吐率:7.18req/s ] 内存消耗:4,637.56kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=a70448b06580591a8b511e529df24a00
  1. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_static.php ( 4.90 KB )
  7. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  10. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  11. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  12. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  13. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  14. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  15. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  16. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  17. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  18. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  19. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  21. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  22. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/provider.php ( 0.19 KB )
  23. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  24. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  25. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  26. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/common.php ( 0.03 KB )
  27. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  28. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  29. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/app.php ( 0.95 KB )
  30. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cache.php ( 0.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/console.php ( 0.23 KB )
  32. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cookie.php ( 0.56 KB )
  33. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/database.php ( 2.48 KB )
  34. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  35. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/filesystem.php ( 0.61 KB )
  36. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/lang.php ( 0.91 KB )
  37. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/log.php ( 1.35 KB )
  38. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/middleware.php ( 0.19 KB )
  39. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/route.php ( 1.89 KB )
  40. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/session.php ( 0.57 KB )
  41. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/trace.php ( 0.34 KB )
  42. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/view.php ( 0.82 KB )
  43. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/event.php ( 0.25 KB )
  44. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  45. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/service.php ( 0.13 KB )
  46. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/AppService.php ( 0.26 KB )
  47. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  48. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  49. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  50. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  51. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  52. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/services.php ( 0.14 KB )
  53. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  54. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  55. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  56. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  57. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  58. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  59. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  60. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  61. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  62. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  63. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  64. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  65. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  66. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  67. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  68. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  69. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  70. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  71. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  72. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  73. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  74. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  75. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  76. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  77. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  78. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  79. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  80. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  81. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  82. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  83. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/Request.php ( 0.09 KB )
  84. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  85. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/middleware.php ( 0.25 KB )
  86. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  87. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  88. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  89. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  90. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  91. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  92. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  93. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  94. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  95. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  96. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  97. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  98. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  99. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/route/app.php ( 1.72 KB )
  100. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  101. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  102. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  103. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/controller/Index.php ( 4.81 KB )
  104. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/BaseController.php ( 2.05 KB )
  105. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  106. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  108. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  109. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  110. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  111. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  112. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  113. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  114. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  115. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  116. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  117. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  118. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  119. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  120. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  121. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  122. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  123. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  124. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  125. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  126. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  127. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  128. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  129. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  130. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  131. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  132. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  133. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  134. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  135. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  136. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  137. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  138. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  139. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/runtime/temp/067d451b9a0c665040f3f1bdd3293d68.php ( 11.98 KB )
  140. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.000726s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000834s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000347s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000336s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000657s ]
  6. SELECT * FROM `set` [ RunTime:0.000251s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000656s ]
  8. SELECT * FROM `article` WHERE `id` = 495295 LIMIT 1 [ RunTime:0.000526s ]
  9. UPDATE `article` SET `lasttime` = 1783064051 WHERE `id` = 495295 [ RunTime:0.019440s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 67 LIMIT 1 [ RunTime:0.000435s ]
  11. SELECT * FROM `article` WHERE `id` < 495295 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.000988s ]
  12. SELECT * FROM `article` WHERE `id` > 495295 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.001280s ]
  13. SELECT * FROM `article` WHERE `id` < 495295 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.002255s ]
  14. SELECT * FROM `article` WHERE `id` < 495295 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.001919s ]
  15. SELECT * FROM `article` WHERE `id` < 495295 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.003082s ]
0.143149s