Unverified Commit 08fb25a1 authored by openeuler-ci-bot's avatar openeuler-ci-bot Committed by Gitee
Browse files

!13362 [openEuler-24.03-LTS][linux-6.6.y sync] Backport 6.6.47-6.6.48 LTS Conflicts Patches

Merge Pull Request from: @wenzhiwei11 
 
conflicts commits(6)
No relevant files exist:
    selftests: net: lib: ignore possible errors
    selftests: net: lib: kill PIDs before del netns
Submit after modification:
    mm: fix endless reclaim on machines with unaccepted memory
    mm/numa: no task_numa_fault() call if PTE is changed
    mm/numa: no task_numa_fault() call if PMD is changed
Not introduced:
    net: ngbe: Fix phy mode set to external phy

compilation error(1)
Subsequent revert:
    change alloc_pages name in dma_map_ops to avoid name conflicts 
 
Link:https://gitee.com/openeuler/kernel/pulls/13362

 

Reviewed-by: default avatarKefeng Wang <wangkefeng.wang@huawei.com>
Signed-off-by: default avatarZhang Peng <zhangpeng362@huawei.com>
parents d068277c 3bfa35cc
Loading
Loading
Loading
Loading
+13 −16
Original line number Diff line number Diff line
@@ -2006,7 +2006,7 @@ vm_fault_t do_huge_pmd_numa_page(struct vm_fault *vmf)
	vmf->ptl = pmd_lock(vma->vm_mm, vmf->pmd);
	if (unlikely(!pmd_same(oldpmd, *vmf->pmd))) {
		spin_unlock(vmf->ptl);
		goto out;
		return 0;
	}

	pmd = pmd_modify(oldpmd, vma->vm_page_prot);
@@ -2048,22 +2048,16 @@ vm_fault_t do_huge_pmd_numa_page(struct vm_fault *vmf)
	if (migrated) {
		flags |= TNF_MIGRATED;
		nid = target_nid;
	} else {
		task_numa_fault(last_cpupid, nid, HPAGE_PMD_NR, flags);
		return 0;
	}

	flags |= TNF_MIGRATE_FAIL;
	vmf->ptl = pmd_lock(vma->vm_mm, vmf->pmd);
	if (unlikely(!pmd_same(oldpmd, *vmf->pmd))) {
		spin_unlock(vmf->ptl);
			goto out;
		}
		goto out_map;
	}

out:
	if (nid != NUMA_NO_NODE)
		task_numa_fault(last_cpupid, nid, HPAGE_PMD_NR, flags);

		return 0;

	}
out_map:
	/* Restore the PMD */
	pmd = pmd_modify(oldpmd, vma->vm_page_prot);
@@ -2073,7 +2067,10 @@ vm_fault_t do_huge_pmd_numa_page(struct vm_fault *vmf)
	set_pmd_at(vma->vm_mm, haddr, vmf->pmd, pmd);
	update_mmu_cache_pmd(vma, vmf->address, vmf->pmd);
	spin_unlock(vmf->ptl);
	goto out;

	if (nid != NUMA_NO_NODE)
		task_numa_fault(last_cpupid, nid, HPAGE_PMD_NR, flags);
	return 0;
}

