First pass at 2.6.36-rc1

This commit is contained in:
Kyle McMartin 2010-08-17 16:06:35 -04:00
parent c7a89c25e0
commit da80d72ece
26 changed files with 262 additions and 14138 deletions

2
.gitignore vendored
View File

@ -3,4 +3,4 @@ patch-*.bz2
clog
*.rpm
kernel-2.6.*/
patch-2.6.35-git1.bz2
patch-2.6.36-rc1.bz2

View File

@ -120,3 +120,5 @@ CONFIG_AUTO_ZRELADDR=y
# CONFIG_ARM_CHARLCD is not set
# CONFIG_DEPRECATED_PARAM_STRUCT is not set
# CONFIG_ARM_SP805_WATCHDOG is not set

View File

@ -496,6 +496,7 @@ CONFIG_SCSI_SAS_HOST_SMP=y
CONFIG_RAID_ATTRS=m
CONFIG_ISCSI_TCP=m
CONFIG_ISCSI_BOOT_SYSFS=m
#
# SCSI low-level drivers
@ -719,6 +720,7 @@ CONFIG_FIREWIRE_OHCI=m
CONFIG_FIREWIRE_SBP2=m
CONFIG_FIREWIRE_NET=m
CONFIG_FIREWIRE_OHCI_DEBUG=y
CONFIG_FIREWIRE_NOSY=m
# CONFIG_FIREWIRE_OHCI_REMOTE_DMA is not set
#
@ -845,6 +847,7 @@ CONFIG_DECNET_ROUTER=y
# CONFIG_DECNET_NF_GRABULATOR is not set
CONFIG_BRIDGE=m
CONFIG_BRIDGE_IGMP_SNOOPING=y
# CONFIG_NETWORK_PHY_TIMESTAMPING is not set
CONFIG_NETFILTER=y
CONFIG_NETFILTER_ADVANCED=y
CONFIG_NF_CONNTRACK=y
@ -903,6 +906,10 @@ CONFIG_NETFILTER_XT_MATCH_U32=m
CONFIG_NETFILTER_XT_MATCH_CLUSTER=m
CONFIG_NETFILTER_XT_MATCH_HL=m
CONFIG_NETFILTER_XT_MATCH_OSF=m
CONFIG_NETFILTER_XT_TARGET_CHECKSUM=m
CONFIG_NETFILTER_XT_TARGET_IDLETIMER=m
CONFIG_NETFILTER_XT_MATCH_CPU=m
CONFIG_NETFILTER_XT_MATCH_IPVS=m
# CONFIG_NETFILTER_DEBUG is not set
CONFIG_BRIDGE_NETFILTER=y
@ -1318,6 +1325,7 @@ CONFIG_CHELSIO_T1=m
CONFIG_CHELSIO_T1_1G=y
CONFIG_CHELSIO_T3=m
CONFIG_CHELSIO_T4=m
CONFIG_CHELSIO_T4VF=m
CONFIG_IP1000=m
CONFIG_IXGB=m
CONFIG_IXGBEVF=m
@ -1513,6 +1521,8 @@ CONFIG_WL1251=m
CONFIG_WL1251_SPI=m
CONFIG_WL1251_SDIO=m
CONFIG_WL1271=m
CONFIG_WL1271_SDIO=m
CONFIG_WL1271_SPI=m
#
# Token Ring devices
@ -1565,6 +1575,7 @@ CONFIG_CAN_SJA1000_ISA=m
CONFIG_CAN_SJA1000_PLATFORM=m
CONFIG_CAN_EMS_PCI=m
CONFIG_CAN_EMS_USB=m
CONFIG_CAN_ESD_USB2=m
CONFIG_CAN_KVASER_PCI=m
CONFIG_CAN_PLX_PCI=m
CONFIG_NETROM=m
@ -1644,6 +1655,7 @@ CONFIG_BT_HCIBTUSB=m
CONFIG_BT_HCIUART=m
CONFIG_BT_HCIUART_H4=y
CONFIG_BT_HCIUART_BCSP=y
CONFIG_BT_HCIUART_ATH3K=y
CONFIG_BT_HCIDTL1=m
CONFIG_BT_HCIBT3C=m
CONFIG_BT_HCIBLUECARD=m
@ -1812,6 +1824,7 @@ CONFIG_INPUT_YEALINK=m
CONFIG_INPUT_CM109=m
CONFIG_INPUT_POLLDEV=m
CONFIG_INPUT_SPARSEKMAP=m
# CONFIG_INPUT_ADXL34X is not set
#
# Input I/O drivers
@ -1846,6 +1859,7 @@ CONFIG_KEYBOARD_ATKBD=y
# FIXME: Do we really need these keyboards enabled ?
CONFIG_KEYBOARD_ADP5588=m
CONFIG_KEYBOARD_MAX7359=m
# CONFIG_KEYBOARD_MCS is not set
CONFIG_KEYBOARD_OPENCORES=m
CONFIG_KEYBOARD_QT2160=m
# CONFIG_KEYBOARD_TCA6416 is not set
@ -1909,6 +1923,8 @@ CONFIG_TOUCHSCREEN_USB_E2I=y
CONFIG_TOUCHSCREEN_USB_COMPOSITE=m
CONFIG_TOUCHSCREEN_DYNAPRO=m
# CONFIG_TOUCHSCREEN_WM97XX is not set
# CONFIG_TOUCHSCREEN_AD7879 is not set
# CONFIG_TOUCHSCREEN_QT602240 is not set
CONFIG_TOUCHSCREEN_EETI=m
CONFIG_TOUCHSCREEN_W90X900=m
CONFIG_TOUCHSCREEN_MCS5000=m
@ -1985,6 +2001,7 @@ CONFIG_CYCLADES=m
# CONFIG_STALLION is not set
# CONFIG_ISTALLION is not set
CONFIG_SERIAL_JSM=m
# CONFIG_SERIAL_MFD_HSU is not set
# CONFIG_SERIAL_ALTERA_JTAGUART is not set
# CONFIG_SERIAL_ALTERA_UART is not set
@ -2008,6 +2025,8 @@ CONFIG_PPDEV=m
CONFIG_I2C=m
CONFIG_I2C_COMPAT=y
CONFIG_I2C_CHARDEV=m
# CONFIG_I2C_MUX is not set
# CONFIG_I2C_MUX_PCA954x is not set
#
# I2C Algorithms
@ -2153,6 +2172,13 @@ CONFIG_SENSORS_ADT7411=m
CONFIG_SENSORS_ASC7621=m
CONFIG_SENSORS_EMC1403=m
CONFIG_SENSORS_TMP102=m
# CONFIG_SENSORS_BH1780 is not set
# CONFIG_SENSORS_JC42 is not set
# CONFIG_SENSORS_SMM665 is not set
# CONFIG_SENSORS_EMC2103 is not set
# CONFIG_HMC6352 is not set
# CONFIG_BMP085 is not set
CONFIG_W1=m
CONFIG_W1_CON=y
@ -2308,6 +2334,7 @@ CONFIG_DRM_NOUVEAU=m
CONFIG_DRM_NOUVEAU_BACKLIGHT=y
CONFIG_DRM_NOUVEAU_DEBUG=y
CONFIG_DRM_I2C_CH7006=m
CONFIG_DRM_I2C_SIL164=m
CONFIG_DRM_VMWGFX=m
#
@ -2974,6 +3001,8 @@ CONFIG_HID_TOPSEED=m
CONFIG_HID_THRUSTMASTER=m
CONFIG_HID_ZEROPLUS=m
CONFIG_HID_ZYDACRON=m
CONFIG_HID_ACRUX_FF=m
CONFIG_HID_ELECOM=m
#
@ -3038,6 +3067,7 @@ CONFIG_USB_KONICAWC=m
CONFIG_USB_S2255=m
CONFIG_USB_SE401=m
# CONFIG_VIDEO_SH_MOBILE_CEU is not set
# CONFIG_VIDEO_SH_MOBILE_CSI2 is not set
# CONFIG_USB_STV680 is not set
# CONFIG_USB_SN9C102 is not set
CONFIG_USB_ZR364XX=m
@ -3165,6 +3195,7 @@ CONFIG_USB_SERIAL_XIRCOM=m
CONFIG_USB_SERIAL_QCAUX=m
CONFIG_USB_SERIAL_VIVOPAY_SERIAL=m
CONFIG_USB_SERIAL_DEBUG=m
CONFIG_USB_SERIAL_SSU100=m
CONFIG_USB_EZUSB=y
CONFIG_USB_EMI62=m
@ -3248,6 +3279,8 @@ CONFIG_INPUT_PCF50633_PMU=m
CONFIG_INPUT_GPIO_ROTARY_ENCODER=m
CONFIG_CHARGER_PCF50633=m
CONFIG_RTC_DRV_PCF50633=m
CONFIG_RTC_DRV_DS3232=m
CONFIG_RTC_DRV_ISL12022=m
CONFIG_MFD_SUPPORT=y
CONFIG_MFD_SM501=m
@ -3391,7 +3424,8 @@ CONFIG_JFFS2_FS_POSIX_ACL=y
CONFIG_JFFS2_FS_SECURITY=y
CONFIG_CRAMFS=m
CONFIG_SQUASHFS=m
CONFIG_SQUASHFS_XATTRS=y
CONFIG_SQUASHFS_XATTR=y
CONFIG_SQUASHFS_LZO=y
# CONFIG_SQUASHFS_EMBEDDED is not set
CONFIG_VXFS_FS=m
# CONFIG_HPFS_FS is not set
@ -3420,6 +3454,7 @@ CONFIG_NFSD_V3=y
CONFIG_NFSD_V3_ACL=y
CONFIG_NFSD_V4=y
CONFIG_NFS_FSCACHE=y
# CONFIG_NFS_USE_LEGACY_DNS is not set
CONFIG_LOCKD=m
CONFIG_LOCKD_V4=y
CONFIG_EXPORTFS=m
@ -3591,6 +3626,7 @@ CONFIG_SECURITY_SELINUX_CHECKREQPROT_VALUE=1
CONFIG_SECURITY_SELINUX_AVC_STATS=y
# CONFIG_SECURITY_SMACK is not set
# CONFIG_SECURITY_TOMOYO is not set
# CONFIG_SECURITY_APPARMOR is not set
CONFIG_AUDIT=y
CONFIG_AUDITSYSCALL=y
@ -3599,6 +3635,7 @@ CONFIG_AUDITSYSCALL=y
#
CONFIG_CRYPTO=y
CONFIG_CRYPTO_FIPS=y
CONFIG_CRYPTO_MANAGER_TESTS=y
CONFIG_CRYPTO_HW=y
CONFIG_CRYPTO_BLKCIPHER=y
CONFIG_CRYPTO_MANAGER=m
@ -4167,6 +4204,11 @@ CONFIG_USB_ATMEL=m
# CONFIG_RAMZSWAP is not set
# CONFIG_BATMAN_ADV is not set
# CONFIG_FB_SM7XX is not set
# CONFIG_SPECTRA is not set
# CONFIG_ZRAM is not set
# CONFIG_EASYCAP is not set
# CONFIG_SOLO6X10 is not set
# CONFIG_ACPI_QUICKSTART is not set
#
# Android
@ -4214,6 +4256,8 @@ CONFIG_KSM=y
CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
CONFIG_FSNOTIFY=y
CONFIG_FANOTIFY=y
CONFIG_FANOTIFY_ACCESS_PERMISSIONS=y
CONFIG_IEEE802154=m
CONFIG_IEEE802154_DRIVERS=m
@ -4253,6 +4297,8 @@ CONFIG_DEBUG_RODATA_TEST=y
CONFIG_DEBUG_NX_TEST=m
CONFIG_DEBUG_BOOT_PARAMS=y
CONFIG_DETECT_SOFTLOCKUP=y
CONFIG_LOCKUP_DETECTOR=y
# CONFIG_DEBUG_INFO_REDUCED is not set
# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set
CONFIG_DETECT_HUNG_TASK=y
# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set
@ -4291,3 +4337,13 @@ CONFIG_PROFILE_KSYM_TRACER=y
CONFIG_KPROBE_EVENT=y
# CONFIG_RAMOOPS is not set
CONFIG_IR_CORE=m
CONFIG_IR_ENE=m
CONFIG_IR_STREAMZAP=m
# CONFIG_TOUCHSCREEN_CY8CTMG110 is not set
# CONFIG_GPIO_SX150X is not set
# CONFIG_MFD_STMPE is not set
# CONFIG_MFD_MAX8998 is not set
# CONFIG_MFD_TPS6586X is not set

View File

@ -1,5 +1,6 @@
# CONFIG_HIGHMEM4G is not set
CONFIG_HIGHMEM64G=y
# CONFIG_OLPC_OPENFIRMWARE is not set
CONFIG_XEN_DEV_EVTCHN=m
CONFIG_XEN_SYS_HYPERVISOR=y

View File

@ -138,6 +138,7 @@ CONFIG_ACPI_THERMAL=y
CONFIG_ACPI_VIDEO=m
# CONFIG_ACPI_PROC_EVENT is not set
CONFIG_ACPI_HED=m
CONFIG_ACPI_EC_DEBUGFS=m
CONFIG_PM=y
CONFIG_HOTPLUG_PCI=y

View File

@ -332,3 +332,5 @@ CONFIG_SERIAL_GRLIB_GAISLER_APBUART=m
# CONFIG_MFD_TC35892 is not set
# CONFIG_GPIO_SCH is not set
# CONFIG_PPC_MPC512x is not set

View File

@ -149,6 +149,7 @@ CONFIG_FSL_EMB_PERFMON=y
CONFIG_MPC8272_ADS=y
CONFIG_PQ2FADS=y
CONFIG_EP8248E=y
CONFIG_MPC830x_RDB=y
CONFIG_MPC831x_RDB=y
CONFIG_MPC832x_MDS=y
CONFIG_MPC832x_RDB=y

View File

@ -226,3 +226,5 @@ CONFIG_SMSGIUCV_EVENT=m
# CONFIG_PREEMPT_TRACER is not set
CONFIG_VMCP=y
CONFIG_ZFCP_DIF=y

View File

@ -393,6 +393,7 @@ CONFIG_SENSORS_I5K_AMB=m
CONFIG_HP_WATCHDOG=m
CONFIG_OLPC=y
CONFIG_OLPC_OPENFIRMWARE=y
CONFIG_BATTERY_OLPC=y
CONFIG_MOUSE_PS2_OLPC=y
@ -479,6 +480,20 @@ CONFIG_TOSHIBA_BT_RFKILL=m
CONFIG_VGA_SWITCHEROO=y
CONFIG_LPC_SCH=m
CONFIG_INTEL_IDLE=m
CONFIG_PCI_CNB20LE_QUIRK=y
CONFIG_ACPI_EC_DEBUGFS=m
# CONFIG_ACPI_APEI_ERST_DEBUG is not set
CONFIG_INTEL_IDLE=y
# CONFIG_TOUCHSCREEN_CY8CTMG110 is not set
CONFIG_SENSORS_PKGTEMP=m
CONFIG_F71808E_WDT=m
CONFIG_HPWDT_NMI_DECODING=y
# CONFIG_MFD_TPS6586X is not set
# CONFIG_INTEL_MID_DMAC is not set
CONFIG_PCH_DMA=m
CONFIG_XEN_PLATFORM_PCI=m
# CONFIG_ACPI_QUICKSTART is not set
CONFIG_IDEAPAD_ACPI=m
CONFIG_INTEL_IPS=m

