Fix buildworld for powerpc.
vmpage requires struct pmap to exist and contain a pm_stats field. As of r308817, either AIM or BOOKE is required to be set in order to get their respective pmap structs. Rather than expose them both, or try to unify them unnecessarily, add a third option which contains only a pm_stats field, and change the two existing pmap structures to place the common fields at the beginning of the struct. This actually fixes the stats collection by libkvm on AIM hardware, because before it was accessing a possibly different offset, which would cause it to read garbage. Bump __FreeBSD_version to denote this ABI change, so that ports which depend on libkvm can be rebuilt.
This commit is contained in:
parent
0f2bb99d43
commit
4026b44790
5
UPDATING
5
UPDATING
@ -51,6 +51,11 @@ NOTE TO PEOPLE WHO THINK THAT FreeBSD 12.x IS SLOW:
|
||||
|
||||
****************************** SPECIAL WARNING: ******************************
|
||||
|
||||
20161119:
|
||||
The layout of the pmap structure has changed for powerpc to put the pmap
|
||||
statistics at the front for all CPU variations. libkvm(3) and all tools
|
||||
that link against it need to be recompiled.
|
||||
|
||||
20161030:
|
||||
isl(4) and cyapa(4) drivers now require a new driver,
|
||||
chromebook_platform(4), to work properly on Chromebook-class hardware.
|
||||
|
@ -30,9 +30,6 @@
|
||||
#include <sys/cpuset.h>
|
||||
#include <sys/sysctl.h>
|
||||
|
||||
#include <vm/vm.h>
|
||||
#include <vm/vm_page.h>
|
||||
|
||||
#include <vm/uma.h>
|
||||
#include <vm/uma_int.h>
|
||||
|
||||
|
@ -74,6 +74,9 @@
|
||||
#include <machine/slb.h>
|
||||
#include <machine/tlb.h>
|
||||
|
||||
struct pmap;
|
||||
typedef struct pmap *pmap_t;
|
||||
|
||||
#if defined(AIM)
|
||||
|
||||
#if !defined(NPMAPS)
|
||||
@ -81,8 +84,6 @@
|
||||
#endif /* !defined(NPMAPS) */
|
||||
|
||||
struct slbtnode;
|
||||
struct pmap;
|
||||
typedef struct pmap *pmap_t;
|
||||
|
||||
struct pvo_entry {
|
||||
LIST_ENTRY(pvo_entry) pvo_vlink; /* Link to common virt page */
|
||||
@ -131,6 +132,7 @@ RB_PROTOTYPE(pvo_tree, pvo_entry, pvo_plink, pvo_vaddr_compare);
|
||||
#define PVO_VSID(pvo) ((pvo)->pvo_vpn >> 16)
|
||||
|
||||
struct pmap {
|
||||
struct pmap_statistics pm_stats;
|
||||
struct mtx pm_mtx;
|
||||
|
||||
#ifdef __powerpc64__
|
||||
@ -143,7 +145,6 @@ struct pmap {
|
||||
cpuset_t pm_active;
|
||||
|
||||
struct pmap *pmap_phys;
|
||||
struct pmap_statistics pm_stats;
|
||||
struct pvo_tree pmap_pvo;
|
||||
};
|
||||
|
||||
@ -182,10 +183,10 @@ void slb_free_user_cache(struct slb **);
|
||||
#elif defined(BOOKE)
|
||||
|
||||
struct pmap {
|
||||
struct pmap_statistics pm_stats; /* pmap statistics */
|
||||
struct mtx pm_mtx; /* pmap mutex */
|
||||
tlbtid_t pm_tid[MAXCPU]; /* TID to identify this pmap entries in TLB */
|
||||
cpuset_t pm_active; /* active on cpus */
|
||||
struct pmap_statistics pm_stats; /* pmap statistics */
|
||||
|
||||
/* Page table directory, array of pointers to page tables. */
|
||||
pte_t *pm_pdir[PDIR_NENTRIES];
|
||||
@ -193,7 +194,6 @@ struct pmap {
|
||||
/* List of allocated ptbl bufs (ptbl kva regions). */
|
||||
TAILQ_HEAD(, ptbl_buf) pm_ptbl_list;
|
||||
};
|
||||
typedef struct pmap *pmap_t;
|
||||
|
||||
struct pv_entry {
|
||||
pmap_t pv_pmap;
|
||||
@ -210,6 +210,16 @@ struct md_page {
|
||||
#define pmap_page_get_memattr(m) VM_MEMATTR_DEFAULT
|
||||
#define pmap_page_is_mapped(m) (!TAILQ_EMPTY(&(m)->md.pv_list))
|
||||
|
||||
#else
|
||||
/*
|
||||
* Common pmap members between AIM and BOOKE.
|
||||
* libkvm needs pm_stats at the same location between both, as it doesn't define
|
||||
* AIM nor BOOKE, and is expected to work across all.
|
||||
*/
|
||||
struct pmap {
|
||||
struct pmap_statistics pm_stats; /* pmap statistics */
|
||||
struct mtx pm_mtx; /* pmap mutex */
|
||||
};
|
||||
#endif /* AIM */
|
||||
|
||||
extern struct pmap kernel_pmap_store;
|
||||
|
@ -28,10 +28,6 @@
|
||||
|
||||
#include <sys/param.h>
|
||||
|
||||
#define LIBMEMSTAT /* Cause vm_page.h not to include opt_vmpage.h */
|
||||
#include <vm/vm.h>
|
||||
#include <vm/vm_page.h>
|
||||
|
||||
#include <vm/uma.h>
|
||||
#include <vm/uma_int.h>
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user