C静态内联函数调用extern函数动机

时间:2015-12-10 12:46:11

标签: c static inline extern

查看底部补丁。

---
 drivers/iommu/iommu.c             | 4 ++--
 drivers/iommu/msm_iommu_domains.c | 2 +-
 include/linux/iommu.h             | 6 +++++-
 3 files changed, 8 insertions(+), 4 deletions(-)

diff --git a/drivers/iommu/iommu.c b/drivers/iommu/iommu.c
index 7848f47..c2f694c 100644
--- a/drivers/iommu/iommu.c
+++ b/drivers/iommu/iommu.c
@@ -670,7 +670,7 @@ void iommu_set_fault_handler(struct iommu_domain *domain,
 }
 EXPORT_SYMBOL_GPL(iommu_set_fault_handler);

-struct iommu_domain *iommu_domain_alloc(struct bus_type *bus, int flags)
+struct iommu_domain *iommu_domain_alloc_flags(struct bus_type *bus, int flags)
 {
    struct iommu_domain *domain;
    int ret;
@@ -695,7 +695,7 @@ out_free:

    return NULL;
 }
-EXPORT_SYMBOL_GPL(iommu_domain_alloc);
+EXPORT_SYMBOL_GPL(iommu_domain_alloc_flags);

 void iommu_domain_free(struct iommu_domain *domain)
 {
diff --git a/drivers/iommu/msm_iommu_domains.c b/drivers/iommu/msm_iommu_domains.c
index 26a3f85..7619e66 100644
--- a/drivers/iommu/msm_iommu_domains.c
+++ b/drivers/iommu/msm_iommu_domains.c
@@ -506,7 +506,7 @@ int msm_register_domain(struct msm_iova_layout *layout)
    if (data->domain_num < 0)
        goto free_pools;

-   data->domain = iommu_domain_alloc(bus, layout->domain_flags);
+   data->domain = iommu_domain_alloc_flags(bus, layout->domain_flags);
    if (!data->domain)
        goto free_domain_num;

diff --git a/include/linux/iommu.h b/include/linux/iommu.h
index fb1efec..8bd9d3f 100644
--- a/include/linux/iommu.h
+++ b/include/linux/iommu.h
@@ -131,7 +131,11 @@ struct iommu_ops {

 extern int bus_set_iommu(struct bus_type *bus, struct iommu_ops *ops);
 extern bool iommu_present(struct bus_type *bus);
-extern struct iommu_domain *iommu_domain_alloc(struct bus_type *bus, int flags);
+extern struct iommu_domain *iommu_domain_alloc_flags(struct bus_type *bus, int flags);
+static inline struct iommu_domain *iommu_domain_alloc(struct bus_type *bus)
+{
+   return iommu_domain_alloc_flags(bus, 0);
+}
 extern struct iommu_group *iommu_group_get_by_id(int id);
 extern void iommu_domain_free(struct iommu_domain *domain);
 extern int iommu_attach_device(struct iommu_domain *domain,
-- 

这个补丁有什么好处,即是否有任何表现胜利?

inline static函数调用extern的函数是一种很好的编程习惯吗?

如果extern表示外部链接,即函数定义在其他地方,则在static函数中使用它是安全的,该函数表示&#34;此函数应仅在此翻译单元中可见&# 34;

根据这个答案判断:Inline functions and external linkage

  

所以&#34;外部联系&#34;和&#34;内联&#34;不是排他性的; &#34;外部   联动&#34;表示可以在任何翻译中引用该功能   单位和&#34;内联&#34;意味着它必须在任何翻译中定义   叫它的单位。

inlineexternal显然不在战斗中,但是static的存在让我很烦恼。

由于

1 个答案:

答案 0 :(得分:1)

  

这个补丁有什么好处,即是否有任何表现胜利?

似乎更改了界面,他们更改了一个函数的名称和参数,然后添加了一个额外的函数。它是功能的变化,与性能无关。

  

使用内联静态函数调用extern是一个很好的编程习惯吗?

当然,它只是意味着static函数是声明它的模块的内部函数,而不是调用者可用。

  

在静态函数中使用它是否安全,它表示&#34;此函数应仅在此翻译单元中可见&#34;?

在使用extern链接调用函数时,从static函数或其他任何地方执行此操作没有区别。调用者的链接与被调用函数的链接无关。