diff options
| -rw-r--r-- | sys/amd64/amd64/genassym.c | 1 | ||||
| -rw-r--r-- | sys/arm/arm/genassym.c | 1 | ||||
| -rw-r--r-- | sys/conf/options | 3 | ||||
| -rw-r--r-- | sys/i386/i386/genassym.c | 1 | ||||
| -rw-r--r-- | sys/kern/subr_prf.c | 37 | ||||
| -rw-r--r-- | sys/powerpc/powerpc/genassym.c | 1 | ||||
| -rw-r--r-- | sys/sparc64/sparc64/genassym.c | 1 | ||||
| -rw-r--r-- | sys/sun4v/conf/GENERIC | 1 | ||||
| -rw-r--r-- | sys/sys/pcpu.h | 5 |
9 files changed, 27 insertions, 24 deletions
diff --git a/sys/amd64/amd64/genassym.c b/sys/amd64/amd64/genassym.c index 705e3fd1c230..e4fd1961ac19 100644 --- a/sys/amd64/amd64/genassym.c +++ b/sys/amd64/amd64/genassym.c @@ -185,7 +185,6 @@ ASSYM(PC_CURTHREAD, offsetof(struct pcpu, pc_curthread)); ASSYM(PC_FPCURTHREAD, offsetof(struct pcpu, pc_fpcurthread)); ASSYM(PC_IDLETHREAD, offsetof(struct pcpu, pc_idlethread)); ASSYM(PC_CURPCB, offsetof(struct pcpu, pc_curpcb)); -ASSYM(PC_CONS_BUFR, offsetof(struct pcpu, pc_cons_bufr)); ASSYM(PC_CPUID, offsetof(struct pcpu, pc_cpuid)); ASSYM(PC_SCRATCH_RSP, offsetof(struct pcpu, pc_scratch_rsp)); ASSYM(PC_CURPMAP, offsetof(struct pcpu, pc_curpmap)); diff --git a/sys/arm/arm/genassym.c b/sys/arm/arm/genassym.c index f61e1f718cab..b179e7475ed4 100644 --- a/sys/arm/arm/genassym.c +++ b/sys/arm/arm/genassym.c @@ -69,7 +69,6 @@ ASSYM(PCB_R12, offsetof(struct pcb, un_32.pcb32_r12)); ASSYM(PCB_PC, offsetof(struct pcb, un_32.pcb32_pc)); ASSYM(PCB_SP, offsetof(struct pcb, un_32.pcb32_sp)); -ASSYM(PC_CONS_BUFR, offsetof(struct pcpu, pc_cons_bufr)); ASSYM(PC_CURPCB, offsetof(struct pcpu, pc_curpcb)); ASSYM(PC_CURTHREAD, offsetof(struct pcpu, pc_curthread)); ASSYM(M_LEN, offsetof(struct mbuf, m_len)); diff --git a/sys/conf/options b/sys/conf/options index b2c28bed0338..8a2ffe6e3a9e 100644 --- a/sys/conf/options +++ b/sys/conf/options @@ -709,6 +709,9 @@ SC_PIXEL_MODE opt_syscons.h SC_RENDER_DEBUG opt_syscons.h SC_TWOBUTTON_MOUSE opt_syscons.h +# options for printf +PRINTF_BUFR_SIZE opt_printf.h + # kbd options KBD_DISABLE_KEYMAP_LOAD opt_kbd.h KBD_INSTALL_CDEV opt_kbd.h diff --git a/sys/i386/i386/genassym.c b/sys/i386/i386/genassym.c index 01fb5fad50b5..ca24402ae486 100644 --- a/sys/i386/i386/genassym.c +++ b/sys/i386/i386/genassym.c @@ -195,7 +195,6 @@ ASSYM(PC_COMMON_TSSD, offsetof(struct pcpu, pc_common_tssd)); ASSYM(PC_TSS_GDT, offsetof(struct pcpu, pc_tss_gdt)); ASSYM(PC_FSGS_GDT, offsetof(struct pcpu, pc_fsgs_gdt)); ASSYM(PC_CURRENTLDT, offsetof(struct pcpu, pc_currentldt)); -ASSYM(PC_CONS_BUFR, offsetof(struct pcpu, pc_cons_bufr)); ASSYM(PC_CPUID, offsetof(struct pcpu, pc_cpuid)); ASSYM(PC_CURPMAP, offsetof(struct pcpu, pc_curpmap)); ASSYM(PC_PRIVATE_TSS, offsetof(struct pcpu, pc_private_tss)); diff --git a/sys/kern/subr_prf.c b/sys/kern/subr_prf.c index c53bf9897d97..d7c87a9d3bba 100644 --- a/sys/kern/subr_prf.c +++ b/sys/kern/subr_prf.c @@ -38,6 +38,7 @@ __FBSDID("$FreeBSD$"); #include "opt_ddb.h" +#include "opt_printf.h" #include <sys/param.h> #include <sys/systm.h> @@ -291,18 +292,24 @@ printf(const char *fmt, ...) va_list ap; struct putchar_arg pca; int retval; - - critical_enter(); +#ifdef PRINTF_BUFR_SIZE + char bufr[PRINTF_BUFR_SIZE]; +#endif va_start(ap, fmt); pca.tty = NULL; pca.flags = TOCONS | TOLOG; pca.pri = -1; - pca.p_bufr = (char *) PCPU_PTR(cons_bufr); +#ifdef PRINTF_BUFR_SIZE + pca.p_bufr = bufr; pca.p_next = pca.p_bufr; - pca.n_bufr = PCPU_CONS_BUFR; - pca.remain = PCPU_CONS_BUFR; + pca.n_bufr = sizeof(bufr); + pca.remain = sizeof(bufr); *pca.p_next = '\0'; +#else + /* Don't buffer console output. */ + pca.p_bufr = NULL; +#endif retval = kvprintf(fmt, putchar, &pca, 10, ap); va_end(ap); @@ -314,8 +321,6 @@ printf(const char *fmt, ...) if (!panicstr) msgbuftrigger = 1; - critical_exit(); - return (retval); } @@ -324,17 +329,23 @@ vprintf(const char *fmt, va_list ap) { struct putchar_arg pca; int retval; - - critical_enter(); +#ifdef PRINTF_BUFR_SIZE + char bufr[PRINTF_BUFR_SIZE]; +#endif pca.tty = NULL; pca.flags = TOCONS | TOLOG; pca.pri = -1; - pca.p_bufr = (char *) PCPU_PTR(cons_bufr); +#ifdef PRINTF_BUFR_SIZE + pca.p_bufr = bufr; pca.p_next = pca.p_bufr; - pca.n_bufr = PCPU_CONS_BUFR; - pca.remain = PCPU_CONS_BUFR; + pca.n_bufr = sizeof(bufr); + pca.remain = sizeof(bufr); *pca.p_next = '\0'; +#else + /* Don't buffer console output. */ + pca.p_bufr = NULL; +#endif retval = kvprintf(fmt, putchar, &pca, 10, ap); @@ -345,8 +356,6 @@ vprintf(const char *fmt, va_list ap) if (!panicstr) msgbuftrigger = 1; - critical_exit(); - return (retval); } diff --git a/sys/powerpc/powerpc/genassym.c b/sys/powerpc/powerpc/genassym.c index 80deb8eef22a..63719cc12d20 100644 --- a/sys/powerpc/powerpc/genassym.c +++ b/sys/powerpc/powerpc/genassym.c @@ -55,7 +55,6 @@ #include <machine/pmap.h> #include <machine/sigframe.h> -ASSYM(PC_CONS_BUFR, offsetof(struct pcpu, pc_cons_bufr)); ASSYM(PC_CURTHREAD, offsetof(struct pcpu, pc_curthread)); ASSYM(PC_CURPCB, offsetof(struct pcpu, pc_curpcb)); ASSYM(PC_CURPMAP, offsetof(struct pcpu, pc_curpmap)); diff --git a/sys/sparc64/sparc64/genassym.c b/sys/sparc64/sparc64/genassym.c index 3bc1f86dba1f..a1de670b2f62 100644 --- a/sys/sparc64/sparc64/genassym.c +++ b/sys/sparc64/sparc64/genassym.c @@ -198,7 +198,6 @@ ASSYM(HASH_ENTRY_SHIFT, HASH_ENTRY_SHIFT); ASSYM(V_INTR, offsetof(struct vmmeter, v_intr)); -ASSYM(PC_CONS_BUFR, offsetof(struct pcpu, pc_cons_bufr)); ASSYM(PC_CURTHREAD, offsetof(struct pcpu, pc_curthread)); ASSYM(PC_CURPCB, offsetof(struct pcpu, pc_curpcb)); ASSYM(PC_CPUID, offsetof(struct pcpu, pc_cpuid)); diff --git a/sys/sun4v/conf/GENERIC b/sys/sun4v/conf/GENERIC index d0d32c624e22..69c28469b68b 100644 --- a/sys/sun4v/conf/GENERIC +++ b/sys/sun4v/conf/GENERIC @@ -59,6 +59,7 @@ options _KPOSIX_PRIORITY_SCHEDULING # POSIX P1003_1B real-time extensions options AHC_REG_PRETTY_PRINT # Print register bitfields in debug # output. Adds ~128k to driver. options ADAPTIVE_GIANT # Giant mutex is adaptive. +options PRINTF_BUFR_SIZE=128 # Prevent printf output being interspersed. # Debugging for use in -current options KDB # Enable kernel debugger support. diff --git a/sys/sys/pcpu.h b/sys/sys/pcpu.h index fa54bc4e2a53..00a3cac97c3e 100644 --- a/sys/sys/pcpu.h +++ b/sys/sys/pcpu.h @@ -48,9 +48,6 @@ struct pcb; struct thread; -/* Size of the per-cpu console buffer for printf(). */ -#define PCPU_CONS_BUFR 128 - /* * This structure maps out the global data that needs to be kept on a * per-cpu basis. The members are accessed via the PCPU_GET/SET/PTR @@ -74,8 +71,6 @@ struct pcpu { int pc_ktr_idx; /* Index into trace table */ char *pc_ktr_buf; #endif - char pc_cons_bufr[PCPU_CONS_BUFR]; - /* Console buffer */ PCPU_MD_FIELDS; struct vmmeter pc_cnt; /* VM stats counters */ struct device *pc_device; |
