PERFORCE change 29703 for review
Serguei Tzukanov
tzukanov at FreeBSD.org
Fri Apr 25 10:02:05 PDT 2003
http://perforce.freebsd.org/chv.cgi?CH=29703
Change 29703 by tzukanov at tzukanov_antares on 2003/04/25 10:01:21
Rewrite boot memory allocator to use linker sets.
Affected files ...
.. //depot/projects/s390/sys/conf/files.s390#4 edit
.. //depot/projects/s390/sys/dev/dasd/dasd.c#2 edit
.. //depot/projects/s390/sys/dev/mts/mts.c#2 edit
.. //depot/projects/s390/sys/s390/css/css.c#2 edit
.. //depot/projects/s390/sys/s390/css/css.h#2 edit
.. //depot/projects/s390/sys/s390/css/css_VM.c#2 edit
.. //depot/projects/s390/sys/s390/css/css_bio.c#2 edit
.. //depot/projects/s390/sys/s390/css/css_blinders.c#2 edit
.. //depot/projects/s390/sys/s390/css/css_bus.c#2 edit
.. //depot/projects/s390/sys/s390/css/css_chpath.c#2 edit
.. //depot/projects/s390/sys/s390/css/css_cio.c#2 edit
.. //depot/projects/s390/sys/s390/css/css_cold.c#2 edit
.. //depot/projects/s390/sys/s390/css/css_debug.c#2 edit
.. //depot/projects/s390/sys/s390/css/css_dynamic.c#2 edit
.. //depot/projects/s390/sys/s390/css/css_if.m#2 edit
.. //depot/projects/s390/sys/s390/css/css_interrupt.c#2 edit
.. //depot/projects/s390/sys/s390/css/css_mbuf.c#2 edit
.. //depot/projects/s390/sys/s390/css/css_memory.c#2 edit
.. //depot/projects/s390/sys/s390/css/css_monitor.c#2 edit
.. //depot/projects/s390/sys/s390/css/css_private.h#2 edit
.. //depot/projects/s390/sys/s390/css/css_request.c#2 edit
.. //depot/projects/s390/sys/s390/css/css_subch.c#2 edit
.. //depot/projects/s390/sys/s390/s390/clock.c#3 edit
.. //depot/projects/s390/sys/s390/s390/dat.h#3 edit
.. //depot/projects/s390/sys/s390/s390/esa.h#2 edit
.. //depot/projects/s390/sys/s390/s390/external.c#2 edit
.. //depot/projects/s390/sys/s390/s390/hmcsc.c#7 edit
.. //depot/projects/s390/sys/s390/s390/identcpu.c#4 edit
.. //depot/projects/s390/sys/s390/s390/machdep.c#7 edit
.. //depot/projects/s390/sys/s390/s390/mcheck.c#2 edit
.. //depot/projects/s390/sys/s390/s390/mcheck.h#2 edit
.. //depot/projects/s390/sys/s390/s390/mem.c#5 edit
.. //depot/projects/s390/sys/s390/s390/pmap.c#11 edit
Differences ...
==== //depot/projects/s390/sys/conf/files.s390#4 (text+ko) ====
@@ -45,8 +45,10 @@
libkern/udivdi3.c standard
libkern/umoddi3.c standard
+#s390/css/css.c standard
+#s390/css/css_VM.c standard
#s390/css/css_bio.c standard
-#s390/css/css_blinders.c standard
+#s390/css/css_blinders.c standard
#s390/css/css_bus.c standard
#s390/css/css_chpath.c standard
#s390/css/css_cio.c standard
@@ -59,8 +61,6 @@
#s390/css/css_monitor.c standard
#s390/css/css_request.c standard
#s390/css/css_subch.c standard
-#s390/css/css_VM.c standard
-#s390/css/css.c standard
s390/s390/autoconf.c standard
s390/s390/clock.c standard
==== //depot/projects/s390/sys/dev/dasd/dasd.c#2 (text+ko) ====
@@ -24,7 +24,10 @@
MTX_SYSINIT(classes_mutex, &classes_mutex, "classes mutex", MTX_DEF);
static __inline struct dasd *
-dasd_softc(dev_t dev) { return (struct dasd *)dev->si_drv1; }
+dasd_softc(dev_t dev)
+{
+ return (struct dasd *)dev->si_drv1;
+}
static int
dasd_release(struct dasd *dasd)
==== //depot/projects/s390/sys/dev/mts/mts.c#2 (text+ko) ====
@@ -242,7 +242,7 @@
struct css_ccw cp[1];
css_define_request(&req, cp, 1, ip, 0xff, mts_callback,
- CSS_REQ_SYNC|CSS_DER_DEFAULT);
+ CSS_REQ_SYNC | CSS_DER_DEFAULT);
css_define_request_ccw(cp, NULL, cmd, 0, 0, 0);
return css_start_request(&req);
}
==== //depot/projects/s390/sys/s390/css/css.c#2 (text+ko) ====
@@ -12,10 +12,13 @@
#include <sys/param.h>
#include <sys/systm.h>
#include <sys/proc.h>
-#include <css/css.h>
-#include <css/css_private.h>
+#include <s390/css/css.h>
+#include <s390/css/css_private.h>
+/* This variable reflects stage of startup */
int css_cold = 1;
+
+/* Number of kicked subchannels */
volatile int css_init_counter;
static __inline void
@@ -47,9 +50,9 @@
struct css_subchannel *subch;
int subchno, devno, error;
- css_cold_init();
- css_mcheck_init();
- css_subch_init();
+ css_init_cold();
+ css_init_dynamic();
+ css_init_subchannels();
for (subchno = 0; subchno < SUBCHNO_MAX; subchno++) {
error = css_probe_subchannel(subchno, &devno);
@@ -91,7 +94,7 @@
* Print (possible deprecated/incomplete) info about attached subchannels.
*/
void
-css_startup_print_subchannels(void)
+css_init_info(void)
{
struct css_subchannel *subch;
==== //depot/projects/s390/sys/s390/css/css.h#2 (text+ko) ====
@@ -197,21 +197,34 @@
uint8_t sense[32]; /* Extended-Control Word actually */
};
+/* Sense-ID Information Block. */
+struct css_sense_id {
+ uint8_t xFF;
+ uint16_t cu_type;
+ uint8_t cu_model;
+ uint16_t dev_type;
+ uint8_t dev_model;
+ uint8_t reserved;
+ struct css_ciw ciw[3]; /* (256 - 8) / 4 = 62 */
+} __attribute__ ((packed));
+
/*----------------------------------------------------------------------------*
- * Exported implementtion specific data structures *
+ * Exported implementation specific data structures *
*----------------------------------------------------------------------------*/
+struct bio;
+
/* Drivers don't need to know internals of subchannel structure. */
struct css_subchannel;
struct css_request;
-/* "Probe" analogue in the css_cold = 1 time. */
+/* "Probe" analogue during css_cold = 1 time. */
struct css_cold_find_info {
- uint8_t mask; /* Validity mask for other fields. */
+ uint16_t mask; /* Validity mask for other fields. */
+ uint8_t cu_model;
+ uint8_t dev_model;
uint16_t cu_type;
- uint8_t cu_model;
uint16_t dev_type;
- uint8_t dev_model;
uint16_t dev_number;
};
@@ -323,20 +336,28 @@
}
static __inline u_int css_sense_id_cut_dt(struct css_sense_id *sense_id)
-{ return ((u_int)sense_id->cu_type << 16) | (u_int)sense_id->dev_type; }
+{
+ return ((u_int)sense_id->cu_type << 16) | (u_int)sense_id->dev_type;
+}
static __inline u_int css_sense_id_cut_cum(struct css_sense_id *sense_id)
-{ return ((u_int)sense_id->cu_type << 8) | (u_int)sense_id->cu_model; }
+{
+ return ((u_int)sense_id->cu_type << 8) | (u_int)sense_id->cu_model;
+}
static __inline u_int css_sense_id_dt_dm(struct css_sense_id *sense_id)
-{ return ((u_int)sense_id->dev_type << 8) | (u_int)sense_id->dev_model; }
+{
+ return ((u_int)sense_id->dev_type << 8) | (u_int)sense_id->dev_model;
+}
/*----------------------------------------------------------------------------*
* Bus related inlines *
*----------------------------------------------------------------------------*/
static __inline struct css_subchannel *css_dev2subch(device_t dev)
-{ return (struct css_subchannel *)device_get_ivars(dev); }
+{
+ return (struct css_subchannel *)device_get_ivars(dev);
+}
#define CSS_IVAR_SUBCHNO 0
#define CSS_IVAR_DEVNO 1
==== //depot/projects/s390/sys/s390/css/css_VM.c#2 (text+ko) ====
@@ -11,8 +11,8 @@
#include <sys/param.h>
#include <sys/systm.h>
-#include <css/css.h>
-#include <css/css_private.h>
+#include <s390/css/css.h>
+#include <s390/css/css_private.h>
/*
* Use DIAGNOSE 210 call to build fake Sense-ID data to
==== //depot/projects/s390/sys/s390/css/css_bio.c#2 (text+ko) ====
@@ -12,8 +12,8 @@
#include <sys/param.h>
#include <sys/systm.h>
#include <sys/proc.h>
-#include <css/css.h>
-#include <css/css_private.h>
+#include <s390/css/css.h>
+#include <s390/css/css_private.h>
/*
* It's assumed that sva is mapped above 2 GB.
@@ -57,6 +57,7 @@
#else
(atop(lra(sva)) != pi))
return trunc_page(sva);
+#endif
}
return eva;
==== //depot/projects/s390/sys/s390/css/css_blinders.c#2 (text+ko) ====
@@ -20,8 +20,8 @@
#include <sys/param.h>
#include <sys/systm.h>
-#include <css/css.h>
-#include <css/css_private.h>
+#include <s390/css/css.h>
+#include <s390/css/css_private.h>
#define BLINDERS_MAX ((DEVNO_MAX + NBLO - 1) / NBLO)
@@ -154,7 +154,7 @@
if ((l < 0) || (r >= DEVNO_MAX) || (l > r))
return EINVAL;
may_be_spaces(&s);
- if ((*s != ',') && (*s != '\0))
+ if ((*s != ',') && (*s != '\0'))
return EINVAL;
if (action) {
if (add) {
==== //depot/projects/s390/sys/s390/css/css_bus.c#2 (text+ko) ====
@@ -17,8 +17,8 @@
#include <sys/bus.h>
#include <machine/bus.h>
#include <sys/rman.h>
-#include <css/css.h>
-#include <css/css_private.h>
+#include <s390/css/css.h>
+#include <s390/css/css_private.h>
device_t css_bus;
==== //depot/projects/s390/sys/s390/css/css_chpath.c#2 (text+ko) ====
@@ -11,9 +11,10 @@
#include <sys/param.h>
#include <sys/systm.h>
-#include <css/css.h>
-#include <css/css_private.h>
+#include <s390/css/css.h>
+#include <s390/css/css_private.h>
+#if notyet
int
css_generate_pgid(struct css_pgid *pgid)
{
@@ -30,3 +31,4 @@
css_completion_t completion)
{
}
+#endif
==== //depot/projects/s390/sys/s390/css/css_cio.c#2 (text+ko) ====
@@ -11,8 +11,8 @@
#include <sys/param.h>
#include <sys/systm.h>
-#include <css/css.h>
-#include <css/css_private.h>
+#include <s390/css/css.h>
+#include <s390/css/css_private.h>
static void
css_sense_callback(struct css_request *sense_req)
@@ -95,7 +95,7 @@
css_unlock_subchannel(subch);
if (sense_id == NULL) {
sense_id = css_any_malloc(sizeof(*sense_id),
- M_CSS, M_WAITOK|M_ZERO);
+ M_CSS, M_WAITOK | M_ZERO);
css_lock_subchannel(subch);
subch->sense_id = sense_id;
css_unlock_subchannel(subch);
==== //depot/projects/s390/sys/s390/css/css_cold.c#2 (text+ko) ====
@@ -17,8 +17,8 @@
#include <sys/param.h>
#include <sys/systm.h>
-#include <css/css.h>
-#include <css/css_private.h>
+#include <s390/css/css.h>
+#include <s390/css/css_private.h>
static __inline int
css_cfi_compare(struct css_subchannel *subch,
==== //depot/projects/s390/sys/s390/css/css_debug.c#2 (text+ko) ====
@@ -11,8 +11,8 @@
#include <sys/param.h>
#include <sys/systm.h>
-#include <css/css.h>
-#include <css/css_private.h>
+#include <s390/css/css.h>
+#include <s390/css/css_private.h>
static char *
bitstring(int n, void *p, char *s)
==== //depot/projects/s390/sys/s390/css/css_dynamic.c#2 (text+ko) ====
@@ -11,9 +11,9 @@
#include <sys/param.h>
#include <sys/systm.h>
-#include <esa/mcheck.h>
-#include <css/css.h>
-#include <css/css_private.h>
+#include <s390/s390/mcheck.h>
+#include <s390/css/css.h>
+#include <s390/css/css_private.h>
/*
* Reconfiguration is relatively rare operation, so I decided to use
@@ -259,7 +259,7 @@
* This is called from css_startup().
*/
void
-css_reconf_init(void)
+css_init_dynamic(void)
{
/*
* By registering before scan for available
==== //depot/projects/s390/sys/s390/css/css_if.m#2 (text+ko) ====
==== //depot/projects/s390/sys/s390/css/css_interrupt.c#2 (text+ko) ====
@@ -12,16 +12,16 @@
/*
* Subchannel's ithread run with I/O interruptions disabled on local CPU.
* That way we can efficiently use TPI to reduce number of context switches
- * in case of heavy I/O and still can be preempted.
+ * in case of heavy I/O and still be preempted by timer.
*/
#include <sys/param.h>
#include <sys/systm.h>
#include <sys/interrupt.h>
#include <sys/proc.h>
-#include <esa/esa.h>
-#include <css/css.h>
-#include <css/css_private.h>
+#include <s390/s390/esa.h>
+#include <s390/css/css.h>
+#include <s390/css/css_private.h>
static void
css_interruption_handler(void *arg)
@@ -49,6 +49,8 @@
KASSERT(subch->flags & SUBCH_VALID,
("css_callback: subch not enabled"));
+
+ for (;;) {
valid_sc = scsw_valid_sc[irb.scsw.mask & SCSW_SC];
if (css_monitor & CSS_MONITOR_DCTM)
@@ -63,6 +65,7 @@
case SCSW_SC_AS|SCSW_SC_PS|SCSW_SC_IS:
case SCSW_SC_AS|SCSW_SC_SS:
+ /* */
if ((irb.scsw.mask & SCSW_SC_SP) == 0) {
}
@@ -78,7 +81,7 @@
if (do_callback) {
if (alert_status) {
- if (!csense
+ if (!csense)
}
}
@@ -89,10 +92,11 @@
cc = tpi(0);
if ()
continue;
+
}
void
-css_interruption(void)
+io_intr(void)
{
struct css_subchannel *subch;
struct css_ioic *ioic;
==== //depot/projects/s390/sys/s390/css/css_mbuf.c#2 (text+ko) ====
@@ -12,8 +12,8 @@
#include <sys/param.h>
#include <sys/systm.h>
#include <sys/proc.h>
-#include <css/css.h>
-#include <css/css_private.h>
+#include <s390/css/css.h>
+#include <s390/css/css_private.h>
int
css_mbuf2cp(struct mbuf *);
==== //depot/projects/s390/sys/s390/css/css_memory.c#2 (text+ko) ====
@@ -16,8 +16,8 @@
#include <sys/param.h>
#include <sys/systm.h>
#include <sys/proc.h>
-#include <css/css.h>
-#include <css/css_private.h>
+#include <s390/css/css.h>
+#include <s390/css/css_private.h>
MALLOC_DEFINE(M_CSS, "css", "Memory used for channel subsystem layer");
==== //depot/projects/s390/sys/s390/css/css_monitor.c#2 (text+ko) ====
@@ -11,8 +11,8 @@
#include <sys/param.h>
#include <sys/systm.h>
-#include <css/css.h>
-#include <css/css_private.h>
+#include <s390/css/css.h>
+#include <s390/css/css_private.h>
#define CSS_MONITOR_MB
#define CSS_MONITOR_DCTM
@@ -23,7 +23,6 @@
void
css_monitor_startup()
{
- css_malloc_contig();
}
==== //depot/projects/s390/sys/s390/css/css_private.h#2 (text+ko) ====
@@ -119,17 +119,6 @@
uint16_t count;
};
-/* Sense-ID Information Block. */
-struct css_sense_id {
- uint8_t xFF;
- uint16_t cu_type;
- uint8_t cu_model;
- uint16_t dev_type;
- uint8_t dev_model;
- uint8_t reserved;
- struct css_ciw ciw[3]; /* (256 - 8) / 4 = 62 */
-} __attribute__ ((packed));
-
/* Horrible name. */
struct css_vrdc {
uint16_t vrdc_dvno; /* Virtual device number */
@@ -465,10 +454,14 @@
*----------------------------------------------------------------------------*/
static __inline void css_lock_subch_dir(void)
-{ mtx_lock_spin(&subch_dir_lock); }
+{
+ mtx_lock_spin(&subch_dir_lock);
+}
static __inline void css_unlock_subch_dir(void)
-{ mtx_unlock_spin(&subch_dir_lock); }
+{
+ mtx_unlock_spin(&subch_dir_lock);
+}
/*
* Get a pointer to wanted subchannel if it
@@ -507,9 +500,13 @@
}
static __inline void css_set_bit(u_long *bitmap, int n)
-{ atomic_set_long(&bitmap[n >> L2NBLO], 1 << (n & (NBLO-1))); }
+{
+ atomic_set_long(&bitmap[n >> L2NBLO], 1 << (n & (NBLO-1)));
+}
static __inline void css_clear_bit(u_long *bitmap, int n)
-{ atomic_clear_long(&bitmap[n >> L2NBLO], 1 << (n & (NBLO-1))); }
+{
+ atomic_clear_long(&bitmap[n >> L2NBLO], 1 << (n & (NBLO-1)));
+}
#endif /* !_CSS_CSS_PRIVATE_H_ */
==== //depot/projects/s390/sys/s390/css/css_request.c#2 (text+ko) ====
@@ -11,8 +11,8 @@
#include <sys/param.h>
#include <sys/systm.h>
-#include <css/css.h>
-#include <css/css_private.h>
+#include <s390/css/css.h>
+#include <s390/css/css_private.h>
static MALLOC_DEFINE(M_CSSREQ);
@@ -78,7 +78,7 @@
if (req->flags & CSS_REQ_INITIAL)
orb->mask1 |= ORB_I;
orb->lpm = (req->lpm == 0) ? subch->pathmask : req->lpm;
- orb->mask2 = ORB_L|ORB_X;
+ orb->mask2 = ORB_L | ORB_X;
orb->cpa = lra(req->cp);
}
@@ -290,9 +290,13 @@
}
if (error && (subch->toh == NULL) && !css_cold)
- subch->toh = timeout(css_request_timeout, req, timeout);
+ req->toh = timeout(css_restart_request_timeout, req, req->restart_to);
+ if (req->flags & CSS_REQ_SYNC)
+ css_sleep();
css_unlock_subchannel(subch);
+
+ return error;
}
int
@@ -302,6 +306,14 @@
}
void
+css_restart_request_timeout(void *arg)
+{
+ css_lock_subchannel(subch);
+
+ css_unlock_subchannel(subch);
+}
+
+void
css_request_timeout(void *arg)
{
struct css_request *req = (struct css_request *)arg;
==== //depot/projects/s390/sys/s390/css/css_subch.c#2 (text+ko) ====
@@ -11,8 +11,8 @@
#include <sys/param.h>
#include <sys/systm.h>
-#include <css/css.h>
-#include <css/css_private.h>
+#include <s390/css/css.h>
+#include <s390/css/css_private.h>
#define NSCPP (PAGE_SIZE/sizeof(void *))
#define NSCPP_SHIFT (PAGE_SHIFT - L2NBLO)
@@ -30,10 +30,14 @@
CTASSERT(sizeof(struct css_subchannel_page) == PAGE_SIZE);
static __inline void css_lock_free_subchannels(void)
-{ mtx_lock(&free_subchannels_mutex); }
+{
+ mtx_lock(&free_subchannels_mutex);
+}
static __inline void css_unlock_free_subchannels(void)
-{ mtx_unlock(&free_subchannels_mutex); }
+{
+ mtx_unlock(&free_subchannels_mutex);
+}
/*
* Allocate memory for subchannel, initialize fields and insert into
@@ -332,7 +336,7 @@
}
void
-css_subch_init(void)
+css_init_subchannels(void)
{
mtx_init(&free_subchannels_mutex, "free subchannels", NULL, MTX_DEF);
mtx_init(&subch_dir_lock, "subch dir lock", NULL, MTX_SPIN);
==== //depot/projects/s390/sys/s390/s390/clock.c#3 (text+ko) ====
@@ -86,9 +86,9 @@
clock_comparator_set(tod_clock_get() + cc_delta);
#ifdef SMP
- if (PCPU_GET(cpuid) == 0)
+ if (PCPU_GET(cpuid) == 0) {
hardclock(cf);
- else {
+ } else {
mtx_lock_spin(&sched_lock);
hardclock_process(curthread, CLKF_USERMODE(cf));
statclock_process(curthread->td_kse, CLKF_PC(cf),
==== //depot/projects/s390/sys/s390/s390/dat.h#3 (text+ko) ====
@@ -15,8 +15,8 @@
/* Include machine-dependent DAT definitions. */
#include <machine/dat.h>
-#define SACF_ACCESS_REGISTER 0x00000200
-#define SACF_PRIMARY_SPACE 0x00000000
+#define SACF_ACCESS_REGISTER 0x00000200
+#define SACF_PRIMARY_SPACE 0x00000000
#define CR0_SECONDARY_SPACE 0x04000000ul
#define CR0_ADDRESS_SPACE_FUNCTION 0x00010000ul
==== //depot/projects/s390/sys/s390/s390/esa.h#2 (text+ko) ====
@@ -14,24 +14,35 @@
#define KERNELDUMP_ESA_VERSION 1
-struct sccb;
+struct trapframe;
void esa_init(void);
void esa_check_features(void);
void esa_cpu_model(void);
-void pmap_bootstrap(void);
-void io_intr_entry(void);
-void css_interruption(void);
+void dat_init(void);
+void io_intr(struct trapframe *tf);
+void css_init(void);
+void css_init_info(void);
-#define css_startup()
-#define css_startup_print()
+void io_intr_entry(struct trapframe *tf);
extern uint8_t esa_sm_per;
extern int esa_features;
-extern struct sccb *sccb; /* bogus name */
-extern caddr_t devmempage;
extern vm_offset_t kstack0;
+struct dat_init_map {
+ vm_offset_t *vap;
+ int n;
+};
+
+#define DAT_INIT_MAP(uniq, va, n) \
+ static struct dat_init_map uniq ## _dat_init = { \
+ (vm_offset_t *)&(va), \
+ (n) \
+ }; \
+ DATA_SET(dat_init_set, uniq ## _dat_init)
+
+
/* System masks for intr_restore() and friends. */
#define SM_R 0x40 /* PER Mask */
#define SM_T 0x04 /* DAT Mode */
==== //depot/projects/s390/sys/s390/s390/external.c#2 (text+ko) ====
@@ -32,17 +32,17 @@
char * name; /* pretty name for KTR */
external_handler_t handler;
} external[] = {
- {EI_CLOCK_COMPARATOR, "Clock-Comparator"},
- {EI_EXTERNAL_CALL, "External-Call"},
- {EI_VM_DIAGNOSE, "VM Diagnose"},
- {EI_SERVICE_SIGNAL, "Service-Signal"},
- {EI_IUCV, "IUCV"},
- {EI_MALFUNCTION_ALERT, "Malfunction-Alert"},
- {EI_CPU_TIMER, "CPU-Timer"},
- {EI_INTERRUPT_KEY, "Interrupt-Key"},
- {EI_TOD_CLOCK_SYNC_CHECK, "TOD-Clock-Sync-Check"},
- {EI_EMERGENCY_SIGNAL, "Emergency-Signal"},
- {EI_ETR, "ETR"},
+ {EI_CLOCK_COMPARATOR, "Clock-Comparator"},
+ {EI_EXTERNAL_CALL, "External-Call"},
+ {EI_VM_DIAGNOSE, "VM Diagnose"},
+ {EI_SERVICE_SIGNAL, "Service-Signal"},
+ {EI_IUCV, "IUCV"},
+ {EI_MALFUNCTION_ALERT, "Malfunction-Alert"},
+ {EI_CPU_TIMER, "CPU-Timer"},
+ {EI_INTERRUPT_KEY, "Interrupt-Key"},
+ {EI_TOD_CLOCK_SYNC_CHECK, "TOD-Clock-Sync-Check"},
+ {EI_EMERGENCY_SIGNAL, "Emergency-Signal"},
+ {EI_ETR, "ETR"},
};
#define EXTERNAL_NUM (sizeof(external) / sizeof(external[0]))
==== //depot/projects/s390/sys/s390/s390/hmcsc.c#7 (text+ko) ====
@@ -57,7 +57,9 @@
/* This is overkill on UP. */
struct mtx hmcsc_lock;
-struct sccb *sccb;
+static struct sccb *sccb;
+DAT_INIT_MAP(sccb, sccb, 1);
+
static struct sccb_edh *edh;
static struct sccb_edb *edb;
static struct sccb_mcdb *mcdb;
==== //depot/projects/s390/sys/s390/s390/identcpu.c#4 (text+ko) ====
@@ -176,7 +176,7 @@
if (idp.vc == 0xff);
esa_features |= ESA_FEATURE_VM_FLAG;
- /* kstack0 is not used at this time. */
+ /* kstack0 is not used at this time so let's abuse it. */
sysib = (struct stsi_sysib111 *)kstack0;
cc = stsi(0x10000001, 0x00000001, sysib);
switch (cc) {
==== //depot/projects/s390/sys/s390/s390/machdep.c#7 (text+ko) ====
@@ -106,6 +106,12 @@
int cold = 1;
+struct msgbuf *msgbufp;
+
+DAT_INIT_MAP(kstack0, kstack0, KSTACK_PAGES + 1);
+DAT_INIT_MAP(msgbufp, msgbufp, atop(round_page(MSGBUF_SIZE)));
+DAT_INIT_MAP(pcpu, sysarea.pcpu, 1);
+
void
io_intr(struct trapframe *tf)
{
@@ -166,16 +172,16 @@
sysarea.sp_align_mask = ~7ul;
psw_define(&sysarea.svc_new_psw,
- PSW_0|PSW_T|PSW_M|PSW_KEY, (u_long)svc_intr_entry);
+ PSW_0 | PSW_T | PSW_M | PSW_KEY, (u_long)svc_intr_entry);
psw_define(&sysarea.program_new_psw,
- PSW_0|PSW_T|PSW_M|PSW_KEY, (u_long)program_intr_entry);
+ PSW_0 | PSW_T | PSW_M | PSW_KEY, (u_long)program_intr_entry);
psw_define(&sysarea.external_new_psw,
- PSW_0|PSW_T|PSW_M|PSW_KEY, (u_long)external_intr_entry);
+ PSW_0 | PSW_T | PSW_M | PSW_KEY, (u_long)external_intr_entry);
psw_define(&sysarea.io_new_psw,
- PSW_0|PSW_T|PSW_M|PSW_KEY, (u_long)io_intr_entry);
+ PSW_0 | PSW_T | PSW_M | PSW_KEY, (u_long)io_intr_entry);
mcheck_init();
- intr_restore(SM_T|SM_EX|esa_sm_per);
+ intr_restore(SM_T | SM_EX | esa_sm_per);
}
void
@@ -191,7 +197,10 @@
mp_early_probe();
/* Enable DAT. */
- pmap_bootstrap();
+ dat_init();
+#ifndef __s390x__
+ sysarea.pcpu += EXTENDED_SAVE_AREA_SIZE;
+#endif
init_param1();
init_param2(physmem);
@@ -221,13 +230,17 @@
msgbufinit(msgbufp, MSGBUF_SIZE);
/* Probe available subchannels and fire up CSS layer. */
- css_startup();
+#if 0
+ css_init();
+#endif
/* Now we can init console, even a channel attached one. */
cninit();
/* Print info about found subchannels/devices. */
- css_startup_print();
+#if 0
+ css_init_info();
+#endif
esa_cpu_model();
}
==== //depot/projects/s390/sys/s390/s390/mcheck.c#2 (text+ko) ====
@@ -255,7 +255,7 @@
mcheck_init(void)
{
psw_define(&sysarea.mcheck_new_psw,
- PSW_0|PSW_T|PSW_KEY, (u_long)mcheck_intr_entry);
+ PSW_0 | PSW_T | PSW_KEY, (u_long)mcheck_intr_entry);
mcheck_cpu_init();
mtx_init(&mciq_lock, "mciq_lock", NULL, MTX_SPIN|MTX_RECURSE);
}
==== //depot/projects/s390/sys/s390/s390/mcheck.h#2 (text+ko) ====
@@ -62,11 +62,8 @@
#define CR14_EXTERNAL_DAMAGE 0x02000000ul
#define CR14_WARNING 0x01000000ul
-#ifdef __s390x__
-#define EXTENDED_SAVE_AREA_SIZE 0
-#else
+#ifndef __s390x__
#define EXTENDED_SAVE_AREA_SIZE 144
-
#define CR14_EXTENDED_SAVE_AREA 0x20000000ul
#endif
==== //depot/projects/s390/sys/s390/s390/mem.c#5 (text+ko) ====
@@ -62,8 +62,11 @@
#include <vm/pmap.h>
#include <vm/vm_extern.h>
#include <machine/vmparam.h>
+#include <s390/s390/esa.h>
+
+static caddr_t devmempage;
-caddr_t devmempage;
+DAT_INIT_MAP(devmempage, devmempage, 1);
static int
mmclose(dev_t dev, int flags, int fmt, struct thread *td)
==== //depot/projects/s390/sys/s390/s390/pmap.c#11 (text+ko) ====
@@ -109,8 +109,6 @@
static unsigned nkptp;
vm_offset_t kernel_vm_end;
-struct msgbuf *msgbufp;
-
/* Data for the pv entry allocation mechanism. */
static uma_zone_t pvzone;
static struct vm_object pvzone_obj;
@@ -133,6 +131,15 @@
static vm_offset_t pmap_ptepa(pmap_t pmap, vm_offset_t va);
+SET_DECLARE(dat_init_set, struct dat_init_map);
+
+DAT_INIT_MAP(proc0sto, proc0sto, NKPTP0 + 1);
+DAT_INIT_MAP(csrc_va, csrc_va, 1);
+DAT_INIT_MAP(cdst_va, cdst_va, 1);
+DAT_INIT_MAP(z_va, z_va, 1);
+DAT_INIT_MAP(zi_va, zi_va, 1);
+DAT_INIT_MAP(crashdumpmap, crashdumpmap, MAXDUMPPGS);
+
static void
ipte(vm_offset_t ptepa)
{
@@ -153,33 +160,9 @@
}
}
-#define BOOTSTRAP_MAP_ENTRY(va,n) {(vm_offset_t *)&(va), (n)}
-#define BOOTSTRAP_MAP_TABLE_SIZE (sizeof(bsme)/sizeof(bsme[0]))
-
-static struct bootstrap_map_entry {
- vm_offset_t *ptr;
- int size;
-} bsme[] = {
- BOOTSTRAP_MAP_ENTRY(proc0sto, NKPTP0 + 1),
- BOOTSTRAP_MAP_ENTRY(csrc_va, 1),
- BOOTSTRAP_MAP_ENTRY(cdst_va, 1),
- BOOTSTRAP_MAP_ENTRY(z_va, 1),
- BOOTSTRAP_MAP_ENTRY(zi_va, 1),
- BOOTSTRAP_MAP_ENTRY(kstack0, KSTACK_PAGES + 1),
- BOOTSTRAP_MAP_ENTRY(devmempage, 1),
- BOOTSTRAP_MAP_ENTRY(msgbufp, atop(round_page(MSGBUF_SIZE))),
-#ifdef DEV_HMCSC
- BOOTSTRAP_MAP_ENTRY(sccb, 1),
-#endif
- BOOTSTRAP_MAP_ENTRY(crashdumpmap, MAXDUMPPGS),
-/* BOOTSTRAP_MAP_ENTRY(sysarea.pcpu, 1),*/
-#ifdef DDB
- BOOTSTRAP_MAP_ENTRY(ddbstack, DDBSTACK_PAGES),
-#endif
-};
static vm_offset_t
-pmap_bootstrap_map(int n)
+dat_init_map(int n)
{
vm_offset_t pa = avail_start;
@@ -194,8 +177,9 @@
}
void
-pmap_bootstrap(void)
+dat_init(void)
{
+ struct dat_init_map **dimp;
vm_offset_t va;
ste_t *ste;
pte_t *pte;
@@ -216,9 +200,11 @@
virtual_avail = avail_start = (vm_offset_t)_end;
virtual_end = VM_MAX_KERNEL_ADDRESS;
- for (i = 0; i < BOOTSTRAP_MAP_TABLE_SIZE; i++)
- *bsme[i].ptr = pmap_bootstrap_map(bsme[i].size);
+ SET_FOREACH(dimp, dat_init_set) {
+ *(*dimp)->vap = dat_init_map((*dimp)->n);
+ }
+#if 0
sysarea.pcpu = (struct pcpu *)
(pmap_bootstrap_map(1) + EXTENDED_SAVE_AREA_SIZE);
#ifdef SMP
@@ -229,38 +215,6 @@
mp_sysarea = pmap_bootstrap_map((mp_ncpus - 1) * SYSAREA_PAGES);
mp_pcpu = pmap_bootstrap_map(mp_ncpus - 1);
#endif
-
-#if 0
- proc0sto = (ste_t *)pmap_bootstrap_map(NKPTP0 + 1);
-
- /* Reserve some special page table entries. */
- csrc_va = (caddr_t)pmap_bootstrap_map(1);
- cdst_va = (caddr_t)pmap_bootstrap_map(1);
- z_va = (caddr_t)pmap_bootstrap_map(1);
- zi_va = (caddr_t)pmap_bootstrap_map(1);
-
- /* Allocate kstack for thread0. */
- kstack0 = pmap_bootstrap_map(KSTACK_PAGES + 1);
-
- /* For /dev/mem. */
- devmempage = (caddr_t)pmap_bootstrap_map(1);
-
- /* Map the message buffer. */
- msgbufp = (struct msgbuf *)
>>> TRUNCATED FOR MAIL (1000 lines) <<<
More information about the p4-projects
mailing list