diff --git a/arch/loongarch/kernel/smp.c b/arch/loongarch/kernel/smp.c index 78bdf81a09c59acdfea6f6527fe918ad0a60391d..9cdcca99467df74beb33e1097a1dc5e3255f1fae 100644 --- a/arch/loongarch/kernel/smp.c +++ b/arch/loongarch/kernel/smp.c @@ -338,7 +338,7 @@ static void __init fdt_smp_setup(void) __cpu_number_map[cpuid] = cpu; __cpu_logical_map[cpu] = cpuid; - early_numa_add_cpu(cpu, 0); + early_numa_add_cpu(cpuid, 0); set_cpuid_to_node(cpuid, 0); } diff --git a/arch/loongarch/mm/hugetlbpage.c b/arch/loongarch/mm/hugetlbpage.c index aca52c42e94e8b993d63e1b930578815138f7628..fb09fb70661e2a24015c73dd46c0544d6f641d44 100644 --- a/arch/loongarch/mm/hugetlbpage.c +++ b/arch/loongarch/mm/hugetlbpage.c @@ -47,7 +47,8 @@ pte_t *huge_pte_offset(struct mm_struct *mm, unsigned long addr, pmd = pmd_offset(pud, addr); } } - return pmd_none(pmdp_get(pmd)) ? NULL : (pte_t *) pmd; + + return (!pmd || pmd_none(pmdp_get(pmd))) ? NULL : (pte_t *) pmd; } int pmd_huge(pmd_t pmd) diff --git a/drivers/iommu/loongarch_iommu.c b/drivers/iommu/loongarch_iommu.c index e3d88d1a3dac25a16e0ef85dc53462b3b30afd28..038438b062817b507adf995d45edf819ad3e3e39 100644 --- a/drivers/iommu/loongarch_iommu.c +++ b/drivers/iommu/loongarch_iommu.c @@ -758,7 +758,6 @@ static void la_iommu_remove_device(struct device *dev) { struct la_iommu_dev_data *dev_data; - iommu_group_remove_device(dev); dev_data = dev->archdata.iommu; dev->archdata.iommu = NULL; kfree(dev_data); diff --git a/mm/page_alloc.c b/mm/page_alloc.c index 29b03083969e22b7329d56033e3c4c6b165542d1..1383b316610900c57654964e821de0a9ba6b41f3 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -4284,6 +4284,14 @@ __alloc_pages_slowpath(gfp_t gfp_mask, unsigned int order, } retry: + /* + * Deal with possible cpuset update races or zonelist updates to avoid + * infinite retries. + */ + if (check_retry_cpuset(cpuset_mems_cookie, ac) || + check_retry_zonelist(zonelist_iter_cookie)) + goto restart; + /* Ensure kswapd doesn't accidentally go to sleep as long as we loop */ if (alloc_flags & ALLOC_KSWAPD) wake_all_kswapds(order, gfp_mask, ac);