/*
+16 −17
Original line number Diff line number Diff line
@@ -5286,7 +5286,7 @@ static vm_fault_t do_numa_page(struct vm_fault *vmf)

	if (unlikely(!pte_same(old_pte, vmf->orig_pte))) {
		pte_unmap_unlock(vmf->pte, vmf->ptl);
		goto out;
		return 0;
	}

	pte = pte_modify(old_pte, vma->vm_page_prot);
@@ -5346,23 +5346,19 @@ static vm_fault_t do_numa_page(struct vm_fault *vmf)
	if (migrate_misplaced_folio(folio, vma, target_nid)) {
		nid = target_nid;
		flags |= TNF_MIGRATED;
	} else {
		task_numa_fault(last_cpupid, nid, 1, flags);
		return 0;
	}

	flags |= TNF_MIGRATE_FAIL;
	vmf->pte = pte_offset_map_lock(vma->vm_mm, vmf->pmd, 
			               vmf->address, &vmf->ptl);
	if (unlikely(!vmf->pte))
			goto out;
		return 0;
	if (unlikely(!pte_same(ptep_get(vmf->pte), vmf->orig_pte))) {
		pte_unmap_unlock(vmf->pte, vmf->ptl);
			goto out;
		}
		goto out_map;
	}

out:
	if (nid != NUMA_NO_NODE)
		task_numa_fault(last_cpupid, nid, nr_pages, flags);
		return 0;
	}
out_map:
	/*
	 * Make it present again, depending on how arch implements
@@ -5375,7 +5371,10 @@ static vm_fault_t do_numa_page(struct vm_fault *vmf)
		numa_rebuild_single_mapping(vmf, vma, vmf->address, vmf->pte,
					    writable);
	pte_unmap_unlock(vmf->pte, vmf->ptl);
	goto out;

	if (nid != NUMA_NO_NODE)
		task_numa_fault(last_cpupid, nid, 1, flags);
	return 0;
}

static inline vm_fault_t create_huge_pmd(struct vm_fault *vmf)
+20 −22
Original line number Diff line number Diff line
@@ -311,7 +311,7 @@ EXPORT_SYMBOL(nr_online_nodes);

static bool page_contains_unaccepted(struct page *page, unsigned int order);
static void accept_page(struct page *page, unsigned int order);
static bool try_to_accept_memory(struct zone *zone, unsigned int order);
static bool cond_accept_memory(struct zone *zone, unsigned int order);
static inline bool has_unaccepted_memory(void);
static bool __free_unaccepted(struct page *page);

@@ -2983,9 +2983,6 @@ static inline long __zone_watermark_unusable_free(struct zone *z,
	if (!(alloc_flags & ALLOC_CMA))
		unusable_free += zone_page_state(z, NR_FREE_CMA_PAGES);
#endif
#ifdef CONFIG_UNACCEPTED_MEMORY
	unusable_free += zone_page_state(z, NR_UNACCEPTED);
#endif

	return unusable_free;
}
@@ -3283,6 +3280,8 @@ get_page_from_freelist(gfp_t gfp_mask, unsigned int order, int alloc_flags,
			}
		}

		cond_accept_memory(zone, order);

		/*
		 * Detect whether the number of free pages is below high
		 * watermark.  If so, we will decrease pcp->high and free
@@ -3308,10 +3307,8 @@ get_page_from_freelist(gfp_t gfp_mask, unsigned int order, int alloc_flags,
				       gfp_mask)) {
			int ret;

			if (has_unaccepted_memory()) {
				if (try_to_accept_memory(zone, order))
			if (cond_accept_memory(zone, order))
				goto try_this_zone;
			}

#ifdef CONFIG_DEFERRED_STRUCT_PAGE_INIT
			/*
@@ -3365,10 +3362,8 @@ get_page_from_freelist(gfp_t gfp_mask, unsigned int order, int alloc_flags,

			return page;
		} else {
			if (has_unaccepted_memory()) {
				if (try_to_accept_memory(zone, order))
			if (cond_accept_memory(zone, order))
				goto try_this_zone;
			}

#ifdef CONFIG_DEFERRED_STRUCT_PAGE_INIT
			/* Try again if zone has deferred pages */
@@ -7084,9 +7079,6 @@ static bool try_to_accept_memory_one(struct zone *zone)
	struct page *page;
	bool last;

	if (list_empty(&zone->unaccepted_pages))
		return false;

	spin_lock_irqsave(&zone->lock, flags);
	page = list_first_entry_or_null(&zone->unaccepted_pages,
					struct page, lru);
@@ -7112,23 +7104,29 @@ static bool try_to_accept_memory_one(struct zone *zone)
	return true;
}

static bool try_to_accept_memory(struct zone *zone, unsigned int order)
static bool cond_accept_memory(struct zone *zone, unsigned int order)
{
	long to_accept;
	int ret = false;
	bool ret = false;

	if (!has_unaccepted_memory())
		return false;

	if (list_empty(&zone->unaccepted_pages))
		return false;

	/* How much to accept to get to high watermark? */
	to_accept = high_wmark_pages(zone) -
		    (zone_page_state(zone, NR_FREE_PAGES) -
		    __zone_watermark_unusable_free(zone, order, 0));
		    __zone_watermark_unusable_free(zone, order, 0) -
		    zone_page_state(zone, NR_UNACCEPTED));

	/* Accept at least one page */
	do {
	while (to_accept > 0) {
		if (!try_to_accept_memory_one(zone))
			break;
		ret = true;
		to_accept -= MAX_ORDER_NR_PAGES;
	} while (to_accept > 0);
	}

	return ret;
}
@@ -7171,7 +7169,7 @@ static void accept_page(struct page *page, unsigned int order)
{
}

static bool try_to_accept_memory(struct zone *zone, unsigned int order)
static bool cond_accept_memory(struct zone *zone, unsigned int order)
{
	return false;
}