git: adf79abc35ff - main - Radix dump updates

Brandon Bergren bdragon at FreeBSD.org
Wed Dec 30 22:58:10 UTC 2020


[PowerPC] Update crash dump page tracking in Radix MMU

Due to incorrect bookkeeping, the wrong pages were being dumped in some cases.

Update the dump tracking to match the actual page liveness.

Approved-By: bdragon (in IRC)

On Wed, Dec 30, 2020, at 4:45 PM, Piotr Kubaj wrote:
> The branch main has been updated by pkubaj (ports committer):
> 
> URL: 
> https://cgit.FreeBSD.org/src/commit/?id=adf79abc35ff807644c5e43c3d4856b5a29e15ab
> 
> commit adf79abc35ff807644c5e43c3d4856b5a29e15ab
> Author:     Justin Hibbits <chmeeedalf at gmail.com>
> AuthorDate: 2020-05-27 03:31:17 +0000
> Commit:     Piotr Kubaj <pkubaj at FreeBSD.org>
> CommitDate: 2020-12-30 22:45:28 +0000
> 
>     Radix dump updates
> ---
>  sys/powerpc/aim/mmu_radix.c | 8 ++++++++
>  1 file changed, 8 insertions(+)
> 
> diff --git a/sys/powerpc/aim/mmu_radix.c b/sys/powerpc/aim/mmu_radix.c
> index 5833739a25df..2373425afd30 100644
> --- a/sys/powerpc/aim/mmu_radix.c
> +++ b/sys/powerpc/aim/mmu_radix.c
> @@ -1216,6 +1216,7 @@ retry:
>  		}
>  		PV_STAT(atomic_add_int(&pc_chunk_count, 1));
>  		PV_STAT(atomic_add_int(&pc_chunk_allocs, 1));
> +		dump_add_page(m->phys_addr);
>  		pc = (void *)PHYS_TO_DMAP(m->phys_addr);
>  		pc->pc_pmap = pmap;
>  		pc->pc_map[0] = PC_FREE0;
> @@ -1490,6 +1491,7 @@ reclaim_pv_chunk(pmap_t locked_pmap, struct 
> rwlock **lockp)
>  			PV_STAT(atomic_add_int(&pc_chunk_frees, 1));
>  			/* Entire chunk is free; return it. */
>  			m_pc = PHYS_TO_VM_PAGE(DMAP_TO_PHYS((vm_offset_t)pc));
> +			dump_drop_page(m_pc->phys_addr);
>  			mtx_lock(&pv_chunks_mutex);
>  			TAILQ_REMOVE(&pv_chunks, pc, pc_lru);
>  			break;
> @@ -1579,6 +1581,7 @@ free_pv_chunk(struct pv_chunk *pc)
>  	PV_STAT(atomic_add_int(&pc_chunk_frees, 1));
>  	/* entire chunk is free, return it */
>  	m = PHYS_TO_VM_PAGE(DMAP_TO_PHYS((vm_offset_t)pc));
> +	dump_drop_page(m->phys_addr);
>  	vm_page_unwire_noq(m);
>  	vm_page_free(m);
>  }
> @@ -1639,6 +1642,7 @@ retry:
>  	}
>  	PV_STAT(atomic_add_int(&pc_chunk_count, 1));
>  	PV_STAT(atomic_add_int(&pc_chunk_allocs, 1));
> +	dump_add_page(m->phys_addr);
>  	pc = (void *)PHYS_TO_DMAP(m->phys_addr);
>  	pc->pc_pmap = pmap;
>  	pc->pc_map[0] = PC_FREE0 & ~1ul;	/* preallocated bit 0 */
> @@ -2095,6 +2099,10 @@ mmu_radix_late_bootstrap(vm_offset_t start, 
> vm_offset_t end)
>  	pa = allocpages(DPCPU_SIZE >> PAGE_SHIFT);
>  	dpcpu = (void *)PHYS_TO_DMAP(pa);
>  	dpcpu_init(dpcpu, curcpu);
> +
> +	crashdumpmap = (caddr_t)virtual_avail;
> +	virtual_avail += MAXDUMPPGS * PAGE_SIZE;
> +
>  	/*
>  	 * Reserve some special page table entries/VA space for temporary
>  	 * mapping of pages.
>

-- 
  Brandon Bergren
  bdragon at FreeBSD.org


More information about the dev-commits-src-all mailing list