View File

@ -403,7 +403,21 @@ CONFIG_CRYPTO_GHASH_CLMUL_NI_INTEL=m
CONFIG_VGA_SWITCHEROO=y
CONFIG_LPC_SCH=m
CONFIG_INTEL_IDLE=m
CONFIG_I7300_IDLE=m
CONFIG_PCI_CNB20LE_QUIRK=y
CONFIG_ACPI_EC_DEBUGFS=m
# CONFIG_ACPI_APEI_ERST_DEBUG is not set
CONFIG_INTEL_IDLE=y
# CONFIG_TOUCHSCREEN_CY8CTMG110 is not set
CONFIG_SENSORS_PKGTEMP=m
CONFIG_F71808E_WDT=m
CONFIG_HPWDT_NMI_DECODING=y
# CONFIG_MFD_TPS6586X is not set
# CONFIG_INTEL_MID_DMAC is not set
CONFIG_PCH_DMA=m
CONFIG_XEN_PLATFORM_PCI=m
# CONFIG_ACPI_QUICKSTART is not set
CONFIG_IDEAPAD_ACPI=m
CONFIG_INTEL_IPS=m

View File

@ -1,348 +1,5 @@
From c2f1645ae87d5b7fc5e5973c3a93a4ae1684a76b Mon Sep 17 00:00:00 2001
From: Kyle McMartin <kyle@dreadnought.i.jkkm.org>
Date: Tue, 22 Jun 2010 11:31:13 +0100
Subject: Merge remote branch 'utrace/utrace-ptrace' into rawhide
% git log --oneline --no-merges 7e27d6e..a91f6b7
f979955 utrace-ptrace: fix compiling ptrace_regset under CONFIG_UTRACE
b5f196b utrace-ptrace: copy PTRACE_GETREGSET code to utrace-ptrace
d83135e utrace: fix utrace_maybe_reap() vs find_matching_engine() race
9a2c607 utrace: move CONFIG_UTRACE after AUDITSYSCALL in init/Kconfig
62f4621 utrace: s/rmb/mb/ in tracehook_notify_resume()
65f5e9d utrace: fix utrace_maybe_reap logic
ed1f9c2 utrace: fix syntax nit for !CONFIG_UTRACE
71e3f39 ptrace: add utrace comment
e7afc73 utrace: use WARN with text
a8ced33 utrace: cosmetic restructure
4330b80 utrace: remove some inline keywords
d4be40a utrace: remove report_clone special priority for utrace_attach_task on child
8c56566 ptrace: updates for utrace API changes
1900135 utrace: streamline callback API
97662d3 utrace: more cosmetic trivia
fd414cd utrace: more cosmetic cleanup
f30f068 utrace: cosmetic trivia
cfebda7 utrace: fix the comments about rmb() in task_utrace_struct()
875858a utrace: improve the comment in tracehook_notify_resume()
76b49a5 utrace: fix the ->cloning check in utrace_attach_delay()
e0755bb utrace: kill mb() in tracehook_report_death()
9fdc988 fix __must_check warnings
3e02499 kill suppress_sigtrap()
f872e69 utrace: don't set ->ops = utrace_detached_ops lockless
938482e utrace: fix doc typo
7fae049 utrace: avoid BUG_ON when engine leaves bogus si_signo
71b7a85 utrace: trivial, move CONFIG_UTRACE into "General setup"
9c8dbe0 utrace: reset report action for UTRACE_SYSCALL_RESUMED iteration
4c7514e join PTRACE_EVENT_SYSCALL_XXX states
a8f782e export __ptrace_detach() and do_notify_parent_cldstop()
c3473e1 ptrace_signal: check PT_PTRACED before reporting a signal
b396f5e tracehooks: check PT_PTRACED before reporting the single-step
45667dd tracehooks: kill some PT_PTRACED checks
e8a2f23 ptrace: cleanup ptrace_init_task()->ptrace_link() path
611dab8 kill CONFIG_UTRACE_PTRACE
8d3833e rm kernel/ptrace-common.h
494deb7 export __ptrace_detach(), add "ifndef CONFIG_UTRACE" into ptrace.c
05cb325 (upstream) reorder the code in kernel/ptrace.c
eb10f13 restore the old kernel/ptrace.c
ddcc525 utrace_resume: Avoid finish_resume_report() for UTRACE_RESUME
47852f9 mv kernel/ptrace.c kernel/ptrace-utrace.c
de5a46e utrace: fix UTRACE_SYSCALL_RESUMED nits
3bd4be9 stepping, accommodate to utrace-cleanup changes
679be9e Revert "utrace: synthesize SIGTRAP for single-stepping at syscall-exit"
23ab966 utrace: barrier nits
d3800b8 utrace: tracehook_init_task
64daf14 utrace: task_utrace_struct() barrier
f19442c utrace: synthesize SIGTRAP for single-stepping at syscall-exit
2583b32 utrace: nit for utrace-ptrace
a88b467 ptrace: x86: change syscall_trace_leave() to rely on tracehook when stepping
e01acf4 ptrace: x86: implement user_single_step_siginfo()
462a57b ptrace: change tracehook_report_syscall_exit() to handle stepping
172590d ptrace: powerpc: implement user_single_step_siginfo()
d63b43d ptrace: introduce user_single_step_siginfo() helper
c575558 utrace: barriers for initializing struct utrace
89df3c7 utrace: utrace_attach_task() forgets to return when ->utrace == NULL
4d17e95 utrace: finish_report() must never set ->resume = UTRACE_STOP
212f67e utrace: utrace_get_signal() must check ->pending_attach
eff6ca8 change ptrace_report_signal() to use user_single_step_siginfo()
cba1272 don't send the unnecessary SIGTRAP after SYSCALL_EXIT
8aa71a6 revert "turn PTRACE_EVENT_SIGTRAP into PTRACE_EVENT_SIGNAL"
90c8237 utrace-ptrace: minimally handle UTRACE_SYSCALL_RESUMED
a7e9198 utrace: clean up resume-action handling
962eb2f utrace: update after merge
e2ced71 re-introduce utrace_finish_stop() to fix the race with SIGKILL
603e19c turn PTRACE_EVENT_SIGTRAP into PTRACE_EVENT_SIGNAL
ff87f65 introduce suppress_sigtrap() to prevent unwanted send_sigtrap()
6505e3c move ptrace_resume()->send_sigtrap() logic into ptrace_report_signal()
5261baa prepare ptrace_report_signal() to synthesize SIGTRAP
ef9534b ptrace_request: turn ptrace_resume() into default case
f50c776 s/context/ctx/
228b2e3 ptrace_notify_stop: kill the temporary WARN_ON()
93e866a ptrace_request(PTRACE_KILL) should not(?) return -ESRCH
26fefca utrace: sticky resume action
28b2774b utrace: remove ->stopped field
9e0f357 utrace_set_events: nit clean up
6d0bad3 nits
48bab07 (utrace) utrace_get_signal: don't dequeue_signal() if ->group_stop_count
d4ef551 (upstream) signals: check ->group_stop_count after tracehook_get_signal()
6292daa ptrace_detach_task: don't use valid_signal()
c5a6a82 cosmetic, renames
e422a3f cosmetic, relocate some code in ptrace.c
b96e4db (upstream) introduce kernel/ptrace.h
7665564 (upstream) tracehook_signal_handler: check PT_PTRACED
7d708ca tracehooks: revert utrace-ptrace changes
4104e29 (upstream) ptrace_init_task: cleanup the usage of ptrace_link()
d04ccb7 revert all utrace-ptrace changes in ptrace.h
80786ce revert utrace-ptrace changes in kernel/signal.c
0b02f9e introduce PT_UTRACED to replace PT_PTRACED inside ptrace.c
030ce35 tracehooks: remove some PT_PTRACED checks
4b7b15a revert the clone() related changes in tracehook.h
769030e hack ptrace_check_attach() to make it almost correct
7aa5c3a cosmetic, fold do_ptrace_resume() into ptrace_resume()
d27ebc1 cosmetic, introduce ptrace_resume_action()
35fbca4 turn context->sysemu into PTRACE_O_SYSEMU
38a8c1f PTRACE_SYSEMU_SINGLESTEP support
4367836 PTRACE_SYSEMU support
16819db ptrace_report_clone: minor cleanups + comments
ac1afd8 ptrace_resume: rewrite request processing
6b0d4f6 do_ptrace_resume: always use ptrace_wake_up()
fa92ce3 do_ptrace_resume: consolidate multiple switch stmts
135d780 uglify the code again to report VFORK_DONE after VFORK
4e3f362 fix PTRACE_SYSCALL after PTRACE_EVENT_VFORK_DONE stop
3f95189 ptrace_report_clone: uglify even more to handle TRACEVFORKDONE without TRACEVFORK
66ca8b6 ptrace_report_clone: uglify CLONE_PTRACE/CLONE_UNTRACED behaviour to match upstream
fc82b2c pretend PTRACE_O_TRACEVFORKDONE doesn't exist
28aa15a utrace_set_events: never return -EINPROGRESS unless clearing some event bits
a7f4350 utrace_stop: do ptrace_notify_stop() unconditionally
cb78492 ptrace_report_exit: fix WARN_ON() condition
bb941c3 do_ptrace_notify_stop: document the usage of tracee->exit_code
383ba85 ptrace_wake_up: don't clear tracee->exit_code + update comments
3d5c221 ptrace_wake_up: add "bool force_wakeup" argument for implicit detach
be6862e ptrace_wake_up: clear context->stop_code
bfb40c8 detach: use ptrace_wake_up() instead of utrace_control()
7de148a shift context re-initialization from detach to reuse
464def3 cleanup/optimize reuse/attch in ptrace_attach_task()
50f56b9 ptrace_attach_task: rely on utrace_barrier(), don't check ->ops
03376fd use set_stop_code() in ptrace_report_signal(UTRACE_SIGNAL_HANDLER)
85f8b3a detach should reset the context of self-detaching engine
a27233a attach: try to re-use the self-detaching engine
8667615 ptrace_notify_stop: fix engine leak
3d5d053 ptrace_detach_task: don't use engine ptr before IS_ERR(engine)
01875c7 fold detach_signal() into ptrace_detach_task()
464c2b7 don't detach the engine with the parting signal
97b345c implement the basic detach-with-signal logic
a158247 rework access to context->siginfo
20ea83b introduce set_stop_code() helper
eb222ed cosmetic, misc renames
f83b2ca move "event << 8" into syscall_code()
4c99287 kill context->ev_name
df7c8f2 encode internal stop events in ->ev_code too
3f48297 introduce get_stop_code(context) helper
313bad1 introduce syscall_code(context) helper
47b5e2c don't clear context->ev_code for debugging
4e09fe3 convert ptrace_setsiginfo() to use ptrace_rw_siginfo()
53187be convert ptrace_getsiginfo() to use ptrace_rw_siginfo()
e7ac055 introduce ptrace_rw_siginfo() helper
c625793 move "resume signal" logic into the tracee's context
0768d89 UTRACE_SIGNAL_HANDLER should never see ->siginfo != NULL
e90cb71 don't use task_struct->ptrace_message
842684f do_ptrace_notify_stop: fix the race with SIGKILL
d0ed18d do_ptrace_notify_stop: backport the "sync wakeup" logic
08f4a21 fix the stepping over syscall
a55d174 implement the stacked SYSCALL_EXIT event
ba73824 ptrace_resume: don't ignore "data" argument
fbd4368 kill context->ev_array[]
3c6f822 Revert "ptrace_resume_signal() should use context->siginfo under ->siglock"
ee31432 Revert "UTRACE_SIGNAL_HANDLER should never see ->siginfo != NULL"
a4e5af1 Revert "introduce context_siginfo() helper"
9bc939a revert merge w/s change
6752625 introduce context_siginfo() helper
d43a453 UTRACE_SIGNAL_HANDLER should never see ->siginfo != NULL
e4e48df ptrace_resume_signal() should use context->siginfo under ->siglock
4492770 implement UTRACE_SIGNAL_HANDLER stepping
5f926a5 implement PTRACE_SINGLESTEP/PTRACE_SINGLEBLOCK
8b70ae1 ptrace_request: use ptrace_lookup_engine()
abd580d change ptrace_resume() to have the single "return"
85878ae introduce ptrace_lookup_engine()
74904f1 mv task_struct->last_siginfo ptrace_context->siginfo
2b17f4a pretens ptrace_detach(sig) works
075db41 ptrace_report_quiesce() can't trust fatal_signal_pending()
d583c87 remove the now unneeded code
69a6c83 break ptrace_report_signal()
d6a31ee do_ptrace_notify_stop: kill "->ev_message != 0" check
e194687 convert ptrace_report_exit()
8bf8304 PTRACE_EVENT_VFORK_DONE: set ev_options = PTRACE_O_TRACEVFORKDONE
b8f5e2a make sure PTRACE_SYSCALL reports SYSCALL_EXIT
258b27d make sure PTRACE_CONT "disables" SYSCALL_EXIT report
d26b659 introduce ptrace_event->ev_options
03a0fe3 convert ptrace_report_exec()
bea6139 convert ptrace_report_syscall_entry()
17dd96d cleanup/simplify stop/resume mess
97fc962 utrace: comments
c661ddb utrace: move struct utrace back where it belongs
95dcdee implement stacked stop events
8608da6 ptrace_report_syscall_exit: do not WARN() if killed
95a6b6b ptrace_report_clone: rework the stop/resume logic
25dd723 remove the current PTRACE_EVENT_VFORK_DONE logic
7d8900a ptrace_wake_up: fix the "compatibility bug" logic
9a50d27 ptrace_report_syscall_exit: return UTRACE_STOP, not UTRACE_RESUME
c07370d simplify utrace_add_engine() vs utrace_reap() protection
0f4d918 utrace_add_engine: cleanup
a24e891 fix utrace_reset() vs release_task() theoretical race
dfc0917 change attach/release to avoid unnecessary utrace_reap()
cbed668 utrace_attach_task: do no check ->exit_state
9d114a6 utrace_wakeup: do not check target->state
9368f18 utrace_wakeup: lock ->siglock directly
e9b58e9 convert ptrace_report_syscall_exit() to use ptrace_context
1d47e4d introduce context->resume_stopped()
c34d813 introduce context->stopped_code
b7edb5e introduce ptrace_notify_stop()
93b2e7e utrace_release_task: cosmetic
ac6e19c utrace_reap: loop lockless, do not clear ->ops and ->flags early
7852d10 utrace: slow_path -> pending_attach
c827b15 utrace_add_engine() should set ->utrace_flags |= REAP
2e12892 utrace_reap: fix missing callback
04852f3 utrace: do not force report on attach
37b68f7 kill ptrace_setoptions() and ptrace_update_utrace()
f1b39f3 use context->options instead of "->ptrace & PT_"
d05bf8e ptrace_set_options: use PTRACE_O_ instead of PT_
167b56a "disable" tracehook_prepare_clone()
5e526f3 introduce ptrace_set_options()
4a50ac1 introduce ptrace_context->options
0457aa8 introduce the empty struct ptrace_context
a2bca6f utrace_reset: do not use "unsafe mode"
eac91f4 utrace_control: don't mark_engine_detached() before engine_wants_stop()
c2916fb utrace_control: fix utrace_reset(safe) usage when ->exit_state != 0
c36a311 utrace_reset fix
8d2fc04 utrace: remove unused inline
64a8ca3 utrace_reset cleanup
d1a14ce utrace: change UTRACE_STOP bookkeeping
96fe3cc Revert "utrace_stop: fix UTRACE_DETACH race"
ceaae71 utrace: check QUIESCE before reporting UTRACE_SIGNAL_REPORT/HANDLER
fc30d20 utrace_do_stop: move "if (exit_state)" logic to the caller
9b655f7 utrace_do_stop: don't set ->stopped when ->exit_state
9ed6a39 utrace_set_events: never return -EINPROGRESS on a zombie
592d977 utrace_do_stop: cleanup the usage of ->siglock
7f51e58 utrace: fix utrace->signal_handler "leakage"
be5e266 utrace: utrace_finish_vfork: check ->vfork_stop lockless
c3580f1 utrace-ptrace: fix conditions in ptrace_do_detach
00932db utrace_stop: fix UTRACE_DETACH race
b032859 utrace: move utrace_stop down
a62ed15 utrace: consolidate utrace_reset callers
c8315d3 ptrace_do_detach: Fiddle code to avoid warnings.
e3635f1 utrace-ptrace: use WARN_ON(), suppress __must_check warning
8ba59d7 ptrace_attach_task: kill ->ptrace != 0 check
a18378e exit_ptrace: use ptrace_do_detach()
371c69c ptrace_detach: do ptrace_unlink() first
096f3ed ptrace_detach: kill the unconditional wakeup
d999521 ptrace_report_clone: rework auto-attaching
8cefebf move ->ptrace == 0 checks to ptrace_attach_task()
471d6f4 utrace_engine_ops: add release hook
78ca7e7 utrace_control: return -EINVAL for missing UTRACE_EVENT(QUIESCE)
fcb8fa0 change ptrace_traceme() to use the new helpers, kill prepare/finish attach
e82feff rework prepare_ptrace_attach/finish_ptrace_attach
3bea38f do not use engine->data
57cedd0 ptrace_detach_task: always do UTRACE_DETACH
2093f3a shift ptrace_utrace_exit() from tracehook_report_exit() to exit_ptrace()
33fb930 ptrace_resume()->send_sig() can crash
a7b05fd ptrace_check_attach: check child->parent
5ed4eff remove (almost all) !CONFIG_UTRACE_PTRACE code
fb9379c change utrace_stop() to return void
5bbbb41 kill utrace_report->killed
0b57f74 finish_utrace_stop: use __fatal_signal_pending(), dont take ->siglock
113a07e utrace: rework finish_report flag logic
8ad60bb utrace_stop: preserve report/interrupt requests across stop/resume
af3eb44 get_utrace_lock: do not check EXIT_DEAD
d87e8c4 finish_utrace_stop: check ->stopped lockless
3e0a686 utrace_report_jctl/utrace_get_signal: do not play with ->stopped
7d97118 utrace_do_stop: s/STOPPED/TRACED/ to protect against SIGCONT
ad2497a use tracehook_finish_jctl() to clear ->stopped
f99db9f utrace_report_jctl: do not play with the group-stop state
fd89498 introduce tracehook_finish_jctl() helper
ff6be89 do_signal_stop: do not call tracehook_notify_jctl() in TASK_STOPPED state
66e0705 utrace_stop: don't forget about SIGNAL_STOP_STOPPED
2edad7d utrace_wakeup: take ->group_stop_count into account
d4bcb57 utrace_reap: clear engine->flags when finishing detach
cf890ad utrace: fix utrace->reporting left set for no callback
cbe5188 More than one user has hit the -EEXIST problem when using utrace_attach_task and UTRACE_ATTACH_EXCLUSIVE without UTRACE_ATTACH_MATCH_DATA|_OPS. Document that a bit more.
52db080 UTRACE_SYSCALL_RESUMED repeat callback
5e67e22 utrace docbook: s/first/last/ braino
4bd78f8 utrace: reverse engine callback order for report_syscall_entry
1757088 utrace: WARN instead of BUG on misuse of UTRACE_*STEP without arch_has_*_step() check
5d4e97b utrace: restore tracehook_report_death comment misplaced in merges
cb49dcd utrace_report_syscall_entry: remove unnecessary recalc_sigpending() check
c0909b5 utrace_resume: fix potential TIF_SIGPENDING race
f0a1c64 utrace: use \t separator in /proc/pid/status
13a5838 utrace: init_task syntax nit
715d2a1 utrace: cosmetic
42de707 utrace_report_jctl: do splice_attaching
622013d utrace_resume: remove racy BUG_ON
282d685 whitespace fix
bec92f8 signals: tracehook_notify_jctl change
a7181aa utrace: simplify death report condition
4d8a6fd utrace: barrier between TIF_NOTIFY_RESUME check and utrace_flags/utrace->report checks
ae3096f utrace-ptrace: remove unsafe_exec and tracer_task hooks
325fecc utrace: get rid of tracer_task and unsafe_exec hooks
0084fc2 utrace: ensure UTRACE_REPORT callback return leads to callback after utrace_stop
5bdc6f1 utrace: cosmetic: DEAD_FLAGS_MASK macro
5c5bdbe utrace: cosmetic: _UTRACE_DEATH_EVENTS macro
f067223 utrace: make sure utrace_flags is nonzero before set_notify_resume at attach
e2d293e utrace: drop racy unlocked check in utrace_do_stop
68f3899 utrace: fix ->report_jctl @notify argument
c743327 utrace: avoid unnecessary list_for_each_safe
acd516b utrace_stop: trivial, kill the unnecessary assignment
81ed517 utrace_add_engine: add missing 'else' after 'if (utrace->reap)'
215a076 utrace: tracehook.h comment
a584c66 utrace: fix utrace_attach_delay() creator test
827ec3b utrace: comment ->reporting implementation
07732b4 utrace-ptrace: handle -ERESTARTNOINTR from utrace_attach_task
2233b06 utrace: finish utrace_reap conversion after indirect->direct struct utrace
dd30e86 utrace: fix utrace_attach_delay() to loop, remove struct utrace.cloning field
be4f357 get_utrace_lock: kill the bogus engine->kref.refcount check
c367207 utrace: clear struct in utrace_init_task
94f168c utrace: define UTRACE_API_VERSION
742f120 utrace: place struct utrace directly in task_struct
cb25a58 utrace: comment fixes
2b834a5 utrace-ptrace: struct utrace_attached_engine -> struct utrace_engine
6b8306a utrace: struct utrace_attached_engine -> struct utrace_engine
9fe3bac utrace-ptrace: Kconfig doc update
5bb0052 utrace: cosmetic changes
556a7e7 utrace-ptrace: fix resuming with blocked signal
3a9f4c8 utrace: order utrace_control() after callback return value processing
269150d Cosmetic reorganization to further simplify utrace pointer vs embedded-struct.
ea30176 Use task_utrace_struct() helper in utrace_interrupt_pending().
ed2098a Use task_utrace_struct() helper
97d5cde cosmetic code reorganization
4e8a7ca Remove UTRACE_DEBUG hacks
25fb674 utrace: exclude PTRACE_TRACEME
f286be7 utrace-ptrace: remove utrace_engine_put stub
e0c36bd Disable mutual exclusion if CONFIG_UTRACE_PTRACE
c93d704 utrace/ptrace mutual exclusion
594f22c cond_resched() before race-restart in utrace_attach_task
0da72f3 Clean up utrace_attach_task code.
fd3d457 utrace: ptrace cooperation
f357a74 utrace core
---
Documentation/DocBook/Makefile | 2 +-
Documentation/DocBook/utrace.tmpl | 590 +++++++++
fs/proc/array.c | 3 +
include/linux/ptrace.h | 3 +-
include/linux/sched.h | 6 +
include/linux/tracehook.h | 97 ++-
include/linux/utrace.h | 692 +++++++++++
init/Kconfig | 9 +
kernel/Makefile | 2 +
kernel/fork.c | 3 +
kernel/ptrace-utrace.c | 1127 +++++++++++++++++
kernel/ptrace.c | 620 +++++-----
kernel/signal.c | 4 +-
kernel/utrace.c | 2452 +++++++++++++++++++++++++++++++++++++
14 files changed, 5291 insertions(+), 319 deletions(-)
create mode 100644 Documentation/DocBook/utrace.tmpl
create mode 100644 include/linux/utrace.h
create mode 100644 kernel/ptrace-utrace.c
create mode 100644 kernel/utrace.c
diff --git a/Documentation/DocBook/Makefile b/Documentation/DocBook/Makefile
index c7e5dc7..e63f889 100644
index 34929f2..884c36b 100644
--- a/Documentation/DocBook/Makefile
+++ b/Documentation/DocBook/Makefile
@@ -14,7 +14,7 @@ DOCBOOKS := z8530book.xml mcabook.xml device-drivers.xml \
@ -356,10 +13,10 @@ index c7e5dc7..e63f889 100644
# The build process is as follows (targets):
diff --git a/Documentation/DocBook/utrace.tmpl b/Documentation/DocBook/utrace.tmpl
new file mode 100644
index 0000000..e149f49
index 0000000..0c40add
--- /dev/null
+++ b/Documentation/DocBook/utrace.tmpl
@@ -0,0 +1,590 @@
@@ -0,0 +1,589 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
+"http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd" []>
@ -719,13 +376,12 @@ index 0000000..e149f49
+ after a successful call, no event callbacks not requested in the new
+ flags will be made. It fails with <constant>-EALREADY</constant> if
+ you try to clear <constant>UTRACE_EVENT(DEATH)</constant> when the
+ <function>report_death</function> callback may already have begun, if
+ you try to clear <constant>UTRACE_EVENT(REAP)</constant> when the
+ <function>report_reap</function> callback may already have begun, or if
+ <function>report_death</function> callback may already have begun, or if
+ you try to newly set <constant>UTRACE_EVENT(DEATH)</constant> or
+ <constant>UTRACE_EVENT(QUIESCE)</constant> when the target is already
+ dead or dying. Like <function>utrace_control</function>, it returns
+ <constant>-ESRCH</constant> when the thread has already been detached
+ <constant>-ESRCH</constant> when the <function>report_reap</function>
+ callback may already have begun, or the thread has already been detached
+ (including forcible detach on reaping). This lets the tracing engine
+ know for sure which event callbacks it will or won't see after
+ <function>utrace_set_events</function> has returned. By checking for
@ -951,7 +607,7 @@ index 0000000..e149f49
+
+</book>
diff --git a/fs/proc/array.c b/fs/proc/array.c
index 9b58d38..c7c7881 100644
index fff6572..a67bd83 100644
--- a/fs/proc/array.c
+++ b/fs/proc/array.c
@@ -81,6 +81,7 @@
@ -991,10 +647,10 @@ index 4272521..235c1b0 100644
extern void ptrace_disable(struct task_struct *);
extern int ptrace_check_attach(struct task_struct *task, int kill);
diff --git a/include/linux/sched.h b/include/linux/sched.h
index f118809..d3fef7a 100644
index ce160d6..66a1ec8 100644
--- a/include/linux/sched.h
+++ b/include/linux/sched.h
@@ -1348,6 +1348,11 @@ struct task_struct {
@@ -1339,6 +1339,11 @@ struct task_struct {
#endif
seccomp_t seccomp;
@ -1006,7 +662,7 @@ index f118809..d3fef7a 100644
/* Thread group tracking */
u32 parent_exec_id;
u32 self_exec_id;
@@ -2033,6 +2038,7 @@ extern int kill_pgrp(struct pid *pid, int sig, int priv);
@@ -2030,6 +2035,7 @@ extern int kill_pgrp(struct pid *pid, int sig, int priv);
extern int kill_pid(struct pid *pid, int sig, int priv);
extern int kill_proc_info(int, struct siginfo *, pid_t);
extern int do_notify_parent(struct task_struct *, int);
@ -1975,12 +1631,12 @@ index 0000000..f251efe
+
+#endif /* linux/utrace.h */
diff --git a/init/Kconfig b/init/Kconfig
index 5cff9a9..c0b7f81 100644
index 2de5b1c..a283086 100644
--- a/init/Kconfig
+++ b/init/Kconfig
@@ -328,6 +328,15 @@ config AUDIT_TREE
@@ -332,6 +332,15 @@ config AUDIT_TREE
depends on AUDITSYSCALL
select INOTIFY
select FSNOTIFY
+config UTRACE
+ bool "Infrastructure for tracing and debugging user processes"
@ -1995,7 +1651,7 @@ index 5cff9a9..c0b7f81 100644
choice
diff --git a/kernel/Makefile b/kernel/Makefile
index 057472f..dfdc01c 100644
index 0b72d1a..b09c9a5 100644
--- a/kernel/Makefile
+++ b/kernel/Makefile
@@ -70,6 +70,8 @@ obj-$(CONFIG_IKCONFIG) += configs.o
@ -2004,11 +1660,11 @@ index 057472f..dfdc01c 100644
obj-$(CONFIG_KPROBES_SANITY_TEST) += test_kprobes.o
+obj-$(CONFIG_UTRACE) += utrace.o
+obj-$(CONFIG_UTRACE) += ptrace-utrace.o
obj-$(CONFIG_AUDIT) += audit.o auditfilter.o audit_watch.o
obj-$(CONFIG_AUDIT) += audit.o auditfilter.o
obj-$(CONFIG_AUDITSYSCALL) += auditsc.o
obj-$(CONFIG_GCOV_KERNEL) += gcov/
obj-$(CONFIG_AUDIT_WATCH) += audit_watch.o
diff --git a/kernel/fork.c b/kernel/fork.c
index b6cce14..ac4a6ec 100644
index 98b4508..3ceff6f 100644
--- a/kernel/fork.c
+++ b/kernel/fork.c
@@ -161,6 +161,7 @@ void free_task(struct task_struct *tsk)
@ -2019,7 +1675,7 @@ index b6cce14..ac4a6ec 100644
free_task_struct(tsk);
}
EXPORT_SYMBOL(free_task);
@@ -1007,6 +1008,8 @@ static struct task_struct *copy_process(unsigned long clone_flags,
@@ -1008,6 +1009,8 @@ static struct task_struct *copy_process(unsigned long clone_flags,
if (!p)
goto fork_out;
@ -2030,10 +1686,10 @@ index b6cce14..ac4a6ec 100644
rt_mutex_init_task(p);
diff --git a/kernel/ptrace-utrace.c b/kernel/ptrace-utrace.c
new file mode 100644
index 0000000..86234ee
index 0000000..1a8ba5e
--- /dev/null
+++ b/kernel/ptrace-utrace.c
@@ -0,0 +1,1127 @@
@@ -0,0 +1,1125 @@
+/*
+ * linux/kernel/ptrace.c
+ *
@ -2086,8 +1742,6 @@ index 0000000..86234ee
+ child->ptrace = 0;
+ child->parent = child->real_parent;
+ list_del_init(&child->ptrace_entry);
+
+ arch_ptrace_untrace(child);
+}
+
+struct ptrace_context {
@ -3162,7 +2816,7 @@ index 0000000..86234ee
+}
+#endif /* CONFIG_COMPAT */
diff --git a/kernel/ptrace.c b/kernel/ptrace.c
index 74a3d69..c77f9bf 100644
index f34d798..daed9e8 100644
--- a/kernel/ptrace.c
+++ b/kernel/ptrace.c
@@ -23,7 +23,317 @@
@ -3417,7 +3071,7 @@ index 74a3d69..c77f9bf 100644
+ out:
+ return ret;
+}
+
+int generic_ptrace_peekdata(struct task_struct *tsk, long addr, long data)
+{
+ unsigned long tmp;
@ -3478,7 +3132,7 @@ index 74a3d69..c77f9bf 100644
+ return ret;
+}
+#endif /* CONFIG_COMPAT */
+
+#ifndef CONFIG_UTRACE
/*
* ptrace a task: make the debugger its new parent and
@ -3537,10 +3191,47 @@ index 74a3d69..c77f9bf 100644
int ptrace_attach(struct task_struct *task)
{
int retval;
@@ -242,57 +505,6 @@ int ptrace_traceme(void)
return ret;
}
@@ -205,92 +468,41 @@ int ptrace_attach(struct task_struct *task)
send_sig_info(SIGSTOP, SEND_SIG_FORCED, task);
retval = 0;
-unlock_tasklist:
- write_unlock_irq(&tasklist_lock);
-unlock_creds:
- mutex_unlock(&task->cred_guard_mutex);
-out:
- return retval;
-}
-
-/**
- * ptrace_traceme -- helper for PTRACE_TRACEME
- *
- * Performs checks and sets PT_PTRACED.
- * Should be used by all ptrace implementations for PTRACE_TRACEME.
- */
-int ptrace_traceme(void)
-{
- int ret = -EPERM;
-
- write_lock_irq(&tasklist_lock);
- /* Are we already being traced? */
- if (!current->ptrace) {
- ret = security_ptrace_traceme(current->parent);
- /*
- * Check PF_EXITING to ensure ->real_parent has not passed
- * exit_ptrace(). Otherwise we don't report the error but
- * pretend ->real_parent untraces us right after return.
- */
- if (!ret && !(current->real_parent->flags & PF_EXITING)) {
- current->ptrace = PT_PTRACED;
- __ptrace_link(current, current->real_parent);
- }
- }
- write_unlock_irq(&tasklist_lock);
-
- return ret;
-}
-
-/*
- * Called with irqs disabled, returns true if childs should reap themselves.
- */
@ -3563,16 +3254,30 @@ index 74a3d69..c77f9bf 100644
- * If it's a zombie, our attachedness prevented normal parent notification
- * or self-reaping. Do notification now if it would have happened earlier.
- * If it should reap itself, return true.
- *
+unlock_tasklist:
+ write_unlock_irq(&tasklist_lock);
+unlock_creds:
+ mutex_unlock(&task->cred_guard_mutex);
+out:
+ return retval;
+}
+
+/**
+ * ptrace_traceme -- helper for PTRACE_TRACEME
*
- * If it's our own child, there is no notification to do. But if our normal
- * children self-reap, then this child was prevented by ptrace and we must
- * reap it now, in that case we must also wake up sub-threads sleeping in
- * do_wait().
- */
+ * Performs checks and sets PT_PTRACED.
+ * Should be used by all ptrace implementations for PTRACE_TRACEME.
*/
-static bool __ptrace_detach(struct task_struct *tracer, struct task_struct *p)
-{
+int ptrace_traceme(void)
{
- __ptrace_unlink(p);
-
+ int ret = -EPERM;
- if (p->exit_state == EXIT_ZOMBIE) {
- if (!task_detached(p) && thread_group_empty(p)) {
- if (!same_thread_group(p->real_parent, tracer))
@ -3586,17 +3291,29 @@ index 74a3d69..c77f9bf 100644
- /* Mark it as in the process of being reaped. */
- p->exit_state = EXIT_DEAD;
- return true;
- }
- }
-
- return false;
-}
-
int ptrace_detach(struct task_struct *child, unsigned int data)
{
bool dead = false;
@@ -346,56 +558,6 @@ void exit_ptrace(struct task_struct *tracer)
+ write_lock_irq(&tasklist_lock);
+ /* Are we already being traced? */
+ if (!current->ptrace) {
+ ret = security_ptrace_traceme(current->parent);
+ /*
+ * Check PF_EXITING to ensure ->real_parent has not passed
+ * exit_ptrace(). Otherwise we don't report the error but
+ * pretend ->real_parent untraces us right after return.
+ */
+ if (!ret && !(current->real_parent->flags & PF_EXITING)) {
+ current->ptrace = PT_PTRACED;
+ __ptrace_link(current, current->real_parent);
}
}
+ write_unlock_irq(&tasklist_lock);
- return false;
+ return ret;
}
int ptrace_detach(struct task_struct *child, unsigned int data)
@@ -352,56 +564,6 @@ void exit_ptrace(struct task_struct *tracer)
write_lock_irq(&tasklist_lock);
}
-int ptrace_readdata(struct task_struct *tsk, unsigned long src, char __user *dst, int len)
@ -3652,7 +3369,7 @@ index 74a3d69..c77f9bf 100644
static int ptrace_setoptions(struct task_struct *child, long data)
{
child->ptrace &= ~PT_TRACE_MASK;
@@ -456,7 +618,6 @@ static int ptrace_setsiginfo(struct task_struct *child, const siginfo_t *info)
@@ -462,7 +624,6 @@ static int ptrace_setsiginfo(struct task_struct *child, const siginfo_t *info)
return error;
}
@ -3660,7 +3377,7 @@ index 74a3d69..c77f9bf 100644
#ifdef PTRACE_SINGLESTEP
#define is_singlestep(request) ((request) == PTRACE_SINGLESTEP)
#else
@@ -510,47 +671,6 @@ static int ptrace_resume(struct task_struct *child, long request, long data)
@@ -516,47 +677,6 @@ static int ptrace_resume(struct task_struct *child, long request, long data)
return 0;
}
@ -3708,7 +3425,7 @@ index 74a3d69..c77f9bf 100644
int ptrace_request(struct task_struct *child, long request,
long addr, long data)
{
@@ -666,88 +786,7 @@ int ptrace_request(struct task_struct *child, long request,
@@ -672,88 +792,7 @@ int ptrace_request(struct task_struct *child, long request,
return ret;
}
@ -3797,7 +3514,7 @@ index 74a3d69..c77f9bf 100644
int compat_ptrace_request(struct task_struct *child, compat_long_t request,
compat_ulong_t addr, compat_ulong_t data)
{
@@ -825,42 +864,5 @@ int compat_ptrace_request(struct task_struct *child, compat_long_t request,
@@ -831,42 +870,5 @@ int compat_ptrace_request(struct task_struct *child, compat_long_t request,
return ret;
}
@ -3842,10 +3559,10 @@ index 74a3d69..c77f9bf 100644
#endif /* CONFIG_COMPAT */
+#endif /* CONFIG_UTRACE */
diff --git a/kernel/signal.c b/kernel/signal.c
index 906ae5a..8087f13 100644
index bded651..6d13d9f 100644
--- a/kernel/signal.c
+++ b/kernel/signal.c
@@ -1518,7 +1518,7 @@ int do_notify_parent(struct task_struct *tsk, int sig)
@@ -1521,7 +1521,7 @@ int do_notify_parent(struct task_struct *tsk, int sig)
return ret;
}
@ -3854,7 +3571,7 @@ index 906ae5a..8087f13 100644
{
struct siginfo info;
unsigned long flags;
@@ -1788,7 +1788,7 @@ static int do_signal_stop(int signr)
@@ -1791,7 +1791,7 @@ static int do_signal_stop(int signr)
static int ptrace_signal(int signr, siginfo_t *info,
struct pt_regs *regs, void *cookie)
{
@ -3865,10 +3582,10 @@ index 906ae5a..8087f13 100644
ptrace_signal_deliver(regs, cookie);
diff --git a/kernel/utrace.c b/kernel/utrace.c
new file mode 100644
index 0000000..f5a9e2c
index 0000000..4d61096
--- /dev/null
+++ b/kernel/utrace.c
@@ -0,0 +1,2452 @@
@@ -0,0 +1,2450 @@
+/*
+ * utrace infrastructure interface for debugging user processes
+ *
@ -4099,6 +3816,7 @@ index 0000000..f5a9e2c
+ */
+ list_add_tail(&engine->entry, &utrace->attaching);
+ utrace->pending_attach = 1;
+ utrace_engine_get(engine);
+ ret = 0;
+unlock:
+ spin_unlock(&utrace->lock);
@ -4172,10 +3890,10 @@ index 0000000..f5a9e2c
+ return ERR_PTR(-ENOMEM);
+
+ /*
+ * Initialize the new engine structure. It starts out with two
+ * refs: one ref to return, and one ref for being attached.
+ * Initialize the new engine structure. It starts out with one ref
+ * to return. utrace_add_engine() adds another for being attached.
+ */
+ kref_set(&engine->kref, 2);
+ kref_init(&engine->kref);
+ engine->flags = 0;
+ engine->ops = ops;
+ engine->data = data;
@ -4188,6 +3906,7 @@ index 0000000..f5a9e2c
+ engine = ERR_PTR(ret);
+ }
+
+
+ return engine;
+}
+EXPORT_SYMBOL_GPL(utrace_attach_task);
@ -4292,7 +4011,7 @@ index 0000000..f5a9e2c
+
+ utrace = task_utrace_struct(target);
+ spin_lock(&utrace->lock);
+ if (unlikely(!engine->ops) ||
+ if (unlikely(utrace->reap) || unlikely(!engine->ops) ||
+ unlikely(engine->ops == &utrace_detached_ops)) {
+ /*
+ * By the time we got the utrace lock,
@ -4358,13 +4077,12 @@ index 0000000..f5a9e2c
+ *
+ * This fails with -%EALREADY and does nothing if you try to clear
+ * %UTRACE_EVENT(%DEATH) when the @report_death callback may already have
+ * begun, if you try to clear %UTRACE_EVENT(%REAP) when the @report_reap
+ * callback may already have begun, or if you try to newly set
+ * %UTRACE_EVENT(%DEATH) or %UTRACE_EVENT(%QUIESCE) when @target is
+ * already dead or dying.
+ * begun, or if you try to newly set %UTRACE_EVENT(%DEATH) or
+ * %UTRACE_EVENT(%QUIESCE) when @target is already dead or dying.
+ *
+ * This can fail with -%ESRCH when @target has already been detached,
+ * including forcible detach on reaping.
+ * This fails with -%ESRCH if you try to clear %UTRACE_EVENT(%REAP) when
+ * the @report_reap callback may already have begun, or when @target has
+ * already been detached, including forcible detach on reaping.
+ *
+ * If @target was stopped before the call, then after a successful call,
+ * no event callbacks not requested in @events will be made; if
@ -4395,7 +4113,7 @@ index 0000000..f5a9e2c
+{
+ struct utrace *utrace;
+ unsigned long old_flags, old_utrace_flags;
+ int ret;
+ int ret = -EALREADY;
+
+ /*
+ * We just ignore the internal bit, so callers can use
@ -4410,14 +4128,12 @@ index 0000000..f5a9e2c
+ old_utrace_flags = target->utrace_flags;
+ old_flags = engine->flags & ~ENGINE_STOP;
+
+ if (target->exit_state &&
+ (((events & ~old_flags) & _UTRACE_DEATH_EVENTS) ||
+ (utrace->death &&
+ ((old_flags & ~events) & _UTRACE_DEATH_EVENTS)) ||
+ (utrace->reap && ((old_flags & ~events) & UTRACE_EVENT(REAP))))) {
+ spin_unlock(&utrace->lock);
+ return -EALREADY;
+ }
+ /*
+ * If utrace_report_death() is already progress now,
+ * it's too late to clear the death event bits.
+ */
+ if (((old_flags & ~events) & _UTRACE_DEATH_EVENTS) && utrace->death)
+ goto unlock;
+
+ /*
+ * When setting these flags, it's essential that we really
@ -4429,12 +4145,11 @@ index 0000000..f5a9e2c
+ * knows positively that utrace_report_death() will be called or
+ * that it won't.
+ */
+ if ((events & ~old_utrace_flags) & _UTRACE_DEATH_EVENTS) {
+ if ((events & ~old_flags) & _UTRACE_DEATH_EVENTS) {
+ read_lock(&tasklist_lock);
+ if (unlikely(target->exit_state)) {
+ read_unlock(&tasklist_lock);
+ spin_unlock(&utrace->lock);
+ return -EALREADY;
+ goto unlock;
+ }
+ target->utrace_flags |= events;
+ read_unlock(&tasklist_lock);
@ -4462,7 +4177,7 @@ index 0000000..f5a9e2c
+ if (utrace->reporting == engine)
+ ret = -EINPROGRESS;
+ }
+
+unlock:
+ spin_unlock(&utrace->lock);
+
+ return ret;
@ -6321,6 +6036,3 @@ index 0000000..f5a9e2c
+{
+ seq_printf(m, "Utrace:\t%lx\n", p->utrace_flags);
+}
--
1.7.0.1

View File

@ -79,9 +79,9 @@ Summary: The Linux kernel
# The next upstream release sublevel (base_sublevel+1)
%define upstream_sublevel %(echo $((%{base_sublevel} + 1)))
# The rc snapshot level
%define rcrev 0
%define rcrev 1
# The git snapshot level
%define gitrev 1
%define gitrev 0
# Set rpm version accordingly
%define rpmversion 2.6.%{upstream_sublevel}
%endif
@ -149,7 +149,6 @@ Summary: The Linux kernel
%define debugbuildsenabled 0
# Want to build a vanilla kernel build without any non-upstream patches?
# (well, almost none, we need nonintconfig for build purposes). Default to 0 (off).
%define with_vanilla %{?_with_vanilla: 1} %{?!_with_vanilla: 0}
# pkg_release is what we'll fill in for the rpm Release: field
@ -372,12 +371,12 @@ Summary: The Linux kernel
%define vdso_arches ppc ppc64
%endif
# Should make listnewconfig fail if there's config options
# printed out?
%if %{nopatches}%{using_upstream_branch}
# Ignore unknown options in our config-* files.
# Some options go with patches we're not applying.
%define oldconfig_target loose_nonint_oldconfig
%define listnewconfig_fail 0
%else
%define oldconfig_target nonint_oldconfig
%define listnewconfig_fail 1
%endif
# To temporarily exclude an architecture from being built, add it to
@ -579,9 +578,6 @@ Patch00: patch-2.6.%{base_sublevel}-git%{gitrev}.bz2
Patch02: git-linus.diff
# we always need nonintconfig, even for -vanilla kernels
Patch03: linux-2.6-build-nonintconfig.patch
# we also need compile fixes for -vanilla
Patch04: linux-2.6-compile-fixes.patch
@ -598,8 +594,6 @@ Patch09: linux-2.6-upstream-reverts.patch
Patch20: linux-2.6-hotfixes.patch
Patch30: git-utrace.patch
Patch31: utrace-ptrace-fix-build.patch
Patch32: utrace-remove-use-of-kref_set.patch
Patch150: linux-2.6.29-sparc-IOC_TYPECHECK.patch
@ -614,8 +608,6 @@ Patch204: linux-2.6-debug-always-inline-kzalloc.patch
Patch380: linux-2.6-defaults-pci_no_msi.patch
Patch383: linux-2.6-defaults-aspm.patch
Patch384: pci-acpi-disable-aspm-if-no-osc.patch
Patch385: pci-aspm-dont-enable-too-early.patch
Patch390: linux-2.6-defaults-acpi-video.patch
Patch391: linux-2.6-acpi-video-dos.patch
@ -671,16 +663,12 @@ Patch2901: linux-2.6-v4l-dvb-experimental.patch
Patch2902: linux-2.6-v4l-dvb-uvcvideo-update.patch
Patch2910: linux-2.6-v4l-dvb-add-lgdt3304-support.patch
Patch2911: linux-2.6-v4l-dvb-add-kworld-a340-support.patch
Patch2912: linux-2.6-v4l-dvb-ir-core-update.patch
Patch2913: linux-2.6-v4l-dvb-ir-core-memleak-fixes.patch
Patch2915: lirc-staging-2.6.36.patch
#Patch2916: lirc-staging-2.6.36-fixes.patch
Patch2917: hdpvr-ir-enable.patch
# fs fixes
Patch3000: linux-2.6-ext4-fix-freeze-deadlock.patch
# NFSv4
@ -696,8 +684,6 @@ Patch12018: neuter_intel_microcode_load.patch
Patch12030: ssb_check_for_sprom.patch
Patch12040: only-use-alpha2-regulatory-information-from-country-IE.patch
%endif
BuildRoot: %{_tmppath}/kernel-%{KVERREL}-root
@ -1099,11 +1085,6 @@ make -f %{SOURCE20} VERSION=%{version} configs
ApplyOptionalPatch git-linus.diff
# This patch adds a "make nonint_oldconfig" which is non-interactive and
# also gives a list of missing options at the end. Useful for automated
# builds (as used in the buildsystem).
ApplyPatch linux-2.6-build-nonintconfig.patch
ApplyPatch linux-2.6-makefile-after_link.patch
#
@ -1120,8 +1101,6 @@ ApplyPatch linux-2.6-hotfixes.patch
# Roland's utrace ptrace replacement.
ApplyPatch git-utrace.patch
ApplyPatch utrace-ptrace-fix-build.patch
ApplyPatch utrace-remove-use-of-kref_set.patch
# Architecture patches
# x86(-64)
@ -1150,7 +1129,6 @@ ApplyPatch linux-2.6-32bit-mmap-exec-randomization.patch
#
# ext4
ApplyPatch linux-2.6-ext4-fix-freeze-deadlock.patch
# xfs
@ -1175,7 +1153,7 @@ ApplyPatch linux-2.6-acpi-debug-infinite-loop.patch
ApplyPatch linux-2.6-debug-sizeof-structs.patch
ApplyPatch linux-2.6-debug-nmi-timeout.patch
ApplyPatch linux-2.6-debug-taint-vm.patch
ApplyPatch linux-2.6-debug-vm-would-have-oomkilled.patch
###FIX###ApplyPatch linux-2.6-debug-vm-would-have-oomkilled.patch
ApplyPatch linux-2.6-debug-always-inline-kzalloc.patch
#
@ -1185,10 +1163,6 @@ ApplyPatch linux-2.6-debug-always-inline-kzalloc.patch
ApplyPatch linux-2.6-defaults-pci_no_msi.patch
# enable ASPM by default on hardware we expect to work
ApplyPatch linux-2.6-defaults-aspm.patch
# disable aspm if acpi doesn't provide an _OSC method
ApplyPatch pci-acpi-disable-aspm-if-no-osc.patch
# allow drivers to disable aspm at load time
ApplyPatch pci-aspm-dont-enable-too-early.patch
#
# SCSI Bits.
@ -1242,7 +1216,7 @@ ApplyPatch fix_xen_guest_on_old_EC2.patch
#ApplyPatch revert-drm-kms-toggle-poll-around-switcheroo.patch
# Nouveau DRM + drm fixes
ApplyPatch drm-nouveau-updates.patch
#ApplyPatch drm-nouveau-updates.patch
ApplyPatch drm-intel-big-hammer.patch
ApplyOptionalPatch drm-intel-next.patch
ApplyPatch drm-intel-make-lvds-work.patch
@ -1260,15 +1234,12 @@ ApplyPatch linux-2.6-silence-acpi-blacklist.patch
ApplyOptionalPatch linux-2.6-v4l-dvb-fixes.patch
ApplyOptionalPatch linux-2.6-v4l-dvb-update.patch
ApplyOptionalPatch linux-2.6-v4l-dvb-experimental.patch
ApplyPatch linux-2.6-v4l-dvb-uvcvideo-update.patch
#ApplyPatch linux-2.6-v4l-dvb-uvcvideo-update.patch
#ApplyPatch linux-2.6-v4l-dvb-ir-core-update.patch
ApplyPatch linux-2.6-v4l-dvb-ir-core-update.patch
ApplyPatch linux-2.6-v4l-dvb-ir-core-memleak-fixes.patch
ApplyPatch linux-2.6-v4l-dvb-add-lgdt3304-support.patch
ApplyPatch linux-2.6-v4l-dvb-add-kworld-a340-support.patch
###FIX###ApplyPatch linux-2.6-v4l-dvb-add-lgdt3304-support.patch
# http://www.lirc.org/
ApplyPatch lirc-staging-2.6.36.patch
#ApplyOptionalPatch lirc-staging-2.6.36-fixes.patch
# enable IR receiver on Hauppauge HD PVR (v4l-dvb merge pending)
ApplyPatch hdpvr-ir-enable.patch
@ -1281,8 +1252,6 @@ ApplyPatch neuter_intel_microcode_load.patch
# rhbz#533746
#ApplyPatch ssb_check_for_sprom.patch
ApplyPatch only-use-alpha2-regulatory-information-from-country-IE.patch
# END OF PATCH APPLICATIONS
%endif
@ -1314,7 +1283,14 @@ for i in *.config
do
mv $i .config
Arch=`head -1 .config | cut -b 3-`
make ARCH=$Arch %{oldconfig_target} > /dev/null
make ARCH=$Arch listnewconfig | egrep '^CONFIG_' >.newoptions || true
%if %{listnewconfig_fail}
if [ -s .newoptions ]; then
cat .newoptions
exit 0
fi
%endif
rm -f .newoptions
echo "# $Arch" > configs/$i
cat .config >> configs/$i
done
@ -1391,7 +1367,7 @@ BuildKernel() {
Arch=`head -1 .config | cut -b 3-`
echo USING ARCH=$Arch
make -s ARCH=$Arch %{oldconfig_target} > /dev/null
make -s ARCH=$Arch oldnoconfig >/dev/null
make -s ARCH=$Arch V=1 %{?_smp_mflags} $MakeTarget %{?sparse_mflags}
make -s ARCH=$Arch V=1 %{?_smp_mflags} modules %{?sparse_mflags} || exit 1
@ -1882,6 +1858,9 @@ fi
# || ||
%changelog
* Tue Aug 17 2010 Kyle McMartin <kyle@redhat.com>
- Linux 2.6.36-rc1
* Tue Aug 17 2010 Kyle McMartin <kyle@redhat.com>
- Prevent scripts/setlocalversion from mucking with our version
numbers.

View File

@ -1,128 +0,0 @@
diff --git a/scripts/kconfig/Makefile b/scripts/kconfig/Makefile
index 6d69c7c..ff84d12 100644
--- a/scripts/kconfig/Makefile
+++ b/scripts/kconfig/Makefile
@@ -58,6 +58,11 @@ localyesconfig: $(obj)/streamline_config.pl $(obj)/conf
fi
$(Q)rm -f .tmp.config
+nonint_oldconfig: $(obj)/conf
+ $< -b $(Kconfig)
+loose_nonint_oldconfig: $(obj)/conf
+ $< -B $(Kconfig)
+
# Create new linux.pot file
# Adjust charset to UTF-8 in .po file to accept UTF-8 in Kconfig files
# The symlink is used to repair a deficiency in arch/um
diff --git a/scripts/kconfig/conf.c b/scripts/kconfig/conf.c
index 9960d1c..ac8d455 100644
--- a/scripts/kconfig/conf.c
+++ b/scripts/kconfig/conf.c
@@ -23,6 +23,8 @@ enum {
ask_all,
ask_new,
ask_silent,
+ dont_ask,
+ dont_ask_dont_tell,
set_default,
set_yes,
set_mod,
@@ -360,7 +362,10 @@ static void conf(struct menu *menu)
switch (prop->type) {
case P_MENU:
- if (input_mode == ask_silent && rootEntry != menu) {
+ if ((input_mode == ask_silent ||
+ input_mode == dont_ask ||
+ input_mode == dont_ask_dont_tell) &&
+ rootEntry != menu) {
check_conf(menu);
return;
}
@@ -406,6 +411,8 @@ conf_childs:
indent -= 2;
}
+static int return_value;
+
static void check_conf(struct menu *menu)
{
struct symbol *sym;
@@ -418,12 +425,21 @@ static void check_conf(struct menu *menu)
if (sym && !sym_has_value(sym)) {
if (sym_is_changable(sym) ||
(sym_is_choice(sym) && sym_get_tristate_value(sym) == yes)) {
+ if (input_mode == dont_ask ||
+ input_mode == dont_ask_dont_tell) {
+ if (input_mode == dont_ask &&
+ sym->name && !sym_is_choice_value(sym)) {
+ fprintf(stderr,"CONFIG_%s\n",sym->name);
+ ++return_value;
+ }
+ } else {
if (!conf_cnt++)
printf(_("*\n* Restart config...\n*\n"));
rootEntry = menu_get_parent_menu(menu);
conf(rootEntry);
}
}
+ }
for (child = menu->list; child; child = child->next)
check_conf(child);
@@ -439,7 +455,7 @@ int main(int ac, char **av)
bindtextdomain(PACKAGE, LOCALEDIR);
textdomain(PACKAGE);
- while ((opt = getopt(ac, av, "osdD:nmyrh")) != -1) {
+ while ((opt = getopt(ac, av, "osbBdD:nmyrh")) != -1) {
switch (opt) {
case 'o':
input_mode = ask_silent;
@@ -448,6 +464,12 @@ int main(int ac, char **av)
input_mode = ask_silent;
sync_kconfig = 1;
break;
+ case 'b':
+ input_mode = dont_ask;
+ break;
+ case 'B':
+ input_mode = dont_ask_dont_tell;
+ break;
case 'd':
input_mode = set_default;
break;
@@ -525,6 +547,8 @@ int main(int ac, char **av)
case ask_silent:
case ask_all:
case ask_new:
+ case dont_ask:
+ case dont_ask_dont_tell:
conf_read(NULL);
break;
case set_no:
@@ -586,12 +610,16 @@ int main(int ac, char **av)
conf(&rootmenu);
input_mode = ask_silent;
/* fall through */
+ case dont_ask:
+ case dont_ask_dont_tell:
case ask_silent:
/* Update until a loop caused no more changes */
do {
conf_cnt = 0;
check_conf(&rootmenu);
- } while (conf_cnt);
+ } while (conf_cnt &&
+ (input_mode != dont_ask &&
+ input_mode != dont_ask_dont_tell));
break;
}
@@ -613,5 +641,5 @@ int main(int ac, char **av)
exit(1);
}
}
- return 0;
+ return return_value;
}

View File

@ -1,46 +0,0 @@
[PATCH] ext4: fix freeze deadlock under IO
Commit 6b0310fbf087ad6 caused a regression resulting in deadlocks
when freezing a filesystem which had active IO; the vfs_check_frozen
level (SB_FREEZE_WRITE) did not let the freeze-related IO syncing
through. Duh.
Changing the test to FREEZE_TRANS should let the normal freeze
syncing get through the fs, but still block any transactions from
starting once the fs is completely frozen.
I tested this by running fsstress in the background while periodically
snapshotting the fs and running fsck on the result. I ran into
occasional deadlocks, but different ones. I think this is a
fine fix for the problem at hand, and the other deadlocky things
will need more investigation.
Reported-by: Phillip Susi <psusi@cfl.rr.com>
Signed-off-by: Eric Sandeen <sandeen@redhat.com>
---
diff --git a/fs/ext4/super.c b/fs/ext4/super.c
index 4e8983a..a45ced9 100644
--- a/fs/ext4/super.c
+++ b/fs/ext4/super.c
@@ -241,7 +241,7 @@ handle_t *ext4_journal_start_sb(struct super_block *sb, int nblocks)
if (sb->s_flags & MS_RDONLY)
return ERR_PTR(-EROFS);
- vfs_check_frozen(sb, SB_FREEZE_WRITE);
+ vfs_check_frozen(sb, SB_FREEZE_TRANS);
/* Special case here: if the journal has aborted behind our
* backs (eg. EIO in the commit thread), then we still need to
* take the FS itself readonly cleanly. */
@@ -3491,7 +3491,7 @@ int ext4_force_commit(struct super_block *sb)
journal = EXT4_SB(sb)->s_journal;
if (journal) {
- vfs_check_frozen(sb, SB_FREEZE_WRITE);
+ vfs_check_frozen(sb, SB_FREEZE_TRANS);
ret = ext4_journal_force_commit(journal);
}

View File

@ -42,16 +42,18 @@ index 79da65d..f11c21b 100644
cmd_vdso64as = $(CC) $(a_flags) -c -o $@ $<
diff --git a/arch/x86/vdso/Makefile b/arch/x86/vdso/Makefile
index 6b4ffed..cbc3d05 100644
index 4a2afa1..12ad9f7 100644
--- a/arch/x86/vdso/Makefile
+++ b/arch/x86/vdso/Makefile
@@ -120,7 +120,8 @@ $(obj)/vdso32-syms.lds: $(vdso32.so-y:%=$(obj)/vdso32-%-syms.lds) FORCE
@@ -120,8 +120,9 @@ $(obj)/vdso32-syms.lds: $(vdso32.so-y:%=$(obj)/vdso32-%-syms.lds) FORCE
quiet_cmd_vdso = VDSO $@
cmd_vdso = $(CC) -nostdlib -o $@ \
$(VDSO_LDFLAGS) $(VDSO_LDFLAGS_$(filter %.lds,$(^F))) \
- -Wl,-T,$(filter %.lds,$^) $(filter %.o,$^)
- -Wl,-T,$(filter %.lds,$^) $(filter %.o,$^) && \
- sh $(srctree)/$(src)/checkundef.sh '$(NM)' '$@'
+ -Wl,-T,$(filter %.lds,$^) $(filter %.o,$^) \
+ $(if $(AFTER_LINK),; $(AFTER_LINK))
+ $(if $(AFTER_LINK),; $(AFTER_LINK)) && \
+ sh $(srctree)/$(src)/checkundef.sh '$(NM)' '$@'
VDSO_LDFLAGS = -fPIC -shared $(call cc-ldoption, -Wl$(comma)--hash-style=sysv)
GCOV_PROFILE := n

View File

@ -64,26 +64,3 @@ Signed-off-by: Dave Jones <davej@redhat.com>
}
#endif
Some devices (like the nuforce udac) spew this quite a lot.
This patch kinda sucks, but it'll shut things up for now.
Probably not an upstream candidate. I suspect the answer would be
"don't turn SND_DEBUG then"
--- linux-2.6.34.noarch/sound/usb/clock.c~ 2010-07-16 22:11:41.000000000 -0400
+++ linux-2.6.34.noarch/sound/usb/clock.c 2010-07-16 22:15:21.000000000 -0400
@@ -212,8 +212,13 @@ static int set_sample_rate_v1(struct snd
/* if endpoint doesn't have sampling rate control, bail out */
if (!(fmt->attributes & UAC_EP_CS_ATTR_SAMPLE_RATE)) {
- snd_printk(KERN_WARNING "%d:%d:%d: endpoint lacks sample rate attribute bit, cannot set.\n",
+ static int once;
+
+ if (!once) {
+ snd_printk(KERN_WARNING "%d:%d:%d: endpoint lacks sample rate attribute bit, cannot set.\n",
dev->devnum, iface, fmt->altsetting);
+ once = 1;
+ }
return 0;
}

View File

@ -1,165 +0,0 @@
commit 611225f5e7f9d11c4b119fac224f1bd6903b0150
Author: Jarod Wilson <jarod@redhat.com>
Date: Sun Mar 7 17:55:43 2010 -0300
V4L/DVB: dvb: add support for kworld 340u and ub435-q to em28xx-dvb
This adds support for the KWorld PlusTV 340U and KWorld UB345-Q ATSC
sticks, which are really the same device. The sticks have an eMPIA
em2870 usb bridge chipset, an LG Electronics LGDT3304 ATSC/QAM
demodulator and an NXP TDA18271HD tuner -- early versions of the 340U
have a a TDA18271HD/C1, later models and the UB435-Q have a C2.
The stick has been tested succesfully with both VSB_8 and QAM_256 signals.
Its using lgdt3304 support added to the lgdt3305 driver by a prior patch,
rather than the current lgdt3304 driver, as its severely lacking in
functionality by comparison (see said patch for details).
Signed-off-by: Jarod Wilson <jarod@redhat.com>
Signed-off-by: Michael Krufky <mkrufky@kernellabs.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
diff --git a/Documentation/video4linux/CARDLIST.em28xx b/Documentation/video4linux/CARDLIST.em28xx
index 3a623aa..5c56875 100644
--- a/Documentation/video4linux/CARDLIST.em28xx
+++ b/Documentation/video4linux/CARDLIST.em28xx
@@ -72,3 +72,4 @@
73 -> Reddo DVB-C USB TV Box (em2870)
74 -> Actionmaster/LinXcel/Digitus VC211A (em2800)
75 -> Dikom DK300 (em2882)
+ 76 -> KWorld PlusTV 340U or UB435-Q (ATSC) (em2870) [1b80:a340]
diff --git a/drivers/media/video/em28xx/em28xx-cards.c b/drivers/media/video/em28xx/em28xx-cards.c
index 3a4fd85..ffbe544 100644
--- a/drivers/media/video/em28xx/em28xx-cards.c
+++ b/drivers/media/video/em28xx/em28xx-cards.c
@@ -158,6 +158,22 @@ static struct em28xx_reg_seq evga_indtube_digital[] = {
{ -1, -1, -1, -1},
};
+/*
+ * KWorld PlusTV 340U and UB435-Q (ATSC) GPIOs map:
+ * EM_GPIO_0 - currently unknown
+ * EM_GPIO_1 - LED disable/enable (1 = off, 0 = on)
+ * EM_GPIO_2 - currently unknown
+ * EM_GPIO_3 - currently unknown
+ * EM_GPIO_4 - TDA18271HD/C1 tuner (1 = active, 0 = in reset)
+ * EM_GPIO_5 - LGDT3304 ATSC/QAM demod (1 = active, 0 = in reset)
+ * EM_GPIO_6 - currently unknown
+ * EM_GPIO_7 - currently unknown
+ */
+static struct em28xx_reg_seq kworld_a340_digital[] = {
+ {EM28XX_R08_GPIO, 0x6d, ~EM_GPIO_4, 10},
+ { -1, -1, -1, -1},
+};
+
/* Pinnacle Hybrid Pro eb1a:2881 */
static struct em28xx_reg_seq pinnacle_hybrid_pro_analog[] = {
{EM28XX_R08_GPIO, 0xfd, ~EM_GPIO_4, 10},
@@ -1667,6 +1683,16 @@ struct em28xx_board em28xx_boards[] = {
.tuner_gpio = reddo_dvb_c_usb_box,
.has_dvb = 1,
},
+ /* 1b80:a340 - Empia EM2870, NXP TDA18271HD and LG DT3304, sold
+ * initially as the KWorld PlusTV 340U, then as the UB435-Q.
+ * Early variants have a TDA18271HD/C1, later ones a TDA18271HD/C2 */
+ [EM2870_BOARD_KWORLD_A340] = {
+ .name = "KWorld PlusTV 340U or UB435-Q (ATSC)",
+ .tuner_type = TUNER_ABSENT, /* Digital-only TDA18271HD */
+ .has_dvb = 1,
+ .dvb_gpio = kworld_a340_digital,
+ .tuner_gpio = default_tuner_gpio,
+ },
};
const unsigned int em28xx_bcount = ARRAY_SIZE(em28xx_boards);
@@ -1788,6 +1814,8 @@ struct usb_device_id em28xx_id_table[] = {
.driver_info = EM2820_BOARD_IODATA_GVMVP_SZ },
{ USB_DEVICE(0xeb1a, 0x50a6),
.driver_info = EM2860_BOARD_GADMEI_UTV330 },
+ { USB_DEVICE(0x1b80, 0xa340),
+ .driver_info = EM2870_BOARD_KWORLD_A340 },
{ },
};
MODULE_DEVICE_TABLE(usb, em28xx_id_table);
diff --git a/drivers/media/video/em28xx/em28xx-dvb.c b/drivers/media/video/em28xx/em28xx-dvb.c
index cf1d8c3..3ac8d30 100644
--- a/drivers/media/video/em28xx/em28xx-dvb.c
+++ b/drivers/media/video/em28xx/em28xx-dvb.c
@@ -30,11 +30,13 @@
#include "tuner-simple.h"
#include "lgdt330x.h"
+#include "lgdt3305.h"
#include "zl10353.h"
#include "s5h1409.h"
#include "mt352.h"
#include "mt352_priv.h" /* FIXME */
#include "tda1002x.h"
+#include "tda18271.h"
MODULE_DESCRIPTION("driver for em28xx based DVB cards");
MODULE_AUTHOR("Mauro Carvalho Chehab <mchehab@infradead.org>");
@@ -231,6 +233,18 @@ static struct lgdt330x_config em2880_lgdt3303_dev = {
.demod_chip = LGDT3303,
};
+static struct lgdt3305_config em2870_lgdt3304_dev = {
+ .i2c_addr = 0x0e,
+ .demod_chip = LGDT3304,
+ .spectral_inversion = 1,
+ .deny_i2c_rptr = 1,
+ .mpeg_mode = LGDT3305_MPEG_PARALLEL,
+ .tpclk_edge = LGDT3305_TPCLK_FALLING_EDGE,
+ .tpvalid_polarity = LGDT3305_TP_VALID_HIGH,
+ .vsb_if_khz = 3250,
+ .qam_if_khz = 4000,
+};
+
static struct zl10353_config em28xx_zl10353_with_xc3028 = {
.demod_address = (0x1e >> 1),
.no_tuner = 1,
@@ -247,6 +261,17 @@ static struct s5h1409_config em28xx_s5h1409_with_xc3028 = {
.mpeg_timing = S5H1409_MPEGTIMING_CONTINOUS_NONINVERTING_CLOCK
};
+static struct tda18271_std_map kworld_a340_std_map = {
+ .atsc_6 = { .if_freq = 3250, .agc_mode = 3, .std = 0,
+ .if_lvl = 1, .rfagc_top = 0x37, },
+ .qam_6 = { .if_freq = 4000, .agc_mode = 3, .std = 1,
+ .if_lvl = 1, .rfagc_top = 0x37, },
+};
+
+static struct tda18271_config kworld_a340_config = {
+ .std_map = &kworld_a340_std_map,
+};
+
static struct zl10353_config em28xx_zl10353_xc3028_no_i2c_gate = {
.demod_address = (0x1e >> 1),
.no_tuner = 1,
@@ -572,6 +597,14 @@ static int dvb_init(struct em28xx *dev)
}
}
break;
+ case EM2870_BOARD_KWORLD_A340:
+ dvb->frontend = dvb_attach(lgdt3305_attach,
+ &em2870_lgdt3304_dev,
+ &dev->i2c_adap);
+ if (dvb->frontend != NULL)
+ dvb_attach(tda18271_attach, dvb->frontend, 0x60,
+ &dev->i2c_adap, &kworld_a340_config);
+ break;
default:
em28xx_errdev("/2: The frontend of your DVB/ATSC card"
" isn't supported yet\n");
diff --git a/drivers/media/video/em28xx/em28xx.h b/drivers/media/video/em28xx/em28xx.h
index 6216786..1c61a6b 100644
--- a/drivers/media/video/em28xx/em28xx.h
+++ b/drivers/media/video/em28xx/em28xx.h
@@ -114,6 +114,7 @@
#define EM2870_BOARD_REDDO_DVB_C_USB_BOX 73
#define EM2800_BOARD_VC211A 74
#define EM2882_BOARD_DIKOM_DK300 75
+#define EM2870_BOARD_KWORLD_A340 76
/* Limits minimum and default number of buffers */
#define EM28XX_MIN_BUF 4

View File

@ -1,142 +0,0 @@
drivers/media/IR/imon.c | 20 +-------------------
drivers/media/IR/mceusb.c | 15 +--------------
2 files changed, 2 insertions(+), 33 deletions(-)
diff --git a/drivers/media/IR/imon.c b/drivers/media/IR/imon.c
index 65c125e..c185422 100644
--- a/drivers/media/IR/imon.c
+++ b/drivers/media/IR/imon.c
@@ -87,7 +87,6 @@ static ssize_t lcd_write(struct file *file, const char *buf,
struct imon_context {
struct device *dev;
struct ir_dev_props *props;
- struct ir_input_dev *ir;
/* Newer devices have two interfaces */
struct usb_device *usbdev_intf0;
struct usb_device *usbdev_intf1;
@@ -1656,7 +1655,6 @@ static struct input_dev *imon_init_idev(struct imon_context *ictx)
{
struct input_dev *idev;
struct ir_dev_props *props;
- struct ir_input_dev *ir;
int ret, i;
idev = input_allocate_device();
@@ -1671,12 +1669,6 @@ static struct input_dev *imon_init_idev(struct imon_context *ictx)
goto props_alloc_failed;
}
- ir = kzalloc(sizeof(struct ir_input_dev), GFP_KERNEL);
- if (!ir) {
- dev_err(ictx->dev, "remote ir input dev allocation failed\n");
- goto ir_dev_alloc_failed;
- }
-
snprintf(ictx->name_idev, sizeof(ictx->name_idev),
"iMON Remote (%04x:%04x)", ictx->vendor, ictx->product);
idev->name = ictx->name_idev;
@@ -1706,14 +1698,9 @@ static struct input_dev *imon_init_idev(struct imon_context *ictx)
props->change_protocol = imon_ir_change_protocol;
ictx->props = props;
- ictx->ir = ir;
- memcpy(&ir->dev, ictx->dev, sizeof(struct device));
-
usb_to_input_id(ictx->usbdev_intf0, &idev->id);
idev->dev.parent = ictx->dev;
- input_set_drvdata(idev, ir);
-
ret = ir_input_register(idev, RC_MAP_IMON_PAD, props, MOD_NAME);
if (ret < 0) {
dev_err(ictx->dev, "remote input dev register failed\n");
@@ -1723,8 +1710,6 @@ static struct input_dev *imon_init_idev(struct imon_context *ictx)
return idev;
idev_register_failed:
- kfree(ir);
-ir_dev_alloc_failed:
kfree(props);
props_alloc_failed:
input_free_device(idev);
@@ -1944,7 +1929,6 @@ static struct imon_context *imon_init_intf0(struct usb_interface *intf)
urb_submit_failed:
ir_input_unregister(ictx->idev);
- input_free_device(ictx->idev);
idev_setup_failed:
find_endpoint_failed:
mutex_unlock(&ictx->lock);
@@ -2014,10 +1998,8 @@ static struct imon_context *imon_init_intf1(struct usb_interface *intf,
return ictx;
urb_submit_failed:
- if (ictx->touch) {
+ if (ictx->touch)
input_unregister_device(ictx->touch);
- input_free_device(ictx->touch);
- }
touch_setup_failed:
find_endpoint_failed:
mutex_unlock(&ictx->lock);
diff --git a/drivers/media/IR/mceusb.c b/drivers/media/IR/mceusb.c
index 78bf7f7..65b0738 100644
--- a/drivers/media/IR/mceusb.c
+++ b/drivers/media/IR/mceusb.c
@@ -228,7 +228,6 @@ static struct usb_device_id std_tx_mask_list[] = {
/* data structure for each usb transceiver */
struct mceusb_dev {
/* ir-core bits */
- struct ir_input_dev *irdev;
struct ir_dev_props *props;
struct ir_raw_event rawir;
@@ -739,7 +738,7 @@ static void mceusb_dev_recv(struct urb *urb, struct pt_regs *regs)
if (ir->send_flags == RECV_FLAG_IN_PROGRESS) {
ir->send_flags = SEND_FLAG_COMPLETE;
- dev_dbg(&ir->irdev->dev, "setup answer received %d bytes\n",
+ dev_dbg(ir->dev, "setup answer received %d bytes\n",
buf_len);
}
@@ -861,7 +860,6 @@ static struct input_dev *mceusb_init_input_dev(struct mceusb_dev *ir)
{
struct input_dev *idev;
struct ir_dev_props *props;
- struct ir_input_dev *irdev;
struct device *dev = ir->dev;
int ret = -ENODEV;
@@ -878,12 +876,6 @@ static struct input_dev *mceusb_init_input_dev(struct mceusb_dev *ir)
goto props_alloc_failed;
}
- irdev = kzalloc(sizeof(struct ir_input_dev), GFP_KERNEL);
- if (!irdev) {
- dev_err(dev, "remote ir input dev allocation failed\n");
- goto ir_dev_alloc_failed;
- }
-
snprintf(ir->name, sizeof(ir->name), "Media Center Ed. eHome "
"Infrared Remote Transceiver (%04x:%04x)",
le16_to_cpu(ir->usbdev->descriptor.idVendor),
@@ -902,9 +894,6 @@ static struct input_dev *mceusb_init_input_dev(struct mceusb_dev *ir)
props->tx_ir = mceusb_tx_ir;
ir->props = props;
- ir->irdev = irdev;
-
- input_set_drvdata(idev, irdev);
ret = ir_input_register(idev, RC_MAP_RC6_MCE, props, DRIVER_NAME);
if (ret < 0) {
@@ -915,8 +904,6 @@ static struct input_dev *mceusb_init_input_dev(struct mceusb_dev *ir)
return idev;
irdev_failed:
- kfree(irdev);
-ir_dev_alloc_failed:
kfree(props);
props_alloc_failed:
input_free_device(idev);

File diff suppressed because it is too large Load Diff

View File

@ -1,788 +0,0 @@
From linville@tuxdriver.com Thu Jul 15 15:40:22 2010
From: "John W. Linville" <linville@tuxdriver.com>
Subject: [RFC] wireless: only use alpha2 regulatory information from country IE
Date: Thu, 15 Jul 2010 15:06:47 -0400
The meaning and/or usage of the country IE is somewhat poorly defined.
In practice, this means that regulatory rulesets in a country IE are
often incomplete and might be untrustworthy. This removes the code
associated with interpreting those rulesets while preserving respect
for country "alpha2" codes also contained in the country IE.
Signed-off-by: John W. Linville <linville@tuxdriver.com>
---
This patch is compile-tested only! Please feel free to suggest that
I have left something out or missed some nuance of our regulatory
enforcement code...
include/net/regulatory.h | 1 -
net/wireless/reg.c | 625 +---------------------------------------------
2 files changed, 12 insertions(+), 614 deletions(-)
diff --git a/include/net/regulatory.h b/include/net/regulatory.h
index f873ee3..9e103a4 100644
--- a/include/net/regulatory.h
+++ b/include/net/regulatory.h
@@ -54,7 +54,6 @@ struct regulatory_request {
enum nl80211_reg_initiator initiator;
char alpha2[2];
bool intersect;
- u32 country_ie_checksum;
enum environment_cap country_ie_env;
struct list_head list;
};
diff --git a/net/wireless/reg.c b/net/wireless/reg.c
index 1ac2bdd..678d0bd 100644
--- a/net/wireless/reg.c
+++ b/net/wireless/reg.c
@@ -67,17 +67,9 @@ static struct platform_device *reg_pdev;
const struct ieee80211_regdomain *cfg80211_regdomain;
/*
- * We use this as a place for the rd structure built from the
- * last parsed country IE to rest until CRDA gets back to us with
- * what it thinks should apply for the same country
- */
-static const struct ieee80211_regdomain *country_ie_regdomain;
-
-/*
* Protects static reg.c components:
* - cfg80211_world_regdom
* - cfg80211_regdom
- * - country_ie_regdomain
* - last_request
*/
static DEFINE_MUTEX(reg_mutex);
@@ -275,25 +267,6 @@ static bool is_user_regdom_saved(void)
return true;
}
-/**
- * country_ie_integrity_changes - tells us if the country IE has changed
- * @checksum: checksum of country IE of fields we are interested in
- *
- * If the country IE has not changed you can ignore it safely. This is
- * useful to determine if two devices are seeing two different country IEs
- * even on the same alpha2. Note that this will return false if no IE has
- * been set on the wireless core yet.
- */
-static bool country_ie_integrity_changes(u32 checksum)
-{
- /* If no IE has been set then the checksum doesn't change */
- if (unlikely(!last_request->country_ie_checksum))
- return false;
- if (unlikely(last_request->country_ie_checksum != checksum))
- return true;
- return false;
-}
-
static int reg_copy_regd(const struct ieee80211_regdomain **dst_regd,
const struct ieee80211_regdomain *src_regd)
{
@@ -506,471 +479,6 @@ static bool freq_in_rule_band(const struct ieee80211_freq_range *freq_range,
}
/*
- * This is a work around for sanity checking ieee80211_channel_to_frequency()'s
- * work. ieee80211_channel_to_frequency() can for example currently provide a
- * 2 GHz channel when in fact a 5 GHz channel was desired. An example would be
- * an AP providing channel 8 on a country IE triplet when it sent this on the
- * 5 GHz band, that channel is designed to be channel 8 on 5 GHz, not a 2 GHz
- * channel.
- *
- * This can be removed once ieee80211_channel_to_frequency() takes in a band.
- */
-static bool chan_in_band(int chan, enum ieee80211_band band)
-{
- int center_freq = ieee80211_channel_to_frequency(chan);
-
- switch (band) {
- case IEEE80211_BAND_2GHZ:
- if (center_freq <= 2484)
- return true;
- return false;
- case IEEE80211_BAND_5GHZ:
- if (center_freq >= 5005)
- return true;
- return false;
- default:
- return false;
- }
-}
-
-/*
- * Some APs may send a country IE triplet for each channel they
- * support and while this is completely overkill and silly we still
- * need to support it. We avoid making a single rule for each channel
- * though and to help us with this we use this helper to find the
- * actual subband end channel. These type of country IE triplet
- * scenerios are handled then, all yielding two regulaotry rules from
- * parsing a country IE:
- *
- * [1]
- * [2]
- * [36]
- * [40]
- *
- * [1]
- * [2-4]
- * [5-12]
- * [36]
- * [40-44]
- *
- * [1-4]
- * [5-7]
- * [36-44]
- * [48-64]
- *
- * [36-36]
- * [40-40]
- * [44-44]
- * [48-48]
- * [52-52]
- * [56-56]
- * [60-60]
- * [64-64]
- * [100-100]
- * [104-104]
- * [108-108]
- * [112-112]
- * [116-116]
- * [120-120]
- * [124-124]
- * [128-128]
- * [132-132]
- * [136-136]
- * [140-140]
- *
- * Returns 0 if the IE has been found to be invalid in the middle
- * somewhere.
- */
-static int max_subband_chan(enum ieee80211_band band,
- int orig_cur_chan,
- int orig_end_channel,
- s8 orig_max_power,
- u8 **country_ie,
- u8 *country_ie_len)
-{
- u8 *triplets_start = *country_ie;
- u8 len_at_triplet = *country_ie_len;
- int end_subband_chan = orig_end_channel;
-
- /*
- * We'll deal with padding for the caller unless
- * its not immediate and we don't process any channels
- */
- if (*country_ie_len == 1) {
- *country_ie += 1;
- *country_ie_len -= 1;
- return orig_end_channel;
- }
-
- /* Move to the next triplet and then start search */
- *country_ie += 3;
- *country_ie_len -= 3;
-
- if (!chan_in_band(orig_cur_chan, band))
- return 0;
-
- while (*country_ie_len >= 3) {
- int end_channel = 0;
- struct ieee80211_country_ie_triplet *triplet =
- (struct ieee80211_country_ie_triplet *) *country_ie;
- int cur_channel = 0, next_expected_chan;
-
- /* means last triplet is completely unrelated to this one */
- if (triplet->ext.reg_extension_id >=
- IEEE80211_COUNTRY_EXTENSION_ID) {
- *country_ie -= 3;
- *country_ie_len += 3;
- break;
- }
-
- if (triplet->chans.first_channel == 0) {
- *country_ie += 1;
- *country_ie_len -= 1;
- if (*country_ie_len != 0)
- return 0;
- break;
- }
-
- if (triplet->chans.num_channels == 0)
- return 0;
-
- /* Monitonically increasing channel order */
- if (triplet->chans.first_channel <= end_subband_chan)
- return 0;
-
- if (!chan_in_band(triplet->chans.first_channel, band))
- return 0;
-
- /* 2 GHz */
- if (triplet->chans.first_channel <= 14) {
- end_channel = triplet->chans.first_channel +
- triplet->chans.num_channels - 1;
- }
- else {
- end_channel = triplet->chans.first_channel +
- (4 * (triplet->chans.num_channels - 1));
- }
-
- if (!chan_in_band(end_channel, band))
- return 0;
-
- if (orig_max_power != triplet->chans.max_power) {
- *country_ie -= 3;
- *country_ie_len += 3;
- break;
- }
-
- cur_channel = triplet->chans.first_channel;
-
- /* The key is finding the right next expected channel */
- if (band == IEEE80211_BAND_2GHZ)
- next_expected_chan = end_subband_chan + 1;
- else
- next_expected_chan = end_subband_chan + 4;
-
- if (cur_channel != next_expected_chan) {
- *country_ie -= 3;
- *country_ie_len += 3;
- break;
- }
-
- end_subband_chan = end_channel;
-
- /* Move to the next one */
- *country_ie += 3;
- *country_ie_len -= 3;
-
- /*
- * Padding needs to be dealt with if we processed
- * some channels.
- */
- if (*country_ie_len == 1) {
- *country_ie += 1;
- *country_ie_len -= 1;
- break;
- }
-
- /* If seen, the IE is invalid */
- if (*country_ie_len == 2)
- return 0;
- }
-
- if (end_subband_chan == orig_end_channel) {
- *country_ie = triplets_start;
- *country_ie_len = len_at_triplet;
- return orig_end_channel;
- }
-
- return end_subband_chan;
-}
-
-/*
- * Converts a country IE to a regulatory domain. A regulatory domain
- * structure has a lot of information which the IE doesn't yet have,
- * so for the other values we use upper max values as we will intersect
- * with our userspace regulatory agent to get lower bounds.
- */
-static struct ieee80211_regdomain *country_ie_2_rd(
- enum ieee80211_band band,
- u8 *country_ie,
- u8 country_ie_len,
- u32 *checksum)
-{
- struct ieee80211_regdomain *rd = NULL;
- unsigned int i = 0;
- char alpha2[2];
- u32 flags = 0;
- u32 num_rules = 0, size_of_regd = 0;
- u8 *triplets_start = NULL;
- u8 len_at_triplet = 0;
- /* the last channel we have registered in a subband (triplet) */
- int last_sub_max_channel = 0;
-
- *checksum = 0xDEADBEEF;
-
- /* Country IE requirements */
- BUG_ON(country_ie_len < IEEE80211_COUNTRY_IE_MIN_LEN ||
- country_ie_len & 0x01);
-
- alpha2[0] = country_ie[0];
- alpha2[1] = country_ie[1];
-
- /*
- * Third octet can be:
- * 'I' - Indoor
- * 'O' - Outdoor
- *
- * anything else we assume is no restrictions
- */
- if (country_ie[2] == 'I')
- flags = NL80211_RRF_NO_OUTDOOR;
- else if (country_ie[2] == 'O')
- flags = NL80211_RRF_NO_INDOOR;
-
- country_ie += 3;
- country_ie_len -= 3;
-
- triplets_start = country_ie;
- len_at_triplet = country_ie_len;
-
- *checksum ^= ((flags ^ alpha2[0] ^ alpha2[1]) << 8);
-
- /*
- * We need to build a reg rule for each triplet, but first we must
- * calculate the number of reg rules we will need. We will need one
- * for each channel subband
- */
- while (country_ie_len >= 3) {
- int end_channel = 0;
- struct ieee80211_country_ie_triplet *triplet =
- (struct ieee80211_country_ie_triplet *) country_ie;
- int cur_sub_max_channel = 0, cur_channel = 0;
-
- if (triplet->ext.reg_extension_id >=
- IEEE80211_COUNTRY_EXTENSION_ID) {
- country_ie += 3;
- country_ie_len -= 3;
- continue;
- }
-
- /*
- * APs can add padding to make length divisible
- * by two, required by the spec.
- */
- if (triplet->chans.first_channel == 0) {
- country_ie++;
- country_ie_len--;
- /* This is expected to be at the very end only */
- if (country_ie_len != 0)
- return NULL;
- break;
- }
-
- if (triplet->chans.num_channels == 0)
- return NULL;
-
- if (!chan_in_band(triplet->chans.first_channel, band))
- return NULL;
-
- /* 2 GHz */
- if (band == IEEE80211_BAND_2GHZ)
- end_channel = triplet->chans.first_channel +
- triplet->chans.num_channels - 1;
- else
- /*
- * 5 GHz -- For example in country IEs if the first
- * channel given is 36 and the number of channels is 4
- * then the individual channel numbers defined for the
- * 5 GHz PHY by these parameters are: 36, 40, 44, and 48
- * and not 36, 37, 38, 39.
- *
- * See: http://tinyurl.com/11d-clarification
- */
- end_channel = triplet->chans.first_channel +
- (4 * (triplet->chans.num_channels - 1));
-
- cur_channel = triplet->chans.first_channel;
-
- /*
- * Enhancement for APs that send a triplet for every channel
- * or for whatever reason sends triplets with multiple channels
- * separated when in fact they should be together.
- */
- end_channel = max_subband_chan(band,
- cur_channel,
- end_channel,
- triplet->chans.max_power,
- &country_ie,
- &country_ie_len);
- if (!end_channel)
- return NULL;
-
- if (!chan_in_band(end_channel, band))
- return NULL;
-
- cur_sub_max_channel = end_channel;
-
- /* Basic sanity check */
- if (cur_sub_max_channel < cur_channel)
- return NULL;
-
- /*
- * Do not allow overlapping channels. Also channels
- * passed in each subband must be monotonically
- * increasing
- */
- if (last_sub_max_channel) {
- if (cur_channel <= last_sub_max_channel)
- return NULL;
- if (cur_sub_max_channel <= last_sub_max_channel)
- return NULL;
- }
-
- /*
- * When dot11RegulatoryClassesRequired is supported
- * we can throw ext triplets as part of this soup,
- * for now we don't care when those change as we
- * don't support them
- */
- *checksum ^= ((cur_channel ^ cur_sub_max_channel) << 8) |
- ((cur_sub_max_channel ^ cur_sub_max_channel) << 16) |
- ((triplet->chans.max_power ^ cur_sub_max_channel) << 24);
-
- last_sub_max_channel = cur_sub_max_channel;
-
- num_rules++;
-
- if (country_ie_len >= 3) {
- country_ie += 3;
- country_ie_len -= 3;
- }
-
- /*
- * Note: this is not a IEEE requirement but
- * simply a memory requirement
- */
- if (num_rules > NL80211_MAX_SUPP_REG_RULES)
- return NULL;
- }
-
- country_ie = triplets_start;
- country_ie_len = len_at_triplet;
-
- size_of_regd = sizeof(struct ieee80211_regdomain) +
- (num_rules * sizeof(struct ieee80211_reg_rule));
-
- rd = kzalloc(size_of_regd, GFP_KERNEL);
- if (!rd)
- return NULL;
-
- rd->n_reg_rules = num_rules;
- rd->alpha2[0] = alpha2[0];
- rd->alpha2[1] = alpha2[1];
-
- /* This time around we fill in the rd */
- while (country_ie_len >= 3) {
- int end_channel = 0;
- struct ieee80211_country_ie_triplet *triplet =
- (struct ieee80211_country_ie_triplet *) country_ie;
- struct ieee80211_reg_rule *reg_rule = NULL;
- struct ieee80211_freq_range *freq_range = NULL;
- struct ieee80211_power_rule *power_rule = NULL;
-
- /*
- * Must parse if dot11RegulatoryClassesRequired is true,
- * we don't support this yet
- */
- if (triplet->ext.reg_extension_id >=
- IEEE80211_COUNTRY_EXTENSION_ID) {
- country_ie += 3;
- country_ie_len -= 3;
- continue;
- }
-
- if (triplet->chans.first_channel == 0) {
- country_ie++;
- country_ie_len--;
- break;
- }
-
- reg_rule = &rd->reg_rules[i];
- freq_range = &reg_rule->freq_range;
- power_rule = &reg_rule->power_rule;
-
- reg_rule->flags = flags;
-
- /* 2 GHz */
- if (band == IEEE80211_BAND_2GHZ)
- end_channel = triplet->chans.first_channel +
- triplet->chans.num_channels -1;
- else
- end_channel = triplet->chans.first_channel +
- (4 * (triplet->chans.num_channels - 1));
-
- end_channel = max_subband_chan(band,
- triplet->chans.first_channel,
- end_channel,
- triplet->chans.max_power,
- &country_ie,
- &country_ie_len);
-
- /*
- * The +10 is since the regulatory domain expects
- * the actual band edge, not the center of freq for
- * its start and end freqs, assuming 20 MHz bandwidth on
- * the channels passed
- */
- freq_range->start_freq_khz =
- MHZ_TO_KHZ(ieee80211_channel_to_frequency(
- triplet->chans.first_channel) - 10);
- freq_range->end_freq_khz =
- MHZ_TO_KHZ(ieee80211_channel_to_frequency(
- end_channel) + 10);
-
- /*
- * These are large arbitrary values we use to intersect later.
- * Increment this if we ever support >= 40 MHz channels
- * in IEEE 802.11
- */
- freq_range->max_bandwidth_khz = MHZ_TO_KHZ(40);
- power_rule->max_antenna_gain = DBI_TO_MBI(100);
- power_rule->max_eirp = DBM_TO_MBM(triplet->chans.max_power);
-
- i++;
-
- if (country_ie_len >= 3) {
- country_ie += 3;
- country_ie_len -= 3;
- }
-
- BUG_ON(i > NL80211_MAX_SUPP_REG_RULES);
- }
-
- return rd;
-}
-
-
-/*
* Helper for regdom_intersect(), this does the real
* mathematical intersection fun
*/
@@ -1191,7 +699,6 @@ static int freq_reg_info_regd(struct wiphy *wiphy,
return -EINVAL;
}
-EXPORT_SYMBOL(freq_reg_info);
int freq_reg_info(struct wiphy *wiphy,
u32 center_freq,
@@ -1205,6 +712,7 @@ int freq_reg_info(struct wiphy *wiphy,
reg_rule,
NULL);
}
+EXPORT_SYMBOL(freq_reg_info);
/*
* Note that right now we assume the desired channel bandwidth
@@ -1243,41 +751,8 @@ static void handle_channel(struct wiphy *wiphy, enum ieee80211_band band,
desired_bw_khz,
&reg_rule);
- if (r) {
- /*
- * This means no regulatory rule was found in the country IE
- * with a frequency range on the center_freq's band, since
- * IEEE-802.11 allows for a country IE to have a subset of the
- * regulatory information provided in a country we ignore
- * disabling the channel unless at least one reg rule was
- * found on the center_freq's band. For details see this
- * clarification:
- *
- * http://tinyurl.com/11d-clarification
- */
- if (r == -ERANGE &&
- last_request->initiator ==
- NL80211_REGDOM_SET_BY_COUNTRY_IE) {
- REG_DBG_PRINT("cfg80211: Leaving channel %d MHz "
- "intact on %s - no rule found in band on "
- "Country IE\n",
- chan->center_freq, wiphy_name(wiphy));
- } else {
- /*
- * In this case we know the country IE has at least one reg rule
- * for the band so we respect its band definitions
- */
- if (last_request->initiator ==
- NL80211_REGDOM_SET_BY_COUNTRY_IE)
- REG_DBG_PRINT("cfg80211: Disabling "
- "channel %d MHz on %s due to "
- "Country IE\n",
- chan->center_freq, wiphy_name(wiphy));
- flags |= IEEE80211_CHAN_DISABLED;
- chan->flags = flags;
- }
+ if (r)
return;
- }
power_rule = &reg_rule->power_rule;
freq_range = &reg_rule->freq_range;
@@ -2010,7 +1485,7 @@ EXPORT_SYMBOL(regulatory_hint);
/* Caller must hold reg_mutex */
static bool reg_same_country_ie_hint(struct wiphy *wiphy,
- u32 country_ie_checksum)
+ char *alpha2, enum environment_cap env)
{
struct wiphy *request_wiphy;
@@ -2026,13 +1501,17 @@ static bool reg_same_country_ie_hint(struct wiphy *wiphy,
return false;
if (likely(request_wiphy != wiphy))
- return !country_ie_integrity_changes(country_ie_checksum);
+ return (last_request->alpha2[0] == alpha2[0] &&
+ last_request->alpha2[1] == alpha2[1] &&
+ last_request->country_ie_env == env);
/*
* We should not have let these through at this point, they
* should have been picked up earlier by the first alpha2 check
* on the device
*/
- if (WARN_ON(!country_ie_integrity_changes(country_ie_checksum)))
+ if (WARN_ON((last_request->alpha2[0] == alpha2[0] &&
+ last_request->alpha2[1] == alpha2[1] &&
+ last_request->country_ie_env == env )))
return true;
return false;
}
@@ -2048,7 +1527,6 @@ void regulatory_hint_11d(struct wiphy *wiphy,
{
struct ieee80211_regdomain *rd = NULL;
char alpha2[2];
- u32 checksum = 0;
enum environment_cap env = ENVIRON_ANY;
struct regulatory_request *request;
@@ -2064,14 +1542,6 @@ void regulatory_hint_11d(struct wiphy *wiphy,
if (country_ie_len < IEEE80211_COUNTRY_IE_MIN_LEN)
goto out;
- /*
- * Pending country IE processing, this can happen after we
- * call CRDA and wait for a response if a beacon was received before
- * we were able to process the last regulatory_hint_11d() call
- */
- if (country_ie_regdomain)
- goto out;
-
alpha2[0] = country_ie[0];
alpha2[1] = country_ie[1];
@@ -2090,12 +1560,6 @@ void regulatory_hint_11d(struct wiphy *wiphy,
wiphy_idx_valid(last_request->wiphy_idx)))
goto out;
- rd = country_ie_2_rd(band, country_ie, country_ie_len, &checksum);
- if (!rd) {
- REG_DBG_PRINT("cfg80211: Ignoring bogus country IE\n");
- goto out;
- }
-
/*
* This will not happen right now but we leave it here for the
* the future when we want to add suspend/resume support and having
@@ -2105,24 +1569,17 @@ void regulatory_hint_11d(struct wiphy *wiphy,
* If we hit this before we add this support we want to be informed of
* it as it would indicate a mistake in the current design
*/
- if (WARN_ON(reg_same_country_ie_hint(wiphy, checksum)))
+ if (WARN_ON(reg_same_country_ie_hint(wiphy, alpha2, env)))
goto free_rd_out;
request = kzalloc(sizeof(struct regulatory_request), GFP_KERNEL);
if (!request)
goto free_rd_out;
- /*
- * We keep this around for when CRDA comes back with a response so
- * we can intersect with that
- */
- country_ie_regdomain = rd;
-
request->wiphy_idx = get_wiphy_idx(wiphy);
- request->alpha2[0] = rd->alpha2[0];
- request->alpha2[1] = rd->alpha2[1];
+ request->alpha2[0] = alpha2[0];
+ request->alpha2[1] = alpha2[1];
request->initiator = NL80211_REGDOM_SET_BY_COUNTRY_IE;
- request->country_ie_checksum = checksum;
request->country_ie_env = env;
mutex_unlock(&reg_mutex);
@@ -2383,33 +1840,6 @@ static void print_regdomain_info(const struct ieee80211_regdomain *rd)
print_rd_rules(rd);
}
-#ifdef CONFIG_CFG80211_REG_DEBUG
-static void reg_country_ie_process_debug(
- const struct ieee80211_regdomain *rd,
- const struct ieee80211_regdomain *country_ie_regdomain,
- const struct ieee80211_regdomain *intersected_rd)
-{
- printk(KERN_DEBUG "cfg80211: Received country IE:\n");
- print_regdomain_info(country_ie_regdomain);
- printk(KERN_DEBUG "cfg80211: CRDA thinks this should applied:\n");
- print_regdomain_info(rd);
- if (intersected_rd) {
- printk(KERN_DEBUG "cfg80211: We intersect both of these "
- "and get:\n");
- print_regdomain_info(intersected_rd);
- return;
- }
- printk(KERN_DEBUG "cfg80211: Intersection between both failed\n");
-}
-#else
-static inline void reg_country_ie_process_debug(
- const struct ieee80211_regdomain *rd,
- const struct ieee80211_regdomain *country_ie_regdomain,
- const struct ieee80211_regdomain *intersected_rd)
-{
-}
-#endif
-
/* Takes ownership of rd only if it doesn't fail */
static int __set_regdom(const struct ieee80211_regdomain *rd)
{
@@ -2521,34 +1951,6 @@ static int __set_regdom(const struct ieee80211_regdomain *rd)
return 0;
}
- /*
- * Country IE requests are handled a bit differently, we intersect
- * the country IE rd with what CRDA believes that country should have
- */
-
- /*
- * Userspace could have sent two replies with only
- * one kernel request. By the second reply we would have
- * already processed and consumed the country_ie_regdomain.
- */
- if (!country_ie_regdomain)
- return -EALREADY;
- BUG_ON(rd == country_ie_regdomain);
-
- /*
- * Intersect what CRDA returned and our what we
- * had built from the Country IE received
- */
-
- intersected_rd = regdom_intersect(rd, country_ie_regdomain);
-
- reg_country_ie_process_debug(rd,
- country_ie_regdomain,
- intersected_rd);
-
- kfree(country_ie_regdomain);
- country_ie_regdomain = NULL;
-
if (!intersected_rd)
return -EINVAL;
@@ -2688,9 +2090,6 @@ void /* __init_or_exit */ regulatory_exit(void)
reset_regdomains();
- kfree(country_ie_regdomain);
- country_ie_regdomain = NULL;
-
kfree(last_request);
platform_device_unregister(reg_pdev);
--
1.7.1.1

View File

@ -1,53 +0,0 @@
From: Matthew Garrett <mjg@redhat.com>
Subject: ACPI: Disable ASPM if the platform won't provide _OSC control for PCIe
ACPI: Disable ASPM if the platform won't provide _OSC control for PCIe
The PCI SIG documentation for the _OSC OS/firmware handshaking interface
states:
"If the _OSC control method is absent from the scope of a host bridge
device, then the operating system must not enable or attempt to use any
features defined in this section for the hierarchy originated by the host
bridge."
The obvious interpretation of this is that the OS should not attempt to use
PCIe hotplug, PME or AER - however, the specification also notes that an
_OSC method is *required* for PCIe hierarchies, and experimental validation
with An Alternative OS indicates that it doesn't use any PCIe functionality
if the _OSC method is missing. That arguably means we shouldn't be using
MSI or extended config space, but right now our problems seem to be limited
to vendors being surprised when ASPM gets enabled on machines when other
OSs refuse to do so. So, for now, let's just disable ASPM if the _OSC
method doesn't exist or refuses to hand over PCIe capability control.
Signed-off-by: Matthew Garrett <mjg@redhat.com>
---
diff --git a/drivers/acpi/pci_root.c b/drivers/acpi/pci_root.c
index 4eac593..1f67057 100644
--- a/drivers/acpi/pci_root.c
+++ b/drivers/acpi/pci_root.c
@@ -33,6 +33,7 @@
#include <linux/pm_runtime.h>
#include <linux/pci.h>
#include <linux/pci-acpi.h>
+#include <linux/pci-aspm.h>
#include <linux/acpi.h>
#include <linux/slab.h>
#include <acpi/acpi_bus.h>
@@ -543,6 +544,14 @@ static int __devinit acpi_pci_root_add(struct acpi_device *device)
if (flags != base_flags)
acpi_pci_osc_support(root, flags);
+ status = acpi_pci_osc_control_set(root->device->handle,
+ 0);
+
+ if (status == AE_NOT_EXIST) {
+ printk(KERN_INFO "Unable to assume PCIe control: Disabling ASPM\n");
+ pcie_no_aspm();
+ }
+
pci_acpi_add_bus_pm_notifier(device, root->bus);
if (device->wakeup.flags.run_wake)
device_set_run_wake(root->bus->bridge, true);

View File

@ -1,50 +0,0 @@
From: Matthew Garrett <mjg@redhat.com>
Date: Wed, 9 Jun 2010 20:05:07 +0000 (-0400)
Subject: PCI: Don't enable aspm before drivers have had a chance to veto it
X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Fjbarnes%2Fpci-2.6.git;a=commitdiff_plain;h=8f0b08c29f1df91315e48adce04462eb23671099
PCI: Don't enable aspm before drivers have had a chance to veto it
The aspm code will currently set the configured aspm policy before drivers
have had an opportunity to indicate that their hardware doesn't support it.
Unfortunately, putting some hardware in L0 or L1 can result in the hardware
no longer responding to any requests, even after aspm is disabled. It makes
more sense to leave aspm policy at the BIOS defaults at initial setup time,
reconfiguring it after pci_enable_device() is called. This allows the
driver to blacklist individual devices beforehand.
Reviewed-by: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>
Signed-off-by: Matthew Garrett <mjg@redhat.com>
Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
---
diff --git a/drivers/pci/pcie/aspm.c b/drivers/pci/pcie/aspm.c
index be53d98..7122281 100644
--- a/drivers/pci/pcie/aspm.c
+++ b/drivers/pci/pcie/aspm.c
@@ -588,11 +588,23 @@ void pcie_aspm_init_link_state(struct pci_dev *pdev)
* update through pcie_aspm_cap_init().
*/
pcie_aspm_cap_init(link, blacklist);
- pcie_config_aspm_path(link);
/* Setup initial Clock PM state */
pcie_clkpm_cap_init(link, blacklist);
- pcie_set_clkpm(link, policy_to_clkpm_state(link));
+
+ /*
+ * At this stage drivers haven't had an opportunity to change the
+ * link policy setting. Enabling ASPM on broken hardware can cripple
+ * it even before the driver has had a chance to disable ASPM, so
+ * default to a safe level right now. If we're enabling ASPM beyond
+ * the BIOS's expectation, we'll do so once pci_enable_device() is
+ * called.
+ */
+ if (aspm_policy != POLICY_POWERSAVE) {
+ pcie_config_aspm_path(link);
+ pcie_set_clkpm(link, policy_to_clkpm_state(link));
+ }
+
unlock:
mutex_unlock(&aspm_lock);
out:

View File

@ -1,7 +1,6 @@
#!/bin/bash
utrace_base=2.6-current
utrace_base=2.6.34
url=http://people.redhat.com/roland/utrace/${1:-$utrace_base}

View File

@ -1,2 +1,2 @@
091abeb4684ce03d1d936851618687b6 linux-2.6.35.tar.bz2
1e730019937132cd4d0bcf2c35384e86 patch-2.6.35-git1.bz2
4f51963b5e076fb87ab32bda229a524f patch-2.6.36-rc1.bz2

View File

@ -1,29 +0,0 @@
From 9b7ec0e07ce85c377b76626cef552d27d59cc405 Mon Sep 17 00:00:00 2001
From: Kyle McMartin <kyle@dreadnought.i.jkkm.org>
Date: Tue, 22 Jun 2010 13:57:47 +0100
Subject: utrace-ptrace: removed defunct arch_ptrace_untrace call
commit faa4602e removed the unused BTS code which had added
this hook.
Signed-off-by: Kyle McMartin <kyle@redhat.com>
---
kernel/ptrace-utrace.c | 2 --
1 files changed, 0 insertions(+), 2 deletions(-)
diff --git a/kernel/ptrace-utrace.c b/kernel/ptrace-utrace.c
index 86234ee..1a8ba5e 100644
--- a/kernel/ptrace-utrace.c
+++ b/kernel/ptrace-utrace.c
@@ -50,8 +50,6 @@ void __ptrace_unlink(struct task_struct *child)
child->ptrace = 0;
child->parent = child->real_parent;
list_del_init(&child->ptrace_entry);
-
- arch_ptrace_untrace(child);
}
struct ptrace_context {
--
1.7.0.1

View File

@ -1,32 +0,0 @@
From ad778e66100e4b76bab6b939e3d0c781da82d980 Mon Sep 17 00:00:00 2001
From: Kyle McMartin <kyle@dreadnought.i.jkkm.org>
Date: Tue, 22 Jun 2010 14:09:30 +0100
Subject: utrace: remove use of kref_set
Unfortunatey db1afffa which removed kref_set did not anticipate
anyone would actually like to use a kref which starts with a refcnt
above 1. Replace kref_set in utrace with a kref_init + kref_get to
immediately bump the reference count.
Signed-off-by: Kyle McMartin <kyle@redhat.com>
---
kernel/utrace.c | 3 ++-
1 files changed, 2 insertions(+), 1 deletions(-)
diff --git a/kernel/utrace.c b/kernel/utrace.c
index f5a9e2c..cc864d5 100644
--- a/kernel/utrace.c
+++ b/kernel/utrace.c
@@ -304,7 +304,8 @@ struct utrace_engine *utrace_attach_task(
* Initialize the new engine structure. It starts out with two
* refs: one ref to return, and one ref for being attached.
*/
- kref_set(&engine->kref, 2);
+ kref_init(&engine->kref);
+ kref_get(&engine->kref);
engine->flags = 0;
engine->ops = ops;
engine->data = data;
--
1.7.0.1