Linux 2.6.39.4
Subsystems (51)
I'm announcing the release of the 2.6.39.4 kernel.
All users of the 2.6.39 kernel series must upgrade.
Please note, this is the LAST release of the 2.6.39 kernel series. All users of 2.6.39 should be moving to 3.0 right now. This tree is now end-of-life, please plan accordingly.
The updated 2.6.39.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-2.6.39.y.git
and can be browsed at the normal kernel.org git web browser:
http://git.kernel.org/?p=linux/kernel/git/stable/linux-2.6.39.y.git;a=summarythanks,
greg k-h
------------
Makefile | 2 arch/alpha/kernel/osf_sys.c | 11 + arch/arm/kernel/perf_event.c | 6 arch/arm/mach-davinci/board-dm365-evm.c | 4 arch/arm/mach-mmp/pxa168.c | 2 arch/arm/mach-mmp/pxa910.c | 2 arch/arm/mach-pxa/mfp-pxa2xx.c | 4 arch/x86/kernel/reboot.c | 8 + drivers/ata/libata-eh.c | 12 + drivers/firewire/ohci.c | 6 drivers/gpu/drm/radeon/evergreen.c | 162 +++++++++++++++---------- drivers/gpu/drm/radeon/evergreend.h | 4 drivers/gpu/drm/radeon/ni.c | 1 drivers/gpu/drm/radeon/r600.c | 1 drivers/gpu/drm/radeon/r600d.h | 2 drivers/gpu/drm/radeon/radeon_display.c | 13 +- drivers/gpu/drm/radeon/rv770.c | 1 drivers/hwmon/asus_atk0110.c | 1 drivers/hwmon/it87.c | 2 drivers/hwmon/lm95241.c | 22 ++- drivers/hwmon/max1111.c | 11 + drivers/hwmon/pmbus.c | 19 ++ drivers/hwmon/pmbus_core.c | 31 ++-- drivers/media/dvb/frontends/dib0070.c | 40 +----- drivers/media/dvb/frontends/dib0090.c | 71 ++--------- drivers/media/dvb/frontends/dib7000m.c | 49 ++----- drivers/media/dvb/frontends/dib7000p.c | 72 +++-------- drivers/media/dvb/frontends/dib8000.c | 126 +++++-------------- drivers/media/dvb/frontends/dib9000.c | 172 +++++++++------------------ drivers/media/dvb/frontends/dibx000_common.c | 109 ++++++----------- drivers/media/dvb/frontends/dibx000_common.h | 5 drivers/media/radio/si4713-i2c.c | 4 drivers/media/video/bt8xx/bttv-driver.c | 2 drivers/media/video/cx23885/cx23885-core.c | 9 - drivers/media/video/pvrusb2/pvrusb2-hdw.c | 4 drivers/media/video/tuner-core.c | 59 ++++----- drivers/media/video/v4l2-ioctl.c | 6 drivers/mmc/host/sdhci-esdhc-imx.c | 2 drivers/net/wireless/ath/ath5k/pci.c | 7 - drivers/net/wireless/ath/ath5k/sysfs.c | 9 - drivers/net/wireless/ath/ath9k/xmit.c | 3 drivers/net/wireless/ath/carl9170/usb.c | 2 drivers/net/wireless/rtlwifi/rtl8192cu/sw.c | 1 drivers/pci/quirks.c | 23 +++ drivers/platform/x86/dell-laptop.c | 24 --- drivers/usb/serial/pl2303.c | 1 drivers/usb/serial/pl2303.h | 4 fs/cifs/connect.c | 64 ++++++---- fs/ext4/super.c | 3 fs/fscache/page.c | 14 -- fs/gfs2/file.c | 10 + fs/namei.c | 7 - fs/nfs/nfs4xdr.c | 2 fs/partitions/efi.c | 9 + fs/proc/base.c | 7 - fs/xfs/xfs_alloc.c | 6 include/drm/drm_pciids.h | 2 include/linux/netdevice.h | 5 mm/compaction.c | 42 +++++- mm/nommu.c | 9 - mm/oom_kill.c | 4 mm/vmscan.c | 80 ++++++++---- net/bridge/br_private.h | 1 net/bridge/br_stp.c | 4 net/mac80211/wpa.c | 16 ++ net/sunrpc/rpcb_clnt.c | 2 net/sunrpc/sched.c | 27 +--- sound/soc/blackfin/bf5xx-i2s-pcm.c | 13 +- sound/soc/codecs/ak4642.c | 2 sound/soc/codecs/wm8994.c | 11 + 70 files changed, 739 insertions(+), 732 deletions(-)
Alex Deucher (5):
drm/radeon/kms: fix typo in evergreen disp int status register drm/radeon/kms: fix typo in IH_CNTL swap bitfield drm/radeon/kms: fix backend map typo on juniper drm/radeon/kms: add new NI pci ids
drm/radeon/kms: clean up multiple crtc handling for evergreen+ (v2)
Amir Goldstein (1):
ext4: fix oops in ext4_quota_off()
Andrea Arcangeli (1):
mm: vmscan: do not use page_count without a page pin
Andy Adamson (1):
NFSv4.1: update nfs4_fattr_bitmap_maxsz
Ben Greear (1):
SUNRPC: Fix use of static variable in rpcb_getport_async
Benjamin Marzinski (1):
GFS2: make sure fallocate bytes is a multiple of blksize
Bob Liu (1):
mm/nommu.c: fix remap_pfn_range()
Christian Lamparter (1):
carl9170: add NEC WL300NU-AG usbid
Dan Rosenberg (1):
alpha: fix several security issues
Daniel J Blueman (1):
x86: Make Dell Latitude E5420 use reboot=pci
Dave Airlie (1):
drm/radeon: fix oops in ttm reserve when pageflipping (v2)
Eric Sandeen (1):
xfs [stable only]: restart busy extent search after node removal
Greg Kroah-Hartman (2):
Revert "DiBxxxx: get rid of DMA buffer on stack" Linux 2.6.39.4
Guenter Roeck (7):
hwmon: (lm95241) Fix chip detection code
hwmon: (lm95241) Fix negative temperature results
hwmon: (pmbus) Auto-detect temp2 and temp3 registers/attributes
hwmon: (pmbus) Drop check for PMBus revision register in probe function
hwmon: (pmbus) Improve fan detection
hwmon: (pmbus) Use long variables for register to data conversions
hwmon: (pmbus) Improve auto-detection of temperature status register
Hans Verkuil (5):
v4l2-ioctl.c: prefill tuner type for g_frequency and g/s_tuner
tuner-core: fix s_std and s_tuner
tuner-core: fix tuner_resume: use t->mode instead of t->type
pvrusb2: fix g/s_tuner support
bttv: fix s_tuner for radio
Herbert Xu (1):
gro: Only reset frag0 when skb can be pulled
Jan Beulich (1):
FS-Cache: Fix __fscache_uncache_all_inode_pages()'s outer loop
Jarod Wilson (1):
Revert "V4L/DVB: cx23885: Enable Message Signaled Interrupts(MSI)"
Jean Delvare (1):
hwmon: (it87) Fix label group removal
Jeff Layton (3):
cifs: clean up wsize negotiation and allow for larger wsize
cifs: fix wsize negotiation to respect max buffer size and active signing (try #4)
cifs: lower default and max wsize to what 2.6.39 can handle
Jerome Glisse (1):
drm/radeon/kms: free ib pool on module unloading
Johannes Berg (1):
mac80211: fix TKIP replay vulnerability
Jon Povey (1):
davinci: DM365 EVM: fix video input mux bits
Keng-Yu Lin (1):
Revert: "dell-laptop: Toggle the unsupported hardware killswitch"
Kuninori Morimoto (1):
ASoC: ak4642: fixup snd_soc_update_bits mask for PW_MGMT2
Lei Wen (2):
ARM: pxa168: correct nand pmu setting
ARM: pxa910: correct nand pmu setting
Linus Torvalds (1):
vfs: fix race in rcu lookup of pruned dentry
Luca Tettamanti (1):
hwmon: (asus_atk0110) Fix memory leak
Manoj Iyer (1):
mmc: Added quirks for Ricoh 1180:e823 lower base clock frequency
Mark Brown (4):
ASoC: Fix Blackfin I2S _pointer() implementation return in bounds values
ASoC: Ensure we delay long enough for WM8994 FLL to lock when starting
ASoC: Correct WM8994 MICBIAS supply widget hookup
ASoC: Fix shift in WM8958 accessory detection default implementation
Mauro Carvalho Chehab (1):
si4713-i2c: avoid potential buffer overflow on si4713
Mel Gorman (6):
mm: vmscan: correct check for kswapd sleeping in sleeping_prematurely
mm: vmscan: evaluate the watermarks against the correct classzone
mm: compaction: ensure that the compaction free scanner does not move to the next zone
mm: compaction: abort compaction if too many pages are isolated and caller is asynchronous V2
mm: vmscan: do not apply pressure to slab if we are not applying pressure to zone
mm: vmscan: only read new_classzone_idx from pgdat when reclaiming successfully
Oleg Nesterov (1):
oom: task->mm == NULL doesn't mean the memory was freed
Paul Parsons (1):
ARM: pxa: fix PGSR register address calculation
Pavel Herrmann (1):
hwmon: (max1111) Fix race condition causing NULL pointer exception
Pavel Roskin (2):
ath5k: fix incorrect use of drvdata in sysfs code
ath5k: fix incorrect use of drvdata in PCI suspend/resume code
Rajkumar Manoharan (1):
ath9k: Fix tx throughput drops for AR9003 chips with AES encryption
Shaohua Li (1):
vmscan: fix a livelock in kswapd
Shawn Guo (1):
mmc: sdhci-esdhc-imx: SDHCI_CARD_PRESENT does not get cleared
Stefan Richter (1):
firewire: ohci: do not bind to Pinnacle cards, avert panic
Tejun Heo (1):
libata: fix unexpectedly frozen port after ata_eh_reset()
Timo Warns (1):
fs/partitions/efi.c: corrupted GUID partition tables can cause kernel oops
Trond Myklebust (1):
SUNRPC: Fix a race between work-queue and rpc_killall_tasks
Vasiliy Kulikov (1):
proc: restrict access to /proc/PID/io
Will Deacon (1):
ARM: 6989/1: perf: do not start the PMU when no events are present
Wolfgang Denk (1):
USB: serial: add IDs for WinChipHead USB->RS232 adapter
Yoann DI-RUZZA (1):
rtlwifi: rtl8192cu: Add new USB ID for Netgear WNA1000M
stephen hemminger (1):
bridge: send proper message_age in config BPDU
Makefile +1 -1
@@ -1,7 +1,7 @@ VERSION = 2 PATCHLEVEL = 6 SUBLEVEL = 39 -EXTRAVERSION = .3 +EXTRAVERSION = .4 NAME = Flesh-Eating Bats with Fangs # *DOCUMENTATION*
arch/alpha/kernel/osf_sys.c +7 -4
@@ -409,7 +409,7 @@ SYSCALL_DEFINE2(osf_getdomainname, char __user *, name, int, namelen)return -EFAULT ; len = namelen; -if (namelen >32 ) +if (len >32 ) len =32 ;down_read (&uts_sem);
@@ -594,7 +594,7 @@ SYSCALL_DEFINE3(osf_sysinfo, int, command, char __user *, buf, long, count)down_read (&uts_sem); res = sysinfo_table[offset]; len =strlen (res)+1 ; -if (len > count) +if ((unsigned long )len > (unsigned long )count) len = count;if (copy_to_user (buf, res, len)) err = -EFAULT ;
@@ -649,7 +649,7 @@ SYSCALL_DEFINE5(osf_getsysinfo, unsigned long, op, void __user *, buffer,return 1 ;case GSI_GET_HWRPB : -if (nbytes <sizeof (*hwrpb)) +if (nbytes >sizeof (*hwrpb))return -EINVAL ;if (copy_to_user (buffer, hwrpb, nbytes) !=0 )return -EFAULT ;
@@ -1008,6 +1008,7 @@ SYSCALL_DEFINE4(osf_wait4, pid_t, pid, int __user *, ustatus, int, options, {struct rusage r;long ret, err; +unsigned int status =0 ;mm_segment_t old_fs;if (!ur)
@@ -1016,13 +1017,15 @@ SYSCALL_DEFINE4(osf_wait4, pid_t, pid, int __user *, ustatus, int, options, old_fs =get_fs ();set_fs (KERNEL_DS ); - ret =sys_wait4 (pid, ustatus, options, (struct rusage __user *) &r); + ret =sys_wait4 (pid, (unsigned int __user *) &status, options, + (struct rusage __user *) &r);set_fs (old_fs);if (!access_ok (VERIFY_WRITE , ur,sizeof (*ur)))return -EFAULT ; err =0 ; + err |=put_user (status, ustatus); err |=__put_user (r.ru_utime.tv_sec, &ur->ru_utime.tv_sec); err |=__put_user (r.ru_utime.tv_usec, &ur->ru_utime.tv_usec); err |=__put_user (r.ru_stime.tv_sec, &ur->ru_stime.tv_sec);
arch/arm/kernel/perf_event.c +4 -2
@@ -588,7 +588,7 @@ static int armpmu_event_init(struct perf_event *event)static void armpmu_enable (struct pmu *pmu) {/* Enable all of the perf events on hardware. */ -int idx; +int idx, enabled =0 ;struct cpu_hw_events *cpuc = &__get_cpu_var (cpu_hw_events);if (!armpmu)
@@ -601,9 +601,11 @@ static void armpmu_enable(struct pmu *pmu)continue ; armpmu->enable (&event->hw, idx); + enabled =1 ; } - armpmu->start (); +if (enabled) + armpmu->start (); }static void armpmu_disable (struct pmu *pmu)
arch/arm/mach-davinci/board-dm365-evm.c +2 -2
@@ -520,7 +520,7 @@ fail:*/ if (have_imager ()) { label ="HD imager" ; - mux |=1 ; + mux |=2 ;/* externally mux MMC1/ENET/AIC33 to imager */ mux |=BIT (6 ) |BIT (5 ) |BIT (3 );
@@ -540,7 +540,7 @@ fail: resets &= ~BIT (1 );if (have_tvp7002 ()) { - mux |=2 ; + mux |=1 ; resets &= ~BIT (2 ); label ="tvp7002 HD" ; }else {
arch/arm/mach-mmp/pxa168.c +1 -1
@@ -79,7 +79,7 @@ static APBC_CLK(ssp4, PXA168_SSP4, 4, 0); static APBC_CLK(ssp5, PXA168_SSP5, 4, 0); static APBC_CLK(keypad, PXA168_KPC, 0, 32000); -static APMU_CLK(nand, NAND, 0x01db, 208000000); +static APMU_CLK(nand, NAND, 0x19b, 156000000); static APMU_CLK(lcd, LCD, 0x7f, 312000000);/* device and clock bindings */
arch/arm/mach-mmp/pxa910.c +1 -1
@@ -110,7 +110,7 @@ static APBC_CLK(pwm2, PXA910_PWM2, 1, 13000000); static APBC_CLK(pwm3, PXA910_PWM3, 1, 13000000); static APBC_CLK(pwm4, PXA910_PWM4, 1, 13000000); -static APMU_CLK(nand, NAND, 0x01db, 208000000); +static APMU_CLK(nand, NAND, 0x19b, 156000000); static APMU_CLK(u2o, USB, 0x1b, 480000000);/* device and clock bindings */
arch/arm/mach-pxa/mfp-pxa2xx.c +2 -2
@@ -347,9 +347,9 @@ static int pxa2xx_mfp_suspend(struct sys_device *d, pm_message_t state)if ((gpio_desc[i].config &MFP_LPM_KEEP_OUTPUT ) && (GPDR (i) &GPIO_bit (i))) {if (GPLR (i) &GPIO_bit (i)) -PGSR (i) |=GPIO_bit (i); +PGSR (gpio_to_bank (i)) |=GPIO_bit (i);else -PGSR (i) &= ~GPIO_bit (i); +PGSR (gpio_to_bank (i)) &= ~GPIO_bit (i); } }
arch/x86/kernel/reboot.c +8 -0
@@ -411,6 +411,14 @@ static struct dmi_system_id __initdata pci_reboot_dmi_table[] = { DMI_MATCH(DMI_PRODUCT_NAME, "iMac9,1"), }, }, + { /* Handle problems with rebooting on the Latitude E5420. */ + .callback = set_pci_reboot, + .ident = "Dell Latitude E5420", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), + DMI_MATCH(DMI_PRODUCT_NAME, "Latitude E5420"), + }, + }, { } };
drivers/ata/libata-eh.c +8 -4
@@ -2802,10 +2802,11 @@ int ata_eh_reset(struct ata_link *link, int classify, }/* -* Some controllers can't be frozen very well and may set -* spuruious error conditions during reset. Clear accumulated -* error information. As reset is the final recovery action, -* nothing is lost by doing this. +* Some controllers can't be frozen very well and may set spurious +* error conditions during reset. Clear accumulated error +* information and re-thaw the port if frozen. As reset is the +* final recovery action and we cross check link onlineness against +* device classification later, no hotplug event is lost by this. */ spin_lock_irqsave (link->ap->lock, flags);memset (&link->eh_info,0 ,sizeof (link->eh_info));
@@ -2814,6 +2815,9 @@ int ata_eh_reset(struct ata_link *link, int classify, ap->pflags &= ~ATA_PFLAG_EH_PENDING ;spin_unlock_irqrestore (link->ap->lock, flags); +if (ap->pflags &ATA_PFLAG_FROZEN ) +ata_eh_thaw_port (ap); +/* * Make sure onlineness and classification result correspond. * Hotplug could have happened during reset and some
drivers/firewire/ohci.c +6 -0
@@ -264,6 +264,7 @@ static char ohci_driver_name[] = KBUILD_MODNAME;#define PCI_DEVICE_ID_AGERE_FW643 0x5901#define PCI_DEVICE_ID_JMICRON_JMB38X_FW 0x2380#define PCI_DEVICE_ID_TI_TSB12LV22 0x8009 +#define PCI_VENDOR_ID_PINNACLE_SYSTEMS 0x11bd#define QUIRK_CYCLE_TIMER 1#define QUIRK_RESET_PACKET 2
@@ -3170,6 +3171,11 @@ static int __devinit pci_probe(struct pci_dev *dev,int i, err;size_t size; +if (dev->vendor ==PCI_VENDOR_ID_PINNACLE_SYSTEMS ) { +dev_err (&dev->dev,"Pinnacle MovieBoard is not yet supported\n" ); +return -ENOSYS ; + } + ohci =kzalloc (sizeof (*ohci),GFP_KERNEL );if (ohci ==NULL ) { err = -ENOMEM ;
drivers/gpu/drm/radeon/evergreen.c +100 -62
300 lines not on this page · raw message
drivers/gpu/drm/radeon/evergreend.h +2 -2
@@ -460,7 +460,7 @@#define IH_RB_WPTR_ADDR_LO 0x3e14#define IH_CNTL 0x3e18# define ENABLE_INTR (1 << 0) -# define IH_MC_SWAP (x) ((x) << 2) +# define IH_MC_SWAP (x) ((x) << 1)# define IH_MC_SWAP_NONE 0# define IH_MC_SWAP_16BIT 1# define IH_MC_SWAP_32BIT 2
@@ -541,7 +541,7 @@# define LB_D5_VBLANK_INTERRUPT (1 << 3)# define DC_HPD5_INTERRUPT (1 << 17)# define DC_HPD5_RX_INTERRUPT (1 << 18) -#define DISP_INTERRUPT_STATUS_CONTINUE5 0x6050 +#define DISP_INTERRUPT_STATUS_CONTINUE5 0x6150# define LB_D6_VLINE_INTERRUPT (1 << 2)# define LB_D6_VBLANK_INTERRUPT (1 << 3)# define DC_HPD6_INTERRUPT (1 << 17)
drivers/gpu/drm/radeon/ni.c +1 -0
@@ -1584,6 +1584,7 @@ void cayman_fini(struct radeon_device *rdev)cayman_cp_fini (rdev);r600_irq_fini (rdev);radeon_wb_fini (rdev); +radeon_ib_pool_fini (rdev);radeon_irq_kms_fini (rdev);cayman_pcie_gart_fini (rdev);radeon_gem_fini (rdev);
drivers/gpu/drm/radeon/r600.c +1 -0
@@ -2613,6 +2613,7 @@ void r600_fini(struct radeon_device *rdev)r600_cp_fini (rdev);r600_irq_fini (rdev);radeon_wb_fini (rdev); +radeon_ib_pool_fini (rdev);radeon_irq_kms_fini (rdev);r600_pcie_gart_fini (rdev);radeon_agp_fini (rdev);
drivers/gpu/drm/radeon/r600d.h +1 -1
@@ -536,7 +536,7 @@#define IH_RB_WPTR_ADDR_LO 0x3e14#define IH_CNTL 0x3e18# define ENABLE_INTR (1 << 0) -# define IH_MC_SWAP (x) ((x) << 2) +# define IH_MC_SWAP (x) ((x) << 1)# define IH_MC_SWAP_NONE 0# define IH_MC_SWAP_16BIT 1# define IH_MC_SWAP_32BIT 2
drivers/gpu/drm/radeon/radeon_display.c +8 -5
@@ -264,6 +264,8 @@ static void radeon_unpin_work_func(struct work_struct *__work)radeon_bo_unreserve (work->old_rbo); }else DRM_ERROR ("failed to reserve buffer after flip\n" ); + +drm_gem_object_unreference_unlocked (&work->old_rbo->gem_base);kfree (work); }
@@ -371,6 +373,8 @@ static int radeon_crtc_page_flip(struct drm_crtc *crtc, new_radeon_fb =to_radeon_framebuffer (fb);/* schedule unpin of the old buffer */ obj = old_radeon_fb->obj; +/* take a reference to the old object */ +drm_gem_object_reference (obj); rbo =gem_to_radeon_bo (obj); work->old_rbo = rbo;INIT_WORK (&work->work, radeon_unpin_work_func);
@@ -378,12 +382,9 @@ static int radeon_crtc_page_flip(struct drm_crtc *crtc,/* We borrow the event spin lock for protecting unpin_work */ spin_lock_irqsave (&dev->event_lock, flags);if (radeon_crtc->unpin_work) { -spin_unlock_irqrestore (&dev->event_lock, flags); -kfree (work); -radeon_fence_unref (&fence); -DRM_DEBUG_DRIVER ("flip queue: crtc already busy\n" ); -return -EBUSY ; + r = -EBUSY ; + goto unlock_free; } radeon_crtc->unpin_work = work; radeon_crtc->deferred_flip_completion =0 ;
@@ -497,6 +498,8 @@ pflip_cleanup1: pflip_cleanup:spin_lock_irqsave (&dev->event_lock, flags); radeon_crtc->unpin_work =NULL ; +unlock_free: +drm_gem_object_unreference_unlocked (old_radeon_fb->obj);spin_unlock_irqrestore (&dev->event_lock, flags);radeon_fence_unref (&fence);kfree (work);
drivers/gpu/drm/radeon/rv770.c +1 -0
@@ -1365,6 +1365,7 @@ void rv770_fini(struct radeon_device *rdev)r700_cp_fini (rdev);r600_irq_fini (rdev);radeon_wb_fini (rdev); +radeon_ib_pool_fini (rdev);radeon_irq_kms_fini (rdev);rv770_pcie_gart_fini (rdev);rv770_vram_scratch_fini (rdev);
drivers/hwmon/asus_atk0110.c +1 -0
@@ -673,6 +673,7 @@ static int atk_debugfs_gitm_get(void *p, u64 *val)else err = -EIO ; +ACPI_FREE (ret);return err; }
drivers/hwmon/it87.c +1 -1
@@ -1535,7 +1535,7 @@ static struct attribute *it87_attributes_label[] = { };static const struct attribute_group it87_group_label = { - .attrs = it87_attributes_vid, + .attrs = it87_attributes_label, };/* SuperIO detection - will change isa_address if a chip is found */
drivers/hwmon/lm95241.c +15 -7
@@ -98,11 +98,16 @@ struct lm95241_data { };/* Conversions */ -static int TempFromReg (u8 val_h,u8 val_l) +static int temp_from_reg_signed (u8 val_h,u8 val_l) { -if (val_h &0x80 ) -return val_h -0x100 ; -return val_h *1000 + val_l *1000 /256 ; +s16 val_hl = (val_h <<8 ) | val_l; +return val_hl *1000 /256 ; +} + +static int temp_from_reg_unsigned (u8 val_h,u8 val_l) +{ +u16 val_hl = (val_h <<8 ) | val_l; +return val_hl *1000 /256 ; }static struct lm95241_data *lm95241_update_device (struct device *dev)
@@ -135,10 +140,13 @@ static ssize_t show_input(struct device *dev, struct device_attribute *attr, char *buf) {struct lm95241_data *data =lm95241_update_device (dev); +int index =to_sensor_dev_attr (attr)->index;return snprintf (buf,PAGE_SIZE -1 ,"%d\n" , -TempFromReg (data->temp[to_sensor_dev_attr (attr)->index], - data->temp[to_sensor_dev_attr (attr)->index +1 ])); + index ==0 || (data->config & (1 << (index /2 ))) ? +temp_from_reg_signed (data->temp[index], data->temp[index +1 ]) : +temp_from_reg_unsigned (data->temp[index], + data->temp[index +1 ])); } static ssize_t show_type(struct device *dev, struct device_attribute *attr,
@@ -339,7 +347,7 @@ static int lm95241_detect(struct i2c_client *new_client,if ((i2c_smbus_read_byte_data (new_client,LM95241_REG_R_MAN_ID ) ==MANUFACTURER_ID ) && (i2c_smbus_read_byte_data (new_client,LM95241_REG_R_CHIP_ID ) - >=DEFAULT_REVISION )) { + ==DEFAULT_REVISION )) { name =DEVNAME ; }else { dev_dbg(&adapter->dev, "LM95241 detection failed at 0x%02x\n",
drivers/hwmon/max1111.c +11 -0
@@ -40,6 +40,8 @@ struct max1111_data {struct spi_transfer xfer[2 ];uint8_t *tx_buf;uint8_t *rx_buf; +struct mutex drvdata_lock; +/* protect msg, xfer and buffers from multiple access */ };static int max1111_read (struct device *dev,int channel)
@@ -48,6 +50,9 @@ static int max1111_read(struct device *dev, int channel)uint8_t v1, v2;int err; +/* writing to drvdata struct is not thread safe, wait on mutex */ +mutex_lock (&data->drvdata_lock); + data->tx_buf[0 ] = (channel <<MAX1111_CTRL_SEL_SH ) |MAX1111_CTRL_PD0 |MAX1111_CTRL_PD1 |MAX1111_CTRL_SGL |MAX1111_CTRL_UNI |MAX1111_CTRL_STR ;
@@ -55,12 +60,15 @@ static int max1111_read(struct device *dev, int channel) err =spi_sync (data->spi, &data->msg);if (err <0 ) {dev_err (dev,"spi_sync failed with %d\n" , err); +mutex_unlock (&data->drvdata_lock);return err; } v1 = data->rx_buf[0 ]; v2 = data->rx_buf[1 ]; +mutex_unlock (&data->drvdata_lock); +if ((v1 &0xc0 ) || (v2 &0x3f ))return -EINVAL ;
@@ -176,6 +184,8 @@ static int __devinit max1111_probe(struct spi_device *spi)if (err) goto err_free_data; +mutex_init (&data->drvdata_lock); + data->spi = spi;spi_set_drvdata (spi, data);
@@ -213,6 +223,7 @@ static int __devexit max1111_remove(struct spi_device *spi)hwmon_device_unregister (data->hwmon_dev);sysfs_remove_group (&spi->dev.kobj, &max1111_attr_group); +mutex_destroy (&data->drvdata_lock);kfree (data->rx_buf);kfree (data->tx_buf);kfree (data);
drivers/hwmon/pmbus.c +13 -6
@@ -47,22 +47,29 @@ static void pmbus_find_sensor_groups(struct i2c_client *client,if (info->func[0 ] &&pmbus_check_byte_register (client,0 ,PMBUS_STATUS_INPUT )) info->func[0 ] |=PMBUS_HAVE_STATUS_INPUT ; -if (pmbus_check_word_register (client,0 ,PMBUS_READ_FAN_SPEED_1 )) { +if (pmbus_check_byte_register (client,0 ,PMBUS_FAN_CONFIG_12 ) && +pmbus_check_word_register (client,0 ,PMBUS_READ_FAN_SPEED_1 )) { info->func[0 ] |=PMBUS_HAVE_FAN12 ;if (pmbus_check_byte_register (client,0 ,PMBUS_STATUS_FAN_12 )) info->func[0 ] |=PMBUS_HAVE_STATUS_FAN12 ; } -if (pmbus_check_word_register (client,0 ,PMBUS_READ_FAN_SPEED_3 )) { +if (pmbus_check_byte_register (client,0 ,PMBUS_FAN_CONFIG_34 ) && +pmbus_check_word_register (client,0 ,PMBUS_READ_FAN_SPEED_3 )) { info->func[0 ] |=PMBUS_HAVE_FAN34 ;if (pmbus_check_byte_register (client,0 ,PMBUS_STATUS_FAN_34 )) info->func[0 ] |=PMBUS_HAVE_STATUS_FAN34 ; } -if (pmbus_check_word_register (client,0 ,PMBUS_READ_TEMPERATURE_1 )) { +if (pmbus_check_word_register (client,0 ,PMBUS_READ_TEMPERATURE_1 )) info->func[0 ] |=PMBUS_HAVE_TEMP ; -if (pmbus_check_byte_register (client,0 , -PMBUS_STATUS_TEMPERATURE )) +if (pmbus_check_word_register (client,0 ,PMBUS_READ_TEMPERATURE_2 )) + info->func[0 ] |=PMBUS_HAVE_TEMP2 ; +if (pmbus_check_word_register (client,0 ,PMBUS_READ_TEMPERATURE_3 )) + info->func[0 ] |=PMBUS_HAVE_TEMP3 ; +if (info->func[0 ] & (PMBUS_HAVE_TEMP |PMBUS_HAVE_TEMP2 + |PMBUS_HAVE_TEMP3 ) + &&pmbus_check_byte_register (client,0 , +PMBUS_STATUS_TEMPERATURE )) info->func[0 ] |=PMBUS_HAVE_STATUS_TEMP ; - }/* Sensors detected on all pages */ for (page =0 ; page < info->pages; page++) {
drivers/hwmon/pmbus_core.c +13 -18
@@ -355,8 +355,8 @@ static struct pmbus_data *pmbus_update_device(struct device *dev)* Convert linear sensor values to milli- or micro-units * depending on sensor type. */ -static int pmbus_reg2data_linear (struct pmbus_data *data, -struct pmbus_sensor *sensor) +static long pmbus_reg2data_linear (struct pmbus_data *data, +struct pmbus_sensor *sensor) {s16 exponent;s32 mantissa;
@@ -390,15 +390,15 @@ static int pmbus_reg2data_linear(struct pmbus_data *data,else val >>= -exponent; -return (int )val; +return val; }/* * Convert direct sensor values to milli- or micro-units * depending on sensor type. */ -static int pmbus_reg2data_direct (struct pmbus_data *data, -struct pmbus_sensor *sensor) +static long pmbus_reg2data_direct (struct pmbus_data *data, +struct pmbus_sensor *sensor) {long val = (s16 ) sensor->data;long m, b,R ;
@@ -433,12 +433,12 @@ static int pmbus_reg2data_direct(struct pmbus_data *data,R ++; } -return (int )((val - b) / m); +return (val - b) / m; } -static int pmbus_reg2data (struct pmbus_data *data,struct pmbus_sensor *sensor) +static long pmbus_reg2data (struct pmbus_data *data,struct pmbus_sensor *sensor) { -int val; +long val;if (data->info->direct[sensor->class]) val =pmbus_reg2data_direct (data, sensor);
@@ -612,7 +612,7 @@ static int pmbus_get_boolean(struct pmbus_data *data, int index, int *val)if (!s1 && !s2) *val = !!regval;else { -int v1, v2; +long v1, v2;struct pmbus_sensor *sensor1, *sensor2; sensor1 = &data->sensors[s1];
@@ -654,7 +654,7 @@ static ssize_t pmbus_show_sensor(struct device *dev,if (sensor->data <0 )return sensor->data; -return snprintf (buf,PAGE_SIZE ,"%d\n" ,pmbus_reg2data (data, sensor)); +return snprintf (buf,PAGE_SIZE ,"%ld\n" ,pmbus_reg2data (data, sensor)); } static ssize_t pmbus_set_sensor(struct device *dev,
@@ -1518,14 +1518,9 @@ int pmbus_do_probe(struct i2c_client *client, const struct i2c_device_id *id,i2c_set_clientdata (client, data);mutex_init (&data->update_lock); -/* -* Bail out if status register or PMBus revision register -* does not exist. -*/ -if (i2c_smbus_read_byte_data (client,PMBUS_STATUS_BYTE ) <0 - ||i2c_smbus_read_byte_data (client,PMBUS_REVISION ) <0 ) { -dev_err (&client->dev, -"Status or revision register not found\n" ); +/* Bail out if PMBus status register does not exist. */ +if (i2c_smbus_read_byte_data (client,PMBUS_STATUS_BYTE ) <0 ) { +dev_err (&client->dev,"PMBus status register not found\n" ); ret = -ENODEV ; goto out_data; }
drivers/media/dvb/frontends/dib0070.c +10 -30
@@ -73,47 +73,27 @@ struct dib0070_state {u8 wbd_gain_current;u16 wbd_offset_3_3[2 ]; - -/* for the I2C transfer */ -struct i2c_msg msg[2 ]; -u8 i2c_write_buffer[3 ]; -u8 i2c_read_buffer[2 ]; };static uint16_t dib0070_read_reg (struct dib0070_state *state,u8 reg) { - state->i2c_write_buffer[0 ] = reg; - -memset (state->msg,0 ,2 *sizeof (struct i2c_msg )); - state->msg[0 ].addr = state->cfg->i2c_address; - state->msg[0 ].flags =0 ; - state->msg[0 ].buf = state->i2c_write_buffer; - state->msg[0 ].len =1 ; - state->msg[1 ].addr = state->cfg->i2c_address; - state->msg[1 ].flags =I2C_M_RD ; - state->msg[1 ].buf = state->i2c_read_buffer; - state->msg[1 ].len =2 ; - -if (i2c_transfer (state->i2c, state->msg,2 ) !=2 ) { +u8 b[2 ]; +struct i2c_msg msg[2 ] = { + { .addr = state->cfg->i2c_address, .flags =0 , .buf = ®, .len =1 }, + { .addr = state->cfg->i2c_address, .flags =I2C_M_RD , .buf = b, .len =2 }, + }; +if (i2c_transfer (state->i2c, msg,2 ) !=2 ) {printk (KERN_WARNING "DiB0070 I2C read failed\n" );return 0 ; } -return (state->i2c_read_buffer[0 ] <<8 ) | state->i2c_read_buffer[1 ]; +return (b[0 ] <<8 ) | b[1 ]; }static int dib0070_write_reg (struct dib0070_state *state,u8 reg,u16 val) { - state->i2c_write_buffer[0 ] = reg; - state->i2c_write_buffer[1 ] = val >>8 ; - state->i2c_write_buffer[2 ] = val &0xff ; - -memset (state->msg,0 ,sizeof (struct i2c_msg )); - state->msg[0 ].addr = state->cfg->i2c_address; - state->msg[0 ].flags =0 ; - state->msg[0 ].buf = state->i2c_write_buffer; - state->msg[0 ].len =3 ; - -if (i2c_transfer (state->i2c, state->msg,1 ) !=1 ) { +u8 b[3 ] = { reg, val >>8 , val &0xff }; +struct i2c_msg msg = { .addr = state->cfg->i2c_address, .flags =0 , .buf = b, .len =3 }; +if (i2c_transfer (state->i2c, &msg,1 ) !=1 ) {printk (KERN_WARNING "DiB0070 I2C write failed\n" );return -EREMOTEIO ; }
drivers/media/dvb/frontends/dib0090.c +17 -54
107 lines not on this page · raw message
drivers/media/dvb/frontends/dib7000m.c +17 -32
67 lines not on this page · raw message
drivers/media/dvb/frontends/dib7000p.c +20 -52
105 lines not on this page · raw message
drivers/media/dvb/frontends/dib8000.c +32 -94
207 lines not on this page · raw message
drivers/media/dvb/frontends/dib9000.c +61 -111
393 lines not on this page · raw message
drivers/media/dvb/frontends/dibx000_common.c +44 -65
147 lines not on this page · raw message
drivers/media/dvb/frontends/dibx000_common.h +0 -5
@@ -28,11 +28,6 @@ struct dibx000_i2c_master {u8 i2c_addr;u16 base_reg; - -/* for the I2C transfer */ -struct i2c_msg msg[34 ]; -u8 i2c_write_buffer[8 ]; -u8 i2c_read_buffer[2 ]; }; extern int dibx000_init_i2c_master(struct dibx000_i2c_master *mst,
drivers/media/radio/si4713-i2c.c +2 -2
@@ -1033,7 +1033,7 @@ static int si4713_write_econtrol_string(struct si4713_device *sdev,char ps_name[MAX_RDS_PS_NAME +1 ]; len = control->size -1 ; -if (len >MAX_RDS_PS_NAME ) { +if (len <0 || len >MAX_RDS_PS_NAME ) { rval = -ERANGE ; goto exit; }
@@ -1057,7 +1057,7 @@ static int si4713_write_econtrol_string(struct si4713_device *sdev,char radio_text[MAX_RDS_RADIO_TEXT +1 ]; len = control->size -1 ; -if (len >MAX_RDS_RADIO_TEXT ) { +if (len <0 || len >MAX_RDS_RADIO_TEXT ) { rval = -ERANGE ; goto exit; }
drivers/media/video/bt8xx/bttv-driver.c +1 -1
@@ -3474,7 +3474,7 @@ static int radio_s_tuner(struct file *file, void *priv,if (0 != t->index)return -EINVAL ; -bttv_call_all (btv, tuner, g_tuner, t); +bttv_call_all (btv, tuner, s_tuner, t);return 0 ; }
drivers/media/video/cx23885/cx23885-core.c +2 -7
@@ -2060,12 +2060,8 @@ static int __devinit cx23885_initdev(struct pci_dev *pci_dev, goto fail_irq; } -if (!pci_enable_msi (pci_dev)) - err =request_irq (pci_dev->irq, cx23885_irq, -IRQF_DISABLED , dev->name, dev); -else - err =request_irq (pci_dev->irq, cx23885_irq, -IRQF_SHARED |IRQF_DISABLED , dev->name, dev); + err =request_irq (pci_dev->irq, cx23885_irq, +IRQF_SHARED |IRQF_DISABLED , dev->name, dev);if (err <0 ) {printk (KERN_ERR "%s: can't get IRQ %d\n" , dev->name, pci_dev->irq);
@@ -2114,7 +2110,6 @@ static void __devexit cx23885_finidev(struct pci_dev *pci_dev)/* unregister stuff */ free_irq (pci_dev->irq, dev); -pci_disable_msi (pci_dev);cx23885_dev_unregister (dev);v4l2_device_unregister (v4l2_dev);
drivers/media/video/pvrusb2/pvrusb2-hdw.c +4 -0
@@ -3046,6 +3046,8 @@ static void pvr2_subdev_update(struct pvr2_hdw *hdw)if (hdw->input_dirty || hdw->audiomode_dirty || hdw->force_dirty) {struct v4l2_tuner vt;memset (&vt,0 ,sizeof (vt)); + vt.type = (hdw->input_val ==PVR2_CVAL_INPUT_RADIO ) ? +V4L2_TUNER_RADIO :V4L2_TUNER_ANALOG_TV ; vt.audmode = hdw->audiomode_val;v4l2_device_call_all (&hdw->v4l2_dev,0 , tuner, s_tuner, &vt); }
@@ -5171,6 +5173,8 @@ void pvr2_hdw_status_poll(struct pvr2_hdw *hdw) {struct v4l2_tuner *vtp = &hdw->tuner_signal_info;memset (vtp,0 ,sizeof (*vtp)); + vtp->type = (hdw->input_val ==PVR2_CVAL_INPUT_RADIO ) ? +V4L2_TUNER_RADIO :V4L2_TUNER_ANALOG_TV ; hdw->tuner_signal_stale =0 ;/* Note: There apparently is no replacement for VIDIOC_CROPCAP using v4l2-subdev - therefore we can't support that AT ALL right
drivers/media/video/tuner-core.c +31 -28
122 lines not on this page · raw message
drivers/media/video/v4l2-ioctl.c +6 -0
@@ -1822,6 +1822,8 @@ static long __video_do_ioctl(struct file *file,if (!ops->vidioc_g_tuner)break ; + p->type = (vfd->vfl_type ==VFL_TYPE_RADIO ) ? +V4L2_TUNER_RADIO :V4L2_TUNER_ANALOG_TV ; ret = ops->vidioc_g_tuner (file, fh, p);if (!ret) dbgarg(cmd, "index=%d, name=%s, type=%d, "
@@ -1840,6 +1842,8 @@ static long __video_do_ioctl(struct file *file,if (!ops->vidioc_s_tuner)break ; + p->type = (vfd->vfl_type ==VFL_TYPE_RADIO ) ? +V4L2_TUNER_RADIO :V4L2_TUNER_ANALOG_TV ;dbgarg (cmd,"index=%d, name=%s, type=%d, " "capability=0x%x, rangelow=%d, " "rangehigh=%d, signal=%d, afc=%d, "
@@ -1858,6 +1862,8 @@ static long __video_do_ioctl(struct file *file,if (!ops->vidioc_g_frequency)break ; + p->type = (vfd->vfl_type ==VFL_TYPE_RADIO ) ? +V4L2_TUNER_RADIO :V4L2_TUNER_ANALOG_TV ; ret = ops->vidioc_g_frequency (file, fh, p);if (!ret) dbgarg(cmd, "tuner=%d, type=%d, frequency=%d\n",
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/wireless/ath/ath5k/pci.c +5 -2
@@ -265,7 +265,9 @@ ath5k_pci_remove(struct pci_dev *pdev)#ifdef CONFIG_PM_SLEEP static int ath5k_pci_suspend (struct device *dev) { -struct ath5k_softc *sc =pci_get_drvdata (to_pci_dev (dev)); +struct pci_dev *pdev =to_pci_dev (dev); +struct ieee80211_hw *hw =pci_get_drvdata (pdev); +struct ath5k_softc *sc = hw->priv;ath5k_led_off (sc);return 0 ;
@@ -274,7 +276,8 @@ static int ath5k_pci_suspend(struct device *dev)static int ath5k_pci_resume (struct device *dev) {struct pci_dev *pdev =to_pci_dev (dev); -struct ath5k_softc *sc =pci_get_drvdata (pdev); +struct ieee80211_hw *hw =pci_get_drvdata (pdev); +struct ath5k_softc *sc = hw->priv;/* * Suspend/Resume resets the PCI configuration space, so we have to
drivers/net/wireless/ath/ath5k/sysfs.c +6 -3
@@ -10,7 +10,8 @@ static ssize_t ath5k_attr_show_##name(struct device *dev, \struct device_attribute *attr, \ char *buf) \ { \ - struct ath5k_softc *sc = dev_get_drvdata(dev); \ + struct ieee80211_hw *hw = dev_get_drvdata(dev); \ +struct ath5k_softc *sc = hw->priv; \return snprintf (buf,PAGE_SIZE ,"%d\n" , get); \ } \ \
@@ -18,7 +19,8 @@ static ssize_t ath5k_attr_store_##name(struct device *dev, \struct device_attribute *attr, \ const char *buf, size_t count) \ { \ - struct ath5k_softc *sc = dev_get_drvdata(dev); \ + struct ieee80211_hw *hw = dev_get_drvdata(dev); \ +struct ath5k_softc *sc = hw->priv; \int val; \ \ val = (int )simple_strtoul (buf,NULL ,10 ); \
@@ -33,7 +35,8 @@ static ssize_t ath5k_attr_show_##name(struct device *dev, \struct device_attribute *attr, \ char *buf) \ { \ - struct ath5k_softc *sc = dev_get_drvdata(dev); \ + struct ieee80211_hw *hw = dev_get_drvdata(dev); \ +struct ath5k_softc *sc = hw->priv; \return snprintf (buf,PAGE_SIZE ,"%d\n" , get); \ } \ static DEVICE_ATTR(name, S_IRUGO, ath5k_attr_show_##name, NULL)
drivers/net/wireless/ath/ath9k/xmit.c +2 -1
@@ -662,7 +662,8 @@ static int ath_compute_num_delims(struct ath_softc *sc, struct ath_atx_tid *tid,* TODO - this could be improved to be dependent on the rate. * The hardware can keep up at lower rates, but not higher rates */ -if (fi->keyix !=ATH9K_TXKEYIX_INVALID ) +if ((fi->keyix !=ATH9K_TXKEYIX_INVALID ) && + !(sc->sc_ah->caps.hw_caps &ATH9K_HW_CAP_EDMA )) ndelim +=ATH_AGGR_ENCRYPTDELIM ;/*
drivers/net/wireless/ath/carl9170/usb.c +2 -0
@@ -112,6 +112,8 @@ static struct usb_device_id carl9170_usb_ids[] = { { USB_DEVICE(0x04bb, 0x093f) },/* NEC WL300NU-G */ { USB_DEVICE(0x0409, 0x0249) }, +/* NEC WL300NU-AG */ + { USB_DEVICE(0x0409, 0x02b4) },/* AVM FRITZ!WLAN USB Stick N */ { USB_DEVICE(0x057c, 0x8401) },/* AVM FRITZ!WLAN USB Stick N 2.4 */
drivers/net/wireless/rtlwifi/rtl8192cu/sw.c +1 -0
@@ -278,6 +278,7 @@ static struct usb_device_id rtl8192c_usb_ids[] = { {RTL_USB_DEVICE(0x06f8, 0xe033, rtl92cu_hal_cfg)}, /*Hercules - Edimax*/ {RTL_USB_DEVICE(0x07b8, 0x8188, rtl92cu_hal_cfg)}, /*Abocom - Abocom*/ {RTL_USB_DEVICE(0x07b8, 0x8189, rtl92cu_hal_cfg)}, /*Funai - Abocom*/ + {RTL_USB_DEVICE(0x0846, 0x9041, rtl92cu_hal_cfg)}, /*NetGear WNA1000M*/ {RTL_USB_DEVICE(0x0Df6, 0x0052, rtl92cu_hal_cfg)}, /*Sitecom - Edimax*/ {RTL_USB_DEVICE(0x0eb0, 0x9071, rtl92cu_hal_cfg)}, /*NO Brand - Etop*//* HP - Lite-On ,8188CUS Slim Combo */
drivers/pci/quirks.c +23 -0
@@ -2755,6 +2755,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/platform/x86/dell-laptop.c +2 -22
@@ -290,12 +290,9 @@ static int dell_rfkill_set(void *data, bool blocked)dell_send_request (buffer,17 ,11 );/* If the hardware switch controls this radio, and the hardware -switch is disabled, don't allow changing the software state. -If the hardware switch is reported as not supported, always -fire the SMI to toggle the killswitch. */ +switch is disabled, don't allow changing the software state */ if ((hwswitch_state &BIT (hwswitch_bit)) && - !(buffer->output[1 ] &BIT (16 )) && - (buffer->output[1 ] &BIT (0 ))) { + !(buffer->output[1 ] &BIT (16 ))) { ret = -EINVAL ; goto out; }
@@ -401,23 +398,6 @@ static const struct file_operations dell_debugfs_fops = {static void dell_update_rfkill (struct work_struct *ignored) { -int status; - -get_buffer (); -dell_send_request (buffer,17 ,11 ); - status = buffer->output[1 ]; -release_buffer (); - -/* if hardware rfkill is not supported, set it explicitly */ -if (!(status &BIT (0 ))) { -if (wifi_rfkill) -dell_rfkill_set ((void *)1 , !((status &BIT (17 )) >>17 )); -if (bluetooth_rfkill) -dell_rfkill_set ((void *)2 , !((status &BIT (18 )) >>18 )); -if (wwan_rfkill) -dell_rfkill_set ((void *)3 , !((status &BIT (19 )) >>19 )); - } -if (wifi_rfkill)dell_rfkill_query (wifi_rfkill, (void *)1 );if (bluetooth_rfkill)
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
fs/cifs/connect.c +44 -20
86 lines not on this page · raw message
fs/ext4/super.c +3 -0
@@ -4635,6 +4635,9 @@ static int ext4_quota_off(struct super_block *sb, int type)if (test_opt (sb,DELALLOC ))sync_filesystem (sb); +if (!inode) + goto out; +/* Update modification times of quota files when userspace can * start looking at them */ handle =ext4_journal_start (inode,1 );
fs/fscache/page.c +5 -9
@@ -989,16 +989,12 @@ void __fscache_uncache_all_inode_pages(struct fscache_cookie *cookie,pagevec_init (&pvec,0 ); next =0 ; -while (next <= (loff_t)-1 && -pagevec_lookup (&pvec, mapping, next,PAGEVEC_SIZE ) - ) { + do { + if (!pagevec_lookup(&pvec, mapping, next, PAGEVEC_SIZE)) + break; for (i = 0; i < pagevec_count(&pvec); i++) { struct page *page = pvec.pages[i]; -pgoff_t page_index = page->index; - - ASSERTCMP(page_index, >=, next); - next = page_index +1 ; - + next = page->index; if (PageFsCache(page)) { __fscache_wait_on_page_write(cookie, page); __fscache_uncache_page(cookie, page);
@@ -1006,7 +1002,7 @@ void __fscache_uncache_all_inode_pages(struct fscache_cookie *cookie, }pagevec_release (&pvec);cond_resched (); - } + }while (++next);_leave ("" ); }
fs/gfs2/file.c +8 -2
@@ -826,6 +826,7 @@ static long gfs2_fallocate(struct file *file, int mode, loff_t offset,loff_t bytes, max_bytes;struct gfs2_alloc *al;int error; +loff_t bsize_mask = ~((loff_t )sdp->sd_sb.sb_bsize -1 );loff_t next = (offset + len -1 ) >> sdp->sd_sb.sb_bsize_shift; next = (next +1 ) << sdp->sd_sb.sb_bsize_shift;
@@ -833,13 +834,15 @@ static long gfs2_fallocate(struct file *file, int mode, loff_t offset,if (mode & ~FALLOC_FL_KEEP_SIZE )return -EOPNOTSUPP ; - offset = (offset >> sdp->sd_sb.sb_bsize_shift) << - sdp->sd_sb.sb_bsize_shift; + offset &= bsize_mask; len = next - offset; bytes = sdp->sd_max_rg_data * sdp->sd_sb.sb_bsize /2 ;if (!bytes) bytes =UINT_MAX ; + bytes &= bsize_mask; +if (bytes ==0 ) + bytes = sdp->sd_sb.sb_bsize;gfs2_holder_init (ip->i_gl,LM_ST_EXCLUSIVE ,0 , &ip->i_gh); error =gfs2_glock_nq (&ip->i_gh);
@@ -870,6 +873,9 @@ retry:if (error) {if (error == -ENOSPC && bytes > sdp->sd_sb.sb_bsize) { bytes >>=1 ; + bytes &= bsize_mask; +if (bytes ==0 ) + bytes = sdp->sd_sb.sb_bsize; goto retry; } goto out_qunlock;
fs/namei.c +6 -1
@@ -1013,7 +1013,6 @@ static bool __follow_mount_rcu(struct nameidata *nd, struct path *path,* Don't forget we might have a non-mountpoint managed dentry * that wants to block transit. */ - *inode = path->dentry->d_inode;if (!reverse_transit &&unlikely (managed_dentry_might_block (path->dentry)))return false;
@@ -1027,6 +1026,12 @@ static bool __follow_mount_rcu(struct nameidata *nd, struct path *path, path->mnt = mounted; path->dentry = mounted->mnt_root; nd->seq =read_seqcount_begin (&path->dentry->d_seq); +/* +* Update the inode too. We don't need to re-check the +* dentry sequence number here after this d_inode read, +* because a mount-point is always pinned. +*/ + *inode = path->dentry->d_inode; }if (unlikely (path->dentry->d_flags &DCACHE_NEED_AUTOMOUNT ))
fs/nfs/nfs4xdr.c +1 -1
@@ -91,7 +91,7 @@ static int nfs4_stat_to_errno(int);#define encode_getfh_maxsz (op_encode_hdr_maxsz)#define decode_getfh_maxsz (op_decode_hdr_maxsz + 1 + \ ((3+NFS4_FHSIZE) >> 2)) -#define nfs4_fattr_bitmap_maxsz 3 +#define nfs4_fattr_bitmap_maxsz 4#define encode_getattr_maxsz (op_encode_hdr_maxsz + nfs4_fattr_bitmap_maxsz)#define nfs4_name_maxsz (1 + ((3 + NFS4_MAXNAMLEN) >> 2))#define nfs4_path_maxsz (1 + ((3 + NFS4_MAXPATHLEN) >> 2))
fs/partitions/efi.c +9 -0
@@ -310,6 +310,15 @@ static int is_gpt_valid(struct parsed_partitions *state, u64 lba, goto fail; } +/* Check the GUID Partition Table header size */ +if (le32_to_cpu ((*gpt)->header_size) > +bdev_logical_block_size (state->bdev)) { +pr_debug ("GUID Partition Table Header size is wrong: %u > %u\n" , +le32_to_cpu ((*gpt)->header_size), +bdev_logical_block_size (state->bdev)); + goto fail; + } +/* Check the GUID Partition Table CRC */ origcrc =le32_to_cpu ((*gpt)->header_crc32); (*gpt)->header_crc32 =0 ;
fs/proc/base.c +5 -2
@@ -2762,6 +2762,9 @@ static int do_io_accounting(struct task_struct *task, char *buffer, int whole)struct task_io_accounting acct = task->ioac;unsigned long flags; +if (!ptrace_may_access (task,PTRACE_MODE_READ )) +return -EACCES ; +if (whole &&lock_task_sighand (task, &flags)) {struct task_struct *t = task;
@@ -2892,7 +2895,7 @@ static const struct pid_entry tgid_base_stuff[] = { REG("coredump_filter", S_IRUGO|S_IWUSR, proc_coredump_filter_operations),#endif #ifdef CONFIG_TASK_IO_ACCOUNTING - INF("io", S_IRUGO, proc_tgid_io_accounting), + INF("io", S_IRUSR, proc_tgid_io_accounting),#endif };
@@ -3230,7 +3233,7 @@ static const struct pid_entry tid_base_stuff[] = { REG("make-it-fail", S_IRUGO|S_IWUSR, proc_fault_inject_operations),#endif #ifdef CONFIG_TASK_IO_ACCOUNTING - INF("io", S_IRUGO, proc_tid_io_accounting), + INF("io", S_IRUSR, proc_tid_io_accounting),#endif };
fs/xfs/xfs_alloc.c +6 -0
@@ -2610,6 +2610,12 @@ restart: new->bno + new->length) -min (busyp->bno, new->bno); new->bno =min (busyp->bno, new->bno); +/* +* Start the search over from the tree root, because +* erasing the node can rearrange the tree topology. +*/ +spin_unlock (&pag->pagb_lock); + goto restart; }else busyp =NULL ;
include/drm/drm_pciids.h +2 -0
@@ -182,6 +182,7 @@ {0x1002, 0x6750, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_TURKS|RADEON_NEW_MEMMAP}, \ {0x1002, 0x6758, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_TURKS|RADEON_NEW_MEMMAP}, \ {0x1002, 0x6759, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_TURKS|RADEON_NEW_MEMMAP}, \ + {0x1002, 0x675F, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_TURKS|RADEON_NEW_MEMMAP}, \ {0x1002, 0x6760, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_CAICOS|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ {0x1002, 0x6761, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_CAICOS|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ {0x1002, 0x6762, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_CAICOS|RADEON_NEW_MEMMAP}, \
@@ -192,6 +193,7 @@ {0x1002, 0x6767, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_CAICOS|RADEON_NEW_MEMMAP}, \ {0x1002, 0x6768, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_CAICOS|RADEON_NEW_MEMMAP}, \ {0x1002, 0x6770, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_CAICOS|RADEON_NEW_MEMMAP}, \ + {0x1002, 0x6778, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_CAICOS|RADEON_NEW_MEMMAP}, \ {0x1002, 0x6779, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_CAICOS|RADEON_NEW_MEMMAP}, \ {0x1002, 0x6880, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_CYPRESS|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ {0x1002, 0x6888, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_CYPRESS|RADEON_NEW_MEMMAP}, \
include/linux/netdevice.h +4 -1
@@ -1680,9 +1680,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)
mm/compaction.c +36 -6
94 lines not on this page · raw message
mm/nommu.c +6 -3
@@ -1819,10 +1819,13 @@ struct page *follow_page(struct vm_area_struct *vma, unsigned long address,return NULL ; } -int remap_pfn_range (struct vm_area_struct *vma,unsigned long from, -unsigned long to,unsigned long size,pgprot_t prot) +int remap_pfn_range (struct vm_area_struct *vma,unsigned long addr, +unsigned long pfn,unsigned long size,pgprot_t prot) { - vma->vm_start = vma->vm_pgoff <<PAGE_SHIFT ; +if (addr != (pfn <<PAGE_SHIFT )) +return -EINVAL ; + + vma->vm_flags |=VM_IO |VM_RESERVED |VM_PFNMAP ;return 0 ; }EXPORT_SYMBOL (remap_pfn_range);
mm/oom_kill.c +3 -1
@@ -285,7 +285,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 ;
@@ -301,6 +301,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 ) {/*
mm/vmscan.c +52 -28
145 lines not on this page · raw message
net/bridge/br_private.h +1 -0
@@ -123,6 +123,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/mac80211/wpa.c +13 -3
@@ -86,6 +86,11 @@ ieee80211_rx_h_michael_mic_verify(struct ieee80211_rx_data *rx)struct sk_buff *skb = rx->skb;struct ieee80211_rx_status *status =IEEE80211_SKB_RXCB (skb);struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data; +int queue = rx->queue; + +/* otherwise, TKIP is vulnerable to TID 0 vs. non-QoS replays */ +if (rx->queue ==NUM_RX_DATA_QUEUES -1 ) + queue =0 ;/* No way to verify the MIC if the hardware stripped it */ if (status->flag &RX_FLAG_MMIC_STRIPPED )
@@ -119,8 +124,8 @@ ieee80211_rx_h_michael_mic_verify(struct ieee80211_rx_data *rx)skb_trim (skb, skb->len -MICHAEL_MIC_LEN );/* update IV in key information to be able to detect replays */ - rx->key->u.tkip.rx[rx->queue].iv32 = rx->tkip_iv32; - rx->key->u.tkip.rx[rx->queue].iv16 = rx->tkip_iv16; + rx->key->u.tkip.rx[queue].iv32 = rx->tkip_iv32; + rx->key->u.tkip.rx[queue].iv16 = rx->tkip_iv16;return RX_CONTINUE ; }
@@ -201,6 +206,11 @@ ieee80211_crypto_tkip_decrypt(struct ieee80211_rx_data *rx)struct ieee80211_key *key = rx->key;struct sk_buff *skb = rx->skb;struct ieee80211_rx_status *status =IEEE80211_SKB_RXCB (skb); +int queue = rx->queue; + +/* otherwise, TKIP is vulnerable to TID 0 vs. non-QoS replays */ +if (rx->queue ==NUM_RX_DATA_QUEUES -1 ) + queue =0 ; hdrlen =ieee80211_hdrlen (hdr->frame_control);
@@ -221,7 +231,7 @@ ieee80211_crypto_tkip_decrypt(struct ieee80211_rx_data *rx) res =ieee80211_tkip_decrypt_data (rx->local->wep_rx_tfm, key, skb->data + hdrlen, skb->len - hdrlen, rx->sta->sta.addr, - hdr->addr1, hwaccel, rx->queue, + hdr->addr1, hwaccel, queue, &rx->tkip_iv32, &rx->tkip_iv16);if (res !=TKIP_DECRYPT_OK )
net/sunrpc/rpcb_clnt.c +1 -1
@@ -528,7 +528,7 @@ void rpcb_getport_async(struct rpc_task *task)u32 bind_version;struct rpc_xprt *xprt;struct rpc_clnt *rpcb_clnt; -static struct rpcbind_args *map; +struct rpcbind_args *map;struct rpc_task *child;struct sockaddr_storage addr;struct sockaddr *sap = (struct sockaddr *)&addr;
net/sunrpc/sched.c +11 -16
@@ -616,30 +616,25 @@ static void __rpc_execute(struct rpc_task *task)BUG_ON (RPC_IS_QUEUED (task));for (;;) { +void (*do_action)(struct rpc_task *);/* -* Execute any pending callback. +* Execute any pending callback first. */ -if (task->tk_callback) { -void (*save_callback)(struct rpc_task *); - -/* -* We set tk_callback to NULL before calling it, -* in case it sets the tk_callback field itself: -*/ - save_callback = task->tk_callback; - task->tk_callback =NULL ; -save_callback (task); - }else { + do_action = task->tk_callback; + task->tk_callback =NULL ; +if (do_action ==NULL ) {/* * Perform the next FSM step. -* tk_action may be NULL when the task has been killed -* by someone else. +* tk_action may be NULL if the task has been killed. +* In particular, note that rpc_killall_tasks may +* do this at any time, so beware when dereferencing. */ -if (task->tk_action ==NULL ) + do_action = task->tk_action; +if (do_action ==NULL )break ; - task->tk_action (task); } +do_action (task);/* * Lockless check for whether task is sleeping or not.
sound/soc/blackfin/bf5xx-i2s-pcm.c +11 -2
@@ -138,11 +138,20 @@ static snd_pcm_uframes_t bf5xx_pcm_pointer(struct snd_pcm_substream *substream)pr_debug ("%s enter\n" , __func__);if (substream->stream ==SNDRV_PCM_STREAM_PLAYBACK ) { diff =sport_curr_offset_tx (sport); - frames =bytes_to_frames (substream->runtime, diff); }else { diff =sport_curr_offset_rx (sport); - frames =bytes_to_frames (substream->runtime, diff); } + +/* +* TX at least can report one frame beyond the end of the +* buffer if we hit the wraparound case - clamp to within the +* buffer as the ALSA APIs require. +*/ +if (diff ==snd_pcm_lib_buffer_bytes (substream)) + diff =0 ; + + frames =bytes_to_frames (substream->runtime, diff); +return frames; }
sound/soc/codecs/ak4642.c +1 -1
@@ -357,7 +357,7 @@ static int ak4642_dai_set_fmt(struct snd_soc_dai *dai, unsigned int fmt)default :return -EINVAL ; } -snd_soc_update_bits (codec,PW_MGMT2 ,MS , data); +snd_soc_update_bits (codec,PW_MGMT2 ,MS |MCKO |PMPLL , data);snd_soc_update_bits (codec,MD_CTL1 ,BCKO_MASK , bcko);/* format type */
sound/soc/codecs/wm8994.c +7 -4
@@ -1446,7 +1446,6 @@ SND_SOC_DAPM_INPUT("DMIC1DAT"),SND_SOC_DAPM_INPUT ("DMIC2DAT" ),SND_SOC_DAPM_INPUT ("Clock" ), -SND_SOC_DAPM_MICBIAS ("MICBIAS" ,WM8994_MICBIAS ,2 ,0 ),SND_SOC_DAPM_SUPPLY_S ("MICBIAS Supply" ,1 ,SND_SOC_NOPM ,0 ,0 , micbias_ev, SND_SOC_DAPM_PRE_PMU),
@@ -1765,8 +1764,10 @@ static const struct snd_soc_dapm_route wm8994_revd_intercon[] = { { "AIF2DACDAT", NULL, "AIF1DACDAT" }, { "AIF1ADCDAT", NULL, "AIF2ADCDAT" }, { "AIF2ADCDAT", NULL, "AIF1ADCDAT" }, - { "MICBIAS", NULL, "CLK_SYS" }, - { "MICBIAS", NULL, "MICBIAS Supply" }, + { "MICBIAS1", NULL, "CLK_SYS" }, + { "MICBIAS1", NULL, "MICBIAS Supply" }, + { "MICBIAS2", NULL, "CLK_SYS" }, + { "MICBIAS2", NULL, "MICBIAS Supply" }, }; static const struct snd_soc_dapm_route wm8994_intercon[] = {
@@ -1969,6 +1970,8 @@ static int _wm8994_set_fll(struct snd_soc_codec *codec, int id, int src,snd_soc_update_bits (codec,WM8994_FLL1_CONTROL_1 + reg_offset,WM8994_FLL1_ENA |WM8994_FLL1_FRAC , reg); + +msleep (5 ); } wm8994->fll[id].in = freq_in;
@@ -3018,7 +3021,7 @@ static void wm8958_default_micdet(u16 status, void *data) report =SND_JACK_MICROPHONE ;/* Everything else is buttons; just assign slots */ -if (status &0x1c0 ) +if (status &0x1c ) report |=SND_JACK_BTN_0 ; done: