Linux 3.0.1
I'm announcing the release of the 3.0.1 kernel.
All users of the 3.0 kernel series must upgrade.
The updated 3.0.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-3.0.y.git
and can be browsed at the normal kernel.org git web browser:
http://git.kernel.org/?p=linux/kernel/git/stable/linux-3.0.y.git;a=summarythanks,
greg k-h
------------
Makefile | 2 arch/alpha/kernel/time.c | 2 arch/arm/mach-pxa/cm-x300.c | 8 - arch/powerpc/kernel/crash.c | 6 - arch/powerpc/kernel/time.c | 2 arch/powerpc/platforms/pseries/hvconsole.c | 2 arch/x86/include/asm/msr-index.h | 3 arch/x86/kernel/cpu/intel.c | 18 +++ arch/x86/kernel/relocate_kernel_32.S | 2 arch/x86/kernel/relocate_kernel_64.S | 2 arch/x86/oprofile/backtrace.c | 56 +++++++-- arch/xtensa/kernel/ptrace.c | 3 block/blk-core.c | 3 block/blk-exec.c | 7 + drivers/block/cciss.h | 2 drivers/firewire/core-cdev.c | 20 +-- drivers/firmware/sigma.c | 3 drivers/gpu/drm/radeon/atombios_dp.c | 22 +++ drivers/gpu/drm/radeon/radeon_combios.c | 3 drivers/gpu/drm/radeon/radeon_pm.c | 3 drivers/infiniband/ulp/srp/ib_srp.c | 2 drivers/md/dm-io.c | 29 ++++ drivers/md/dm-mpath.c | 5 drivers/md/dm-snap-persistent.c | 2 drivers/md/dm.c | 10 + drivers/misc/Kconfig | 3 drivers/mmc/host/sdhci-esdhc-imx.c | 2 drivers/net/jme.c | 20 ++- drivers/net/wireless/ath/ath9k/ar9003_mac.c | 3 drivers/net/wireless/ath/ath9k/mac.c | 3 drivers/net/wireless/rt2x00/rt2800pci.c | 1 drivers/net/wireless/rtlwifi/rtl8192cu/rf.c | 2 drivers/pci/pci.c | 7 + drivers/pci/quirks.c | 23 +++ drivers/rtc/interface.c | 55 ++++++--- drivers/rtc/rtc-tegra.c | 2 drivers/scsi/hpsa.h | 2 drivers/scsi/libsas/sas_expander.c | 3 drivers/scsi/pmcraid.c | 3 drivers/scsi/scsi_devinfo.c | 2 drivers/scsi/scsi_lib.c | 2 drivers/scsi/ses.c | 6 - drivers/scsi/sr.c | 46 +++++++ drivers/scsi/sr.h | 7 + drivers/staging/ath6kl/os/linux/ar6000_drv.c | 49 +++++--- drivers/staging/ath6kl/os/linux/cfg80211.c | 31 +++-- drivers/staging/ath6kl/os/linux/include/ar6000_drv.h | 9 + drivers/staging/brcm80211/brcmsmac/wl_mac80211.c | 5 drivers/staging/comedi/comedi_fops.c | 4 drivers/staging/hv/channel.c | 2 drivers/staging/hv/channel_mgmt.c | 2 drivers/staging/hv/connection.c | 2 drivers/staging/hv/netvsc.c | 4 drivers/staging/hv/rndis_filter.c | 6 - drivers/staging/hv/storvsc.c | 8 - drivers/staging/hv/storvsc_drv.c | 2 drivers/staging/rtl8192e/r8192E_core.c | 6 + drivers/staging/usbip/vhci_hcd.c | 4 drivers/tty/hvc/hvc_console.c | 8 - drivers/tty/n_gsm.c | 4 drivers/tty/serial/8250.c | 2 drivers/tty/serial/Kconfig | 2 drivers/usb/host/ehci-hcd.c | 8 - drivers/usb/host/ehci-hub.c | 3 drivers/usb/host/ehci-q.c | 85 +++++++------- drivers/usb/host/ehci.h | 4 drivers/usb/host/pci-quirks.c | 28 ++++ drivers/usb/musb/musb_core.c | 1 drivers/usb/serial/pl2303.c | 1 drivers/usb/serial/pl2303.h | 4 drivers/watchdog/shwdt.c | 2 fs/cifs/dir.c | 2 fs/ecryptfs/inode.c | 1 fs/ecryptfs/keystore.c | 47 ++++--- fs/ext3/xattr.c | 12 +- fs/ext4/ext4.h | 1 fs/ext4/extents.c | 11 + fs/ext4/mballoc.c | 2 fs/gfs2/ops_fstype.c | 4 fs/nfs/delegation.c | 16 +- fs/nfs/dir.c | 56 +++++---- fs/nfs/nfs4filelayout.c | 2 fs/nfs/nfs4proc.c | 8 + fs/nfs/nfs4xdr.c | 2 fs/nfs/pnfs.c | 63 +++++----- fs/nfs/pnfs.h | 6 - fs/nfsd/nfs4state.c | 66 ++++------- fs/proc/base.c | 16 ++ include/linux/firewire-cdev.h | 3 include/linux/mm.h | 2 include/linux/netdevice.h | 5 include/linux/nfs_fs.h | 3 include/linux/nfs_xdr.h | 2 ipc/sem.c | 13 +- kernel/events/core.c | 7 - kernel/futex.c | 4 kernel/trace/trace.h | 1 kernel/trace/trace_events.c | 113 +++++++++++++++---- kernel/trace/trace_events_filter.c | 6 + lib/xz/xz_private.h | 2 mm/backing-dev.c | 1 mm/memcontrol.c | 2 mm/memory.c | 58 +++++++++ mm/oom_kill.c | 4 net/bridge/br_private.h | 1 net/bridge/br_stp.c | 4 net/core/ethtool.c | 4 net/mac80211/mlme.c | 3 net/sunrpc/svc_xprt.c | 11 + net/wireless/reg.c | 5 security/apparmor/domain.c | 2 security/apparmor/lsm.c | 2 sound/core/pcm_compat.c | 2 sound/pci/hda/patch_realtek.c | 7 - sound/pci/oxygen/xonar_pcm179x.c | 5 sound/soc/davinci/davinci-vcif.c | 9 - sound/soc/soc-core.c | 1 tools/perf/Makefile | 5 tools/perf/util/header.c | 5 tools/perf/util/session.c | 30 +++-- tools/perf/util/session.h | 1 121 files changed, 931 insertions(+), 402 deletions(-)
Ajay Kumar Gupta (1):
usb: musb: restore INDEX register in resume path
Alan Stern (3):
USB: OHCI: fix another regression for NVIDIA controllers
USB: EHCI: go back to using the system clock for QH unlinks
EHCI: fix direction handling for interrupt data toggles
Alasdair G Kergon (1):
dm: fix idr leak on module removal
Alex Deucher (2):
drm/radeon/kms: fix i2c map for rv250/280 drm/radeon/kms: add missing vddci setting on NI+
Anton Blanchard (1):
powerpc/pseries/hvconsole: Fix dropped console output
Bart Van Assche (1):
IB/srp: Avoid duplicate devices from LUN scan
Ben Hutchings (1):
ethtool: Allow zero-length register dumps again
Benjamin Herrenschmidt (1):
mm/futex: fix futex writes on archs with SW tracking of dirty & young
Casey Bodley (1):
nfsd: don't break lease on CLAIM_DELEGATE_CUR
Chris Wright (1):
PCI: ARI is a PCIe v2 feature
Clemens Ladisch (1):
ALSA: virtuoso: fix silent analog output on Xonar Essence ST Deluxe
Daisuke Nishimura (1):
memcg: fix behavior of mem_cgroup_resize_limit()
Dan Rosenberg (2):
pmcraid: reject negative request size
xtensa: prevent arbitrary read in ptrace
David Ahern (2):
perf tools, x86: Fix 32-bit compile on 64-bit system
perf tools: Fix endian conversion reading event attr from file header
David Engraf (1):
watchdog: shwdt: fix usage of mod_timer
Douglas Gilbert (1):
ses: requesting a fault indication
Du, Alek (1):
n_gsm: fix the wrong FCS handling
Gertjan van Wingerde (1):
rt2x00: Add device ID for RT539F device.
Greg Kroah-Hartman (1):
Linux 3.0.1
Guo-Fu Tseng (1):
jme: Fix unmap error (Causing system freeze)
Hendrik Brueckner (1):
hvc_console: Improve tty/console put_chars handling
Herbert Xu (1):
gro: Only reset frag0 when skb can be pulled
Huang Ying (1):
kexec, x86: Fix incorrect jump back address if not preserving context
Igor Grinberg (1):
ARM: pxa/cm-x300: fix V3020 RTC functionality
J. Bruce Fields (3):
nfsd4: remember to put RW access on stateid destruction
nfsd4: fix file leak on open_downgrade
svcrpc: fix list-corrupting race on nfsd shutdown
James Bottomley (1):
fix crash in scsi_dispatch_cmd()
Jan Kara (1):
ext3: Fix oops in ext3_try_to_allocate_with_rsv()
Jerome Glisse (1):
drm/radeon/kms: fix DP training for DPEncoderService revision bigger than 1.1
Jiaying Zhang (1):
ext4: free allocated and pre-allocated blocks when check_eofblocks_fl fails
John Johansen (2):
AppArmor: Fix reference to rcu protected pointer outside of rcu_read_lock
AppArmor: Fix masking of capabilities in complain mode
Julia Lawall (1):
ALSA: sound/core/pcm_compat.c: adjust array index
K. Y. Srinivasan (3):
Staging: hv: storvsc: Increase the timeout value in the storvsc driver
Staging: hv: vmbus: Increase the timeout value in the vmbus driver
Staging: hv: netvsc: Increase the timeout value in the netvsc driver
Kalle Valo (2):
ath6kl: cache firmware
ath6kl: fix crash when interface is closed but scan is ongoing
Kay Sievers (1):
sr: check_events() ignore GET_EVENT when TUR says otherwise
Larry Finger (2):
staging: r8192e_pci: Handle duplicate PCI ID 0x10ec:0x8192 conflict with rtl8192se
rtlwifi: rtl8192cu: Fix duplicate if test
Lasse Collin (1):
XZ: Fix missing <linux/kernel.h> include
Len Brown (1):
x86, intel, power: Initialize MSR_IA32_ENERGY_PERF_BIAS
Luben Tuikov (1):
libsas: remove expander from dev list on error
Manfred Spraul (1):
ipc/sem.c: fix race with concurrent semtimedop() timeouts and IPC_RMID
Manoj Iyer (1):
mmc: Added quirks for Ricoh 1180:e823 lower base clock frequency
Mark Brown (1):
ASoC: Mark cache as dirty when suspending
Maxim Patlasov (1):
ext4: fix i_blocks/quota accounting when extent insertion fails
Michael Neuling (1):
powerpc/kdump: Fix timeout in crash_kexec_wait_realmode
Mike Snitzer (1):
dm mpath: fix potential NULL pointer in feature arg processing
Mikulas Patocka (2):
dm io: flush cpu cache with vmapped io
dm snapshot: flush disk cache when merging
Oleg Nesterov (1):
oom: task->mm == NULL doesn't mean the memory was freed
Pavel Shilovsky (1):
CIFS: Fix oops while mounting with prefixpath
Peng Tao (4):
pnfs: save layoutcommit lwb at layout header
pnfs: save layoutcommit cred at layout header init
pnfs: let layoutcommit handle a list of lseg
pnfs: use lwb as layoutcommit length
Peter Zijlstra (4):
irq_work, ppc: Fix up arch hooks
perf: Fix software event overflow
irq_work, alpha: Fix up arch hooks mm/backing-dev.c: reset bdi min_ratio in bdi_unregister()
Philip A. Prindeville (1):
geode: reflect mfgpt dependency on mfd
Rajashekhara, Sudhakar (2):
ASoC: davinci: add missing break statement
ASoC: davinci: fix codec start and stop functions
Rajkumar Manoharan (1):
mac80211: Restart STA timers only on associated state
Ralf Baechle (1):
SERIAL: SC26xx: Fix link error.
Randy Dunlap (1):
drivers/firmware/sigma.c needs MODULE_LICENSE
Robert Richter (1):
oprofile, x86: Fix nmi-unsafe callgraph support
Roland Vossen (1):
staging: brcm80211: fix for reported log spam problem
Senthil Balasubramanian (1):
ath9k_hw: Fix incorrect key_miss handling
Sergei Shtylyov (1):
EHCI: only power off port if over-current is active
Shawn Guo (1):
mmc: sdhci-esdhc-imx: SDHCI_CARD_PRESENT does not get cleared
Stefan Richter (2):
firewire: cdev: return -ENOTTY for unimplemented ioctls, not -EINVAL
firewire: cdev: prevent race between first get_info ioctl and bus reset event queuing
Stephen M. Cameron (2):
hpsa: do not attempt to read from a write-only register
cciss: do not attempt to read from a write-only register
Stephen Warren (1):
tty/serial: Fix XSCALE serial ports, e.g. ce4100
Steven Rostedt (2):
tracing: Fix bug when reading system filters on module removal
tracing: Have "enable" file use refcounts like the "filter" file
Steven Whitehouse (1):
GFS2: Fix mount hang caused by certain access pattern to sysfs files
Sven Neumann (1):
cfg80211: really ignore the regulatory request
Takashi Iwai (1):
ALSA: hda - Fix duplicated DAC assignments for Realtek
Thieu Le (1):
ecryptfs: Make inode bdi consistent with superblock bdi
Thomas Gleixner (3):
rtc: handle errors correctly in rtc_irq_set_state()
rtc: fix hrtimer deadlock
rtc: limit frequency
Tobias Klauser (1):
Staging: usbip: vhci-hcd: Do not kill already dead RX/TX kthread
Trond Myklebust (2):
NFSv4: Don't use the delegation->inode in nfs_mark_return_delegation()
NFS: Fix spurious readdir cookie loop messages
Tyler Hicks (1):
eCryptfs: Unlock keys needed by ecryptfsd
Uwe Kleine-König (1):
drivers/rtc/rtc-tegra.c: properly initialize spinlock
Vasiliy Kulikov (2):
staging: comedi: fix infoleak to userspace
proc: fix a race in do_io_accounting()
Werner Fink (1):
Blacklist Traxdata CDR4120 and IOMEGA Zip drive to avoid lock ups.
Wolfgang Denk (1):
USB: serial: add IDs for WinChipHead USB->RS232 adapter
stephen hemminger (1):
bridge: send proper message_age in config BPDU
Makefile +1 -1
@@ -1,6 +1,6 @@ VERSION = 3 PATCHLEVEL = 0 -SUBLEVEL = 0 +SUBLEVEL = 1 EXTRAVERSION = NAME = Sneaky Weasel
arch/alpha/kernel/time.c +1 -1
@@ -91,7 +91,7 @@ DEFINE_PER_CPU(u8, irq_work_pending);#define test_irq_work_pending () __get_cpu_var(irq_work_pending)#define clear_irq_work_pending () __get_cpu_var(irq_work_pending) = 0 -void set_irq_work_pending (void ) +void arch_irq_work_raise (void ) {set_irq_work_pending_flag (); }
arch/arm/mach-pxa/cm-x300.c +4 -4
@@ -161,10 +161,10 @@ static mfp_cfg_t cm_x3xx_mfp_cfg[] __initdata = {GPIO99_GPIO ,/* Ethernet IRQ */ /* RTC GPIOs */ -GPIO95_GPIO ,/* RTC CS */ -GPIO96_GPIO ,/* RTC WR */ -GPIO97_GPIO ,/* RTC RD */ -GPIO98_GPIO ,/* RTC IO */ +GPIO95_GPIO |MFP_LPM_DRIVE_HIGH ,/* RTC CS */ +GPIO96_GPIO |MFP_LPM_DRIVE_HIGH ,/* RTC WR */ +GPIO97_GPIO |MFP_LPM_DRIVE_HIGH ,/* RTC RD */ +GPIO98_GPIO ,/* RTC IO */ /* Standard I2C */ GPIO21_I2C_SCL,
arch/powerpc/kernel/crash.c +1 -5
@@ -242,12 +242,8 @@ static void crash_kexec_wait_realmode(int cpu)while (paca[i].kexec_state <KEXEC_STATE_REAL_MODE ) {barrier (); -if (!cpu_possible (i)) { +if (!cpu_possible (i) || !cpu_online (i) || (msecs <=0 ))break ; - } -if (!cpu_online (i)) { -break ; - } msecs--;mdelay (1 ); }
arch/powerpc/kernel/time.c +1 -1
@@ -544,7 +544,7 @@ DEFINE_PER_CPU(u8, irq_work_pending);#endif /* 32 vs 64 bit */ -void set_irq_work_pending (void ) +void arch_irq_work_raise (void ) {preempt_disable ();set_irq_work_pending_flag ();
arch/powerpc/platforms/pseries/hvconsole.c +1 -1
@@ -73,7 +73,7 @@ int hvc_put_chars(uint32_t vtermno, const char *buf, int count)if (ret ==H_SUCCESS )return count;if (ret ==H_BUSY ) -return 0 ; +return -EAGAIN ;return -EIO ; }
arch/x86/include/asm/msr-index.h +3 -0
@@ -259,6 +259,9 @@#define MSR_IA32_TEMPERATURE_TARGET 0x000001a2#define MSR_IA32_ENERGY_PERF_BIAS 0x000001b0 +#define ENERGY_PERF_BIAS_PERFORMANCE 0 +#define ENERGY_PERF_BIAS_NORMAL 6 +#define ENERGY_PERF_BIAS_POWERSWAVE 15#define MSR_IA32_PACKAGE_THERM_STATUS 0x000001b1
arch/x86/kernel/cpu/intel.c +18 -0
@@ -456,6 +456,24 @@ static void __cpuinit init_intel(struct cpuinfo_x86 *c)if (cpu_has (c,X86_FEATURE_VMX ))detect_vmx_virtcap (c); + +/* +* Initialize MSR_IA32_ENERGY_PERF_BIAS if BIOS did not. +* x86_energy_perf_policy(8) is available to change it at run-time +*/ +if (cpu_has (c,X86_FEATURE_EPB )) { +u64 epb; + +rdmsrl (MSR_IA32_ENERGY_PERF_BIAS , epb); +if ((epb &0xF ) ==0 ) { +printk_once (KERN_WARNING ,"x86: updated energy_perf_bias" +" to 'normal' from 'performance'\n" +"You can view and update epb via utility," +" such as x86_energy_perf_policy(8)\n" ); + epb = (epb & ~0xF ) |ENERGY_PERF_BIAS_NORMAL ; +wrmsrl (MSR_IA32_ENERGY_PERF_BIAS , epb); + } + } }#ifdef CONFIG_X86_32
arch/x86/kernel/relocate_kernel_32.S +2 -0
@@ -97,6 +97,8 @@ relocate_kernel: ret identity_mapped: + /* set return address to 0 if not preserving context */ + pushl $0 /* store the start address on the stack */ pushl %edx
arch/x86/kernel/relocate_kernel_64.S +2 -0
@@ -100,6 +100,8 @@ relocate_kernel: ret identity_mapped: + /* set return address to 0 if not preserving context */ + pushq $0 /* store the start address on the stack */ pushq %rdx
arch/x86/oprofile/backtrace.c +47 -9
86 lines not on this page · raw message
arch/xtensa/kernel/ptrace.c +3 -0
@@ -147,6 +147,9 @@ int ptrace_setxregs(struct task_struct *child, void __user *uregs)elf_xtregs_t *xtregs = uregs;int ret =0 ; +if (!access_ok (VERIFY_READ , uregs,sizeof (elf_xtregs_t))) +return -EFAULT ; +#if XTENSA_HAVE_COPROCESSORS /* Flush all coprocessors before we overwrite them. */ coprocessor_flush_all (ti);
block/blk-core.c +3 -0
@@ -839,6 +839,9 @@ struct request *blk_get_request(struct request_queue *q, int rw, gfp_t gfp_mask) {struct request *rq; +if (unlikely (test_bit (QUEUE_FLAG_DEAD , &q->queue_flags))) +return NULL ; +BUG_ON (rw !=READ && rw !=WRITE );spin_lock_irq (q->queue_lock);
block/blk-exec.c +7 -0
@@ -50,6 +50,13 @@ void blk_execute_rq_nowait(struct request_queue *q, struct gendisk *bd_disk, {int where = at_head ?ELEVATOR_INSERT_FRONT :ELEVATOR_INSERT_BACK ; +if (unlikely (test_bit (QUEUE_FLAG_DEAD , &q->queue_flags))) { + rq->errors = -ENXIO ; +if (rq->end_io) + rq->end_io (rq, rq->errors); +return ; + } + rq->rq_disk = bd_disk; rq->end_io = done;WARN_ON (irqs_disabled ());
drivers/block/cciss.h +1 -1
@@ -223,7 +223,7 @@ static void SA5_submit_command( ctlr_info_t *h, CommandList_struct *c) h->ctlr, c->busaddr);#endif /* CCISS_DEBUG */ writel (c->busaddr, h->vaddr +SA5_REQUEST_PORT_OFFSET ); -readl (h->vaddr +SA5_REQUEST_PORT_OFFSET ); +readl (h->vaddr +SA5_SCRATCHPAD_OFFSET ); h->commands_outstanding++;if ( h->commands_outstanding > h->max_outstanding) h->max_outstanding = h->commands_outstanding;
drivers/firewire/core-cdev.c +11 -9
@@ -253,14 +253,11 @@ static int fw_device_op_open(struct inode *inode, struct file *file)init_waitqueue_head (&client->wait);init_waitqueue_head (&client->tx_flush_wait);INIT_LIST_HEAD (&client->phy_receiver_link); +INIT_LIST_HEAD (&client->link);kref_init (&client->kref); file->private_data = client; -mutex_lock (&device->client_list_mutex); -list_add_tail (&client->link, &device->client_list); -mutex_unlock (&device->client_list_mutex); -return nonseekable_open (inode, file); }
@@ -451,15 +448,20 @@ static int ioctl_get_info(struct client *client, union ioctl_arg *arg)if (ret !=0 )return -EFAULT ; +mutex_lock (&client->device->client_list_mutex); + client->bus_reset_closure = a->bus_reset_closure;if (a->bus_reset !=0 ) {fill_bus_reset_event (&bus_reset, client); -if (copy_to_user (u64_to_uptr (a->bus_reset), - &bus_reset,sizeof (bus_reset))) -return -EFAULT ; + ret =copy_to_user (u64_to_uptr (a->bus_reset), + &bus_reset,sizeof (bus_reset)); } +if (ret ==0 &&list_empty (&client->link)) +list_add_tail (&client->link, &client->device->client_list); -return 0 ; +mutex_unlock (&client->device->client_list_mutex); + +return ret ? -EFAULT :0 ; } static int add_client_resource(struct client *client,
@@ -1583,7 +1585,7 @@ static int dispatch_ioctl(struct client *client,if (_IOC_TYPE (cmd) !='#' ||_IOC_NR (cmd) >=ARRAY_SIZE (ioctl_handlers) ||_IOC_SIZE (cmd) >sizeof (buffer)) -return -EINVAL ; +return -ENOTTY ;if (_IOC_DIR (cmd) == _IOC_READ)memset (&buffer,0 ,_IOC_SIZE (cmd));
drivers/firmware/sigma.c +3 -0
@@ -11,6 +11,7 @@#include <linux/firmware.h> #include <linux/kernel.h> #include <linux/i2c.h> +#include <linux/module.h> #include <linux/sigma.h> /* Return: 0==OK, <0==error, =1 ==no more actions */
@@ -113,3 +114,5 @@ int process_sigma_firmware(struct i2c_client *client, const char *name)return ret; }EXPORT_SYMBOL (process_sigma_firmware); + +MODULE_LICENSE ("GPL" );
drivers/gpu/drm/radeon/atombios_dp.c +18 -4
@@ -627,6 +627,7 @@ struct radeon_dp_link_train_info {u8 train_set[4 ];u8 link_status[DP_LINK_STATUS_SIZE ];u8 tries; +bool use_dpencoder; };static void radeon_dp_update_vs_emph (struct radeon_dp_link_train_info *dp_info)
@@ -646,7 +647,7 @@ static void radeon_dp_set_tp(struct radeon_dp_link_train_info *dp_info, int tp)int rtp =0 ;/* set training pattern on the source */ -if (ASIC_IS_DCE4 (dp_info->rdev)) { +if (ASIC_IS_DCE4 (dp_info->rdev) || !dp_info->use_dpencoder) {switch (tp) {case DP_TRAINING_PATTERN_1 : rtp =ATOM_ENCODER_CMD_DP_LINK_TRAINING_PATTERN1 ;
@@ -706,7 +707,7 @@ static int radeon_dp_link_train_init(struct radeon_dp_link_train_info *dp_info)radeon_write_dpcd_reg (dp_info->radeon_connector,DP_LINK_BW_SET , tmp);/* start training on the source */ -if (ASIC_IS_DCE4 (dp_info->rdev)) +if (ASIC_IS_DCE4 (dp_info->rdev) || !dp_info->use_dpencoder)atombios_dig_encoder_setup (dp_info->encoder,ATOM_ENCODER_CMD_DP_LINK_TRAINING_START ,0 );else
@@ -731,7 +732,7 @@ static int radeon_dp_link_train_finish(struct radeon_dp_link_train_info *dp_info DP_TRAINING_PATTERN_DISABLE);/* disable the training pattern on the source */ -if (ASIC_IS_DCE4 (dp_info->rdev)) +if (ASIC_IS_DCE4 (dp_info->rdev) || !dp_info->use_dpencoder)atombios_dig_encoder_setup (dp_info->encoder,ATOM_ENCODER_CMD_DP_LINK_TRAINING_COMPLETE ,0 );else
@@ -869,7 +870,8 @@ void radeon_dp_link_train(struct drm_encoder *encoder,struct radeon_connector *radeon_connector;struct radeon_connector_atom_dig *dig_connector;struct radeon_dp_link_train_info dp_info; -u8 tmp; +int index; +u8 tmp, frev, crev;if (!radeon_encoder->enc_priv)return ;
@@ -884,6 +886,18 @@ void radeon_dp_link_train(struct drm_encoder *encoder, (dig_connector->dp_sink_type != CONNECTOR_OBJECT_ID_eDP)) return; +/* DPEncoderService newer than 1.1 can't program properly the +* training pattern. When facing such version use the +* DIGXEncoderControl (X== 1 | 2) +*/ + dp_info.use_dpencoder = true; + index =GetIndexIntoMasterTable (COMMAND , DPEncoderService); +if (atom_parse_cmd_header (rdev->mode_info.atom_context, index, &frev, &crev)) { +if (crev >1 ) { + dp_info.use_dpencoder = false; + } + } + dp_info.enc_id =0 ;if (dig->dig_encoder) dp_info.enc_id |=ATOM_DP_CONFIG_DIG2_ENCODER ;
drivers/gpu/drm/radeon/radeon_combios.c +2 -1
@@ -779,7 +779,8 @@ void radeon_combios_i2c_init(struct radeon_device *rdev) } } } - }else if (rdev->family >=CHIP_R200 ) { + }else if ((rdev->family ==CHIP_R200 ) || + (rdev->family >=CHIP_R300 )) {/* 0x68 */ i2c =combios_setup_i2c_bus (rdev,DDC_MONID ,0 ,0 ); rdev->i2c_bus[3 ] =radeon_i2c_create (dev, &i2c,"MONID" );
drivers/gpu/drm/radeon/radeon_pm.c +3 -0
@@ -594,6 +594,9 @@ int radeon_pm_init(struct radeon_device *rdev)if (rdev->pm.default_vddc)radeon_atom_set_voltage (rdev, rdev->pm.default_vddc,SET_VOLTAGE_TYPE_ASIC_VDDC ); +if (rdev->pm.default_vddci) +radeon_atom_set_voltage (rdev, rdev->pm.default_vddci, +SET_VOLTAGE_TYPE_ASIC_VDDCI );if (rdev->pm.default_sclk)radeon_set_engine_clock (rdev, rdev->pm.default_sclk);if (rdev->pm.default_mclk)
drivers/infiniband/ulp/srp/ib_srp.c +2 -0
@@ -2127,6 +2127,8 @@ static ssize_t srp_create_target(struct device *dev,return -ENOMEM ; target_host->transportt = ib_srp_transport_template; + target_host->max_channel =0 ; + target_host->max_id =1 ; target_host->max_lun =SRP_MAX_LUN ; target_host->max_cmd_len =sizeof ((struct srp_cmd *) (void *)0L )->cdb;
drivers/md/dm-io.c +27 -2
@@ -38,6 +38,8 @@ struct io {struct dm_io_client *client;io_notify_fn callback;void *context; +void *vma_invalidate_address; +unsigned long vma_invalidate_size; } __attribute__((aligned(DM_IO_MAX_REGIONS)));static struct kmem_cache *_dm_io_cache;
@@ -116,6 +118,10 @@ static void dec_count(struct io *io, unsigned int region, int error)set_bit (region, &io->error_bits);if (atomic_dec_and_test (&io->count)) { +if (io->vma_invalidate_size) +invalidate_kernel_vmap_range (io->vma_invalidate_address, + io->vma_invalidate_size); +if (io->sleeper)wake_up_process (io->sleeper);
@@ -159,6 +165,9 @@ struct dpages {unsigned context_u;void *context_ptr; + +void *vma_invalidate_address; +unsigned long vma_invalidate_size; };/*
@@ -377,6 +386,9 @@ static int sync_io(struct dm_io_client *client, unsigned int num_regions, io->sleeper = current; io->client = client; + io->vma_invalidate_address = dp->vma_invalidate_address; + io->vma_invalidate_size = dp->vma_invalidate_size; +dispatch_io (rw, num_regions, where, dp, io,1 );while (1 ) {
@@ -415,13 +427,21 @@ static int async_io(struct dm_io_client *client, unsigned int num_regions, io->callback = fn; io->context = context; + io->vma_invalidate_address = dp->vma_invalidate_address; + io->vma_invalidate_size = dp->vma_invalidate_size; +dispatch_io (rw, num_regions, where, dp, io,0 );return 0 ; } -static int dp_init (struct dm_io_request *io_req,struct dpages *dp) +static int dp_init (struct dm_io_request *io_req,struct dpages *dp, +unsigned long size) {/* Set up dpages based on memory type */ + + dp->vma_invalidate_address =NULL ; + dp->vma_invalidate_size =0 ; +switch (io_req->mem.type) {case DM_IO_PAGE_LIST :list_dp_init (dp, io_req->mem.ptr.pl, io_req->mem.offset);
@@ -432,6 +452,11 @@ static int dp_init(struct dm_io_request *io_req, struct dpages *dp)break ;case DM_IO_VMA : +flush_kernel_vmap_range (io_req->mem.ptr.vma, size); +if ((io_req->bi_rw &RW_MASK ) ==READ ) { + dp->vma_invalidate_address = io_req->mem.ptr.vma; + dp->vma_invalidate_size = size; + }vm_dp_init (dp, io_req->mem.ptr.vma);break ;
@@ -460,7 +485,7 @@ int dm_io(struct dm_io_request *io_req, unsigned num_regions,int r;struct dpages dp; - r =dp_init (io_req, &dp); + r =dp_init (io_req, &dp, (unsigned long )where->count <<SECTOR_SHIFT );if (r)return r;
drivers/md/dm-mpath.c +5 -0
@@ -807,6 +807,11 @@ static int parse_features(struct arg_set *as, struct multipath *m)if (!argc)return 0 ; +if (argc > as->argc) { + ti->error ="not enough arguments for features" ; +return -EINVAL ; + } + do { param_name = shift(as); argc--;
drivers/md/dm-snap-persistent.c +1 -1
@@ -753,7 +753,7 @@ static int persistent_commit_merge(struct dm_exception_store *store,for (i =0 ; i < nr_merged; i++)clear_exception (ps, ps->current_committed -1 - i); - r =area_io (ps,WRITE ); + r =area_io (ps,WRITE_FLUSH_FUA );if (r <0 )return r;
drivers/md/dm.c +8 -2
@@ -37,6 +37,8 @@ static const char *_name = DM_NAME;static unsigned int major =0 ;static unsigned int _major =0 ; +static DEFINE_IDR (_minor_idr); +static DEFINE_SPINLOCK (_minor_lock);/* * For bio-based dm.
@@ -313,6 +315,12 @@ static void __exit dm_exit(void)while (i--) _exits[i](); + +/* +* Should be empty by this point. +*/ +idr_remove_all (&_minor_idr); +idr_destroy (&_minor_idr); }/*
@@ -1705,8 +1713,6 @@ static int dm_any_congested(void *congested_data, int bdi_bits)/*----------------------------------------------------------------- * An IDR is used to keep track of allocated minor numbers. *---------------------------------------------------------------*/ -static DEFINE_IDR (_minor_idr); -static void free_minor (int minor) {spin_lock (&_minor_lock);
drivers/misc/Kconfig +1 -2
@@ -245,8 +245,7 @@ config SGI_XP config CS5535_MFGPT tristate "CS5535/CS5536 Geode Multi-Function General Purpose Timer (MFGPT) support" - depends on PCI - depends on X86 + depends on PCI && X86 && MFD_CS5535 default n help This driver provides access to MFGPT functionality for other
drivers/mmc/host/sdhci-esdhc-imx.c +1 -1
@@ -74,7 +74,7 @@ static u32 esdhc_readl_le(struct sdhci_host *host, int reg)if (boarddata &&gpio_is_valid (boarddata->cd_gpio) &&gpio_get_value (boarddata->cd_gpio))/* no card, if a valid gpio says so... */ - val &=SDHCI_CARD_PRESENT ; + val &= ~SDHCI_CARD_PRESENT ;else /* ... in all other cases assume card is present */ val |=SDHCI_CARD_PRESENT ;
drivers/net/jme.c +14 -6
@@ -753,20 +753,28 @@ jme_make_new_rx_buf(struct jme_adapter *jme, int i)struct jme_ring *rxring = &(jme->rxring[0 ]);struct jme_buffer_info *rxbi = rxring->bufinf + i;struct sk_buff *skb; +dma_addr_t mapping; skb =netdev_alloc_skb (jme->dev, jme->dev->mtu +RX_EXTRA_LEN );if (unlikely (!skb))return -ENOMEM ; + mapping =pci_map_page (jme->pdev,virt_to_page (skb->data), +offset_in_page (skb->data),skb_tailroom (skb), +PCI_DMA_FROMDEVICE ); +if (unlikely (pci_dma_mapping_error (jme->pdev, mapping))) { +dev_kfree_skb (skb); +return -ENOMEM ; + } + +if (likely (rxbi->mapping)) +pci_unmap_page (jme->pdev, rxbi->mapping, + rxbi->len,PCI_DMA_FROMDEVICE ); + rxbi->skb = skb; rxbi->len =skb_tailroom (skb); - rxbi->mapping =pci_map_page (jme->pdev, -virt_to_page (skb->data), -offset_in_page (skb->data), - rxbi->len, -PCI_DMA_FROMDEVICE ); - + rxbi->mapping = mapping;return 0 ; }
drivers/net/wireless/ath/ath9k/ar9003_mac.c +1 -2
@@ -629,8 +629,7 @@ int ath9k_hw_process_rxdesc_edma(struct ath_hw *ah, struct ath_rx_status *rxs, rxs->rs_status |=ATH9K_RXERR_DECRYPT ; else if (rxsp->status11 & AR_MichaelErr) rxs->rs_status |= ATH9K_RXERR_MIC; - -if (rxsp->status11 & AR_KeyMiss) + else if (rxsp->status11 & AR_KeyMiss) rxs->rs_status |= ATH9K_RXERR_DECRYPT; }
drivers/net/wireless/ath/ath9k/mac.c +1 -2
@@ -645,8 +645,7 @@ int ath9k_hw_rxprocdesc(struct ath_hw *ah, struct ath_desc *ds, rs->rs_status |=ATH9K_RXERR_DECRYPT ; else if (ads.ds_rxstatus8 & AR_MichaelErr) rs->rs_status |= ATH9K_RXERR_MIC; - -if (ads.ds_rxstatus8 & AR_KeyMiss) + else if (ads.ds_rxstatus8 & AR_KeyMiss) rs->rs_status |= ATH9K_RXERR_DECRYPT; }
drivers/net/wireless/rt2x00/rt2800pci.c +1 -0
@@ -1158,6 +1158,7 @@ static DEFINE_PCI_DEVICE_TABLE(rt2800pci_device_table) = {#endif #ifdef CONFIG_RT2800PCI_RT53XX { PCI_DEVICE(0x1814, 0x5390) }, + { PCI_DEVICE(0x1814, 0x539f) }, #endif { 0, } };
drivers/net/wireless/rtlwifi/rtl8192cu/rf.c +1 -1
@@ -104,7 +104,7 @@ void rtl92cu_phy_rf6052_set_cck_txpower(struct ieee80211_hw *hw, tx_agc[RF90_PATH_A ] =0x10101010 ; tx_agc[RF90_PATH_B ] =0x10101010 ; }else if (rtlpriv->dm.dynamic_txhighpower_lvl == -TXHIGHPWRLEVEL_LEVEL1 ) { +TXHIGHPWRLEVEL_LEVEL2 ) { tx_agc[RF90_PATH_A ] =0x00000000 ; tx_agc[RF90_PATH_B ] =0x00000000 ; }else {
drivers/pci/pci.c +6 -1
@@ -1905,7 +1905,7 @@ void pci_enable_ari(struct pci_dev *dev) {int pos;u32 cap; -u16 ctrl; +u16 flags, ctrl;struct pci_dev *bridge;if (!pci_is_pcie (dev) || dev->devfn)
@@ -1923,6 +1923,11 @@ void pci_enable_ari(struct pci_dev *dev)if (!pos)return ; +/* ARI is a PCIe v2 feature */ +pci_read_config_word (bridge, pos +PCI_EXP_FLAGS , &flags); +if ((flags &PCI_EXP_FLAGS_VERS ) <2 ) +return ; +pci_read_config_dword (bridge, pos +PCI_EXP_DEVCAP2 , &cap);if (!(cap &PCI_EXP_DEVCAP2_ARI ))return ;
drivers/pci/quirks.c +23 -0
@@ -2758,6 +2758,29 @@ static void ricoh_mmc_fixup_r5c832(struct pci_dev *dev)dev_notice (&dev->dev,"proprietary Ricoh MMC controller disabled (via firewire function)\n" );dev_notice (&dev->dev,"MMC cards are now supported by standard SDHCI controller\n" ); + +/* +* RICOH 0xe823 SD/MMC card reader fails to recognize +* certain types of SD/MMC cards. Lowering the SD base +* clock frequency from 200Mhz to 50Mhz fixes this issue. +* +* 0x150 - SD2.0 mode enable for changing base clock +* frequency to 50Mhz +* 0xe1 - Base clock frequency +* 0x32 - 50Mhz new clock frequency +* 0xf9 - Key register for 0x150 +* 0xfc - key register for 0xe1 +*/ +if (dev->device ==PCI_DEVICE_ID_RICOH_R5CE823 ) { +pci_write_config_byte (dev,0xf9 ,0xfc ); +pci_write_config_byte (dev,0x150 ,0x10 ); +pci_write_config_byte (dev,0xf9 ,0x00 ); +pci_write_config_byte (dev,0xfc ,0x01 ); +pci_write_config_byte (dev,0xe1 ,0x32 ); +pci_write_config_byte (dev,0xfc ,0x00 ); + +dev_notice (&dev->dev,"MMC controller base frequency changed to 50Mhz.\n" ); + } }DECLARE_PCI_FIXUP_EARLY (PCI_VENDOR_ID_RICOH ,PCI_DEVICE_ID_RICOH_R5C832 , ricoh_mmc_fixup_r5c832);DECLARE_PCI_FIXUP_RESUME_EARLY (PCI_VENDOR_ID_RICOH ,PCI_DEVICE_ID_RICOH_R5C832 , ricoh_mmc_fixup_r5c832);
drivers/rtc/interface.c +38 -17
87 lines not on this page · raw message
drivers/rtc/rtc-tegra.c +1 -1
@@ -343,7 +343,7 @@ static int __devinit tegra_rtc_probe(struct platform_device *pdev)/* set context info. */ info->pdev = pdev; - info->tegra_rtc_lock =__SPIN_LOCK_UNLOCKED (info->tegra_rtc_lock); +spin_lock_init (&info->tegra_rtc_lock);platform_set_drvdata (pdev, info);
drivers/scsi/hpsa.h +1 -1
@@ -214,7 +214,7 @@ static void SA5_submit_command(struct ctlr_info *h,dev_dbg (&h->pdev->dev,"Sending %x, tag = %x\n" , c->busaddr, c->Header.Tag.lower);writel (c->busaddr, h->vaddr +SA5_REQUEST_PORT_OFFSET ); - (void )readl (h->vaddr +SA5_REQUEST_PORT_OFFSET ); + (void )readl (h->vaddr +SA5_SCRATCHPAD_OFFSET ); h->commands_outstanding++;if (h->commands_outstanding > h->max_outstanding) h->max_outstanding = h->commands_outstanding;
drivers/scsi/libsas/sas_expander.c +3 -0
@@ -849,6 +849,9 @@ static struct domain_device *sas_ex_discover_expander( res =sas_discover_expander (child);if (res) { +spin_lock_irq (&parent->port->dev_list_lock); +list_del (&child->dev_list_node); +spin_unlock_irq (&parent->port->dev_list_lock);kfree (child);return NULL ; }
drivers/scsi/pmcraid.c +3 -0
@@ -3871,6 +3871,9 @@ static long pmcraid_ioctl_passthrough(pmcraid_err ("couldn't build passthrough ioadls\n" ); goto out_free_buffer; } + }else if (request_size <0 ) { + rc = -EINVAL ; + goto out_free_buffer; }/* If data is being written into the device, copy the data from user
drivers/scsi/scsi_devinfo.c +2 -0
@@ -197,6 +197,7 @@ static struct { {"IBM", "ProFibre 4000R", "*", BLIST_SPARSELUN | BLIST_LARGELUN}, {"IBM", "2105", NULL, BLIST_RETRY_HWERROR}, {"iomega", "jaz 1GB", "J.86", BLIST_NOTQ | BLIST_NOLUN}, + {"IOMEGA", "ZIP", NULL, BLIST_NOTQ | BLIST_NOLUN}, {"IOMEGA", "Io20S *F", NULL, BLIST_KEY}, {"INSITE", "Floptical F*8I", NULL, BLIST_KEY}, {"INSITE", "I325VM", NULL, BLIST_KEY},
@@ -243,6 +244,7 @@ static struct { {"Tornado-", "F4", "*", BLIST_NOREPORTLUN}, {"TOSHIBA", "CDROM", NULL, BLIST_ISROM}, {"TOSHIBA", "CD-ROM", NULL, BLIST_ISROM}, + {"Traxdata", "CDR4120", NULL, BLIST_NOLUN}, /* locks up */ {"USB2.0", "SMARTMEDIA/XD", NULL, BLIST_FORCELUN | BLIST_INQUIRY_36}, {"WangDAT", "Model 2600", "01.7", BLIST_SELECT_NO_ATN}, {"WangDAT", "Model 3200", "02.2", BLIST_SELECT_NO_ATN},
drivers/scsi/scsi_lib.c +2 -0
@@ -213,6 +213,8 @@ int scsi_execute(struct scsi_device *sdev, const unsigned char *cmd,int ret =DRIVER_ERROR <<24 ; req =blk_get_request (sdev->request_queue, write, __GFP_WAIT); +if (!req) +return ret;if (bufflen &&blk_rq_map_kern (sdev->request_queue, req, buffer, bufflen, __GFP_WAIT))
drivers/scsi/ses.c +5 -1
@@ -160,6 +160,10 @@ static unsigned char *ses_get_page2_descriptor(struct enclosure_device *edev,return NULL ; } +/* For device slot and array device slot elements, byte 3 bit 6 +* is "fault sensed" while byte 3 bit 5 is "fault reqstd". As this +* code stands these bits are shifted 4 positions right so in +* sysfs they will appear as bits 2 and 1 respectively. Strange. */ static void ses_get_fault (struct enclosure_device *edev,struct enclosure_component *ecomp) {
@@ -181,7 +185,7 @@ static int ses_set_fault(struct enclosure_device *edev,/* zero is disabled */ break ;case ENCLOSURE_SETTING_ENABLED : - desc[2 ] =0x02 ; + desc[3 ] =0x20 ;break ;default :/* SES doesn't do the SGPIO blink settings */
drivers/scsi/sr.c +42 -4
68 lines not on this page · raw message
drivers/scsi/sr.h +7 -0
@@ -41,6 +41,13 @@ typedef struct scsi_cd { unsigned readcd_known:1; /* drive supports READ_CD (0xbe) */ unsigned readcd_cdda:1; /* reading audio data using READ_CD */ unsigned media_present:1; /* media is present */ + +/* GET_EVENT spurious event handling, blk layer guarantees exclusion */ +int tur_mismatch;/* nr of get_event TUR mismatches */ + bool tur_changed:1; /* changed according to TUR */ + bool get_event_changed:1; /* changed according to GET_EVENT */ + bool ignore_get_event:1; /* GET_EVENT is unreliable, use TUR */ +struct cdrom_device_info cdi;/* We hold gendisk and scsi_device references on probe and use * the refs on this kref to decide when to release them */
drivers/staging/ath6kl/os/linux/ar6000_drv.c +34 -15
121 lines not on this page · raw message
drivers/staging/ath6kl/os/linux/cfg80211.c +18 -13
@@ -867,26 +867,31 @@ ar6k_cfg80211_scanComplete_event(struct ar6_softc *ar, int status)AR_DEBUG_PRINTF (ATH_DEBUG_INFO , ("%s: status %d\n" , __func__, status)); -if (ar->scan_request) - { -/* Translate data to cfg80211 mgmt format */ -if (ar->arWmi) -wmi_iterate_nodes (ar->arWmi, ar6k_cfg80211_scan_node, ar->wdev->wiphy); +if (!ar->scan_request) +return ; + +if ((status ==A_ECANCELED ) || (status ==A_EBUSY )) { +cfg80211_scan_done (ar->scan_request, true); + goto out; + } + +/* Translate data to cfg80211 mgmt format */ +wmi_iterate_nodes (ar->arWmi, ar6k_cfg80211_scan_node, ar->wdev->wiphy); -cfg80211_scan_done (ar->scan_request, - ((status &A_ECANCELED ) || (status &A_EBUSY )) ? true : false); +cfg80211_scan_done (ar->scan_request, false); -if (ar->scan_request->n_ssids && - ar->scan_request->ssids[0 ].ssid_len) { +if (ar->scan_request->n_ssids && + ar->scan_request->ssids[0 ].ssid_len) {u8 i;for (i =0 ; i < ar->scan_request->n_ssids; i++) { -wmi_probedSsid_cmd (ar->arWmi, i+1 ,DISABLE_SSID_FLAG , -0 ,NULL ); +wmi_probedSsid_cmd (ar->arWmi, i+1 ,DISABLE_SSID_FLAG , +0 ,NULL ); } - } - ar->scan_request =NULL ; } + +out: + ar->scan_request =NULL ; } static int
drivers/staging/ath6kl/os/linux/include/ar6000_drv.h +9 -0
@@ -651,6 +651,15 @@ struct ar6_softc {void *arApDev;#endif u8 arAutoAuthStage; + +u8 *fw_otp; +size_t fw_otp_len; +u8 *fw; +size_t fw_len; +u8 *fw_patch; +size_t fw_patch_len; +u8 *fw_data; +size_t fw_data_len; };#ifdef CONFIG_AP_VIRTUAL_ADAPTER_SUPPORT
drivers/staging/brcm80211/brcmsmac/wl_mac80211.c +0 -5
@@ -449,11 +449,6 @@ wl_ops_bss_info_changed(struct ieee80211_hw *hw,wiphy_err (wiphy,"%s: qos enabled: %s (implement)\n" , __func__, info->qos ?"true" :"false" ); } -if (changed &BSS_CHANGED_IDLE ) { -/* Idle changed for this BSS/interface */ -wiphy_err (wiphy,"%s: BSS idle: %s (implement)\n" , __func__, - info->idle ?"true" :"false" ); - }return ; }
drivers/staging/comedi/comedi_fops.c +2 -2
@@ -383,8 +383,8 @@ static int do_devinfo_ioctl(struct comedi_device *dev,/* fill devinfo structure */ devinfo.version_code =COMEDI_VERSION_CODE ; devinfo.n_subdevs = dev->n_subdevices; -memcpy (devinfo.driver_name, dev->driver->driver_name,COMEDI_NAMELEN ); -memcpy (devinfo.board_name, dev->board_name,COMEDI_NAMELEN ); +strlcpy (devinfo.driver_name, dev->driver->driver_name,COMEDI_NAMELEN ); +strlcpy (devinfo.board_name, dev->board_name,COMEDI_NAMELEN );if (read_subdev) devinfo.read_subdevice = read_subdev - dev->subdevices;
drivers/staging/hv/channel.c +1 -1
@@ -212,7 +212,7 @@ int vmbus_open(struct vmbus_channel *newchannel, u32 send_ringbuffer_size,if (ret !=0 ) goto Cleanup; - t =wait_for_completion_timeout (&openInfo->waitevent,HZ ); + t =wait_for_completion_timeout (&openInfo->waitevent,5 *HZ );if (t ==0 ) { err = -ETIMEDOUT ; goto errorout;
drivers/staging/hv/channel_mgmt.c +1 -1
@@ -773,7 +773,7 @@ int vmbus_request_offers(void) goto cleanup; } - t =wait_for_completion_timeout (&msginfo->waitevent,HZ ); + t =wait_for_completion_timeout (&msginfo->waitevent,5 *HZ );if (t ==0 ) { ret = -ETIMEDOUT ; goto cleanup;
drivers/staging/hv/connection.c +1 -1
@@ -135,7 +135,7 @@ int vmbus_connect(void) }/* Wait for the connection response */ - t =wait_for_completion_timeout (&msginfo->waitevent,HZ ); + t =wait_for_completion_timeout (&msginfo->waitevent,5 *HZ );if (t ==0 ) {spin_lock_irqsave (&vmbus_connection.channelmsg_lock, flags);
drivers/staging/hv/netvsc.c +2 -2
@@ -270,7 +270,7 @@ static int netvsc_init_recv_buf(struct hv_device *device) goto cleanup; } - t =wait_for_completion_timeout (&net_device->channel_init_wait,HZ ); + t =wait_for_completion_timeout (&net_device->channel_init_wait,5 *HZ );BUG_ON (t ==0 );
@@ -513,7 +513,7 @@ static int netvsc_connect_vsp(struct hv_device *device)if (ret !=0 ) goto cleanup; - t =wait_for_completion_timeout (&net_device->channel_init_wait,HZ ); + t =wait_for_completion_timeout (&net_device->channel_init_wait,5 *HZ );if (t ==0 ) { ret = -ETIMEDOUT ;
drivers/staging/hv/rndis_filter.c +3 -3
@@ -467,7 +467,7 @@ static int rndis_filter_query_device(struct rndis_device *dev, u32 oid,if (ret !=0 ) goto Cleanup; - t =wait_for_completion_timeout (&request->wait_event,HZ ); + t =wait_for_completion_timeout (&request->wait_event,5 *HZ );if (t ==0 ) { ret = -ETIMEDOUT ; goto Cleanup;
@@ -543,7 +543,7 @@ static int rndis_filter_set_packet_filter(struct rndis_device *dev,if (ret !=0 ) goto Cleanup; - t =wait_for_completion_timeout (&request->wait_event,HZ ); + t =wait_for_completion_timeout (&request->wait_event,5 *HZ );if (t ==0 ) { ret =-1 ;
@@ -600,7 +600,7 @@ static int rndis_filter_init_device(struct rndis_device *dev) } - t =wait_for_completion_timeout (&request->wait_event,HZ ); + t =wait_for_completion_timeout (&request->wait_event,5 *HZ );if (t ==0 ) { ret = -ETIMEDOUT ;
drivers/staging/hv/storvsc.c +4 -4
@@ -135,7 +135,7 @@ static int storvsc_channel_init(struct hv_device *device)if (ret !=0 ) goto cleanup; - t =wait_for_completion_timeout (&request->wait_event,HZ ); + t =wait_for_completion_timeout (&request->wait_event,5 *HZ );if (t ==0 ) { ret = -ETIMEDOUT ; goto cleanup;
@@ -163,7 +163,7 @@ static int storvsc_channel_init(struct hv_device *device)if (ret !=0 ) goto cleanup; - t =wait_for_completion_timeout (&request->wait_event,HZ ); + t =wait_for_completion_timeout (&request->wait_event,5 *HZ );if (t ==0 ) { ret = -ETIMEDOUT ; goto cleanup;
@@ -192,7 +192,7 @@ static int storvsc_channel_init(struct hv_device *device)if (ret !=0 ) goto cleanup; - t =wait_for_completion_timeout (&request->wait_event,HZ ); + t =wait_for_completion_timeout (&request->wait_event,5 *HZ );if (t ==0 ) { ret = -ETIMEDOUT ; goto cleanup;
@@ -222,7 +222,7 @@ static int storvsc_channel_init(struct hv_device *device)if (ret !=0 ) goto cleanup; - t =wait_for_completion_timeout (&request->wait_event,HZ ); + t =wait_for_completion_timeout (&request->wait_event,5 *HZ );if (t ==0 ) { ret = -ETIMEDOUT ; goto cleanup;
drivers/staging/hv/storvsc_drv.c +1 -1
@@ -393,7 +393,7 @@ static int storvsc_host_reset(struct hv_device *device)if (ret !=0 ) goto cleanup; - t =wait_for_completion_timeout (&request->wait_event,HZ ); + t =wait_for_completion_timeout (&request->wait_event,5 *HZ );if (t ==0 ) { ret = -ETIMEDOUT ; goto cleanup;
drivers/staging/rtl8192e/r8192E_core.c +6 -0
@@ -4532,6 +4532,7 @@ static int __devinit rtl8192_pci_probe(struct pci_dev *pdev,u8 unit =0 ;int ret = -ENODEV ;unsigned long pmem_start, pmem_len, pmem_flags; +u8 revisionid;RT_TRACE (COMP_INIT ,"Configuring chip resources\n" );
@@ -4592,6 +4593,11 @@ static int __devinit rtl8192_pci_probe(struct pci_dev *pdev,pci_write_config_byte (pdev,0x41 ,0x00 ); +pci_read_config_byte (pdev,0x08 , &revisionid); +/* If the revisionid is 0x10, the device uses rtl8192se. */ +if (pdev->device ==0x8192 && revisionid ==0x10 ) + goto fail1; +pci_read_config_byte (pdev,0x05 , &unit);pci_write_config_byte (pdev,0x05 , unit & (~0x04 ));
drivers/staging/usbip/vhci_hcd.c +2 -2
@@ -846,9 +846,9 @@ static void vhci_shutdown_connection(struct usbip_device *ud) }/* kill threads related to this sdev, if v.c. exists */ -if (vdev->ud.tcp_rx) +if (vdev->ud.tcp_rx && !task_is_dead (vdev->ud.tcp_rx))kthread_stop (vdev->ud.tcp_rx); -if (vdev->ud.tcp_tx) +if (vdev->ud.tcp_tx && !task_is_dead (vdev->ud.tcp_tx))kthread_stop (vdev->ud.tcp_tx);pr_info ("stop threads\n" );
drivers/tty/hvc/hvc_console.c +5 -3
@@ -163,8 +163,10 @@ static void hvc_console_print(struct console *co, const char *b, }else { r = cons_ops[index]->put_chars (vtermnos[index], c, i);if (r <=0 ) { -/* throw away chars on error */ - i =0 ; +/* throw away characters on error +* but spin in case of -EAGAIN */ +if (r != -EAGAIN ) + i =0 ; }else if (r >0 ) { i -= r;if (i >0 )
@@ -448,7 +450,7 @@ static int hvc_push(struct hvc_struct *hp) n = hp->ops->put_chars (hp->vtermno, hp->outbuf, hp->n_outbuf);if (n <=0 ) { -if (n ==0 ) { +if (n ==0 || n == -EAGAIN ) { hp->do_wakeup =1 ;return 0 ; }
drivers/tty/n_gsm.c +0 -4
@@ -1823,10 +1823,6 @@ static void gsm0_receive(struct gsm_mux *gsm, unsigned char c)break ;case GSM_FCS :/* FCS follows the packet */ gsm->received_fcs = c; -if (c ==GSM0_SOF ) { - gsm->state =GSM_SEARCH ; -break ; - }gsm_queue (gsm); gsm->state =GSM_SSOF ;break ;
drivers/tty/serial/8250.c +1 -1
@@ -1107,7 +1107,7 @@ static void autoconfig_16550a(struct uart_8250_port *up)*/ DEBUG_AUTOCONF ("Xscale " ); up->port.type =PORT_XSCALE ; - up->capabilities |=UART_CAP_UUE ; + up->capabilities |=UART_CAP_UUE |UART_CAP_RTOIE ;return ; } }else {
drivers/tty/serial/Kconfig +1 -1
@@ -1419,7 +1419,7 @@ config SERIAL_SC26XX config SERIAL_SC26XX_CONSOLE bool "Console on SC2681/SC2692 serial port" - depends on SERIAL_SC26XX + depends on SERIAL_SC26XX=y select SERIAL_CORE_CONSOLE help Support for Console on SC2681/SC2692 serial ports.
drivers/usb/host/ehci-hcd.c +3 -5
@@ -94,7 +94,8 @@ static const char hcd_name [] = "ehci_hcd";#define EHCI_IAA_MSECS 10/* arbitrary */ #define EHCI_IO_JIFFIES (HZ/10)/* io watchdog > irq_thresh */ #define EHCI_ASYNC_JIFFIES (HZ/20)/* async idle timeout */ -#define EHCI_SHRINK_FRAMES 5/* async qh unlink delay */ +#define EHCI_SHRINK_JIFFIES (DIV_ROUND_UP(HZ, 200) + 1) +/* 200-ms async qh unlink delay */ /* Initial IRQ latency: faster than hw default */ static int log2_irq_thresh =0 ;// 0 to 6
@@ -152,10 +153,7 @@ timer_action(struct ehci_hcd *ehci, enum ehci_timer_action action)break ;/* case TIMER_ASYNC_SHRINK: */ default : -/* add a jiffie since we synch against the -* 8 KHz uframe counter. -*/ - t =DIV_ROUND_UP (EHCI_SHRINK_FRAMES *HZ ,1000 ) +1 ; + t =EHCI_SHRINK_JIFFIES ;break ; }mod_timer (&ehci->watchdog, t + jiffies);
drivers/usb/host/ehci-hub.c +2 -1
@@ -891,10 +891,11 @@ static int ehci_hub_control (* power switching; they're allowed to just limit the * current. khubd will turn the power back on. */ -if (HCS_PPC (ehci->hcs_params)){ +if ((temp &PORT_OC ) &&HCS_PPC (ehci->hcs_params)) {ehci_writel (ehci, temp & ~(PORT_RWC_BITS |PORT_POWER ), status_reg); + temp =ehci_readl (ehci, status_reg); } }
drivers/usb/host/ehci-q.c +42 -43
114 lines not on this page · raw message
drivers/usb/host/ehci.h +3 -1
@@ -75,6 +75,7 @@ struct ehci_hcd { /* one per controller */struct ehci_qh *async;struct ehci_qh *dummy;/* For AMD quirk use */ struct ehci_qh *reclaim; +struct ehci_qh *qh_scan_next; unsigned scanning : 1;/* periodic schedule support */
@@ -117,7 +118,6 @@ struct ehci_hcd { /* one per controller */struct timer_list iaa_watchdog;struct timer_list watchdog;unsigned long actions; -unsigned stamp;unsigned periodic_stamp;unsigned random_frame;unsigned long next_statechange;
@@ -343,6 +343,7 @@ struct ehci_qh {struct ehci_qh *reclaim;/* next to reclaim */ struct ehci_hcd *ehci; +unsigned long unlink_time;/* * Do NOT use atomic operations for QH refcounting. On some CPUs
@@ -374,6 +375,7 @@ struct ehci_qh {#define NO_FRAME ((unsigned short)~0)/* pick new start */ struct usb_device *dev;/* access to TT */ + unsigned is_out:1; /* bulk or intr OUT */ unsigned clearing_tt:1; /* Clear-TT-Buf in progress */ };
drivers/usb/host/pci-quirks.c +28 -0
@@ -35,6 +35,8 @@#define OHCI_INTRSTATUS 0x0c#define OHCI_INTRENABLE 0x10#define OHCI_INTRDISABLE 0x14 +#define OHCI_FMINTERVAL 0x34 +#define OHCI_HCR (1 << 0)/* host controller reset */ #define OHCI_OCR (1 << 3)/* ownership change request */ #define OHCI_CTRL_RWC (1 << 9)/* remote wakeup connected */ #define OHCI_CTRL_IR (1 << 8)/* interrupt routing */
@@ -497,6 +499,32 @@ static void __devinit quirk_usb_handoff_ohci(struct pci_dev *pdev)/* reset controller, preserving RWC (and possibly IR) */ writel (control &OHCI_CTRL_MASK , base +OHCI_CONTROL ); +readl (base +OHCI_CONTROL ); + +/* Some NVIDIA controllers stop working if kept in RESET for too long */ +if (pdev->vendor ==PCI_VENDOR_ID_NVIDIA ) { +u32 fminterval; +int cnt; + +/* drive reset for at least 50 ms (7.1.7.5) */ +msleep (50 ); + +/* software reset of the controller, preserving HcFmInterval */ + fminterval =readl (base +OHCI_FMINTERVAL ); +writel (OHCI_HCR , base +OHCI_CMDSTATUS ); + +/* reset requires max 10 us delay */ +for (cnt =30 ; cnt >0 ; --cnt) {/* ... allow extra time */ +if ((readl (base +OHCI_CMDSTATUS ) &OHCI_HCR ) ==0 ) +break ; +udelay (1 ); + } +writel (fminterval, base +OHCI_FMINTERVAL ); + +/* Now we're in the SUSPEND state with all devices reset +* and wakeups and interrupts disabled +*/ + }/* * disable interrupts
drivers/usb/musb/musb_core.c +1 -0
@@ -2329,6 +2329,7 @@ static void musb_restore_context(struct musb *musb) musb->context.index_regs[i].rxhubport); } } +musb_writeb (musb_base,MUSB_INDEX , musb->context.index); }static int musb_suspend (struct device *dev)
drivers/usb/serial/pl2303.c +1 -0
@@ -91,6 +91,7 @@ static const struct usb_device_id id_table[] = { { USB_DEVICE(SONY_VENDOR_ID, SONY_QN3USB_PRODUCT_ID) }, { USB_DEVICE(SANWA_VENDOR_ID, SANWA_PRODUCT_ID) }, { USB_DEVICE(ADLINK_VENDOR_ID, ADLINK_ND6530_PRODUCT_ID) }, + { USB_DEVICE(WINCHIPHEAD_VENDOR_ID, WINCHIPHEAD_USBSER_PRODUCT_ID) }, { } /* Terminating entry */ };
drivers/usb/serial/pl2303.h +4 -0
@@ -144,3 +144,7 @@/* ADLINK ND-6530 RS232,RS485 and RS422 adapter */ #define ADLINK_VENDOR_ID 0x0b63#define ADLINK_ND6530_PRODUCT_ID 0x6530 + +/* WinChipHead USB->RS 232 adapter */ +#define WINCHIPHEAD_VENDOR_ID 0x4348 +#define WINCHIPHEAD_USBSER_PRODUCT_ID 0x5523
drivers/watchdog/shwdt.c +1 -1
@@ -64,7 +64,7 @@* misses its deadline, the kernel timer will allow the WDT to overflow. */ static int clock_division_ratio =WTCSR_CKS_4096 ; -#define next_ping_period (cks) msecs_to_jiffies(cks - 4) +#define next_ping_period (cks) (jiffies + msecs_to_jiffies(cks - 4))static const struct watchdog_info sh_wdt_info;static struct platform_device *sh_wdt_dev;
fs/cifs/dir.c +1 -1
@@ -641,7 +641,7 @@ lookup_out:static int cifs_d_revalidate (struct dentry *direntry,struct nameidata *nd) { -if (nd->flags &LOOKUP_RCU ) +if (nd && (nd->flags &LOOKUP_RCU ))return -ECHILD ;if (direntry->d_inode) {
fs/ecryptfs/inode.c +1 -0
@@ -69,6 +69,7 @@ static int ecryptfs_inode_set(struct inode *inode, void *opaque) inode->i_ino = lower_inode->i_ino; inode->i_version++; inode->i_mapping->a_ops = &ecryptfs_aops; + inode->i_mapping->backing_dev_info = inode->i_sb->s_bdi;if (S_ISLNK (inode->i_mode)) inode->i_op = &ecryptfs_symlink_iops;
fs/ecryptfs/keystore.c +25 -22
135 lines not on this page · raw message
fs/ext3/xattr.c +10 -2
@@ -803,8 +803,16 @@ inserted:/* We need to allocate a new block */ ext3_fsblk_t goal =ext3_group_first_block_no (sb,EXT3_I (inode)->i_block_group); -ext3_fsblk_t block =ext3_new_block (handle, inode, - goal, &error); +ext3_fsblk_t block; + +/* +* Protect us agaist concurrent allocations to the +* same inode from ext3_..._writepage(). Reservation +* code does not expect racing allocations. +*/ +mutex_lock (&EXT3_I (inode)->truncate_mutex); + block =ext3_new_block (handle, inode, goal, &error); +mutex_unlock (&EXT3_I (inode)->truncate_mutex);if (error) goto cleanup;ea_idebug (inode,"creating block %d" , block);
fs/ext4/ext4.h +1 -0
@@ -526,6 +526,7 @@ struct ext4_new_group_data {#define EXT4_FREE_BLOCKS_METADATA 0x0001#define EXT4_FREE_BLOCKS_FORGET 0x0002#define EXT4_FREE_BLOCKS_VALIDATED 0x0004 +#define EXT4_FREE_BLOCKS_NO_QUOT_UPDATE 0x0008/* * ioctl commands
fs/ext4/extents.c +6 -5
@@ -3596,17 +3596,18 @@ int ext4_ext_map_blocks(handle_t *handle, struct inode *inode, } err =check_eofblocks_fl (handle, inode, map->m_lblk, path, ar.len); -if (err) - goto out2; - - err =ext4_ext_insert_extent (handle, inode, path, &newex, flags); +if (!err) + err =ext4_ext_insert_extent (handle, inode, path, + &newex, flags);if (err) { +int fb_flags = flags &EXT4_GET_BLOCKS_DELALLOC_RESERVE ? +EXT4_FREE_BLOCKS_NO_QUOT_UPDATE :0 ;/* free data blocks we just allocated */ /* not a good idea to call discard here directly, * but otherwise we'd need to call it every free() */ ext4_discard_preallocations (inode);ext4_free_blocks (handle, inode,NULL ,ext4_ext_pblock (&newex), -ext4_ext_get_actual_len (&newex),0 ); +ext4_ext_get_actual_len (&newex), fb_flags); goto out2; }
fs/ext4/mballoc.c +1 -1
@@ -4637,7 +4637,7 @@ do_more: }ext4_mark_super_dirty (sb); error_return: -if (freed) +if (freed && !(flags &EXT4_FREE_BLOCKS_NO_QUOT_UPDATE ))dquot_free_block (inode, freed);brelse (bitmap_bh);ext4_std_error (sb, err);
fs/gfs2/ops_fstype.c +2 -2
@@ -1018,13 +1018,13 @@ hostdata_error: fsname++;if (lm->lm_mount ==NULL ) {fs_info (sdp,"Now mounting FS...\n" ); -complete (&sdp->sd_locking_init); +complete_all (&sdp->sd_locking_init);return 0 ; } ret = lm->lm_mount (sdp, fsname);if (ret ==0 )fs_info (sdp,"Joined cluster. Now mounting FS...\n" ); -complete (&sdp->sd_locking_init); +complete_all (&sdp->sd_locking_init);return ret; }
fs/nfs/delegation.c +8 -8
@@ -398,12 +398,11 @@ int nfs_inode_return_delegation(struct inode *inode)return err; } -static void nfs_mark_return_delegation (struct nfs_delegation *delegation) +static void nfs_mark_return_delegation (struct nfs_server *server, +struct nfs_delegation *delegation) { -struct nfs_client *clp =NFS_SERVER (delegation->inode)->nfs_client; -set_bit (NFS_DELEGATION_RETURN , &delegation->flags); -set_bit (NFS4CLNT_DELEGRETURN , &clp->cl_state); +set_bit (NFS4CLNT_DELEGRETURN , &server->nfs_client->cl_state); }/**
@@ -441,7 +440,7 @@ static void nfs_mark_return_all_delegation_types(struct nfs_server *server,if ((delegation->type == (FMODE_READ |FMODE_WRITE )) && !(flags &FMODE_WRITE ))continue ;if (delegation->type & flags) -nfs_mark_return_delegation (delegation); +nfs_mark_return_delegation (server, delegation); } }
@@ -508,7 +507,7 @@ static void nfs_mark_return_unreferenced_delegations(struct nfs_server *server)list_for_each_entry_rcu (delegation, &server->delegations, super_list) {if (test_and_clear_bit (NFS_DELEGATION_REFERENCED , &delegation->flags))continue ; -nfs_mark_return_delegation (delegation); +nfs_mark_return_delegation (server, delegation); } }
@@ -539,7 +538,8 @@ void nfs_expire_unreferenced_delegations(struct nfs_client *clp)int nfs_async_inode_return_delegation (struct inode *inode,const nfs4_stateid *stateid) { -struct nfs_client *clp =NFS_SERVER (inode)->nfs_client; +struct nfs_server *server =NFS_SERVER (inode); +struct nfs_client *clp = server->nfs_client;struct nfs_delegation *delegation;rcu_read_lock ();
@@ -549,7 +549,7 @@ int nfs_async_inode_return_delegation(struct inode *inode,rcu_read_unlock ();return -ENOENT ; } -nfs_mark_return_delegation (delegation); +nfs_mark_return_delegation (server, delegation);rcu_read_unlock ();nfs_delegation_run_state_manager (clp);
fs/nfs/dir.c +33 -23
129 lines not on this page · raw message
fs/nfs/nfs4filelayout.c +1 -1
@@ -170,7 +170,7 @@ filelayout_set_layoutcommit(struct nfs_write_data *wdata)pnfs_set_layoutcommit (wdata);dprintk ("%s ionde %lu pls_end_pos %lu\n" , __func__, wdata->inode->i_ino, - (unsigned long ) wdata->lseg->pls_end_pos); + (unsigned long )NFS_I (wdata->inode)->layout->plh_lwb); }/*
fs/nfs/nfs4proc.c +7 -1
@@ -5850,9 +5850,15 @@ nfs4_layoutcommit_done(struct rpc_task *task, void *calldata)static void nfs4_layoutcommit_release (void *calldata) {struct nfs4_layoutcommit_data *data = calldata; +struct pnfs_layout_segment *lseg, *tmp;/* Matched by references in pnfs_set_layoutcommit */ -put_lseg (data->lseg); +list_for_each_entry_safe (lseg, tmp, &data->lseg_list, pls_lc_list) { +list_del_init (&lseg->pls_lc_list); +if (test_and_clear_bit (NFS_LSEG_LAYOUTCOMMIT , + &lseg->pls_flags)) +put_lseg (lseg); + }put_rpccred (data->cred);kfree (data); }
fs/nfs/nfs4xdr.c +1 -1
@@ -1888,7 +1888,7 @@ encode_layoutcommit(struct xdr_stream *xdr, *p++ =cpu_to_be32 (OP_LAYOUTCOMMIT );/* Only whole file layouts */ p =xdr_encode_hyper (p,0 );/* offset */ - p =xdr_encode_hyper (p,NFS4_MAX_UINT64 );/* length */ + p =xdr_encode_hyper (p, args->lastbytewritten +1 );/* length */ *p++ =cpu_to_be32 (0 );/* reclaim */ p =xdr_encode_opaque_fixed (p, args->stateid.data,NFS4_STATEID_SIZE ); *p++ =cpu_to_be32 (1 );/* newoffset = TRUE */
fs/nfs/pnfs.c +33 -30
148 lines not on this page · raw message
fs/nfs/pnfs.h +4 -2
@@ -36,16 +36,16 @@enum {NFS_LSEG_VALID =0 ,/* cleared when lseg is recalled/returned */ NFS_LSEG_ROC ,/* roc bit received from server */ +NFS_LSEG_LAYOUTCOMMIT ,/* layoutcommit bit set for layoutcommit */ };struct pnfs_layout_segment {struct list_head pls_list; +struct list_head pls_lc_list;struct pnfs_layout_range pls_range;atomic_t pls_refcount;unsigned long pls_flags;struct pnfs_layout_hdr *pls_layout; -struct rpc_cred *pls_lc_cred;/* LAYOUTCOMMIT credential */ -loff_t pls_end_pos;/* LAYOUTCOMMIT write end */ };enum pnfs_try_status {
@@ -124,6 +124,8 @@ struct pnfs_layout_hdr {unsigned long plh_block_lgets;/* block LAYOUTGET if >0 */ u32 plh_barrier;/* ignore lower seqids */ unsigned long plh_flags; +loff_t plh_lwb;/* last write byte for layoutcommit */ +struct rpc_cred *plh_lc_cred;/* layoutcommit cred */ struct inode *plh_inode; };
fs/nfsd/nfs4state.c +26 -40
134 lines not on this page · raw message
fs/proc/base.c +13 -3
@@ -2707,9 +2707,16 @@ static int do_io_accounting(struct task_struct *task, char *buffer, int whole) {struct task_io_accounting acct = task->ioac;unsigned long flags; +int result; -if (!ptrace_may_access (task,PTRACE_MODE_READ )) -return -EACCES ; + result =mutex_lock_killable (&task->signal->cred_guard_mutex); +if (result) +return result; + +if (!ptrace_may_access (task,PTRACE_MODE_READ )) { + result = -EACCES ; + goto out_unlock; + }if (whole &&lock_task_sighand (task, &flags)) {struct task_struct *t = task;
@@ -2720,7 +2727,7 @@ static int do_io_accounting(struct task_struct *task, char *buffer, int whole)unlock_task_sighand (task, &flags); } -return sprintf (buffer, + result =sprintf (buffer,"rchar: %llu\n" "wchar: %llu\n" "syscr: %llu\n"
@@ -2735,6 +2742,9 @@ static int do_io_accounting(struct task_struct *task, char *buffer, int whole) (unsigned long long )acct.read_bytes, (unsigned long long )acct.write_bytes, (unsigned long long)acct.cancelled_write_bytes); +out_unlock: +mutex_unlock (&task->signal->cred_guard_mutex); +return result; }static int proc_tid_io_accounting (struct task_struct *task,char *buffer)
include/linux/firewire-cdev.h +3 -0
@@ -475,6 +475,9 @@ union fw_cdev_event {* of the bus. This does not cause a bus reset to happen. * @bus_reset_closure: Value of &closure in this and subsequent bus reset events * @card: The index of the card this device belongs to +* +* As a side effect, reception of %FW_CDEV_EVENT_BUS_RESET events to be read(2) +* is started by this ioctl. */ struct fw_cdev_get_info {__u32 version;
include/linux/mm.h +2 -0
@@ -985,6 +985,8 @@ int get_user_pages(struct task_struct *tsk, struct mm_struct *mm,int get_user_pages_fast (unsigned long start,int nr_pages,int write,struct page **pages);struct page *get_dump_page (unsigned long addr); +extern int fixup_user_fault (struct task_struct *tsk,struct mm_struct *mm, +unsigned long address,unsigned int fault_flags);extern int try_to_release_page (struct page * page,gfp_t gfp_mask);extern void do_invalidatepage (struct page *page,unsigned long offset);
include/linux/netdevice.h +4 -1
@@ -1688,9 +1688,12 @@ static inline int skb_gro_header_hard(struct sk_buff *skb, unsigned int hlen)static inline void *skb_gro_header_slow (struct sk_buff *skb,unsigned int hlen,unsigned int offset) { +if (!pskb_may_pull (skb, hlen)) +return NULL ; +NAPI_GRO_CB (skb)->frag0 =NULL ;NAPI_GRO_CB (skb)->frag0_len =0 ; -return pskb_may_pull (skb, hlen) ? skb->data + offset :NULL ; +return skb->data + offset; }static inline void *skb_gro_mac_header (struct sk_buff *skb)
include/linux/nfs_fs.h +2 -1
@@ -99,9 +99,10 @@ struct nfs_open_context {struct nfs_open_dir_context {struct rpc_cred *cred; +unsigned long attr_gencount;__u64 dir_cookie;__u64 dup_cookie; -int duped; +signed char duped; };/*
include/linux/nfs_xdr.h +1 -1
@@ -262,7 +262,7 @@ struct nfs4_layoutcommit_res {struct nfs4_layoutcommit_data {struct rpc_task task;struct nfs_fattr fattr; -struct pnfs_layout_segment *lseg; +struct list_head lseg_list;struct rpc_cred *cred;struct nfs4_layoutcommit_args args;struct nfs4_layoutcommit_res res;
ipc/sem.c +11 -2
@@ -1456,15 +1456,24 @@ SYSCALL_DEFINE4(semtimedop, int, semid, struct sembuf __user *, tsops, } sma =sem_lock (ns, semid); + +/* +* Wait until it's guaranteed that no wakeup_sem_queue_do() is ongoing. +*/ + error =get_queue_result (&queue); + +/* +* Array removed? If yes, leave without sem_unlock(). +*/ if (IS_ERR (sma)) { error = -EIDRM ; goto out_free; } - error =get_queue_result (&queue);/* -* If queue.status != -EINTR we are woken up by another process +* If queue.status != -EINTR we are woken up by another process. +* Leave without unlink_queue(), but with sem_unlock(). */ if (error != -EINTR ) {
kernel/events/core.c +2 -5
@@ -5016,11 +5016,8 @@ static int __perf_event_overflow(struct perf_event *event, int nmi,if (events &&atomic_dec_and_test (&event->event_limit)) { ret =1 ; event->pending_kill =POLL_HUP ; -if (nmi) { - event->pending_disable =1 ; -irq_work_queue (&event->pending); - }else -perf_event_disable (event); + event->pending_disable =1 ; +irq_work_queue (&event->pending); }if (event->overflow_handler)
kernel/futex.c +2 -2
@@ -355,8 +355,8 @@ static int fault_in_user_writeable(u32 __user *uaddr)int ret;down_read (&mm->mmap_sem); - ret =get_user_pages (current, mm, (unsigned long )uaddr, -1 ,1 ,0 ,NULL ,NULL ); + ret =fixup_user_fault (current, mm, (unsigned long )uaddr, +FAULT_FLAG_WRITE );up_read (&mm->mmap_sem);return ret <0 ? ret :0 ;
kernel/trace/trace.h +1 -0
@@ -677,6 +677,7 @@ struct event_subsystem {struct dentry *entry;struct event_filter *filter;int nr_events; +int ref_count; };#define FILTER_PRED_INVALID ((unsigned short)-1)
kernel/trace/trace_events.c +95 -18
196 lines not on this page · raw message
kernel/trace/trace_events_filter.c +6 -0
@@ -1886,6 +1886,12 @@ int apply_subsystem_event_filter(struct event_subsystem *system,mutex_lock (&event_mutex); +/* Make sure the system still has events */ +if (!system->nr_events) { + err = -ENODEV ; + goto out_unlock; + } +if (!strcmp (strstrip (filter_string),"0" )) {filter_free_subsystem_preds (system);remove_filter_string (system->filter);
lib/xz/xz_private.h +1 -1
@@ -12,7 +12,7 @@#ifdef __KERNEL__# include <linux/xz.h> -# include <asm/byteorder.h> +# include <linux/kernel.h> # include <asm/unaligned.h> /* XZ_PREBOOT may be defined only via decompress_unxz.c. */ # ifndef XZ_PREBOOT
mm/backing-dev.c +1 -0
@@ -606,6 +606,7 @@ static void bdi_prune_sb(struct backing_dev_info *bdi)void bdi_unregister (struct backing_dev_info *bdi) {if (bdi->dev) { +bdi_set_min_ratio (bdi,0 );trace_writeback_bdi_unregister (bdi);bdi_prune_sb (bdi);del_timer_sync (&bdi->wb.wakeup_timer);
mm/memcontrol.c +1 -1
@@ -1730,7 +1730,7 @@ static int mem_cgroup_hierarchical_reclaim(struct mem_cgroup *root_mem, excess =res_counter_soft_limit_excess (&root_mem->res) >>PAGE_SHIFT ;/* If memsw_is_minimum==1, swap-out is of-no-use. */ -if (!check_soft && root_mem->memsw_is_minimum) +if (!check_soft && !shrink && root_mem->memsw_is_minimum) noswap = true;while (1 ) {
mm/memory.c +57 -1
64 lines not on this page · raw message
mm/oom_kill.c +3 -1
@@ -303,7 +303,7 @@ static struct task_struct *select_bad_process(unsigned int *ppoints, do_each_thread(g, p) {unsigned int points; -if (!p->mm) +if (p->exit_state)continue ;if (oom_unkillable_task (p, mem, nodemask))continue ;
@@ -319,6 +319,8 @@ static struct task_struct *select_bad_process(unsigned int *ppoints,*/ if (test_tsk_thread_flag (p,TIF_MEMDIE ))return ERR_PTR (-1UL ); +if (!p->mm) +continue ;if (p->flags &PF_EXITING ) {/*
net/bridge/br_private.h +1 -0
@@ -124,6 +124,7 @@ struct net_bridge_portbridge_id designated_bridge;u32 path_cost;u32 designated_cost; +unsigned long designated_age;struct timer_list forward_delay_timer;struct timer_list hold_timer;
net/bridge/br_stp.c +2 -2
@@ -164,8 +164,7 @@ void br_transmit_config(struct net_bridge_port *p)else {struct net_bridge_port *root =br_get_port (br, br->root_port); - bpdu.message_age = br->max_age - - (root->message_age_timer.expires - jiffies) + bpdu.message_age = (jiffies - root->designated_age) +MESSAGE_AGE_INCR ; } bpdu.max_age = br->max_age;
@@ -189,6 +188,7 @@ static inline void br_record_config_information(struct net_bridge_port *p, p->designated_cost = bpdu->root_path_cost; p->designated_bridge = bpdu->bridge_id; p->designated_port = bpdu->port_id; + p->designated_age = jiffies + bpdu->message_age;mod_timer (&p->message_age_timer, jiffies + (p->br->max_age - bpdu->message_age));
net/core/ethtool.c +2 -2
@@ -1227,7 +1227,7 @@ static int ethtool_get_regs(struct net_device *dev, char __user *useraddr) regs.len = reglen; regbuf =vzalloc (reglen); -if (!regbuf) +if (reglen && !regbuf)return -ENOMEM ; ops->get_regs (dev, ®s, regbuf);
@@ -1236,7 +1236,7 @@ static int ethtool_get_regs(struct net_device *dev, char __user *useraddr)if (copy_to_user (useraddr, ®s,sizeof (regs))) goto out; useraddr += offsetof(struct ethtool_regs , data); -if (copy_to_user (useraddr, regbuf, regs.len)) +if (regbuf &©_to_user (useraddr, regbuf, regs.len)) goto out; ret =0 ;
net/mac80211/mlme.c +3 -0
@@ -2200,6 +2200,9 @@ void ieee80211_sta_restart(struct ieee80211_sub_if_data *sdata) {struct ieee80211_if_managed *ifmgd = &sdata->u.mgd; +if (!ifmgd->associated) +return ; +if (test_and_clear_bit (TMR_RUNNING_TIMER , &ifmgd->timers_running))add_timer (&ifmgd->timer);if (test_and_clear_bit (TMR_RUNNING_CHANSW , &ifmgd->timers_running))
net/sunrpc/svc_xprt.c +6 -5
@@ -902,12 +902,13 @@ void svc_delete_xprt(struct svc_xprt *xprt)if (!test_and_set_bit (XPT_DETACHED , &xprt->xpt_flags))list_del_init (&xprt->xpt_list);/* -* We used to delete the transport from whichever list -* it's sk_xprt.xpt_ready node was on, but we don't actually -* need to. This is because the only time we're called -* while still attached to a queue, the queue itself -* is about to be destroyed (in svc_destroy). +* The only time we're called while xpt_ready is still on a list +* is while the list itself is about to be destroyed (in +* svc_destroy). BUT svc_xprt_enqueue could still be attempting +* to add new entries to the sp_sockets list, so we can't leave +* a freed xprt on it. */ +list_del_init (&xprt->xpt_ready);if (test_bit (XPT_TEMP , &xprt->xpt_flags)) serv->sv_tmpcnt--;spin_unlock_bh (&serv->sv_lock);
net/wireless/reg.c +3 -2
@@ -1125,12 +1125,13 @@ void wiphy_update_regulatory(struct wiphy *wiphy,enum ieee80211_band band;if (ignore_reg_update (wiphy, initiator)) - goto out; +return ; +for (band =0 ; band <IEEE80211_NUM_BANDS ; band++) {if (wiphy->bands[band])handle_band (wiphy, band, initiator); } -out: +reg_process_beacons (wiphy);reg_process_ht_flags (wiphy);if (wiphy->reg_notifier)
security/apparmor/domain.c +1 -1
@@ -73,7 +73,6 @@ static int may_change_ptraced_domain(struct task_struct *task, cred =get_task_cred (tracer); tracerp =aa_cred_profile (cred); } -rcu_read_unlock ();/* not ptraced */ if (!tracer ||unconfined (tracerp))
@@ -82,6 +81,7 @@ static int may_change_ptraced_domain(struct task_struct *task, error =aa_may_ptrace (tracer, tracerp, to_profile,PTRACE_MODE_ATTACH ); out: +rcu_read_unlock ();if (cred)put_cred (cred);
security/apparmor/lsm.c +1 -1
@@ -127,7 +127,7 @@ static int apparmor_capget(struct task_struct *target, kernel_cap_t *effective, *inheritable = cred->cap_inheritable; *permitted = cred->cap_permitted; -if (!unconfined (profile)) { +if (!unconfined (profile) && !COMPLAIN_MODE (profile)) { *effective =cap_intersect (*effective, profile->caps.allow); *permitted =cap_intersect (*permitted, profile->caps.allow); }
sound/core/pcm_compat.c +1 -1
@@ -342,7 +342,7 @@ static int snd_pcm_ioctl_xfern_compat(struct snd_pcm_substream *substream,kfree (bufs);return -EFAULT ; } - bufs[ch] =compat_ptr (ptr); + bufs[i] =compat_ptr (ptr); bufptr++; }if (dir ==SNDRV_PCM_STREAM_PLAYBACK )
sound/pci/hda/patch_realtek.c +5 -2
@@ -1578,13 +1578,15 @@ static void alc_init_auto_hp(struct hda_codec *codec)if (present ==3 ) spec->automute_hp_lo =1 ;/* both HP and LO automute */ -if (!cfg->speaker_pins[0 ]) { +if (!cfg->speaker_pins[0 ] && + cfg->line_out_type ==AUTO_PIN_SPEAKER_OUT ) {memcpy (cfg->speaker_pins, cfg->line_out_pins,sizeof (cfg->speaker_pins)); cfg->speaker_outs = cfg->line_outs; } -if (!cfg->hp_pins[0 ]) { +if (!cfg->hp_pins[0 ] && + cfg->line_out_type ==AUTO_PIN_HP_OUT ) {memcpy (cfg->hp_pins, cfg->line_out_pins,sizeof (cfg->hp_pins)); cfg->hp_outs = cfg->line_outs;
@@ -1603,6 +1605,7 @@ static void alc_init_auto_hp(struct hda_codec *codec) spec->automute_mode =ALC_AUTOMUTE_PIN ; }if (spec->automute && cfg->line_out_pins[0 ] && + cfg->speaker_pins[0 ] && cfg->line_out_pins[0 ] != cfg->hp_pins[0 ] && cfg->line_out_pins[0 ] != cfg->speaker_pins[0 ]) {for (i =0 ; i < cfg->line_outs; i++) {
sound/pci/oxygen/xonar_pcm179x.c +4 -1
@@ -327,8 +327,10 @@ static void pcm1796_init(struct oxygen *chip) {struct xonar_pcm179x *data = chip->model_data; - data->pcm1796_regs[0 ][18 -PCM1796_REG_BASE ] =PCM1796_MUTE | + data->pcm1796_regs[0 ][18 -PCM1796_REG_BASE ] =PCM1796_DMF_DISABLED |PCM1796_FMT_24_I2S |PCM1796_ATLD ; +if (!data->broken_i2c) + data->pcm1796_regs[0 ][18 -PCM1796_REG_BASE ] |=PCM1796_MUTE ; data->pcm1796_regs[0 ][19 -PCM1796_REG_BASE ] =PCM1796_FLT_SHARP |PCM1796_ATS_1 ; data->pcm1796_regs[0][20 - PCM1796_REG_BASE] =
@@ -1123,6 +1125,7 @@ int __devinit get_xonar_pcm179x_model(struct oxygen *chip, chip->model.control_filter = xonar_st_h6_control_filter; chip->model.dac_channels_pcm =8 ; chip->model.dac_channels_mixer =8 ; + chip->model.dac_volume_min =255 ; chip->model.dac_mclks =OXYGEN_MCLKS (256 ,128 ,128 );break ; }
sound/soc/davinci/davinci-vcif.c +5 -4
@@ -62,9 +62,9 @@ static void davinci_vcif_start(struct snd_pcm_substream *substream) w =readl (davinci_vc->base +DAVINCI_VC_CTRL );if (substream->stream ==SNDRV_PCM_STREAM_PLAYBACK ) -MOD_REG_BIT (w,DAVINCI_VC_CTRL_RSTDAC ,1 ); +MOD_REG_BIT (w,DAVINCI_VC_CTRL_RSTDAC ,0 );else -MOD_REG_BIT (w,DAVINCI_VC_CTRL_RSTADC ,1 ); +MOD_REG_BIT (w,DAVINCI_VC_CTRL_RSTADC ,0 );writel (w, davinci_vc->base +DAVINCI_VC_CTRL ); }
@@ -80,9 +80,9 @@ static void davinci_vcif_stop(struct snd_pcm_substream *substream)/* Reset transmitter/receiver and sample rate/frame sync generators */ w =readl (davinci_vc->base +DAVINCI_VC_CTRL );if (substream->stream ==SNDRV_PCM_STREAM_PLAYBACK ) -MOD_REG_BIT (w,DAVINCI_VC_CTRL_RSTDAC ,0 ); +MOD_REG_BIT (w,DAVINCI_VC_CTRL_RSTDAC ,1 );else -MOD_REG_BIT (w,DAVINCI_VC_CTRL_RSTADC ,0 ); +MOD_REG_BIT (w,DAVINCI_VC_CTRL_RSTADC ,1 );writel (w, davinci_vc->base +DAVINCI_VC_CTRL ); }
@@ -159,6 +159,7 @@ static int davinci_vcif_trigger(struct snd_pcm_substream *substream, int cmd,case SNDRV_PCM_TRIGGER_RESUME :case SNDRV_PCM_TRIGGER_PAUSE_RELEASE :davinci_vcif_start (substream); +break ;case SNDRV_PCM_TRIGGER_STOP :case SNDRV_PCM_TRIGGER_SUSPEND :case SNDRV_PCM_TRIGGER_PAUSE_PUSH :
sound/soc/soc-core.c +1 -0
@@ -1124,6 +1124,7 @@ int snd_soc_suspend(struct device *dev)case SND_SOC_BIAS_OFF : codec->driver->suspend (codec,PMSG_SUSPEND ); codec->suspended =1 ; + codec->cache_sync =1 ;break ;default :dev_dbg (codec->dev,"CODEC is on over suspend\n" );
tools/perf/Makefile +4 -1
@@ -52,7 +52,10 @@ ifeq ($(ARCH),i386) endif ifeq ($(ARCH),x86_64) ARCH := x86 - IS_X86_64 := $(shell echo __x86_64__ | ${CC} -E -xc - | tail -n 1) + IS_X86_64 := 0 + ifeq (, $(findstring m32,$(EXTRA_CFLAGS))) + IS_X86_64 := $(shell echo __x86_64__ | ${CC} -E -xc - | tail -n 1) + endif ifeq (${IS_X86_64}, 1) RAW_ARCH := x86_64 ARCH_CFLAGS := -DARCH_X86_64
tools/perf/util/header.c +4 -1
@@ -877,9 +877,12 @@ int perf_session__read_header(struct perf_session *session, int fd)struct perf_evsel *evsel;off_t tmp; -if (perf_header__getbuffer64 (header, fd, &f_attr,sizeof (f_attr))) +if (readn (fd, &f_attr,sizeof (f_attr)) <=0 ) goto out_errno; +if (header->needs_swap) +perf_event__attr_swap (&f_attr.attr); + tmp =lseek (fd,0 ,SEEK_CUR ); evsel =perf_evsel__new (&f_attr.attr, i);
tools/perf/util/session.c +18 -12
@@ -407,20 +407,26 @@ static void perf_event__read_swap(union perf_event *event) event->read.id =bswap_64 (event->read.id); } -static void perf_event__attr_swap (union perf_event *event) +/* exported for swapping attributes in file header */ +void perf_event__attr_swap (struct perf_event_attr *attr) +{ + attr->type =bswap_32 (attr->type); + attr->size =bswap_32 (attr->size); + attr->config =bswap_64 (attr->config); + attr->sample_period =bswap_64 (attr->sample_period); + attr->sample_type =bswap_64 (attr->sample_type); + attr->read_format =bswap_64 (attr->read_format); + attr->wakeup_events =bswap_32 (attr->wakeup_events); + attr->bp_type =bswap_32 (attr->bp_type); + attr->bp_addr =bswap_64 (attr->bp_addr); + attr->bp_len =bswap_64 (attr->bp_len); +} + +static void perf_event__hdr_attr_swap (union perf_event *event) {size_t size; - event->attr.attr.type =bswap_32 (event->attr.attr.type); - event->attr.attr.size =bswap_32 (event->attr.attr.size); - event->attr.attr.config =bswap_64 (event->attr.attr.config); - event->attr.attr.sample_period =bswap_64 (event->attr.attr.sample_period); - event->attr.attr.sample_type =bswap_64 (event->attr.attr.sample_type); - event->attr.attr.read_format =bswap_64 (event->attr.attr.read_format); - event->attr.attr.wakeup_events =bswap_32 (event->attr.attr.wakeup_events); - event->attr.attr.bp_type =bswap_32 (event->attr.attr.bp_type); - event->attr.attr.bp_addr =bswap_64 (event->attr.attr.bp_addr); - event->attr.attr.bp_len =bswap_64 (event->attr.attr.bp_len); +perf_event__attr_swap (&event->attr.attr); size = event->header.size; size -= (void *)&event->attr.id - (void *)event;
@@ -448,7 +454,7 @@ static perf_event__swap_op perf_event__swap_ops[] = { [PERF_RECORD_LOST] = perf_event__all64_swap, [PERF_RECORD_READ] = perf_event__read_swap, [PERF_RECORD_SAMPLE] = perf_event__all64_swap, - [PERF_RECORD_HEADER_ATTR] = perf_event__attr_swap, + [PERF_RECORD_HEADER_ATTR] = perf_event__hdr_attr_swap, [PERF_RECORD_HEADER_EVENT_TYPE] = perf_event__event_type_swap, [PERF_RECORD_HEADER_TRACING_DATA] = perf_event__tracing_data_swap, [PERF_RECORD_HEADER_BUILD_ID] = NULL,
tools/perf/util/session.h +1 -0
@@ -112,6 +112,7 @@ int perf_session__set_kallsyms_ref_reloc_sym(struct map **maps, u64 addr);void mem_bswap_64 (void *src,int byte_size); +void perf_event__attr_swap (struct perf_event_attr *attr);int perf_session__create_kernel_maps (struct perf_session *self);
Quoted 8 lines · Greg KH
I'm announcing the release of the 3.0.1 kernel.
All users of the 3.0 kernel series must upgrade.
The updated 3.0.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-3.0.y.git and can be browsed at the normal kernel.org git web browser: http://git.kernel.org/?p=linux/kernel/git/stable/linux-3.0.y.git;a=summary
It looks like you forgot to push :). Or some mirroring or alike problem?
thanks,
Signature · 1 line
js
Quoted 11 lines · Jiri Slaby
Quoted 8 lines · Greg KH
I'm announcing the release of the 3.0.1 kernel.
All users of the 3.0 kernel series must upgrade.
The updated 3.0.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-3.0.y.git and can be browsed at the normal kernel.org git web browser: http://git.kernel.org/?p=linux/kernel/git/stable/linux-3.0.y.git;a=summaryIt looks like you forgot to push :). Or some mirroring or alike problem?
My release process _requires_ me to push, in order to generate the diffstat and patch that I send out, so yes, it's really there.
I think kernel.org is being a bit slow on the mirroring side right now, so give it a bit of time. I see it there now, perhaps it just needed a little bit of sleep to catch up on things :)
thanks,
greg k-h