PERFORCE change 154645 for review
Marko Zec
zec at FreeBSD.org
Sun Dec 14 07:03:48 PST 2008
http://perforce.freebsd.org/chv.cgi?CH=154645
Change 154645 by zec at zec_tca51 on 2008/12/14 15:03:28
IFC @ 154644
Affected files ...
.. //depot/projects/vimage/src/sys/amd64/amd64/exception.S#7 integrate
.. //depot/projects/vimage/src/sys/amd64/amd64/genassym.c#11 integrate
.. //depot/projects/vimage/src/sys/amd64/amd64/identcpu.c#13 integrate
.. //depot/projects/vimage/src/sys/amd64/amd64/local_apic.c#14 integrate
.. //depot/projects/vimage/src/sys/amd64/include/apicreg.h#2 integrate
.. //depot/projects/vimage/src/sys/amd64/include/apicvar.h#5 integrate
.. //depot/projects/vimage/src/sys/amd64/include/specialreg.h#12 integrate
.. //depot/projects/vimage/src/sys/boot/Makefile#7 integrate
.. //depot/projects/vimage/src/sys/boot/zfs/zfs.c#4 integrate
.. //depot/projects/vimage/src/sys/compat/linprocfs/linprocfs.c#31 integrate
.. //depot/projects/vimage/src/sys/conf/options#40 integrate
.. //depot/projects/vimage/src/sys/contrib/pf/net/pf_if.c#15 integrate
.. //depot/projects/vimage/src/sys/contrib/pf/net/pf_subr.c#15 integrate
.. //depot/projects/vimage/src/sys/dev/acpica/acpi_smbat.c#2 integrate
.. //depot/projects/vimage/src/sys/dev/ath/ath_hal/ah.c#2 integrate
.. //depot/projects/vimage/src/sys/dev/ath/ath_hal/ah_eeprom_v14.c#3 integrate
.. //depot/projects/vimage/src/sys/dev/ath/ath_hal/ah_eeprom_v3.c#2 integrate
.. //depot/projects/vimage/src/sys/dev/ath/ath_hal/ah_internal.h#2 integrate
.. //depot/projects/vimage/src/sys/dev/ath/ath_hal/ar5212/ar5111.c#2 integrate
.. //depot/projects/vimage/src/sys/dev/ath/ath_hal/ar5312/ar5312.h#2 integrate
.. //depot/projects/vimage/src/sys/dev/ath/ath_hal/ar5312/ar5312_attach.c#2 integrate
.. //depot/projects/vimage/src/sys/dev/hwpmc/hwpmc_mod.c#13 integrate
.. //depot/projects/vimage/src/sys/dev/mfi/mfi_pci.c#9 integrate
.. //depot/projects/vimage/src/sys/dev/snp/snp.c#10 integrate
.. //depot/projects/vimage/src/sys/dev/usb/usbdevs#37 integrate
.. //depot/projects/vimage/src/sys/dev/usb2/bluetooth/ng_ubt2.c#3 integrate
.. //depot/projects/vimage/src/sys/dev/usb2/bluetooth/ubtbcmfw2.c#2 integrate
.. //depot/projects/vimage/src/sys/dev/usb2/controller/at91dci.c#3 integrate
.. //depot/projects/vimage/src/sys/dev/usb2/controller/at91dci_atmelarm.c#3 integrate
.. //depot/projects/vimage/src/sys/dev/usb2/controller/ehci2.c#4 integrate
.. //depot/projects/vimage/src/sys/dev/usb2/controller/ehci2_pci.c#3 integrate
.. //depot/projects/vimage/src/sys/dev/usb2/controller/musb2_otg.c#3 integrate
.. //depot/projects/vimage/src/sys/dev/usb2/controller/musb2_otg_atmelarm.c#3 integrate
.. //depot/projects/vimage/src/sys/dev/usb2/controller/ohci2.c#3 integrate
.. //depot/projects/vimage/src/sys/dev/usb2/controller/uhci2.c#3 integrate
.. //depot/projects/vimage/src/sys/dev/usb2/controller/usb2_controller.c#3 integrate
.. //depot/projects/vimage/src/sys/dev/usb2/controller/uss820dci.c#3 integrate
.. //depot/projects/vimage/src/sys/dev/usb2/core/usb2_busdma.c#4 integrate
.. //depot/projects/vimage/src/sys/dev/usb2/core/usb2_busdma.h#2 integrate
.. //depot/projects/vimage/src/sys/dev/usb2/core/usb2_compat_linux.c#2 integrate
.. //depot/projects/vimage/src/sys/dev/usb2/core/usb2_compat_linux.h#2 integrate
.. //depot/projects/vimage/src/sys/dev/usb2/core/usb2_config_td.c#2 integrate
.. //depot/projects/vimage/src/sys/dev/usb2/core/usb2_config_td.h#2 integrate
.. //depot/projects/vimage/src/sys/dev/usb2/core/usb2_core.h#4 integrate
.. //depot/projects/vimage/src/sys/dev/usb2/core/usb2_debug.c#2 integrate
.. //depot/projects/vimage/src/sys/dev/usb2/core/usb2_dev.c#3 integrate
.. //depot/projects/vimage/src/sys/dev/usb2/core/usb2_dev.h#3 integrate
.. //depot/projects/vimage/src/sys/dev/usb2/core/usb2_device.c#5 integrate
.. //depot/projects/vimage/src/sys/dev/usb2/core/usb2_device.h#2 integrate
.. //depot/projects/vimage/src/sys/dev/usb2/core/usb2_dynamic.c#2 integrate
.. //depot/projects/vimage/src/sys/dev/usb2/core/usb2_dynamic.h#2 integrate
.. //depot/projects/vimage/src/sys/dev/usb2/core/usb2_error.c#2 integrate
.. //depot/projects/vimage/src/sys/dev/usb2/core/usb2_generic.c#4 integrate
.. //depot/projects/vimage/src/sys/dev/usb2/core/usb2_handle_request.c#3 integrate
.. //depot/projects/vimage/src/sys/dev/usb2/core/usb2_hid.h#2 integrate
.. //depot/projects/vimage/src/sys/dev/usb2/core/usb2_hub.c#4 integrate
.. //depot/projects/vimage/src/sys/dev/usb2/core/usb2_hub.h#2 integrate
.. //depot/projects/vimage/src/sys/dev/usb2/core/usb2_lookup.h#2 integrate
.. //depot/projects/vimage/src/sys/dev/usb2/core/usb2_mbuf.h#2 integrate
.. //depot/projects/vimage/src/sys/dev/usb2/core/usb2_msctest.c#3 integrate
.. //depot/projects/vimage/src/sys/dev/usb2/core/usb2_msctest.h#3 integrate
.. //depot/projects/vimage/src/sys/dev/usb2/core/usb2_parse.h#2 integrate
.. //depot/projects/vimage/src/sys/dev/usb2/core/usb2_process.c#2 integrate
.. //depot/projects/vimage/src/sys/dev/usb2/core/usb2_process.h#2 integrate
.. //depot/projects/vimage/src/sys/dev/usb2/core/usb2_request.c#5 integrate
.. //depot/projects/vimage/src/sys/dev/usb2/core/usb2_request.h#2 integrate
.. //depot/projects/vimage/src/sys/dev/usb2/core/usb2_sw_transfer.c#3 integrate
.. //depot/projects/vimage/src/sys/dev/usb2/core/usb2_sw_transfer.h#2 integrate
.. //depot/projects/vimage/src/sys/dev/usb2/core/usb2_transfer.c#3 integrate
.. //depot/projects/vimage/src/sys/dev/usb2/core/usb2_transfer.h#3 integrate
.. //depot/projects/vimage/src/sys/dev/usb2/core/usb2_util.c#3 integrate
.. //depot/projects/vimage/src/sys/dev/usb2/ethernet/if_aue2.c#3 integrate
.. //depot/projects/vimage/src/sys/dev/usb2/ethernet/if_axe2.c#2 integrate
.. //depot/projects/vimage/src/sys/dev/usb2/ethernet/if_cdce2.c#2 integrate
.. //depot/projects/vimage/src/sys/dev/usb2/ethernet/if_cue2.c#2 integrate
.. //depot/projects/vimage/src/sys/dev/usb2/ethernet/if_kue2.c#2 integrate
.. //depot/projects/vimage/src/sys/dev/usb2/ethernet/if_rue2.c#2 integrate
.. //depot/projects/vimage/src/sys/dev/usb2/ethernet/if_udav2.c#2 integrate
.. //depot/projects/vimage/src/sys/dev/usb2/ethernet/usb2_ethernet.c#2 integrate
.. //depot/projects/vimage/src/sys/dev/usb2/ethernet/usb2_ethernet.h#2 integrate
.. //depot/projects/vimage/src/sys/dev/usb2/image/uscanner2.c#3 integrate
.. //depot/projects/vimage/src/sys/dev/usb2/include/usb2_devid.h#4 integrate
.. //depot/projects/vimage/src/sys/dev/usb2/include/usb2_devtable.h#4 integrate
.. //depot/projects/vimage/src/sys/dev/usb2/input/uhid2.c#2 integrate
.. //depot/projects/vimage/src/sys/dev/usb2/input/ukbd2.c#2 integrate
.. //depot/projects/vimage/src/sys/dev/usb2/input/ums2.c#2 integrate
.. //depot/projects/vimage/src/sys/dev/usb2/misc/udbp2.c#2 integrate
.. //depot/projects/vimage/src/sys/dev/usb2/misc/ufm2.c#2 integrate
.. //depot/projects/vimage/src/sys/dev/usb2/quirk/usb2_quirk.c#3 integrate
.. //depot/projects/vimage/src/sys/dev/usb2/serial/uark2.c#3 integrate
.. //depot/projects/vimage/src/sys/dev/usb2/serial/ubsa2.c#4 integrate
.. //depot/projects/vimage/src/sys/dev/usb2/serial/ubser2.c#3 integrate
.. //depot/projects/vimage/src/sys/dev/usb2/serial/uchcom2.c#3 integrate
.. //depot/projects/vimage/src/sys/dev/usb2/serial/ucycom2.c#3 integrate
.. //depot/projects/vimage/src/sys/dev/usb2/serial/ufoma2.c#3 integrate
.. //depot/projects/vimage/src/sys/dev/usb2/serial/uftdi2.c#3 integrate
.. //depot/projects/vimage/src/sys/dev/usb2/serial/ugensa2.c#5 integrate
.. //depot/projects/vimage/src/sys/dev/usb2/serial/uipaq2.c#3 integrate
.. //depot/projects/vimage/src/sys/dev/usb2/serial/ulpt2.c#2 integrate
.. //depot/projects/vimage/src/sys/dev/usb2/serial/umct2.c#3 integrate
.. //depot/projects/vimage/src/sys/dev/usb2/serial/umodem2.c#3 integrate
.. //depot/projects/vimage/src/sys/dev/usb2/serial/umoscom2.c#3 integrate
.. //depot/projects/vimage/src/sys/dev/usb2/serial/uplcom2.c#3 integrate
.. //depot/projects/vimage/src/sys/dev/usb2/serial/usb2_serial.c#3 integrate
.. //depot/projects/vimage/src/sys/dev/usb2/serial/usb2_serial.h#2 integrate
.. //depot/projects/vimage/src/sys/dev/usb2/serial/uvisor2.c#3 integrate
.. //depot/projects/vimage/src/sys/dev/usb2/serial/uvscom2.c#3 integrate
.. //depot/projects/vimage/src/sys/dev/usb2/sound/uaudio2.c#3 integrate
.. //depot/projects/vimage/src/sys/dev/usb2/sound/uaudio2.h#2 integrate
.. //depot/projects/vimage/src/sys/dev/usb2/storage/ata-usb2.c#3 integrate
.. //depot/projects/vimage/src/sys/dev/usb2/storage/umass2.c#3 integrate
.. //depot/projects/vimage/src/sys/dev/usb2/storage/urio2.c#3 integrate
.. //depot/projects/vimage/src/sys/dev/usb2/storage/ustorage2_fs.c#2 integrate
.. //depot/projects/vimage/src/sys/dev/usb2/template/usb2_template.c#2 integrate
.. //depot/projects/vimage/src/sys/dev/usb2/wlan/if_rum2.c#2 integrate
.. //depot/projects/vimage/src/sys/dev/usb2/wlan/if_ural2.c#2 integrate
.. //depot/projects/vimage/src/sys/dev/usb2/wlan/if_zyd2.c#2 integrate
.. //depot/projects/vimage/src/sys/dev/vr/if_vr.c#4 integrate
.. //depot/projects/vimage/src/sys/fs/deadfs/dead_vnops.c#3 integrate
.. //depot/projects/vimage/src/sys/fs/devfs/devfs_vnops.c#21 integrate
.. //depot/projects/vimage/src/sys/fs/procfs/procfs_map.c#8 integrate
.. //depot/projects/vimage/src/sys/i386/i386/exception.s#5 integrate
.. //depot/projects/vimage/src/sys/i386/i386/genassym.c#9 integrate
.. //depot/projects/vimage/src/sys/i386/i386/identcpu.c#15 integrate
.. //depot/projects/vimage/src/sys/i386/i386/local_apic.c#14 integrate
.. //depot/projects/vimage/src/sys/i386/include/apicreg.h#2 integrate
.. //depot/projects/vimage/src/sys/i386/include/apicvar.h#7 integrate
.. //depot/projects/vimage/src/sys/i386/include/specialreg.h#12 integrate
.. //depot/projects/vimage/src/sys/kern/kern_poll.c#16 integrate
.. //depot/projects/vimage/src/sys/kern/kern_proc.c#20 integrate
.. //depot/projects/vimage/src/sys/kern/kern_prot.c#13 integrate
.. //depot/projects/vimage/src/sys/kern/kern_sysctl.c#16 integrate
.. //depot/projects/vimage/src/sys/kern/subr_trap.c#11 integrate
.. //depot/projects/vimage/src/sys/kern/tty.c#28 integrate
.. //depot/projects/vimage/src/sys/kern/tty_pts.c#10 integrate
.. //depot/projects/vimage/src/sys/kern/vfs_cache.c#16 integrate
.. //depot/projects/vimage/src/sys/kern/vfs_default.c#7 integrate
.. //depot/projects/vimage/src/sys/kern/vnode_if.src#9 integrate
.. //depot/projects/vimage/src/sys/mips/adm5120/adm5120_machdep.c#2 integrate
.. //depot/projects/vimage/src/sys/net/if.c#56 integrate
.. //depot/projects/vimage/src/sys/net/if_tun.c#13 integrate
.. //depot/projects/vimage/src/sys/net/if_var.h#23 integrate
.. //depot/projects/vimage/src/sys/net/pfil.h#4 integrate
.. //depot/projects/vimage/src/sys/net/raw_cb.h#5 integrate
.. //depot/projects/vimage/src/sys/net/rtsock.c#24 integrate
.. //depot/projects/vimage/src/sys/netgraph/netgraph.h#19 integrate
.. //depot/projects/vimage/src/sys/netgraph/ng_base.c#48 integrate
.. //depot/projects/vimage/src/sys/netgraph/ng_tty.c#5 integrate
.. //depot/projects/vimage/src/sys/netinet/icmp6.h#3 integrate
.. //depot/projects/vimage/src/sys/netinet/icmp_var.h#7 integrate
.. //depot/projects/vimage/src/sys/netinet/in_pcb.h#24 integrate
.. //depot/projects/vimage/src/sys/netinet/in_rmx.c#26 integrate
.. //depot/projects/vimage/src/sys/netinet/in_var.h#14 integrate
.. //depot/projects/vimage/src/sys/netinet/ip_fw.h#23 integrate
.. //depot/projects/vimage/src/sys/netinet/ip_fw2.c#59 integrate
.. //depot/projects/vimage/src/sys/netinet/ip_fw_nat.c#12 integrate
.. //depot/projects/vimage/src/sys/netinet/ip_fw_pfil.c#17 integrate
.. //depot/projects/vimage/src/sys/netinet/ip_var.h#15 integrate
.. //depot/projects/vimage/src/sys/netinet/tcp_subr.c#69 integrate
.. //depot/projects/vimage/src/sys/netinet/tcp_var.h#30 integrate
.. //depot/projects/vimage/src/sys/netinet/udp_var.h#10 integrate
.. //depot/projects/vimage/src/sys/netinet/vinet.h#42 integrate
.. //depot/projects/vimage/src/sys/netinet6/in6_ifattach.c#32 integrate
.. //depot/projects/vimage/src/sys/netinet6/in6_proto.c#38 integrate
.. //depot/projects/vimage/src/sys/netinet6/in6_rmx.c#27 integrate
.. //depot/projects/vimage/src/sys/netinet6/in6_var.h#8 integrate
.. //depot/projects/vimage/src/sys/netinet6/ip6_input.c#43 integrate
.. //depot/projects/vimage/src/sys/netinet6/ip6_var.h#17 integrate
.. //depot/projects/vimage/src/sys/netinet6/nd6.h#12 integrate
.. //depot/projects/vimage/src/sys/netinet6/raw_ip6.h#3 integrate
.. //depot/projects/vimage/src/sys/netinet6/tcp6_var.h#5 integrate
.. //depot/projects/vimage/src/sys/netinet6/vinet6.h#31 integrate
.. //depot/projects/vimage/src/sys/netipsec/ipip_var.h#2 integrate
.. //depot/projects/vimage/src/sys/netipx/ipx_usrreq.c#7 integrate
.. //depot/projects/vimage/src/sys/powerpc/ofw/ofw_syscons.c#5 integrate
.. //depot/projects/vimage/src/sys/powerpc/ofw/ofw_syscons.h#2 integrate
.. //depot/projects/vimage/src/sys/powerpc/powermac/cuda.c#4 integrate
.. //depot/projects/vimage/src/sys/powerpc/powermac/cudavar.h#3 integrate
.. //depot/projects/vimage/src/sys/sys/param.h#37 integrate
.. //depot/projects/vimage/src/sys/sys/pmc.h#8 integrate
.. //depot/projects/vimage/src/sys/sys/resource.h#8 integrate
.. //depot/projects/vimage/src/sys/sys/ttyhook.h#2 integrate
.. //depot/projects/vimage/src/sys/sys/vimage.h#73 integrate
.. //depot/projects/vimage/src/sys/sys/vnode.h#15 integrate
Differences ...
==== //depot/projects/vimage/src/sys/amd64/amd64/exception.S#7 (text+ko) ====
@@ -31,7 +31,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $FreeBSD: src/sys/amd64/amd64/exception.S,v 1.133 2008/08/18 08:47:27 kib Exp $
+ * $FreeBSD: src/sys/amd64/amd64/exception.S,v 1.135 2008/12/14 09:06:28 jkoshy Exp $
*/
#include "opt_atpic.h"
@@ -459,9 +459,9 @@
*/
movq %rsp,%rsi /* source stack pointer */
movq $TF_SIZE,%rcx
- movq PCPU(RSP0),%rbx
- subq %rcx,%rbx
- movq %rbx,%rdi /* destination stack pointer */
+ movq PCPU(RSP0),%rdx
+ subq %rcx,%rdx
+ movq %rdx,%rdi /* destination stack pointer */
shrq $3,%rcx /* trap frame size in long words */
cld
@@ -470,7 +470,7 @@
movl %ss,%eax
pushq %rax /* tf_ss */
- pushq %rbx /* tf_rsp (on kernel stack) */
+ pushq %rdx /* tf_rsp (on kernel stack) */
pushfq /* tf_rflags */
movl %cs,%eax
pushq %rax /* tf_cs */
@@ -480,16 +480,20 @@
/*
* At this point the processor has exited NMI mode and is running
* with interrupts turned off on the normal kernel stack.
- * We turn interrupts back on, and take the usual 'doreti' exit
- * path.
*
* If a pending NMI gets recognized at or after this point, it
- * will cause a kernel callchain to be traced. Since this path
- * is only taken for NMI interrupts from user space, our `swapgs'
- * state is correct for taking the doreti path.
+ * will cause a kernel callchain to be traced.
+ *
+ * We turn interrupts back on, and call the user callchain capture hook.
*/
+ movq pmc_hook,%rax
+ orq %rax,%rax
+ jz nocallchain
+ movq PCPU(CURTHREAD),%rdi /* thread */
+ movq $PMC_FN_USER_CALLCHAIN,%rsi /* command */
+ movq %rsp,%rdx /* frame */
sti
- jmp doreti
+ call *%rax
nocallchain:
#endif
testl %ebx,%ebx
==== //depot/projects/vimage/src/sys/amd64/amd64/genassym.c#11 (text+ko) ====
@@ -33,9 +33,10 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/amd64/amd64/genassym.c,v 1.170 2008/09/08 09:59:05 kib Exp $");
+__FBSDID("$FreeBSD: src/sys/amd64/amd64/genassym.c,v 1.171 2008/12/12 16:09:34 jkoshy Exp $");
#include "opt_compat.h"
+#include "opt_hwpmc_hooks.h"
#include "opt_kstack_pages.h"
#include <sys/param.h>
@@ -44,6 +45,9 @@
#include <sys/bio.h>
#include <sys/buf.h>
#include <sys/proc.h>
+#ifdef HWPMC_HOOKS
+#include <sys/pmckern.h>
+#endif
#include <sys/errno.h>
#include <sys/mount.h>
#include <sys/mutex.h>
@@ -216,3 +220,7 @@
ASSYM(SEL_RPL_MASK, SEL_RPL_MASK);
ASSYM(MSR_GSBASE, MSR_GSBASE);
+
+#ifdef HWPMC_HOOKS
+ASSYM(PMC_FN_USER_CALLCHAIN, PMC_FN_USER_CALLCHAIN);
+#endif
==== //depot/projects/vimage/src/sys/amd64/amd64/identcpu.c#13 (text+ko) ====
@@ -39,7 +39,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/amd64/amd64/identcpu.c,v 1.167 2008/11/30 00:10:55 mav Exp $");
+__FBSDID("$FreeBSD: src/sys/amd64/amd64/identcpu.c,v 1.168 2008/12/12 23:17:00 jkim Exp $");
#include "opt_cpu.h"
@@ -322,15 +322,15 @@
"\003SVM" /* Secure Virtual Mode */
"\004ExtAPIC" /* Extended APIC register */
"\005CR8" /* CR8 in legacy mode */
- "\006<b5>"
- "\007<b6>"
- "\010<b7>"
+ "\006ABM" /* LZCNT instruction */
+ "\007SSE4A" /* SSE4A */
+ "\010MAS" /* Misaligned SSE mode */
"\011Prefetch" /* 3DNow! Prefetch/PrefetchW */
- "\012<b9>"
- "\013<b10>"
- "\014<b11>"
- "\015<b12>"
- "\016<b13>"
+ "\012OSVW" /* OS visible workaround */
+ "\013IBS" /* Instruction based sampling */
+ "\014SSE5" /* SSE5 */
+ "\015SKINIT" /* SKINIT/STGI */
+ "\016WDT" /* Watchdog timer */
"\017<b14>"
"\020<b15>"
"\021<b16>"
==== //depot/projects/vimage/src/sys/amd64/amd64/local_apic.c#14 (text+ko) ====
@@ -32,7 +32,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/amd64/amd64/local_apic.c,v 1.49 2008/11/26 19:25:13 jkim Exp $");
+__FBSDID("$FreeBSD: src/sys/amd64/amd64/local_apic.c,v 1.50 2008/12/11 15:56:30 jhb Exp $");
#include "opt_hwpmc_hooks.h"
#include "opt_kdtrace.h"
@@ -299,6 +299,7 @@
/* Program LINT[01] LVT entries. */
lapic->lvt_lint0 = lvt_mode(la, LVT_LINT0, lapic->lvt_lint0);
lapic->lvt_lint1 = lvt_mode(la, LVT_LINT1, lapic->lvt_lint1);
+
#ifdef HWPMC_HOOKS
/* Program the PMC LVT entry if present. */
if (maxlvt >= LVT_PMC)
@@ -644,6 +645,18 @@
lapic->eoi = 0;
}
+/*
+ * Read the contents of the error status register. We have to write
+ * to the register first before reading from it.
+ */
+u_int
+lapic_error(void)
+{
+
+ lapic->esr = 0;
+ return (lapic->esr);
+}
+
void
lapic_handle_intr(int vector, struct trapframe *frame)
{
==== //depot/projects/vimage/src/sys/amd64/include/apicreg.h#2 (text+ko) ====
@@ -22,7 +22,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $FreeBSD: src/sys/amd64/include/apicreg.h,v 1.28 2005/01/21 06:01:20 peter Exp $
+ * $FreeBSD: src/sys/amd64/include/apicreg.h,v 1.29 2008/12/11 15:56:30 jhb Exp $
*/
#ifndef _MACHINE_APICREG_H_
@@ -260,6 +260,14 @@
# define APIC_TPR_INT 0x000000f0
# define APIC_TPR_SUB 0x0000000f
+/* fields in ESR */
+#define APIC_ESR_SEND_CS_ERROR 0x00000001
+#define APIC_ESR_RECEIVE_CS_ERROR 0x00000002
+#define APIC_ESR_SEND_ACCEPT 0x00000004
+#define APIC_ESR_RECEIVE_ACCEPT 0x00000008
+#define APIC_ESR_SEND_ILLEGAL_VECTOR 0x00000020
+#define APIC_ESR_RECEIVE_ILLEGAL_VECTOR 0x00000040
+#define APIC_ESR_ILLEGAL_REGISTER 0x00000080
/* fields in ICR_LOW */
#define APIC_VECTOR_MASK 0x000000ff
==== //depot/projects/vimage/src/sys/amd64/include/apicvar.h#5 (text+ko) ====
@@ -26,7 +26,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $FreeBSD: src/sys/amd64/include/apicvar.h,v 1.25 2007/05/08 22:01:03 jhb Exp $
+ * $FreeBSD: src/sys/amd64/include/apicvar.h,v 1.26 2008/12/11 15:56:30 jhb Exp $
*/
#ifndef _MACHINE_APICVAR_H_
@@ -200,6 +200,7 @@
void lapic_disable(void);
void lapic_dump(const char *str);
void lapic_eoi(void);
+u_int lapic_error(void);
int lapic_id(void);
void lapic_init(vm_paddr_t addr);
int lapic_intr_pending(u_int vector);
==== //depot/projects/vimage/src/sys/amd64/include/specialreg.h#12 (text+ko) ====
@@ -27,7 +27,7 @@
* SUCH DAMAGE.
*
* from: @(#)specialreg.h 7.1 (Berkeley) 5/9/91
- * $FreeBSD: src/sys/amd64/include/specialreg.h,v 1.50 2008/11/26 19:25:13 jkim Exp $
+ * $FreeBSD: src/sys/amd64/include/specialreg.h,v 1.51 2008/12/12 23:17:00 jkim Exp $
*/
#ifndef _MACHINE_SPECIALREG_H_
@@ -150,7 +150,15 @@
#define AMDID2_SVM 0x00000004
#define AMDID2_EXT_APIC 0x00000008
#define AMDID2_CR8 0x00000010
+#define AMDID2_ABM 0x00000020
+#define AMDID2_SSE4A 0x00000040
+#define AMDID2_MAS 0x00000080
#define AMDID2_PREFETCH 0x00000100
+#define AMDID2_OSVW 0x00000200
+#define AMDID2_IBS 0x00000400
+#define AMDID2_SSE5 0x00000800
+#define AMDID2_SKINIT 0x00001000
+#define AMDID2_WDT 0x00002000
/*
* CPUID instruction 1 eax info
==== //depot/projects/vimage/src/sys/boot/Makefile#7 (text+ko) ====
@@ -1,4 +1,4 @@
-# $FreeBSD: src/sys/boot/Makefile,v 1.37 2008/11/17 20:49:29 pjd Exp $
+# $FreeBSD: src/sys/boot/Makefile,v 1.38 2008/12/14 02:57:41 nyan Exp $
.include <bsd.own.mk>
@@ -12,7 +12,7 @@
.endif
# Build EFI library.
-.if ${MACHINE_ARCH} == "amd64" || ${MACHINE_ARCH} == "i386" || ${MACHINE_ARCH} == "ia64"
+.if ${MACHINE_ARCH} == "amd64" || ${MACHINE} == "i386" || ${MACHINE_ARCH} == "ia64"
SUBDIR+= efi
.endif
==== //depot/projects/vimage/src/sys/boot/zfs/zfs.c#4 (text+ko) ====
@@ -23,11 +23,11 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $FreeBSD: src/sys/boot/zfs/zfs.c,v 1.3 2008/12/11 02:23:49 ps Exp $
+ * $FreeBSD: src/sys/boot/zfs/zfs.c,v 1.4 2008/12/11 16:48:35 ps Exp $
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/boot/zfs/zfs.c,v 1.3 2008/12/11 02:23:49 ps Exp $");
+__FBSDID("$FreeBSD: src/sys/boot/zfs/zfs.c,v 1.4 2008/12/11 16:48:35 ps Exp $");
/*
* Stand-alone file reading package.
@@ -486,6 +486,7 @@
}
f->f_devdata = spa;
+ free(dev);
return (0);
}
==== //depot/projects/vimage/src/sys/compat/linprocfs/linprocfs.c#31 (text+ko) ====
@@ -42,7 +42,7 @@
#include "opt_compat.h"
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/compat/linprocfs/linprocfs.c,v 1.131 2008/12/10 16:11:09 kib Exp $");
+__FBSDID("$FreeBSD: src/sys/compat/linprocfs/linprocfs.c,v 1.132 2008/12/12 12:12:36 kib Exp $");
#include <sys/param.h>
#include <sys/queue.h>
@@ -79,6 +79,7 @@
#include <net/vnet.h>
#include <vm/vm.h>
+#include <vm/vm_extern.h>
#include <vm/pmap.h>
#include <vm/vm_map.h>
#include <vm/vm_param.h>
@@ -874,7 +875,8 @@
static int
linprocfs_doprocmaps(PFS_FILL_ARGS)
{
- vm_map_t map = &p->p_vmspace->vm_map;
+ struct vmspace *vm;
+ vm_map_t map;
vm_map_entry_t entry, tmp_entry;
vm_object_t obj, tobj, lobj;
vm_offset_t e_start, e_end;
@@ -899,6 +901,10 @@
return (EOPNOTSUPP);
error = 0;
+ vm = vmspace_acquire_ref(p);
+ if (vm == NULL)
+ return (ESRCH);
+ map = &vm->vm_map;
vm_map_lock_read(map);
for (entry = map->header.next; entry != &map->header;
entry = entry->next) {
@@ -985,6 +991,7 @@
}
}
vm_map_unlock_read(map);
+ vmspace_free(vm);
return (error);
}
==== //depot/projects/vimage/src/sys/conf/options#40 (text+ko) ====
@@ -1,4 +1,4 @@
-# $FreeBSD: src/sys/conf/options,v 1.650 2008/12/10 23:12:39 zec Exp $
+# $FreeBSD: src/sys/conf/options,v 1.651 2008/12/11 16:13:17 bz Exp $
#
# On the handling of kernel options
#
@@ -415,7 +415,6 @@
TCP_OFFLOAD_DISABLE opt_inet.h #Disable code to dispatch tcp offloading
TCP_SIGNATURE opt_inet.h
VLAN_ARRAY opt_vlan.h
-VIMAGE_GLOBALS opt_global.h
XBONEHACK
#
@@ -787,3 +786,4 @@
# Virtualize the network stack
VIMAGE opt_global.h
+VIMAGE_GLOBALS opt_global.h
==== //depot/projects/vimage/src/sys/contrib/pf/net/pf_if.c#15 (text+ko) ====
@@ -37,7 +37,7 @@
#include "opt_inet6.h"
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/contrib/pf/net/pf_if.c,v 1.18 2008/12/02 21:37:28 bz Exp $");
+__FBSDID("$FreeBSD: src/sys/contrib/pf/net/pf_if.c,v 1.19 2008/12/13 19:13:03 bz Exp $");
#endif
#include <sys/param.h>
==== //depot/projects/vimage/src/sys/contrib/pf/net/pf_subr.c#15 (text+ko) ====
@@ -32,7 +32,7 @@
#include "opt_inet6.h"
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/contrib/pf/net/pf_subr.c,v 1.8 2008/12/10 23:12:39 zec Exp $");
+__FBSDID("$FreeBSD: src/sys/contrib/pf/net/pf_subr.c,v 1.9 2008/12/13 22:04:52 bz Exp $");
#include <sys/param.h>
#include <sys/kernel.h>
@@ -116,24 +116,22 @@
#define ISN_STATIC_INCREMENT 4096
#define ISN_RANDOM_INCREMENT (4096 - 1)
-#ifdef VIMAGE_GLOBALS
-static u_char isn_secret[32];
-static int isn_last_reseed;
-static u_int32_t isn_offset;
-static MD5_CTX isn_ctx;
-#endif
+static u_char pf_isn_secret[32];
+static int pf_isn_last_reseed;
+static u_int32_t pf_isn_offset;
u_int32_t
pf_new_isn(struct pf_state *s)
{
+ MD5_CTX isn_ctx;
u_int32_t md5_buffer[4];
u_int32_t new_isn;
struct pf_state_host *src, *dst;
/* Seed if this is the first use, reseed if requested. */
- if (isn_last_reseed == 0) {
- read_random(&isn_secret, sizeof(isn_secret));
- isn_last_reseed = ticks;
+ if (pf_isn_last_reseed == 0) {
+ read_random(&pf_isn_secret, sizeof(pf_isn_secret));
+ pf_isn_last_reseed = ticks;
}
if (s->direction == PF_IN) {
@@ -162,11 +160,11 @@
MD5Update(&isn_ctx, (u_char *) &src->addr,
sizeof(struct in_addr));
}
- MD5Update(&isn_ctx, (u_char *) &isn_secret, sizeof(isn_secret));
+ MD5Update(&isn_ctx, (u_char *) &pf_isn_secret, sizeof(pf_isn_secret));
MD5Final((u_char *) &md5_buffer, &isn_ctx);
new_isn = (tcp_seq) md5_buffer[0];
- isn_offset += ISN_STATIC_INCREMENT +
+ pf_isn_offset += ISN_STATIC_INCREMENT +
(arc4random() & ISN_RANDOM_INCREMENT);
- new_isn += isn_offset;
+ new_isn += pf_isn_offset;
return (new_isn);
}
==== //depot/projects/vimage/src/sys/dev/acpica/acpi_smbat.c#2 (text+ko) ====
@@ -25,7 +25,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/acpica/acpi_smbat.c,v 1.5 2006/02/21 03:16:58 njl Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/acpica/acpi_smbat.c,v 1.7 2008/12/13 07:45:48 silby Exp $");
#include "opt_acpi.h"
#include <sys/param.h>
@@ -61,6 +61,23 @@
ACPI_SERIAL_DECL(smbat, "ACPI Smart Battery");
+SYSCTL_DECL(_debug_acpi);
+SYSCTL_NODE(_debug_acpi, OID_AUTO, batt, CTLFLAG_RD, NULL, "Battery debugging");
+
+/* On some laptops with smart batteries, enabling battery monitoring
+ * software causes keystrokes from atkbd to be lost. This has also been
+ * reported on Linux, and is apparently due to the keyboard and I2C line
+ * for the battery being routed through the same chip. Whether that's
+ * accurate or not, adding extra sleeps to the status checking code
+ * causes the problem to go away.
+ *
+ * If you experience that problem, try a value of 10ms and move up
+ * from there.
+ */
+static int batt_sleep_ms;
+SYSCTL_INT(_debug_acpi_batt, OID_AUTO, batt_sleep_ms, CTLFLAG_RW, &batt_sleep_ms, 0,
+ "Sleep during battery status updates to prevent keystroke loss.");
+
static device_method_t acpi_smbat_methods[] = {
/* device interface */
DEVMETHOD(device_probe, acpi_smbat_probe),
@@ -176,6 +193,9 @@
ACPI_SERIAL_ASSERT(smbat);
+ if (batt_sleep_ms)
+ AcpiOsSleep(batt_sleep_ms);
+
val = addr;
error = ACPI_EC_WRITE(sc->ec_dev, sc->sb_base_addr + SMBUS_ADDR,
val, 1);
@@ -194,6 +214,9 @@
if (error)
goto out;
+ if (batt_sleep_ms)
+ AcpiOsSleep(batt_sleep_ms);
+
for (to = SMBUS_TIMEOUT; to != 0; to--) {
error = ACPI_EC_READ(sc->ec_dev, sc->sb_base_addr + SMBUS_PRTCL,
&val, 1);
@@ -239,6 +262,9 @@
ACPI_SERIAL_ASSERT(smbat);
+ if (batt_sleep_ms)
+ AcpiOsSleep(batt_sleep_ms);
+
val = addr;
error = ACPI_EC_WRITE(sc->ec_dev, sc->sb_base_addr + SMBUS_ADDR,
val, 1);
@@ -257,6 +283,9 @@
if (error)
goto out;
+ if (batt_sleep_ms)
+ AcpiOsSleep(batt_sleep_ms);
+
for (to = SMBUS_TIMEOUT; to != 0; to--) {
error = ACPI_EC_READ(sc->ec_dev, sc->sb_base_addr + SMBUS_PRTCL,
&val, 1);
@@ -292,6 +321,9 @@
if (len > val)
len = val;
+ if (batt_sleep_ms)
+ AcpiOsSleep(batt_sleep_ms);
+
while (len--) {
error = ACPI_EC_READ(sc->ec_dev, sc->sb_base_addr + SMBUS_DATA
+ len, &val, 1);
@@ -299,6 +331,8 @@
goto out;
ptr[len] = val;
+ if (batt_sleep_ms)
+ AcpiOsSleep(batt_sleep_ms);
}
out:
==== //depot/projects/vimage/src/sys/dev/ath/ath_hal/ah.c#2 (text+ko) ====
@@ -14,7 +14,7 @@
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*
- * $Id: ah.c,v 1.15 2008/11/15 22:15:44 sam Exp $
+ * $FreeBSD: src/sys/dev/ath/ath_hal/ah.c,v 1.2 2008/12/13 03:48:33 sam Exp $
*/
#include "opt_ah.h"
@@ -32,7 +32,7 @@
const char*
ath_hal_probe(uint16_t vendorid, uint16_t devid)
{
- struct ath_hal_chip **pchip;
+ struct ath_hal_chip * const *pchip;
OS_SET_FOREACH(pchip, ah_chips) {
const char *name = (*pchip)->probe(vendorid, devid);
@@ -53,7 +53,7 @@
ath_hal_attach(uint16_t devid, HAL_SOFTC sc,
HAL_BUS_TAG st, HAL_BUS_HANDLE sh, HAL_STATUS *error)
{
- struct ath_hal_chip **pchip;
+ struct ath_hal_chip * const *pchip;
OS_SET_FOREACH(pchip, ah_chips) {
struct ath_hal_chip *chip = *pchip;
@@ -88,7 +88,7 @@
struct ath_hal_rf *
ath_hal_rfprobe(struct ath_hal *ah, HAL_STATUS *ecode)
{
- struct ath_hal_rf **prf;
+ struct ath_hal_rf * const *prf;
OS_SET_FOREACH(prf, ah_rfs) {
struct ath_hal_rf *rf = *prf;
==== //depot/projects/vimage/src/sys/dev/ath/ath_hal/ah_eeprom_v14.c#3 (text+ko) ====
@@ -14,7 +14,7 @@
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*
- * $FreeBSD: src/sys/dev/ath/ath_hal/ah_eeprom_v14.c,v 1.2 2008/12/11 04:03:13 sam Exp $
+ * $FreeBSD: src/sys/dev/ath/ath_hal/ah_eeprom_v14.c,v 1.3 2008/12/13 03:49:01 sam Exp $
*/
#include "opt_ah.h"
@@ -160,18 +160,6 @@
return AH_FALSE;
}
-/* XXX conditionalize by target byte order */
-#ifndef bswap16
-static __inline__ uint16_t
-__bswap16(uint16_t _x)
-{
- return ((uint16_t)(
- (((const uint8_t *)(&_x))[0] ) |
- (((const uint8_t *)(&_x))[1]<< 8))
- );
-}
-#endif
-
/* Do structure specific swaps if Eeprom format is non native to host */
static void
eepromSwap(struct ar5416eeprom *ee)
==== //depot/projects/vimage/src/sys/dev/ath/ath_hal/ah_eeprom_v3.c#2 (text+ko) ====
@@ -14,7 +14,7 @@
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*
- * $Id: ah_eeprom_v3.c,v 1.4 2008/11/27 22:39:42 sam Exp $
+ * $FreeBSD: src/sys/dev/ath/ath_hal/ah_eeprom_v3.c,v 1.2 2008/12/13 03:47:42 sam Exp $
*/
#include "opt_ah.h"
@@ -26,9 +26,9 @@
getPcdacInterceptsFromPcdacMinMax(HAL_EEPROM *ee,
uint16_t pcdacMin, uint16_t pcdacMax, uint16_t *vp)
{
- const static uint16_t intercepts3[] =
+ static const uint16_t intercepts3[] =
{ 0, 5, 10, 20, 30, 50, 70, 85, 90, 95, 100 };
- const static uint16_t intercepts3_2[] =
+ static const uint16_t intercepts3_2[] =
{ 0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100 };
const uint16_t *ip = ee->ee_version < AR_EEPROM_VER3_2 ?
intercepts3 : intercepts3_2;
==== //depot/projects/vimage/src/sys/dev/ath/ath_hal/ah_internal.h#2 (text+ko) ====
@@ -14,7 +14,7 @@
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*
- * $Id: ah_internal.h,v 1.21 2008/11/27 22:29:27 sam Exp $
+ * $FreeBSD: src/sys/dev/ath/ath_hal/ah_internal.h,v 1.2 2008/12/13 03:50:31 sam Exp $
*/
#ifndef _ATH_AH_INTERAL_H_
#define _ATH_AH_INTERAL_H_
@@ -42,23 +42,6 @@
#define offsetof(type, field) ((size_t)(&((type *)0)->field))
#endif
-/*
- * Remove const in a way that keeps the compiler happy.
- * This works for gcc but may require other magic for
- * other compilers (not sure where this should reside).
- * Note that uintptr_t is C99.
- */
-#ifndef __DECONST
-#ifndef _UINTPTR_T
-#if AH_WORDSIZE == 64
-typedef unsigned long int uintptr_t;
-#else
-typedef unsigned int uintptr_t;
-#endif
-#endif
-#define __DECONST(type, var) ((type)(uintptr_t)(const void *)(var))
-#endif
-
typedef struct {
uint16_t start; /* first register */
uint16_t end; /* ending register or zero */
@@ -114,12 +97,12 @@
};
#ifndef AH_RF
#define AH_RF(_name, _probe, _attach) \
-static struct ath_hal_rf name##_rf = { \
- .name = #_name, \
+static struct ath_hal_rf _name##_rf = { \
+ .name = __STRING(_name), \
.probe = _probe, \
.attach = _attach \
}; \
-OS_DATA_SET(ah_rfs, name##_rf)
+OS_DATA_SET(ah_rfs, _name##_rf)
#endif
struct ath_hal_rf *ath_hal_rfprobe(struct ath_hal *ah, HAL_STATUS *ecode);
==== //depot/projects/vimage/src/sys/dev/ath/ath_hal/ar5212/ar5111.c#2 (text+ko) ====
@@ -14,7 +14,7 @@
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*
- * $Id: ar5111.c,v 1.7 2008/11/10 04:08:03 sam Exp $
+ * $FreeBSD: src/sys/dev/ath/ath_hal/ar5212/ar5111.c,v 1.2 2008/12/13 03:45:54 sam Exp $
*/
#include "opt_ah.h"
@@ -90,7 +90,7 @@
uint16_t channel5111; /* 11a channel for 5111 */
} CHAN_INFO_2GHZ;
- const static CHAN_INFO_2GHZ chan2GHzData[] = {
+ static const CHAN_INFO_2GHZ chan2GHzData[] = {
{ 1, 0x46, 96 }, /* 2312 -19 */
{ 1, 0x46, 97 }, /* 2317 -18 */
{ 1, 0x46, 98 }, /* 2322 -17 */
==== //depot/projects/vimage/src/sys/dev/ath/ath_hal/ar5312/ar5312.h#2 (text+ko) ====
@@ -14,7 +14,7 @@
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*
- * $Id: ar5312.h,v 1.5 2008/11/22 07:37:40 sam Exp $
+ * $FreeBSD: src/sys/dev/ath/ath_hal/ar5312/ar5312.h,v 1.2 2008/12/13 03:44:44 sam Exp $
*/
#ifndef _ATH_AR5312_H_
#define _ATH_AR5312_H_
@@ -38,8 +38,6 @@
AH_PRIVATE(ah)->ah_devid == AR5212_AR2317_REV1 || \
AH_PRIVATE(ah)->ah_devid == AR5212_AR2317_REV2)
-extern struct ath_hal * ar5312Attach(uint16_t devid, HAL_SOFTC sc,
- HAL_BUS_TAG st, HAL_BUS_HANDLE sh, HAL_STATUS *status);
extern HAL_BOOL ar5312IsInterruptPending(struct ath_hal *ah);
/* AR5312 */
==== //depot/projects/vimage/src/sys/dev/ath/ath_hal/ar5312/ar5312_attach.c#2 (text+ko) ====
@@ -14,7 +14,7 @@
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*
- * $Id: ar5312_attach.c,v 1.8 2008/11/27 22:30:03 sam Exp $
+ * $FreeBSD: src/sys/dev/ath/ath_hal/ar5312/ar5312_attach.c,v 1.2 2008/12/13 03:45:00 sam Exp $
*/
#include "opt_ah.h"
@@ -318,7 +318,6 @@
case AR5212_AR2313_REV8:
return "Atheros 2313 WiSoC";
case AR5212_AR2315_REV6:
- case AR5212_AR2315_REV6:
case AR5212_AR2315_REV7:
return "Atheros 2315 WiSoC";
case AR5212_AR2317_REV1:
==== //depot/projects/vimage/src/sys/dev/hwpmc/hwpmc_mod.c#13 (text+ko) ====
@@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/hwpmc/hwpmc_mod.c,v 1.41 2008/11/27 09:00:47 jkoshy Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/hwpmc/hwpmc_mod.c,v 1.42 2008/12/13 13:07:12 jkoshy Exp $");
#include <sys/param.h>
#include <sys/eventhandler.h>
@@ -1863,8 +1863,11 @@
/*
* Record a call chain.
*/
+ KASSERT(td == curthread, ("[pmc,%d] td != curthread",
+ __LINE__));
pmc_capture_user_callchain(PCPU_GET(cpuid),
(struct trapframe *) arg);
+ td->td_pflags &= ~TDP_CALLCHAIN;
break;
default:
@@ -3794,30 +3797,28 @@
*/
static void
-pmc_post_callchain_ast(void)
+pmc_post_callchain_callback(void)
{
struct thread *td;
td = curthread;
+ KASSERT((td->td_pflags & TDP_CALLCHAIN) == 0,
+ ("[pmc,%d] thread %p already marked for callchain capture",
+ __LINE__, (void *) td));
+
/*
- * Mark this thread as needing processing in ast().
- * td->td_pflags will be safe to touch as the process was in
- * user space when it was interrupted.
+ * Mark this thread as needing callchain capture.
+ * `td->td_pflags' will be safe to touch because this thread
+ * was in user space when it was interrupted.
*/
td->td_pflags |= TDP_CALLCHAIN;
/*
- * Again, since we've entered this function directly from
- * userland, `td' is guaranteed to be not locked by this CPU,
- * so its safe to try acquire the thread lock even though we
- * are executing in an NMI context. We need to acquire this
- * lock before touching `td_flags' because other CPUs may be
- * in the process of touching this field.
+ * Don't let this thread migrate between CPUs until callchain
+ * capture completes.
*/
- thread_lock(td);
- td->td_flags |= TDF_ASTPENDING;
- thread_unlock(td);
+ sched_pin();
return;
}
@@ -3869,6 +3870,10 @@
(int) (psb->ps_write - psb->ps_samples),
(int) (psb->ps_read - psb->ps_samples));
+ KASSERT(pm->pm_runcount >= 0,
+ ("[pmc,%d] pm=%p runcount %d", __LINE__, (void *) pm,
+ pm->pm_runcount));
+
atomic_add_rel_32(&pm->pm_runcount, 1); /* hold onto PMC */
ps->ps_pmc = pm;
>>> TRUNCATED FOR MAIL (1000 lines) <<<
More information about the p4-projects
mailing list