Linux 2.6.36.3
Subsystems (84)
I'm announcing the release of the 2.6.36.3 kernel.
All users of the 2.6.36 kernel series must upgrade.
The updated 2.6.36.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-2.6.36.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.36.y.git;a=summarythanks,
greg k-h
------------
Documentation/kernel-parameters.txt | 2 Documentation/power/runtime_pm.txt | 4 Makefile | 2 arch/arm/mach-at91/include/mach/at91_mci.h | 2 arch/arm/mm/cache-v6.S | 28 +++- arch/mips/jz4740/board-qi_lb60.c | 4 arch/sparc/include/asm/openprom.h | 2 arch/sparc/include/asm/oplib_32.h | 35 ----- arch/sparc/include/asm/oplib_64.h | 46 ------- arch/sparc/kernel/leon_kernel.c | 4 arch/sparc/prom/Makefile | 1 arch/sparc/prom/console_32.c | 65 +--------- arch/sparc/prom/console_64.c | 81 ++---------- arch/sparc/prom/devops_32.c | 87 ------------- arch/sparc/prom/devops_64.c | 67 ---------- arch/sparc/prom/misc_64.c | 16 -- arch/sparc/prom/printf.c | 35 ++++- arch/sparc/prom/tree_32.c | 15 -- arch/sparc/prom/tree_64.c | 18 -- arch/tile/kernel/process.c | 7 + arch/x86/include/asm/kvm_host.h | 2 arch/x86/include/asm/processor.h | 23 --- arch/x86/kernel/apic/apic.c | 8 + arch/x86/kernel/apic/io_apic.c | 1 arch/x86/kernel/apic/probe_64.c | 7 - arch/x86/kernel/cpu/amd.c | 3 arch/x86/kernel/microcode_intel.c | 16 -- arch/x86/kernel/smpboot.c | 85 +++++++++++++ arch/x86/kernel/xsave.c | 3 arch/x86/kvm/svm.c | 4 arch/x86/kvm/vmx.c | 5 arch/x86/kvm/x86.c | 7 - arch/x86/kvm/x86.h | 5 arch/x86/oprofile/op_model_amd.c | 24 ++- arch/x86/vdso/Makefile | 4 block/blk-merge.c | 6 block/blk-settings.c | 25 ---- block/blk-sysfs.c | 2 drivers/acpi/acpica/dswexec.c | 19 ++- drivers/acpi/ec.c | 3 drivers/ata/libata-sff.c | 7 - drivers/block/xen-blkfront.c | 2 drivers/char/n_gsm.c | 6 drivers/char/ramoops.c | 12 + drivers/dma/mv_xor.c | 2 drivers/edac/amd64_edac.c | 2 drivers/edac/edac_mc.c | 10 - drivers/firewire/ohci.c | 47 +++++-- drivers/gpio/cs5535-gpio.c | 19 ++- drivers/gpio/rdc321x-gpio.c | 2 drivers/gpu/drm/drm_crtc.c | 10 - drivers/gpu/drm/i915/i915_dma.c | 23 +++ drivers/gpu/drm/i915/i915_reg.h | 1 drivers/gpu/drm/i915/intel_display.c | 4 drivers/gpu/drm/i915/intel_dp.c | 37 ++++- drivers/gpu/drm/nouveau/nouveau_drv.h | 6 drivers/gpu/drm/nouveau/nouveau_irq.c | 1 drivers/gpu/drm/nouveau/nv50_display.c | 35 ++++- drivers/gpu/drm/radeon/atombios_crtc.c | 3 drivers/gpu/drm/radeon/evergreen.c | 25 +--- drivers/gpu/drm/radeon/r600.c | 17 +- drivers/gpu/drm/radeon/radeon_device.c | 9 - drivers/hwmon/adm1026.c | 20 +-- drivers/infiniband/core/uverbs_cmd.c | 99 ++++++++------- drivers/input/mouse/synaptics.h | 3 drivers/md/dm-table.c | 5 drivers/md/md.c | 15 +- drivers/md/raid10.c | 2 drivers/media/common/saa7146_hlp.c | 8 - drivers/media/common/saa7146_video.c | 16 +- drivers/media/video/gspca/sonixj.c | 17 ++ drivers/media/video/mx2_camera.c | 2 drivers/mfd/wm831x-core.c | 8 - drivers/mmc/core/core.c | 1 drivers/mmc/host/at91_mci.c | 13 +- drivers/mmc/host/atmel-mci.c | 18 +- drivers/net/8139cp.c | 10 - drivers/net/benet/be_cmds.c | 2 drivers/net/bonding/bonding.h | 4 drivers/net/ifb.c | 2 drivers/net/pppoe.c | 2 drivers/net/r8169.c | 4 drivers/net/tehuti.c | 4 drivers/net/wireless/ath/ath9k/ar9003_eeprom.c | 73 ++++++----- drivers/net/wireless/ath/ath9k/ar9003_eeprom.h | 9 - drivers/net/wireless/ath/ath9k/eeprom.c | 6 drivers/net/wireless/ath/ath9k/eeprom.h | 13 -- drivers/net/wireless/ath/ath9k/eeprom_def.c | 12 + drivers/net/wireless/ath/ath9k/hw.c | 3 drivers/net/wireless/ath/ath9k/mac.c | 3 drivers/net/wireless/ath/ath9k/main.c | 11 + drivers/net/wireless/ath/ath9k/recv.c | 4 drivers/net/wireless/ath/ath9k/reg.h | 6 drivers/net/wireless/orinoco/main.c | 6 drivers/net/wireless/orinoco/orinoco_cs.c | 14 +- drivers/net/wireless/orinoco/spectrum_cs.c | 14 +- drivers/net/wireless/orinoco/wext.c | 4 drivers/net/wireless/p54/p54usb.c | 6 drivers/net/wireless/rt2x00/rt2400pci.c | 6 drivers/net/wireless/rt2x00/rt2500pci.c | 12 + drivers/net/wireless/rt2x00/rt2500usb.c | 12 + drivers/net/wireless/rt2x00/rt2800.h | 7 + drivers/net/wireless/rt2x00/rt2800lib.c | 59 +++++---- drivers/net/wireless/rt2x00/rt2x00.h | 5 drivers/net/wireless/rt2x00/rt2x00dev.c | 2 drivers/net/wireless/rt2x00/rt61pci.c | 12 + drivers/net/wireless/rt2x00/rt73usb.c | 12 + drivers/net/xen-netfront.c | 4 drivers/pci/dmar.c | 5 drivers/pci/quirks.c | 23 +++ drivers/platform/x86/intel_ips.c | 36 +++++ drivers/platform/x86/intel_ips.h | 21 +++ drivers/rtc/rtc-rs5c372.c | 2 drivers/scsi/qla2xxx/qla_iocb.c | 1 drivers/scsi/qla2xxx/qla_nx.c | 1 drivers/scsi/qla2xxx/qla_os.c | 1 drivers/scsi/scsi_lib.c | 3 drivers/staging/cx25821/cx25821-video.c | 8 - drivers/staging/cx25821/cx25821-video.h | 2 drivers/usb/gadget/composite.c | 16 +- drivers/usb/host/xhci-mem.c | 25 ++-- drivers/usb/misc/uss720.c | 4 drivers/usb/serial/ftdi_sio.c | 1 drivers/usb/serial/ftdi_sio_ids.h | 5 drivers/usb/storage/unusual_devs.h | 7 + drivers/watchdog/rdc321x_wdt.c | 2 fs/exec.c | 5 fs/fuse/file.c | 72 ++++++++++- fs/nfs/file.c | 2 fs/nfs/mount_clnt.c | 4 fs/nfsd/nfs3xdr.c | 6 fs/nfsd/xdr4.h | 21 +-- fs/notify/inotify/inotify_user.c | 1 include/linux/blkdev.h | 9 - include/linux/bootmem.h | 2 include/linux/mfd/wm8994/pdata.h | 2 include/linux/pm_runtime.h | 3 include/linux/sched.h | 2 include/media/saa7146.h | 2 include/net/af_unix.h | 2 include/net/sock.h | 4 include/xen/interface/io/ring.h | 11 + kernel/exit.c | 8 + kernel/fork.c | 1 kernel/power/user.c | 2 kernel/printk.c | 4 kernel/sched.c | 156 ++++++++++++++++++++++--- kernel/timer.c | 8 + kernel/trace/trace.c | 10 + kernel/user.c | 1 kernel/watchdog.c | 3 mm/memcontrol.c | 19 +-- mm/mmap.c | 16 +- net/ax25/af_ax25.c | 2 net/bridge/br_multicast.c | 2 net/core/dst.c | 1 net/core/filter.c | 19 --- net/core/timestamping.c | 6 net/econet/af_econet.c | 12 + net/ipv4/tcp.c | 2 net/ipv4/tcp_ipv4.c | 8 - net/ipv4/tcp_output.c | 42 +++--- net/l2tp/l2tp_ip.c | 6 net/llc/af_llc.c | 5 net/mac80211/rx.c | 5 net/mac80211/tx.c | 21 ++- net/packet/af_packet.c | 7 - net/sched/cls_cgroup.c | 2 net/sunrpc/svc_xprt.c | 9 + net/unix/af_unix.c | 37 +++++ net/unix/garbage.c | 9 + net/x25/x25_link.c | 1 security/integrity/ima/ima_policy.c | 2 sound/oss/soundcard.c | 4 sound/pci/hda/hda_eld.c | 20 +-- sound/pci/hda/hda_intel.c | 2 sound/pci/hda/patch_conexant.c | 4 sound/pci/hda/patch_hdmi.c | 1 sound/pci/hda/patch_realtek.c | 1 sound/soc/codecs/wm8580.c | 2 sound/soc/codecs/wm8904.c | 3 sound/soc/codecs/wm8955.c | 3 sound/soc/codecs/wm8960.c | 3 sound/soc/codecs/wm_hubs.c | 2 184 files changed, 1382 insertions(+), 1023 deletions(-)
Ahmed S. Darwish (1):
RAMOOPS: Don't overflow over non-allocated regions
Alex Deucher (6):
drm/radeon/kms: don't apply 7xx HDP flush workaround on AGP drm/kms: remove spaces from connector names (v2) drm/radeon/kms: fix vram base calculation on rs780/rs880 drm/radeon/kms/evergreen: reset the grbm blocks at resume and init drm/radeon/kms: fix evergreen asic reset drm/radeon/kms: reorder display resume to avoid problems
Alexey Starikovskiy (1):
ACPI: EC: Add another dmi match entry for MSI hardware
Andre Przywara (1):
KVM: enlarge number of possible CPUID leaves
Andreas Herrmann (1):
x86, amd: Fix panic on AMD CPU family 0x15
Andrej Ota (1):
pppoe.c: Fix kernel panic caused by __pppoe_xmit
Andres Salomon (2):
cs5535-gpio: don't apply errata #36 to edge detect GPIOs
cs5535-gpio: handle GPIO regs where higher (clear) bits are set
Andrew Vasquez (1):
qla2xxx: Correct issue where NPIV-config data was not being allocated for 82xx parts.
Andy Lutomirski (1):
nouveau: Acknowledge HPD irq in handler, not bottom half
Anssi Hannula (2):
ALSA: hda - Do not wrongly restrict min_channels based on ELD
ALSA: hda - Always allow basic audio irrespective of ELD info
Apollon Oikonomopoulos (1):
x25: decrement netdev reference counts on unload
Baruch Siach (1):
mx2_camera: fix pixel clock polarity configuration
Ben Hutchings (2):
tehuti: Firmware filename is tehuti/bdx.bin
watchdog: Improve initialisation error message and documentation
Bob Moore (1):
ACPICA: Fix Scope() op in module level code
Borislav Petkov (2):
EDAC: Fix workqueue-related crashes
amd64_edac: Fix interleaving check
Changli Gao (1):
ifb: goto resched directly if error happens and dp->tq isn't empty
Chris Metcalf (1):
arch/tile: handle CLONE_SETTLS in copy_thread(), not user space
Christian Lamparter (1):
p54usb: add 5 more USBIDs
Chuck Lever (1):
NFS: Fix panic after nfs_umount()
Dan Carpenter (1):
IB/uverbs: Handle large number of entries in poll CQ
Dan Rosenberg (1):
sound: Prevent buffer overflow in OSS load_mixer_volumes
Daniel Hellstrom (1):
SPARC/LEON: removed constant timer initialization as if HZ=100, now it reflects the value of HZ
Daniel T Chen (3):
ALSA: hda: Use position_fix=1 for Acer Aspire 5538 to enable capture on internal mic
ALSA: hda: Use model=lg quirk for LG P1 Express to enable playback and capture
ALSA: hda: Use LPIB quirk for Dell Inspiron m101z/1120
David Flynn (1):
drm/i915/dp: Fix I2C/EDID handling with active DisplayPort to DVI converter
David Henningsson (1):
ALSA: HDA: Quirk for Dell Vostro 320 to make microphone work
David Kilroy (3):
orinoco: fix TKIP countermeasure behaviour
orinoco: clear countermeasure setting on commit
orinoco: initialise priv->hw before assigning the interrupt
David S. Miller (13):
sparc64: Delete prom_puts() unused.
sparc: Remove prom_pathtoinode()
sparc: Kill prom devops_{32,64}.c
sparc64: Unexport prom_service_exists().
sparc64: Delete prom_setcallback().
sparc: Do not export prom_nb{get,put}char().
sparc: Pass buffer pointer all the way down to prom_{get,put}char().
sparc: Delete prom_*getchar().
sparc: Write to prom console using indirect buffer.
tcp: Don't change unlocked socket state in tcp_v4_err().
tcp: Increase TCP_MAXSEG socket option minimum.
tcp: Make TCP_MAXSEG minimum more correct.
econet: Fix crash in aun_incoming().
David Stevens (1):
bridge: fix IPv6 queries for bridge multicast snooping
Dmitry Artamonow (1):
ASoC: fix deemphasis control in wm8904/55/60 codecs
Eduardo Costa (1):
p54usb: New USB ID for Gemtek WUBI-100GW
Eric Anholt (2):
drm/i915: Always set the DP transcoder config to 8BPC. drm/i915, intel_ips: When i915 loads after IPS, make IPS relink to i915.
Eric Dumazet (8):
llc: fix a device refcount imbalance
tcp: avoid a possible divide by zero
tcp: protect sysctl_tcp_cookie_size reads
af_unix: limit unix_tot_inflight
af_unix: limit recursion level
filter: fix sk_filter rcu handling
net/dst: dst_dev_event() called after other notifiers
net: fix skb_defer_rx_timestamp()
Eric Paris (1):
inotify: stop kernel memory leak on file creation failure
Felix Fietkau (1):
ath9k_hw: fix endian issues with CTLs on AR9003
Florian Faber (1):
USB: ftdi_sio: Add D.O.Tec PID
Florian Fainelli (2):
gpio: Fix null pointer dereference while accessing rdc321x platform_data
watchdog: Fix null pointer dereference while accessing rdc321x platform_data
Gabriele Gorla (2):
hwmon: (adm1026) Allow 1 as a valid divider value
hwmon: (adm1026) Fix setting fan_div
Greg Kroah-Hartman (2):
Revert "USB: gadget: Allow function access to device ID data during bind()" Linux 2.6.36.3
H. Peter Anvin (2):
x86, hotplug: Use mwait to offline a processor, fix the legacy case x86, gcc-4.6: Use gcc -m options when building vdso
Heiko Carstens (3):
nohz: Fix printk_needs_cpu() return value on offline cpus
nohz: Fix get_next_timer_interrupt() vs cpu hotplug
printk: Fix wake_up_klogd() vs cpu hotplug
Helmut Schaa (1):
mac80211: Fix BUG in pskb_expand_head when transmitting shared skbs
Herbert Xu (1):
cls_cgroup: Fix crash on module unload
Hillf Danton (2):
bonding: Fix slave selection bug.
fix freeing user_struct in user cache
Ivo van Doorn (1):
rt2x00: Fix max TX power settings
Jean-Francois Moine (2):
gspca - sonixj: Set the flag for some devices gspca - sonixj: Add a flag in the driver_info table
Jeremy Fitzhardinge (1):
xen: Provide a variant of __RING_SIZE() that is an integer constant expression
Jesper Juhl (1):
x86/microcode: Fix double vfree() and remove redundant pointer checks before vfree()
Joe Jin (1):
driver/net/benet: fix be_cmd_multicast_set() memcpy bug
Joerg Roedel (1):
KVM: SVM: Do not report xsave in supported cpuid
Johannes Berg (1):
mac80211: fix mesh forwarding
KAMEZAWA Hiroyuki (1):
memcg: fix wrong VM_BUG_ON() in try_charge()'s mm->owner check
Ken Mills (2):
n_gsm: Fix message length handling when building header
n_gsm: gsm_data_alloc buffer allocation could fail and it is not being checked
Kenji Kaneshige (2):
x86: Enable the intr-remap fault handling after local APIC setup x86, vt-d: Fix the vt-d fault handling irq migration in the x2apic mode
Lars-Peter Clausen (1):
MIPS: jz4740: qi_lb60: Fix gpio for the 6th row of the keyboard matrix
Manoj Iyer (1):
ALSA: hda - Enable jack sense for Thinkpad Edge 11
Mariusz Kozlowski (1):
net: Fix header size check for GSO case in recvmsg (af_packet)
Mark Brown (2):
mfd: Support additional parent IDs for wm831x
mfd: Supply IRQ base for WM832x devices
Martin K. Petersen (1):
block: Deprecate QUEUE_FLAG_CLUSTER and use queue_limits instead
Matteo Croce (1):
ath9k: fix bug in tx power
Mauro Carvalho Chehab (1):
Don't export format_by_forcc on two different drivers
Michal Marek (1):
l2tp: Fix modalias of l2tp_ip
Mike Galbraith (1):
Sched: fix skip_clock_update optimization
Mike Hernandez (1):
qla2xxx: Populate Command Type 6 LUN field properly.
Miklos Szeredi (2):
fuse: verify ioctl retries
fuse: fix ioctl when server is 32bit
Mimi Zohar (1):
ima: fix add LSM rule bug
Nandita Dukkipati (1):
tcp: Bug fix in initialization of receive window.
Neil Brown (1):
nfsd: Fix possible BUG_ON firing in set_change_info
NeilBrown (3):
sunrpc: prevent use-after-free on clearing XPT_BUSY
md: fix bug with re-adding of partially recovered device.
md: protect against NULL reference when waiting to start a raid10.
Nelson Elhage (1):
econet: Do the correct cleanup after an unprivileged SIOCSIFADDR.
Nicolas Ferre (1):
mmc: atmel-mci: fix multiblock SDIO transfers
Oleg Nesterov (1):
posix-cpu-timers: workaround to suppress the problems with mt exec
Peter Zijlstra (1):
sched: Cure more NO_HZ load average woes
Rafael J. Wysocki (1):
PM / Runtime: Fix pm_runtime_suspended()
Rajkumar Manoharan (1):
ath9k: Disable SWBA interrupt on remove_interface
Robert Richter (1):
arch/x86/oprofile/op_model_amd.c: Perform initialisation on a single CPU
Saeed Bishara (1):
mv_xor: fix race in tasklet function
Sarah Sharp (1):
xhci: Fix issue with port array setup and buggy hosts.
Senthil Balasubramanian (1):
ath9k: Fix STA disconnect issue due to received MIC failed bcast frames
Sergey Vlasov (1):
NFS: Fix fcntl F_GETLK not reporting some conflicts
Seungwhan Youn (1):
ASoC: WM8580: Fix R8 initial value
Shan Wei (1):
8139cp: fix checksum broken
Sheng Yang (1):
KVM: Fix OSXSAVE after migration
Slava Pestov (1):
tracing: Fix panic when lseek() called on "trace" opened for writing
Stefan Richter (2):
firewire: ohci: fix regression with VIA VT6315, disable MSI
firewire: ohci: fix regression with Agere FW643 rev 06, disable MSI
Suresh Siddha (4):
bootmem: Add alloc_bootmem_align()
x86, xsave: Use alloc_bootmem_align() instead of alloc_bootmem() x86, vt-d: Handle previous faults after enabling fault handling x86, vt-d: Quirk for masking vtd spec errors to platform error handling logic
Takashi Iwai (2):
PM / Hibernate: Fix PM_POST_* notification with user-space suspend
mmc: Fix re-probing with PM_POST_RESTORE notification
Tavis Ormandy (1):
install_special_mapping skips security_file_mmap check.
Tejun Heo (1):
libata-sff: fix HSM_ST_ERR handling in __ata_sff_port_intr()
Thomas Sailer (1):
USB: misc: uss720.c: add another vendor/product ID
Uk Kim (2):
ASoC: Fix swap of left and right channels for WM8993/4 speaker boost gain
ASoC: Fix off by one error in WM8994 EQ register bank size
Valentine Barshak (1):
ARM: 6535/1: V6 MPCore v6_dma_inv_range and v6_dma_flush_range RWFO fix
Vasanthakumar Thiagarajan (1):
ath9k: Fix bug in reading input gpio state for ar9003
Vasiliy Kulikov (2):
net: ax25: fix information leak to userland
net: packet: fix information leak to userland
Vitaly Kuznetsov (1):
USB: usb-storage: unusual_devs entry for the Samsung YP-CP3
Wolfram Sang (1):
rtc: rs5c372: fix buffer size
Yan Li (1):
Input: synaptics - fix handling of 2-button ClickPads
Yauhen Kharuzhy (1):
mmc: at91_mci: fix multiblock SDIO transfers
françois romieu (1):
r8169: fix sleeping while holding spinlock.
Documentation/kernel-parameters.txt +1 -1
@@ -1745,7 +1745,7 @@ and is between 256 and 4096 characters. It is defined in the file nousb [USB] Disable the USB subsystem - nowatchdog [KNL] Disable the lockup detector. + nowatchdog [KNL] Disable the lockup detector (NMI watchdog). nowb [ARM]
Documentation/power/runtime_pm.txt +2 -2
@@ -336,8 +336,8 @@ drivers/base/power/runtime.c and include/linux/pm_runtime.h: zero) bool pm_runtime_suspended(struct device *dev); - - return true if the device's runtime PM status is 'suspended', or false - otherwise + - return true if the device's runtime PM status is 'suspended' and its + 'power.disable_depth' field is equal to zero, or false otherwise void pm_runtime_allow(struct device *dev); - set the power.runtime_auto flag for the device and decrease its usage
Makefile +1 -1
@@ -1,7 +1,7 @@ VERSION = 2 PATCHLEVEL = 6 SUBLEVEL = 36 -EXTRAVERSION = .2 +EXTRAVERSION = .3 NAME = Flesh-Eating Bats with Fangs # *DOCUMENTATION*
arch/arm/mach-at91/include/mach/at91_mci.h +2 -0
@@ -74,6 +74,8 @@#define AT91_MCI_TRTYP_BLOCK (0 << 19)#define AT91_MCI_TRTYP_MULTIPLE (1 << 19)#define AT91_MCI_TRTYP_STREAM (2 << 19) +#define AT91_MCI_TRTYP_SDIO_BYTE (4 << 19) +#define AT91_MCI_TRTYP_SDIO_BLOCK (5 << 19)#define AT91_MCI_BLKR 0x18/* Block Register */ #define AT91_MCI_BLKR_BCNT (n) ((0xffff & (n)) << 0)/* Block count */
arch/arm/mm/cache-v6.S +20 -8
@@ -196,6 +196,10 @@ ENTRY(v6_flush_kern_dcache_area) * - end - virtual end address of region */ v6_dma_inv_range: +#ifdef CONFIG_DMA_CACHE_RWFO + ldrb r2, [r0] @ read for ownership + strb r2, [r0] @ write for ownership +#endif tst r0, #D_CACHE_LINE_SIZE - 1 bic r0, r0, #D_CACHE_LINE_SIZE - 1 #ifdef HARVARD_CACHE
@@ -204,6 +208,10 @@ v6_dma_inv_range: mcrne p15, 0, r0, c7, c11, 1 @ clean unified line #endif tst r1, #D_CACHE_LINE_SIZE - 1 +#ifdef CONFIG_DMA_CACHE_RWFO + ldrneb r2, [r1, #-1] @ read for ownership + strneb r2, [r1, #-1] @ write for ownership +#endif bic r1, r1, #D_CACHE_LINE_SIZE - 1 #ifdef HARVARD_CACHE mcrne p15, 0, r1, c7, c14, 1 @ clean & invalidate D line
@@ -211,10 +219,6 @@ v6_dma_inv_range: mcrne p15, 0, r1, c7, c15, 1 @ clean & invalidate unified line #endif 1: -#ifdef CONFIG_DMA_CACHE_RWFO - ldr r2, [r0] @ read for ownership - str r2, [r0] @ write for ownership -#endif #ifdef HARVARD_CACHE mcr p15, 0, r0, c7, c6, 1 @ invalidate D line #else
@@ -222,6 +226,10 @@ v6_dma_inv_range: #endif add r0, r0, #D_CACHE_LINE_SIZE cmp r0, r1 +#ifdef CONFIG_DMA_CACHE_RWFO + ldrlo r2, [r0] @ read for ownership + strlo r2, [r0] @ write for ownership +#endif blo 1b mov r0, #0 mcr p15, 0, r0, c7, c10, 4 @ drain write buffer
@@ -256,12 +264,12 @@ v6_dma_clean_range: * - end - virtual end address of region */ ENTRY(v6_dma_flush_range) - bic r0, r0, #D_CACHE_LINE_SIZE - 1 -1: #ifdef CONFIG_DMA_CACHE_RWFO - ldr r2, [r0] @ read for ownership - str r2, [r0] @ write for ownership + ldrb r2, [r0] @ read for ownership + strb r2, [r0] @ write for ownership #endif + bic r0, r0, #D_CACHE_LINE_SIZE - 1 +1: #ifdef HARVARD_CACHE mcr p15, 0, r0, c7, c14, 1 @ clean & invalidate D line #else
@@ -269,6 +277,10 @@ ENTRY(v6_dma_flush_range) #endif add r0, r0, #D_CACHE_LINE_SIZE cmp r0, r1 +#ifdef CONFIG_DMA_CACHE_RWFO + ldrlob r2, [r0] @ read for ownership + strlob r2, [r0] @ write for ownership +#endif blo 1b mov r0, #0 mcr p15, 0, r0, c7, c10, 4 @ drain write buffer
arch/mips/jz4740/board-qi_lb60.c +2 -2
@@ -5,7 +5,7 @@* * Copyright (c) 2009 Qi Hardware inc., * Author: Xiangfu Liu <[email protected]> -* Copyright 2010, Lars-Petrer Clausen <[email protected]> +* Copyright 2010, Lars-Peter Clausen <[email protected]> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 or later
@@ -235,7 +235,7 @@ static const unsigned int qi_lb60_keypad_rows[] = {QI_LB60_GPIO_KEYIN (3 ),QI_LB60_GPIO_KEYIN (4 ),QI_LB60_GPIO_KEYIN (5 ), -QI_LB60_GPIO_KEYIN (7 ), +QI_LB60_GPIO_KEYIN (6 ), QI_LB60_GPIO_KEYIN8, };
arch/sparc/include/asm/openprom.h +1 -1
@@ -37,7 +37,7 @@ struct linux_dev_v2_funcs {int (*v2_dev_open)(char *devpath);void (*v2_dev_close)(int d);int (*v2_dev_read)(int d,char *buf,int nbytes); -int (*v2_dev_write)(int d,char *buf,int nbytes); +int (*v2_dev_write)(int d,const char *buf,int nbytes);int (*v2_dev_seek)(int d,int hi,int lo);/* Never issued (multistage load support) */
arch/sparc/include/asm/oplib_32.h +2 -33
@@ -60,25 +60,6 @@ extern char *prom_getbootargs(void);extern char *prom_mapio (char *virt_hint,int io_space,unsigned int phys_addr,unsigned int num_bytes);extern void prom_unmapio (char *virt_addr,unsigned int num_bytes); -/* Device operations. */ - -/* Open the device described by the passed string. Note, that the format -* of the string is different on V0 vs. V2->higher proms. The caller must -* know what he/she is doing! Returns the device descriptor, an int. -*/ -extern int prom_devopen (char *device_string); - -/* Close a previously opened device described by the passed integer -* descriptor. -*/ -extern int prom_devclose (int device_handle); - -/* Do a seek operation on the device described by the passed integer -* descriptor. -*/ -extern void prom_seek (int device_handle,unsigned int seek_hival, -unsigned int seek_lowval); -/* Miscellaneous routines, don't really fit in any category per se. */ /* Reboot the machine with the command line passed. */
@@ -121,19 +102,8 @@ extern int prom_getrev(void);/* Get the prom firmware revision. */ extern int prom_getprev (void ); -/* Character operations to/from the console.... */ - -/* Non-blocking get character from console. */ -extern int prom_nbgetchar (void ); - -/* Non-blocking put character to console. */ -extern int prom_nbputchar (char character); - -/* Blocking get character from console. */ -extern char prom_getchar (void ); - -/* Blocking put character to console. */ -extern void prom_putchar (char character); +/* Write a buffer of characters to the console. */ +extern void prom_console_write_buf (const char *buf,int len);/* Prom's internal routines, don't use in kernel/boot code. */ extern void prom_printf (const char *fmt, ...);
@@ -238,7 +208,6 @@ extern int prom_node_has_property(int node, char *property);extern int prom_setprop (int node,const char *prop_name,char *prop_value,int value_size); -extern int prom_pathtoinode (char *path);extern int prom_inst2pkg (int );/* Dorking with Bus ranges... */
arch/sparc/include/asm/oplib_64.h +2 -44
71 lines not on this page · raw message
arch/sparc/kernel/leon_kernel.c +2 -2
@@ -114,7 +114,7 @@ void __init leon_init_timers(irq_handler_t counter_fn)if (leon3_gptimer_regs && leon3_irqctrl_regs) {LEON3_BYPASS_STORE_PA (&leon3_gptimer_regs->e[0 ].val,0 );LEON3_BYPASS_STORE_PA (&leon3_gptimer_regs->e[0 ].rld, - (((1000000 /100 ) -1 ))); + (((1000000 /HZ ) -1 )));LEON3_BYPASS_STORE_PA (&leon3_gptimer_regs->e[0 ].ctrl,0 );#ifdef CONFIG_SMP
@@ -128,7 +128,7 @@ void __init leon_init_timers(irq_handler_t counter_fn) }LEON3_BYPASS_STORE_PA (&leon3_gptimer_regs->e[1 ].val,0 ); -LEON3_BYPASS_STORE_PA (&leon3_gptimer_regs->e[1 ].rld, (((1000000 /100 ) -1 ))); +LEON3_BYPASS_STORE_PA (&leon3_gptimer_regs->e[1 ].rld, (((1000000 /HZ ) -1 )));LEON3_BYPASS_STORE_PA (&leon3_gptimer_regs->e[1 ].ctrl,0 );# endif
arch/sparc/prom/Makefile +0 -1
@@ -6,7 +6,6 @@ ccflags := -Werror lib-y := bootstr_$(BITS).o lib-$(CONFIG_SPARC32) += devmap.o -lib-y += devops_$(BITS).o lib-y += init_$(BITS).o lib-$(CONFIG_SPARC32) += memory.o lib-y += misc_$(BITS).o
arch/sparc/prom/console_32.c +12 -53
93 lines not on this page · raw message
arch/sparc/prom/console_64.c +15 -66
100 lines not on this page · raw message
arch/sparc/prom/devops_32.c deleted +0 -87
87 lines not on this page · raw message
arch/sparc/prom/devops_64.c deleted +0 -67
67 lines not on this page · raw message
arch/sparc/prom/misc_64.c +1 -15
@@ -18,7 +18,7 @@#include <asm/system.h> #include <asm/ldc.h> -int prom_service_exists (const char *service_name) +static int prom_service_exists (const char *service_name) {unsigned long args[5 ];
@@ -150,20 +150,6 @@ void prom_halt_power_off(void)prom_halt (); } -/* Set prom sync handler to call function 'funcp'. */ -void prom_setcallback (callback_func_t funcp) -{ -unsigned long args[5 ]; -if (!funcp) -return ; - args[0 ] = (unsigned long )"set-callback" ; - args[1 ] =1 ; - args[2 ] =1 ; - args[3 ] = (unsigned long ) funcp; - args[4 ] = (unsigned long )-1 ; -p1275_cmd_direct (args); -} -/* Get the idprom and stuff it into buffer 'idbuf'. Returns the * format type. 'num_bytes' is the number of bytes that your idbuf * has space for. Returns 0xff on error.
arch/sparc/prom/printf.c +29 -6
@@ -15,22 +15,45 @@#include <linux/kernel.h> #include <linux/compiler.h> +#include <linux/spinlock.h> #include <asm/openprom.h> #include <asm/oplib.h> +#define CONSOLE_WRITE_BUF_SIZE 1024 +static char ppbuf[1024 ]; +static char console_write_buf[CONSOLE_WRITE_BUF_SIZE ]; +static DEFINE_RAW_SPINLOCK (console_write_lock); void notrace prom_write(const char *buf, unsigned int n) { -char ch; +unsigned int dest_len; +unsigned long flags; +char *dest; + + dest = console_write_buf; +raw_spin_lock_irqsave (&console_write_lock, flags); -while (n !=0 ) { - --n; -if ((ch = *buf++) =='\n' ) -prom_putchar ('\r' ); -prom_putchar (ch); + dest_len =0 ; +while (n-- !=0 ) { +char ch = *buf++; +if (ch =='\n' ) { + *dest++ ='\r' ; + dest_len++; + } + *dest++ = ch; + dest_len++; +if (dest_len >=CONSOLE_WRITE_BUF_SIZE -1 ) { +prom_console_write_buf (console_write_buf, dest_len); + dest = console_write_buf; + dest_len =0 ; + } } +if (dest_len) +prom_console_write_buf (console_write_buf, dest_len); + +raw_spin_unlock_irqrestore (&console_write_lock, flags); } void notrace prom_printf(const char *fmt, ...)
arch/sparc/prom/tree_32.c +0 -15
@@ -341,18 +341,3 @@ int prom_inst2pkg(int inst)if (node ==-1 )return 0 ;return node; } - -/* Return 'node' assigned to a particular prom 'path' -* FIXME: Should work for v0 as well -*/ -int prom_pathtoinode (char *path) -{ -int node, inst; - - inst =prom_devopen (path); -if (inst ==-1 )return 0 ; - node =prom_inst2pkg (inst); -prom_devclose (inst); -if (node ==-1 )return 0 ; -return node; -}
arch/sparc/prom/tree_64.c +0 -18
@@ -374,24 +374,6 @@ inline int prom_inst2pkg(int inst)return node; } -/* Return 'node' assigned to a particular prom 'path' -* FIXME: Should work for v0 as well -*/ -int -prom_pathtoinode (const char *path) -{ -int node, inst; - - inst =prom_devopen (path); -if (inst ==0 ) -return 0 ; - node =prom_inst2pkg (inst); -prom_devclose (inst); -if (node ==-1 ) -return 0 ; -return node; -} -int prom_ihandle2path (int handle,char *buffer,int bufsize) {unsigned long args[7 ];
arch/tile/kernel/process.c +7 -0
@@ -212,6 +212,13 @@ int copy_thread(unsigned long clone_flags, unsigned long sp, childregs->sp = sp;/* override with new user stack pointer */ /* +* If CLONE_SETTLS is set, set "tp" in the new task to "r4", +* which is passed in as arg #5 to sys_clone(). +*/ +if (clone_flags &CLONE_SETTLS ) + childregs->tp = regs->regs[4 ]; + +/* * Copy the callee-saved registers from the passed pt_regs struct * into the context-switch callee-saved registers area. * We have to restore the callee-saved registers since we may
arch/x86/include/asm/kvm_host.h +1 -1
@@ -79,7 +79,7 @@#define KVM_NUM_MMU_PAGES (1 << KVM_MMU_HASH_SHIFT)#define KVM_MIN_FREE_MMU_PAGES 5#define KVM_REFILL_PAGES 25 -#define KVM_MAX_CPUID_ENTRIES 40 +#define KVM_MAX_CPUID_ENTRIES 80#define KVM_NR_FIXED_MTRR_REGION 88#define KVM_NR_VAR_MTRR 8
arch/x86/include/asm/processor.h +0 -23
@@ -764,29 +764,6 @@ extern unsigned long idle_halt;extern unsigned long idle_nomwait;extern bool c1e_detected; -/* -* on systems with caches, caches must be flashed as the absolute -* last instruction before going into a suspended halt. Otherwise, -* dirty data can linger in the cache and become stale on resume, -* leading to strange errors. -* -* perform a variety of operations to guarantee that the compiler -* will not reorder instructions. wbinvd itself is serializing -* so the processor will not reorder. -* -* Systems without cache can just go into halt. -*/ -static inline void wbinvd_halt (void ) -{ -mb (); -/* check for clflush to determine if wbinvd is legal */ -if (cpu_has_clflush) - asmvolatile ("cli; wbinvd; 1: hlt; jmp 1b" : : :"memory" ); -else -while (1 ) -halt (); -} -extern void enable_sep_cpu (void );extern int sysenter_setup (void );
arch/x86/kernel/apic/apic.c +8 -0
@@ -1340,6 +1340,14 @@ void __cpuinit end_local_APIC_setup(void)setup_apic_nmi_watchdog (NULL );apic_pm_activate (); + +/* +* Now that local APIC setup is completed for BP, configure the fault +* handling for interrupt remapping. +*/ +if (!smp_processor_id () && intr_remapping_enabled) +enable_drhd_fault_handling (); + }#ifdef CONFIG_X86_X2APIC
arch/x86/kernel/apic/io_apic.c +1 -0
@@ -3626,6 +3626,7 @@ static int dmar_msi_set_affinity(unsigned int irq, const struct cpumask *mask) msg.data |=MSI_DATA_VECTOR (cfg->vector); msg.address_lo &= ~MSI_ADDR_DEST_ID_MASK ; msg.address_lo |=MSI_ADDR_DEST_ID (dest); + msg.address_hi =MSI_ADDR_BASE_HI |MSI_ADDR_EXT_DEST_ID (dest);dmar_msi_write (irq, &msg);
arch/x86/kernel/apic/probe_64.c +0 -7
@@ -76,13 +76,6 @@ void __init default_setup_apic_routing(void)/* need to update phys_pkg_id */ apic->phys_pkg_id = apicid_phys_pkg_id; } - -/* -* Now that apic routing model is selected, configure the -* fault handling for intr remapping. -*/ -if (intr_remapping_enabled) -enable_drhd_fault_handling (); }/* Same for both flat and physical. */
arch/x86/kernel/cpu/amd.c +1 -2
@@ -305,8 +305,7 @@ static void __cpuinit amd_detect_cmp(struct cpuinfo_x86 *c)/* use socket ID also for last level cache */ per_cpu (cpu_llc_id, cpu) = c->phys_proc_id;/* fixup topology information on multi-node processors */ -if ((c->x86 ==0x10 ) && (c->x86_model ==9 )) -amd_fixup_dcm (c); +amd_fixup_dcm (c);#endif }
arch/x86/kernel/microcode_intel.c +5 -11
@@ -364,8 +364,7 @@ static enum ucode_state generic_load_microcode(int cpu, void *data, size_t size,/* For performance reasons, reuse mc area when possible */ if (!mc || mc_size > curr_mc_size) { -if (mc) -vfree (mc); +vfree (mc); mc =vmalloc (mc_size);if (!mc)break ;
@@ -374,13 +373,11 @@ static enum ucode_state generic_load_microcode(int cpu, void *data, size_t size,if (get_ucode_data (mc, ucode_ptr, mc_size) ||microcode_sanity_check (mc) <0 ) { -vfree (mc);break ; }if (get_matching_microcode (&uci->cpu_sig, mc, new_rev)) { -if (new_mc) -vfree (new_mc); +vfree (new_mc); new_rev = mc_header.rev; new_mc = mc; mc =NULL ;/* trigger new vmalloc */
@@ -390,12 +387,10 @@ static enum ucode_state generic_load_microcode(int cpu, void *data, size_t size, leftover -= mc_size; } -if (mc) -vfree (mc); +vfree (mc);if (leftover) { -if (new_mc) -vfree (new_mc); +vfree (new_mc); state =UCODE_ERROR ; goto out; }
@@ -405,8 +400,7 @@ static enum ucode_state generic_load_microcode(int cpu, void *data, size_t size, goto out; } -if (uci->mc) -vfree (uci->mc); +vfree (uci->mc); uci->mc = (struct microcode_intel *)new_mc; pr_debug("CPU%d found a matching microcode update with version 0x%x (current=0x%x)\n",
arch/x86/kernel/smpboot.c +84 -1
95 lines not on this page · raw message
arch/x86/kernel/xsave.c +2 -1
@@ -394,7 +394,8 @@ static void __init setup_xstate_init(void)* Setup init_xstate_buf to represent the init state of * all the features managed by the xsave */ - init_xstate_buf =alloc_bootmem (xstate_size); + init_xstate_buf =alloc_bootmem_align (xstate_size, + __alignof__(struct xsave_struct )); init_xstate_buf->i387.mxcsr =MXCSR_DEFAULT ;clts ();
arch/x86/kvm/svm.c +4 -0
@@ -3383,6 +3383,10 @@ static void svm_cpuid_update(struct kvm_vcpu *vcpu)static void svm_set_supported_cpuid (u32 func,struct kvm_cpuid_entry2 *entry) {switch (func) { +case 0x00000001 : +/* Mask out xsave bit as long as it is not supported by SVM */ + entry->ecx &= ~(bit (X86_FEATURE_XSAVE )); +break ;case 0x80000001 :if (nested) entry->ecx |= (1 <<2 );/* Set SVM bit */
arch/x86/kvm/vmx.c +0 -5
@@ -4248,11 +4248,6 @@ static int vmx_get_lpage_level(void)return PT_PDPE_LEVEL ; } -static inline u32 bit (int bitno) -{ -return 1 << (bitno &31 ); -} -static void vmx_cpuid_update (struct kvm_vcpu *vcpu) {struct kvm_cpuid_entry2 *best;
arch/x86/kvm/x86.c +2 -5
@@ -153,11 +153,6 @@ struct kvm_stats_debugfs_item debugfs_entries[] = {u64 __read_mostly host_xcr0; -static inline u32 bit (int bitno) -{ -return 1 << (bitno &31 ); -} -static void kvm_on_user_return (struct user_return_notifier *urn) {unsigned slot;
@@ -5117,6 +5112,8 @@ int kvm_arch_vcpu_ioctl_set_sregs(struct kvm_vcpu *vcpu, mmu_reset_needed |=kvm_read_cr4 (vcpu) != sregs->cr4; kvm_x86_ops->set_cr4 (vcpu, sregs->cr4); +if (sregs->cr4 &X86_CR4_OSXSAVE ) +update_cpuid (vcpu);if (!is_long_mode (vcpu) &&is_pae (vcpu)) {load_pdptrs (vcpu, vcpu->arch.cr3); mmu_reset_needed =1 ;
arch/x86/kvm/x86.h +5 -0
@@ -65,6 +65,11 @@ static inline int is_paging(struct kvm_vcpu *vcpu)return kvm_read_cr0_bits (vcpu,X86_CR0_PG ); } +static inline u32 bit (int bitno) +{ +return 1 << (bitno &31 ); +} +void kvm_before_handle_nmi (struct kvm_vcpu *vcpu);void kvm_after_handle_nmi (struct kvm_vcpu *vcpu);
arch/x86/oprofile/op_model_amd.c +16 -8
@@ -484,21 +484,29 @@ static int __init_ibs_nmi(void)return 0 ; } -/* initialize the APIC for the IBS interrupts if available */ +/* +* check and reserve APIC extended interrupt LVT offset for IBS if +* available +* +* init_ibs() preforms implicitly cpu-local operations, so pin this +* thread to its current CPU +*/ +static void init_ibs (void ) { - ibs_caps =get_ibs_caps (); +preempt_disable (); + ibs_caps =get_ibs_caps ();if (!ibs_caps) -return ; + goto out; -if (__init_ibs_nmi ()) { +if (__init_ibs_nmi () <0 ) ibs_caps =0 ; -return ; - } +else +printk (KERN_INFO "oprofile: AMD IBS detected (0x%08x)\n" , ibs_caps); -printk (KERN_INFO "oprofile: AMD IBS detected (0x%08x)\n" , - (unsigned )ibs_caps); +out: +preempt_enable (); }static int (*create_arch_files)(struct super_block *sb,struct dentry *root);
arch/x86/vdso/Makefile +2 -2
@@ -25,7 +25,7 @@ targets += vdso.so vdso.so.dbg vdso.lds $(vobjs-y) export CPPFLAGS_vdso.lds += -P -C -VDSO_LDFLAGS_vdso.lds = -m elf_x86_64 -Wl,-soname=linux-vdso.so.1 \ +VDSO_LDFLAGS_vdso.lds = -m64 -Wl,-soname=linux-vdso.so.1 \ -Wl,-z,max-page-size=4096 -Wl,-z,common-page-size=4096 $(obj)/vdso.o: $(src)/vdso.S $(obj)/vdso.so
@@ -69,7 +69,7 @@ vdso32.so-$(VDSO32-y) += sysenter vdso32-images = $(vdso32.so-y:%=vdso32-%.so) CPPFLAGS_vdso32.lds = $(CPPFLAGS_vdso.lds) -VDSO_LDFLAGS_vdso32.lds = -m elf_i386 -Wl,-soname=linux-gate.so.1 +VDSO_LDFLAGS_vdso32.lds = -m32 -Wl,-soname=linux-gate.so.1 # This makes sure the $(obj) subdirectory exists even though vdso32/ # is not a kbuild sub-make subdirectory.
block/blk-merge.c +3 -3
@@ -21,7 +21,7 @@ static unsigned int __blk_recalc_rq_segments(struct request_queue *q,return 0 ; fbio = bio; - cluster =test_bit (QUEUE_FLAG_CLUSTER , &q->queue_flags); + cluster =blk_queue_cluster (q); seg_size =0 ; nr_phys_segs =0 ;for_each_bio (bio) {
@@ -87,7 +87,7 @@ EXPORT_SYMBOL(blk_recount_segments);static int blk_phys_contig_segment (struct request_queue *q,struct bio *bio,struct bio *nxt) { -if (!test_bit (QUEUE_FLAG_CLUSTER , &q->queue_flags)) +if (!blk_queue_cluster (q))return 0 ; if (bio->bi_seg_back_size + nxt->bi_seg_front_size >
@@ -123,7 +123,7 @@ int blk_rq_map_sg(struct request_queue *q, struct request *rq,int nsegs, cluster; nsegs =0 ; - cluster =test_bit (QUEUE_FLAG_CLUSTER , &q->queue_flags); + cluster =blk_queue_cluster (q);/* * for each bio in rq
block/blk-settings.c +2 -23
@@ -125,7 +125,7 @@ void blk_set_default_limits(struct queue_limits *lim) lim->alignment_offset =0 ; lim->io_opt =0 ; lim->misaligned =0 ; - lim->no_cluster =0 ; + lim->cluster =1 ; }EXPORT_SYMBOL (blk_set_default_limits);
@@ -468,15 +468,6 @@ EXPORT_SYMBOL(blk_queue_io_opt);void blk_queue_stack_limits (struct request_queue *t,struct request_queue *b) {blk_stack_limits (&t->limits, &b->limits,0 ); - -if (!t->queue_lock) -WARN_ON_ONCE (1 ); -else if (!test_bit (QUEUE_FLAG_CLUSTER , &b->queue_flags)) { -unsigned long flags; -spin_lock_irqsave (t->queue_lock, flags); -queue_flag_clear (QUEUE_FLAG_CLUSTER , t); -spin_unlock_irqrestore (t->queue_lock, flags); - } }EXPORT_SYMBOL (blk_queue_stack_limits);
@@ -547,7 +538,7 @@ int blk_stack_limits(struct queue_limits *t, struct queue_limits *b, t->io_min =max (t->io_min, b->io_min); t->io_opt =lcm (t->io_opt, b->io_opt); - t->no_cluster |= b->no_cluster; + t->cluster &= b->cluster; t->discard_zeroes_data &= b->discard_zeroes_data;/* Physical block size a multiple of the logical block size? */
@@ -643,7 +634,6 @@ void disk_stack_limits(struct gendisk *disk, struct block_device *bdev, sector_t offset) {struct request_queue *t = disk->queue; -struct request_queue *b =bdev_get_queue (bdev);if (bdev_stack_limits (&t->limits, bdev, offset >>9 ) <0 ) {char top[BDEVNAME_SIZE ], bottom[BDEVNAME_SIZE ];
@@ -654,17 +644,6 @@ void disk_stack_limits(struct gendisk *disk, struct block_device *bdev,printk (KERN_NOTICE "%s: Warning: Device %s is misaligned\n" , top, bottom); } - -if (!t->queue_lock) -WARN_ON_ONCE (1 ); -else if (!test_bit (QUEUE_FLAG_CLUSTER , &b->queue_flags)) { -unsigned long flags; - -spin_lock_irqsave (t->queue_lock, flags); -if (!test_bit (QUEUE_FLAG_CLUSTER , &b->queue_flags)) -queue_flag_clear (QUEUE_FLAG_CLUSTER , t); -spin_unlock_irqrestore (t->queue_lock, flags); - } }EXPORT_SYMBOL (disk_stack_limits);
block/blk-sysfs.c +1 -1
@@ -114,7 +114,7 @@ static ssize_t queue_max_segments_show(struct request_queue *q, char *page)static ssize_t queue_max_segment_size_show (struct request_queue *q,char *page) { -if (test_bit (QUEUE_FLAG_CLUSTER , &q->queue_flags)) +if (blk_queue_cluster (q))return queue_var_show (queue_max_segment_size (q), (page));return queue_var_show (PAGE_CACHE_SIZE , (page));
drivers/acpi/acpica/dswexec.c +17 -2
@@ -300,10 +300,25 @@ acpi_ds_exec_begin_op(struct acpi_walk_state *walk_state,* we must enter this object into the namespace. The created * object is temporary and will be deleted upon completion of * the execution of this method. +* +* Note 10/2010: Except for the Scope() op. This opcode does +* not actually create a new object, it refers to an existing +* object. However, for Scope(), we want to indeed open a +* new scope. */ - status =acpi_ds_load2_begin_op (walk_state,NULL ); +if (op->common.aml_opcode !=AML_SCOPE_OP ) { + status = +acpi_ds_load2_begin_op (walk_state,NULL ); + }else { + status = +acpi_ds_scope_stack_push (op->named.node, + op->named.node-> + type, walk_state); +if (ACPI_FAILURE (status)) { +return_ACPI_STATUS (status); + } + } } -break ;case AML_CLASS_EXECUTE :
drivers/acpi/ec.c +3 -0
@@ -929,6 +929,9 @@ static struct dmi_system_id __initdata ec_dmi_table[] = { ec_flag_msi, "MSI hardware", { DMI_MATCH(DMI_CHASSIS_VENDOR, "MICRO-Star")}, NULL}, { + ec_flag_msi, "MSI hardware", { + DMI_MATCH(DMI_CHASSIS_VENDOR, "MICRO-STAR")}, NULL}, + { ec_validate_ecdt, "ASUS hardware", { DMI_MATCH(DMI_BIOS_VENDOR, "ASUS") }, NULL}, {},
drivers/ata/libata-sff.c +3 -4
@@ -1532,11 +1532,10 @@ static unsigned int __ata_sff_port_intr(struct ata_port *ap,if (!(qc->dev->flags &ATA_DFLAG_CDB_INTR ))return ata_sff_idle_irq (ap);break ; -case HSM_ST : -case HSM_ST_LAST : -break ; -default : +case HSM_ST_IDLE :return ata_sff_idle_irq (ap); +default : +break ; }/* check main status, clearing INTRQ if needed */
drivers/block/xen-blkfront.c +1 -1
@@ -71,7 +71,7 @@ struct blk_shadow {static const struct block_device_operations xlvbd_block_fops; -#define BLK_RING_SIZE __RING_SIZE((struct blkif_sring *)0, PAGE_SIZE) +#define BLK_RING_SIZE __CONST_RING_SIZE(blkif, PAGE_SIZE)/* * We have one of these per vbd, whether ide, scsi or 'other'. They
drivers/char/n_gsm.c +4 -2
@@ -716,8 +716,8 @@ static void __gsm_data_queue(struct gsm_dlci *dlci, struct gsm_msg *msg)if (msg->len <128 ) *--dp = (msg->len <<1 ) |EA ;else { - *--dp = (msg->len >>6 ) |EA ; - *--dp = (msg->len &127 ) <<1 ; + *--dp = (msg->len >>7 );/* bits 7 - 15 */ + *--dp = (msg->len &127 ) <<1 ;/* bits 0 - 6 */ } }
@@ -968,6 +968,8 @@ static void gsm_control_reply(struct gsm_mux *gsm, int cmd, u8 *data, {struct gsm_msg *msg; msg =gsm_data_alloc (gsm,0 , dlen +2 , gsm->ftype); +if (msg ==NULL ) +return ; msg->data[0 ] = (cmd &0xFE ) <<1 |EA ;/* Clear C/R */ msg->data[1 ] = (dlen <<1 ) |EA ;memcpy (msg->data +2 , data, dlen);
drivers/char/ramoops.c +7 -5
@@ -27,7 +27,6 @@#include <linux/ioport.h> #define RAMOOPS_KERNMSG_HDR "====" -#define RAMOOPS_HEADER_SIZE (5 + sizeof(struct timeval))#define RECORD_SIZE 4096
@@ -63,8 +62,8 @@ static void ramoops_do_dump(struct kmsg_dumper *dumper, struct ramoops_context, dump);unsigned long s1_start, s2_start;unsigned long l1_cpy, l2_cpy; -int res; -char *buf; +int res, hdr_size; +char *buf, *buf_orig;struct timeval timestamp;/* Only dump oopses if dump_oops is set */
@@ -72,6 +71,8 @@ static void ramoops_do_dump(struct kmsg_dumper *dumper,return ; buf = (char *)(cxt->virt_addr + (cxt->count *RECORD_SIZE )); + buf_orig = buf; +memset (buf,'\0' ,RECORD_SIZE ); res =sprintf (buf,"%s" ,RAMOOPS_KERNMSG_HDR ); buf += res;
@@ -79,8 +80,9 @@ static void ramoops_do_dump(struct kmsg_dumper *dumper, res =sprintf (buf,"%lu.%lu\n" , (long )timestamp.tv_sec, (long )timestamp.tv_usec); buf += res; - l2_cpy =min (l2, (unsigned long )(RECORD_SIZE -RAMOOPS_HEADER_SIZE )); - l1_cpy =min (l1, (unsigned long )(RECORD_SIZE -RAMOOPS_HEADER_SIZE ) - l2_cpy); + hdr_size = buf - buf_orig; + l2_cpy =min (l2, (unsigned long )(RECORD_SIZE - hdr_size)); + l1_cpy =min (l1, (unsigned long )(RECORD_SIZE - hdr_size) - l2_cpy); s2_start = l2 - l2_cpy; s1_start = l1 - l1_cpy;
drivers/dma/mv_xor.c +1 -1
@@ -449,7 +449,7 @@ mv_xor_slot_cleanup(struct mv_xor_chan *mv_chan)static void mv_xor_tasklet (unsigned long data) {struct mv_xor_chan *chan = (struct mv_xor_chan *) data; -__mv_xor_slot_cleanup (chan); +mv_xor_slot_cleanup (chan); } static struct mv_xor_desc_slot *
drivers/edac/amd64_edac.c +1 -1
@@ -1572,7 +1572,7 @@ static int f10_match_to_this_node(struct amd64_pvt *pvt, int dram_range,debugf1 (" HoleOffset=0x%x HoleValid=0x%x IntlvSel=0x%x\n" , hole_off, hole_valid, intlv_sel); -if (intlv_en || +if (intlv_en && (intlv_sel != ((sys_addr >>12 ) & intlv_en)))return -EINVAL ;
drivers/edac/edac_mc.c +6 -4
@@ -578,14 +578,16 @@ struct mem_ctl_info *edac_mc_del_mc(struct device *dev)return NULL ; } -/* marking MCI offline */ - mci->op_state =OP_OFFLINE ; -del_mc_from_global_list (mci);mutex_unlock (&mem_ctls_mutex); -/* flush workq processes and remove sysfs */ +/* flush workq processes */ edac_mc_workq_teardown (mci); + +/* marking MCI offline */ + mci->op_state =OP_OFFLINE ; + +/* remove from sysfs */ edac_remove_sysfs_mci_device (mci); edac_printk(KERN_INFO, EDAC_MC,
drivers/firewire/ohci.c +33 -14
66 lines not on this page · raw message
drivers/gpio/cs5535-gpio.c +15 -4
@@ -56,15 +56,26 @@ static struct cs5535_gpio_chip {* registers, see include/linux/cs5535.h. */ -static void errata_outl (u32 val,unsigned long addr) +static void errata_outl (struct cs5535_gpio_chip *chip,u32 val, +unsigned int reg) { +unsigned long addr = chip->base +0x80 + reg; +/* * According to the CS5536 errata (#36), after suspend * a write to the high bank GPIO register will clear all * non-selected bits; the recommended workaround is a * read-modify-write operation. +* +* Don't apply this errata to the edge status GPIOs, as writing +* to their lower bits will clear them. */ - val |=inl (addr); +if (reg !=GPIO_POSITIVE_EDGE_STS && reg !=GPIO_NEGATIVE_EDGE_STS ) { +if (val &0xffff ) + val |= (inl (addr) &0xffff );/* ignore the high bits */ +else + val |= (inl (addr) ^ (val >>16 )); + }outl (val, addr); }
@@ -76,7 +87,7 @@ static void __cs5535_gpio_set(struct cs5535_gpio_chip *chip, unsigned offset,outl (1 << offset, chip->base + reg); else/* high bank register */ - errata_outl(1 << (offset - 16), chip->base + 0x80 + reg); + errata_outl(chip, 1 << (offset - 16), reg); }void cs5535_gpio_set (unsigned offset,unsigned int reg)
@@ -98,7 +109,7 @@ static void __cs5535_gpio_clear(struct cs5535_gpio_chip *chip, unsigned offset,outl (1 << (offset +16 ), chip->base + reg); else /* high bank register */ - errata_outl(1 << offset, chip->base + 0x80 + reg); + errata_outl(chip, 1 << offset, reg); } void cs5535_gpio_clear(unsigned offset, unsigned int reg)
drivers/gpio/rdc321x-gpio.c +1 -1
@@ -135,7 +135,7 @@ static int __devinit rdc321x_gpio_probe(struct platform_device *pdev)struct rdc321x_gpio *rdc321x_gpio_dev;struct rdc321x_gpio_pdata *pdata; - pdata = pdev->dev.platform_data; + pdata =platform_get_drvdata (pdev);if (!pdata) {dev_err (&pdev->dev,"no platform data supplied\n" );return -ENODEV ;
drivers/gpu/drm/drm_crtc.c +5 -5
@@ -156,12 +156,12 @@ static struct drm_conn_prop_enum_list drm_connector_enum_list[] = { DRM_MODE_CONNECTOR_SVIDEO, "SVIDEO", 0 }, { DRM_MODE_CONNECTOR_LVDS, "LVDS", 0 }, { DRM_MODE_CONNECTOR_Component, "Component", 0 }, - { DRM_MODE_CONNECTOR_9PinDIN, "9-pin DIN", 0 }, - { DRM_MODE_CONNECTOR_DisplayPort, "DisplayPort", 0 }, - { DRM_MODE_CONNECTOR_HDMIA, "HDMI Type A", 0 }, - { DRM_MODE_CONNECTOR_HDMIB, "HDMI Type B", 0 }, + { DRM_MODE_CONNECTOR_9PinDIN, "DIN", 0 }, + { DRM_MODE_CONNECTOR_DisplayPort, "DP", 0 }, + { DRM_MODE_CONNECTOR_HDMIA, "HDMI-A", 0 }, + { DRM_MODE_CONNECTOR_HDMIB, "HDMI-B", 0 }, { DRM_MODE_CONNECTOR_TV, "TV", 0 }, - { DRM_MODE_CONNECTOR_eDP, "Embedded DisplayPort", 0 }, + { DRM_MODE_CONNECTOR_eDP, "eDP", 0 }, }; static struct drm_prop_enum_list drm_encoder_enum_list[] =
drivers/gpu/drm/i915/i915_dma.c +23 -0
@@ -34,6 +34,7 @@#include "i915_drm.h" #include "i915_drv.h" #include "i915_trace.h" +#include "../../../platform/x86/intel_ips.h" #include <linux/pci.h> #include <linux/vgaarb.h> #include <linux/acpi.h>
@@ -2047,6 +2048,26 @@ out_unlock:EXPORT_SYMBOL_GPL (i915_gpu_turbo_disable);/** +* Tells the intel_ips driver that the i915 driver is now loaded, if +* IPS got loaded first. +* +* This awkward dance is so that neither module has to depend on the +* other in order for IPS to do the appropriate communication of +* GPU turbo limits to i915. +*/ +static void +ips_ping_for_i915_load (void ) +{ +void (*link)(void ); + + link =symbol_get (ips_link_to_i915_driver); +if (link) { +link (); +symbol_put (ips_link_to_i915_driver); + } +} + +/** * i915_driver_load - setup chip and create an initial config * @dev: DRM device * @flags: startup flags
@@ -2234,6 +2255,8 @@ int i915_driver_load(struct drm_device *dev, unsigned long flags)/* XXX Prevent module unload due to memory corruption bugs. */ __module_get (THIS_MODULE ); +ips_ping_for_i915_load (); +return 0 ; out_workqueue_free:
drivers/gpu/drm/i915/i915_reg.h +1 -0
@@ -2953,6 +2953,7 @@#define TRANS_DP_10BPC (1<<9)#define TRANS_DP_6BPC (2<<9)#define TRANS_DP_12BPC (3<<9) +#define TRANS_DP_BPC_MASK (3<<9)#define TRANS_DP_VSYNC_ACTIVE_HIGH (1<<4)#define TRANS_DP_VSYNC_ACTIVE_LOW 0#define TRANS_DP_HSYNC_ACTIVE_HIGH (1<<3)
drivers/gpu/drm/i915/intel_display.c +3 -1
@@ -2044,9 +2044,11 @@ static void ironlake_crtc_dpms(struct drm_crtc *crtc, int mode) reg =I915_READ (trans_dp_ctl); reg &= ~(TRANS_DP_PORT_SEL_MASK | -TRANS_DP_SYNC_MASK ); +TRANS_DP_SYNC_MASK | +TRANS_DP_BPC_MASK ); reg |= (TRANS_DP_OUTPUT_ENABLE |TRANS_DP_ENH_FRAMING ); + reg |=TRANS_DP_8BPC ;if (crtc->mode.flags &DRM_MODE_FLAG_PHSYNC ) reg |=TRANS_DP_HSYNC_ACTIVE_HIGH ;
drivers/gpu/drm/i915/intel_dp.c +30 -7
@@ -425,6 +425,7 @@ intel_dp_i2c_aux_ch(struct i2c_adapter *adapter, int mode,uint16_t address = algo_data->address;uint8_t msg[5 ];uint8_t reply[2 ]; +unsigned retry;int msg_bytes;int reply_bytes;int ret;
@@ -459,14 +460,33 @@ intel_dp_i2c_aux_ch(struct i2c_adapter *adapter, int mode,break ; } -for (;;) { - ret =intel_dp_aux_ch (intel_dp, - msg, msg_bytes, - reply, reply_bytes); +for (retry =0 ; retry <5 ; retry++) { + ret =intel_dp_aux_ch (intel_dp, + msg, msg_bytes, + reply, reply_bytes);if (ret <0 ) {DRM_DEBUG_KMS ("aux_ch failed %d\n" , ret);return ret; } + +switch (reply[0 ] &AUX_NATIVE_REPLY_MASK ) { +case AUX_NATIVE_REPLY_ACK : +/* I2C-over-AUX Reply field is only valid +* when paired with AUX ACK. +*/ +break ; +case AUX_NATIVE_REPLY_NACK : +DRM_DEBUG_KMS ("aux_ch native nack\n" ); +return -EREMOTEIO ; +case AUX_NATIVE_REPLY_DEFER : +udelay (100 ); +continue ; +default : +DRM_ERROR ("aux_ch invalid native reply 0x%02x\n" , + reply[0 ]); +return -EREMOTEIO ; + } +switch (reply[0 ] &AUX_I2C_REPLY_MASK ) {case AUX_I2C_REPLY_ACK :if (mode ==MODE_I2C_READ ) {
@@ -474,17 +494,20 @@ intel_dp_i2c_aux_ch(struct i2c_adapter *adapter, int mode, }return reply_bytes -1 ;case AUX_I2C_REPLY_NACK : -DRM_DEBUG_KMS ("aux_ch nack\n" ); +DRM_DEBUG_KMS ("aux_i2c nack\n" );return -EREMOTEIO ;case AUX_I2C_REPLY_DEFER : -DRM_DEBUG_KMS ("aux_ch defer\n" ); +DRM_DEBUG_KMS ("aux_i2c defer\n" );udelay (100 );break ;default : -DRM_ERROR ("aux_ch invalid reply 0x%02x\n" , reply[0 ]); +DRM_ERROR ("aux_i2c invalid reply 0x%02x\n" , reply[0 ]);return -EREMOTEIO ; } } + +DRM_ERROR ("too many retries, giving up\n" ); +return -EREMOTEIO ; } static int
drivers/gpu/drm/nouveau/nouveau_drv.h +6 -0
@@ -531,6 +531,12 @@ struct drm_nouveau_private {struct work_struct irq_work;struct work_struct hpd_work; +struct { +spinlock_t lock; +uint32_t hpd0_bits; +uint32_t hpd1_bits; + } hpd_state; +struct list_head vbl_waiting;struct {
drivers/gpu/drm/nouveau/nouveau_irq.c +1 -0
@@ -52,6 +52,7 @@ nouveau_irq_preinstall(struct drm_device *dev)if (dev_priv->card_type >=NV_50 ) {INIT_WORK (&dev_priv->irq_work, nv50_display_irq_handler_bh);INIT_WORK (&dev_priv->hpd_work, nv50_display_irq_hotplug_bh); +spin_lock_init (&dev_priv->hpd_state.lock);INIT_LIST_HEAD (&dev_priv->vbl_waiting); } }
drivers/gpu/drm/nouveau/nv50_display.c +26 -9
@@ -1012,11 +1012,18 @@ nv50_display_irq_hotplug_bh(struct work_struct *work)struct drm_connector *connector;const uint32_t gpio_reg[4 ] = {0xe104 ,0xe108 ,0xe280 ,0xe284 };uint32_t unplug_mask, plug_mask, change_mask; -uint32_t hpd0, hpd1 =0 ; +uint32_t hpd0, hpd1; - hpd0 =nv_rd32 (dev,0xe054 ) &nv_rd32 (dev,0xe050 ); +spin_lock_irq (&dev_priv->hpd_state.lock); + hpd0 = dev_priv->hpd_state.hpd0_bits; + dev_priv->hpd_state.hpd0_bits =0 ; + hpd1 = dev_priv->hpd_state.hpd1_bits; + dev_priv->hpd_state.hpd1_bits =0 ; +spin_unlock_irq (&dev_priv->hpd_state.lock); + + hpd0 &=nv_rd32 (dev,0xe050 );if (dev_priv->chipset >=0x90 ) - hpd1 =nv_rd32 (dev,0xe074 ) &nv_rd32 (dev,0xe070 ); + hpd1 &=nv_rd32 (dev,0xe070 ); plug_mask = (hpd0 &0x0000ffff ) | (hpd1 <<16 ); unplug_mask = (hpd0 >>16 ) | (hpd1 &0xffff0000 );
@@ -1058,10 +1065,6 @@ nv50_display_irq_hotplug_bh(struct work_struct *work) helper->dpms (connector->encoder,DRM_MODE_DPMS_OFF ); } -nv_wr32 (dev,0xe054 ,nv_rd32 (dev,0xe054 )); -if (dev_priv->chipset >=0x90 ) -nv_wr32 (dev,0xe074 ,nv_rd32 (dev,0xe074 )); -drm_helper_hpd_irq_event (dev); }
@@ -1072,8 +1075,22 @@ nv50_display_irq_handler(struct drm_device *dev)uint32_t delayed =0 ;if (nv_rd32 (dev,NV50_PMC_INTR_0 ) &NV50_PMC_INTR_0_HOTPLUG ) { -if (!work_pending (&dev_priv->hpd_work)) -queue_work (dev_priv->wq, &dev_priv->hpd_work); +uint32_t hpd0_bits, hpd1_bits =0 ; + + hpd0_bits =nv_rd32 (dev,0xe054 ); +nv_wr32 (dev,0xe054 , hpd0_bits); + +if (dev_priv->chipset >=0x90 ) { + hpd1_bits =nv_rd32 (dev,0xe074 ); +nv_wr32 (dev,0xe074 , hpd1_bits); + } + +spin_lock (&dev_priv->hpd_state.lock); + dev_priv->hpd_state.hpd0_bits |= hpd0_bits; + dev_priv->hpd_state.hpd1_bits |= hpd1_bits; +spin_unlock (&dev_priv->hpd_state.lock); + +queue_work (dev_priv->wq, &dev_priv->hpd_work); }while (nv_rd32 (dev,NV50_PMC_INTR_0 ) &NV50_PMC_INTR_0_DISPLAY ) {
drivers/gpu/drm/radeon/atombios_crtc.c +2 -1
@@ -253,7 +253,8 @@ void atombios_crtc_dpms(struct drm_crtc *crtc, int mode)case DRM_MODE_DPMS_SUSPEND :case DRM_MODE_DPMS_OFF :drm_vblank_pre_modeset (dev, radeon_crtc->crtc_id); -atombios_blank_crtc (crtc,ATOM_ENABLE ); +if (radeon_crtc->enabled) +atombios_blank_crtc (crtc,ATOM_ENABLE );if (ASIC_IS_DCE3 (rdev))atombios_enable_crtc_memreq (crtc,ATOM_DISABLE );atombios_enable_crtc (crtc,ATOM_DISABLE );
drivers/gpu/drm/radeon/evergreen.c +10 -15
@@ -1423,7 +1423,6 @@ bool evergreen_gpu_is_lockup(struct radeon_device *rdev)static int evergreen_gpu_soft_reset (struct radeon_device *rdev) {struct evergreen_mc_save save; -u32 srbm_reset =0 ;u32 grbm_reset =0 ;dev_info (rdev->dev,"GPU softreset \n" );
@@ -1462,16 +1461,6 @@ static int evergreen_gpu_soft_reset(struct radeon_device *rdev)udelay (50 );WREG32 (GRBM_SOFT_RESET ,0 ); (void )RREG32 (GRBM_SOFT_RESET ); - -/* reset all the system blocks */ - srbm_reset =SRBM_SOFT_RESET_ALL_MASK ; - -dev_info (rdev->dev," SRBM_SOFT_RESET=0x%08X\n" , srbm_reset); -WREG32 (SRBM_SOFT_RESET , srbm_reset); - (void )RREG32 (SRBM_SOFT_RESET ); -udelay (50 ); -WREG32 (SRBM_SOFT_RESET ,0 ); - (void )RREG32 (SRBM_SOFT_RESET );/* Wait a little for things to settle down */ udelay (50 ); dev_info(rdev->dev, " GRBM_STATUS=0x%08X\n",
@@ -1482,10 +1471,6 @@ static int evergreen_gpu_soft_reset(struct radeon_device *rdev) RREG32(GRBM_STATUS_SE1));dev_info (rdev->dev," SRBM_STATUS=0x%08X\n" ,RREG32 (SRBM_STATUS )); -/* After reset we need to reinit the asic as GPU often endup in an -* incoherent state. -*/ -atom_asic_init (rdev->mode_info.atom_context);evergreen_mc_resume (rdev, &save);return 0 ; }
@@ -2097,6 +2082,11 @@ int evergreen_resume(struct radeon_device *rdev) {int r; +/* reset the asic, the gfx blocks are often in a bad state +* after the driver is unloaded or after a resume +*/ +if (radeon_asic_reset (rdev)) +dev_warn (rdev->dev,"GPU reset failed !\n" );/* Do not reset GPU before posting, on rv770 hw unlike on r500 hw, * posting will perform necessary task to bring back GPU into good * shape.
@@ -2193,6 +2183,11 @@ int evergreen_init(struct radeon_device *rdev) r =radeon_atombios_init (rdev);if (r)return r; +/* reset the asic, the gfx blocks are often in a bad state +* after the driver is unloaded or after a resume +*/ +if (radeon_asic_reset (rdev)) +dev_warn (rdev->dev,"GPU reset failed !\n" );/* Post card if necessary */ if (!evergreen_card_posted (rdev)) {if (!rdev->bios) {
drivers/gpu/drm/radeon/r600.c +12 -5
@@ -878,12 +878,15 @@ void r600_pcie_gart_tlb_flush(struct radeon_device *rdev)u32 tmp;/* flush hdp cache so updates hit vram */ -if ((rdev->family >=CHIP_RV770 ) && (rdev->family <=CHIP_RV740 )) { +if ((rdev->family >=CHIP_RV770 ) && (rdev->family <=CHIP_RV740 ) && + !(rdev->flags &RADEON_IS_AGP )) {void __iomem *ptr = (void *)rdev->gart.table.vram.ptr;u32 tmp;/* r7xx hw bug. write to HDP_DEBUG1 followed by fb read * rather than write to HDP_REG_COHERENCY_FLUSH_CNTL +* This seems to cause problems on some AGP cards. Just use the old +* method for them. */ WREG32 (HDP_DEBUG1 ,0 ); tmp =readl ((void __iomem *)ptr);
@@ -1195,8 +1198,10 @@ void r600_vram_gtt_location(struct radeon_device *rdev, struct radeon_mc *mc) mc->vram_end, mc->real_vram_size >> 20); }else {u64 base =0 ; -if (rdev->flags &RADEON_IS_IGP ) - base = (RREG32 (MC_VM_FB_LOCATION ) &0xFFFF ) <<24 ; +if (rdev->flags &RADEON_IS_IGP ) { + base =RREG32 (MC_VM_FB_LOCATION ) &0xFFFF ; + base <<=24 ; + }radeon_vram_location (rdev, &rdev->mc, base); rdev->mc.gtt_base_align =0 ;radeon_gtt_location (rdev, mc);
@@ -3525,10 +3530,12 @@ int r600_debugfs_mc_info_init(struct radeon_device *rdev)void r600_ioctl_wait_idle (struct radeon_device *rdev,struct radeon_bo *bo) {/* r7xx hw bug. write to HDP_DEBUG1 followed by fb read -* rather than write to HDP_REG_COHERENCY_FLUSH_CNTL +* rather than write to HDP_REG_COHERENCY_FLUSH_CNTL. +* This seems to cause problems on some AGP cards. Just use the old +* method for them. */ if ((rdev->family >=CHIP_RV770 ) && (rdev->family <=CHIP_RV740 ) && - rdev->vram_scratch.ptr) { + rdev->vram_scratch.ptr && !(rdev->flags &RADEON_IS_AGP )) {void __iomem *ptr = (void *)rdev->vram_scratch.ptr;u32 tmp;
drivers/gpu/drm/radeon/radeon_device.c +4 -5
@@ -829,11 +829,6 @@ int radeon_resume_kms(struct drm_device *dev)radeon_pm_resume (rdev);radeon_restore_bios_scratch_regs (rdev); -/* turn on display hw */ -list_for_each_entry (connector, &dev->mode_config.connector_list, head) { -drm_helper_connector_dpms (connector,DRM_MODE_DPMS_ON ); - } -radeon_fbdev_set_suspend (rdev,0 );release_console_sem ();
@@ -841,6 +836,10 @@ int radeon_resume_kms(struct drm_device *dev)radeon_hpd_init (rdev);/* blat the mode back in */ drm_helper_resume_force_mode (dev); +/* turn on display hw */ +list_for_each_entry (connector, &dev->mode_config.connector_list, head) { +drm_helper_connector_dpms (connector,DRM_MODE_DPMS_ON ); + }return 0 ; }
drivers/hwmon/adm1026.c +10 -10
@@ -916,27 +916,27 @@ static ssize_t set_fan_div(struct device *dev, struct device_attribute *attr,int nr = sensor_attr->index;struct i2c_client *client =to_i2c_client (dev);struct adm1026_data *data =i2c_get_clientdata (client); -int val, orig_div, new_div, shift; +int val, orig_div, new_div; val =simple_strtol (buf,NULL ,10 ); new_div =DIV_TO_REG (val); -if (new_div ==0 ) { -return -EINVAL ; - } +mutex_lock (&data->update_lock); orig_div = data->fan_div[nr]; data->fan_div[nr] =DIV_FROM_REG (new_div);if (nr <4 ) {/* 0 <= nr < 4 */ - shift =2 * nr;adm1026_write_value (client,ADM1026_REG_FAN_DIV_0_3 , - ((DIV_TO_REG (orig_div) & (~(0x03 << shift))) | - (new_div << shift))); + (DIV_TO_REG (data->fan_div[0 ]) <<0 ) | + (DIV_TO_REG (data->fan_div[1 ]) <<2 ) | + (DIV_TO_REG (data->fan_div[2 ]) <<4 ) | + (DIV_TO_REG (data->fan_div[3 ]) <<6 )); }else {/* 3 < nr < 8 */ - shift =2 * (nr -4 );adm1026_write_value (client,ADM1026_REG_FAN_DIV_4_7 , - ((DIV_TO_REG (orig_div) & (~(0x03 << (2 * shift)))) | - (new_div << shift))); + (DIV_TO_REG (data->fan_div[4 ]) <<0 ) | + (DIV_TO_REG (data->fan_div[5 ]) <<2 ) | + (DIV_TO_REG (data->fan_div[6 ]) <<4 ) | + (DIV_TO_REG (data->fan_div[7 ]) <<6 )); }if (data->fan_div[nr] != orig_div) {
drivers/infiniband/core/uverbs_cmd.c +56 -43
124 lines not on this page · raw message
drivers/input/mouse/synaptics.h +2 -1
@@ -51,7 +51,8 @@#define SYN_EXT_CAP_REQUESTS (c) (((c) & 0x700000) >> 20)#define SYN_CAP_MULTI_BUTTON_NO (ec) (((ec) & 0x00f000) >> 12)#define SYN_CAP_PRODUCT_ID (ec) (((ec) & 0xff0000) >> 16) -#define SYN_CAP_CLICKPAD (ex0c) ((ex0c) & 0x100100) +#define SYN_CAP_CLICKPAD (ex0c) ((ex0c) & 0x100000)/* 1-button ClickPad */ +#define SYN_CAP_CLICKPAD2BTN (ex0c) ((ex0c) & 0x000100)/* 2-button ClickPad */ #define SYN_CAP_MAX_DIMENSIONS (ex0c) ((ex0c) & 0x020000)/* synaptics modes query bits */
drivers/md/dm-table.c +0 -5
@@ -1136,11 +1136,6 @@ void dm_table_set_restrictions(struct dm_table *t, struct request_queue *q,*/ q->limits = *limits; -if (limits->no_cluster) -queue_flag_clear_unlocked (QUEUE_FLAG_CLUSTER , q); -else -queue_flag_set_unlocked (QUEUE_FLAG_CLUSTER , q); -if (!dm_table_supports_discards (t))queue_flag_clear_unlocked (QUEUE_FLAG_DISCARD , q);else
drivers/md/md.c +7 -8
@@ -4289,9 +4289,6 @@ static int md_alloc(dev_t dev, char *name) goto abort; mddev->queue->queuedata = mddev; -/* Can be unlocked because the queue is new: no concurrency */ -queue_flag_set_unlocked (QUEUE_FLAG_CLUSTER , mddev->queue); -blk_queue_make_request (mddev->queue, md_make_request); disk =alloc_disk (1 << shift);
@@ -5150,7 +5147,7 @@ static int add_new_disk(mddev_t * mddev, mdu_disk_info_t *info) PTR_ERR(rdev));return PTR_ERR (rdev); } -/* set save_raid_disk if appropriate */ +/* set saved_raid_disk if appropriate */ if (!mddev->persistent) {if (info->state & (1 <<MD_DISK_SYNC ) && info->raid_disk < mddev->raid_disks)
@@ -5160,7 +5157,10 @@ static int add_new_disk(mddev_t * mddev, mdu_disk_info_t *info) }else super_types[mddev->major_version].validate_super (mddev, rdev); - rdev->saved_raid_disk = rdev->raid_disk; +if (test_bit (In_sync, &rdev->flags)) + rdev->saved_raid_disk = rdev->raid_disk; +else + rdev->saved_raid_disk =-1 ;clear_bit (In_sync, &rdev->flags);/* just to be sure */ if (info->state & (1 <<MD_DISK_WRITEMOSTLY ))
@@ -6037,9 +6037,8 @@ static int md_thread(void * arg) || kthread_should_stop(), thread->timeout); -clear_bit (THREAD_WAKEUP , &thread->flags); - - thread->run (thread->mddev); +if (test_and_clear_bit (THREAD_WAKEUP , &thread->flags)) + thread->run (thread->mddev); }return 0 ;
drivers/md/raid10.c +1 -1
@@ -2396,13 +2396,13 @@ static int run(mddev_t *mddev)return 0 ; out_free_conf: +md_unregister_thread (mddev->thread);if (conf->r10bio_pool)mempool_destroy (conf->r10bio_pool);safe_put_page (conf->tmppage);kfree (conf->mirrors);kfree (conf); mddev->private =NULL ; -md_unregister_thread (mddev->thread); out:return -EIO ; }
drivers/media/common/saa7146_hlp.c +4 -4
@@ -558,7 +558,7 @@ static void saa7146_set_window(struct saa7146_dev *dev, int width, int height, estatic void saa7146_set_position (struct saa7146_dev *dev,int w_x,int w_y,int w_height,enum v4l2_field field,u32 pixelformat) {struct saa7146_vv *vv = dev->vv_data; -struct saa7146_format *sfmt =format_by_fourcc (dev, pixelformat); +struct saa7146_format *sfmt =saa7146_format_by_fourcc (dev, pixelformat);int b_depth = vv->ov_fmt->depth;int b_bpl = vv->ov_fb.fmt.bytesperline;
@@ -702,7 +702,7 @@ static int calculate_video_dma_grab_packed(struct saa7146_dev* dev, struct saa71struct saa7146_vv *vv = dev->vv_data;struct saa7146_video_dma vdma1; -struct saa7146_format *sfmt =format_by_fourcc (dev,buf->fmt->pixelformat); +struct saa7146_format *sfmt =saa7146_format_by_fourcc (dev,buf->fmt->pixelformat);int width = buf->fmt->width;int height = buf->fmt->height;
@@ -827,7 +827,7 @@ static int calculate_video_dma_grab_planar(struct saa7146_dev* dev, struct saa71struct saa7146_video_dma vdma2;struct saa7146_video_dma vdma3; -struct saa7146_format *sfmt =format_by_fourcc (dev,buf->fmt->pixelformat); +struct saa7146_format *sfmt =saa7146_format_by_fourcc (dev,buf->fmt->pixelformat);int width = buf->fmt->width;int height = buf->fmt->height;
@@ -994,7 +994,7 @@ static void program_capture_engine(struct saa7146_dev *dev, int planar)void saa7146_set_capture (struct saa7146_dev *dev,struct saa7146_buf *buf,struct saa7146_buf *next) { -struct saa7146_format *sfmt =format_by_fourcc (dev,buf->fmt->pixelformat); +struct saa7146_format *sfmt =saa7146_format_by_fourcc (dev,buf->fmt->pixelformat);struct saa7146_vv *vv = dev->vv_data;u32 vdma1_prot_addr;
drivers/media/common/saa7146_video.c +8 -8
@@ -84,7 +84,7 @@ static struct saa7146_format formats[] = {static int NUM_FORMATS =sizeof (formats)/sizeof (struct saa7146_format ); -struct saa7146_format *format_by_fourcc (struct saa7146_dev *dev,int fourcc) +struct saa7146_format *saa7146_format_by_fourcc (struct saa7146_dev *dev,int fourcc) {int i, j =NUM_FORMATS ;
@@ -266,7 +266,7 @@ static int saa7146_pgtable_build(struct saa7146_dev *dev, struct saa7146_buf *bustruct videobuf_dmabuf *dma=videobuf_to_dma (&buf->vb);struct scatterlist *list = dma->sglist;int length = dma->sglen; -struct saa7146_format *sfmt =format_by_fourcc (dev,buf->fmt->pixelformat); +struct saa7146_format *sfmt =saa7146_format_by_fourcc (dev,buf->fmt->pixelformat);DEB_EE (("dev:%p, buf:%p, sg_len:%d\n" ,dev,buf,length));
@@ -408,7 +408,7 @@ static int video_begin(struct saa7146_fh *fh) } } - fmt =format_by_fourcc (dev,fh->video_fmt.pixelformat); + fmt =saa7146_format_by_fourcc (dev,fh->video_fmt.pixelformat);/* we need to have a valid format set here */ BUG_ON (NULL == fmt);
@@ -460,7 +460,7 @@ static int video_end(struct saa7146_fh *fh, struct file *file)return -EBUSY ; } - fmt =format_by_fourcc (dev,fh->video_fmt.pixelformat); + fmt =saa7146_format_by_fourcc (dev,fh->video_fmt.pixelformat);/* we need to have a valid format set here */ BUG_ON (NULL == fmt);
@@ -536,7 +536,7 @@ static int vidioc_s_fbuf(struct file *file, void *fh, struct v4l2_framebuffer *freturn -EPERM ;/* check args */ - fmt =format_by_fourcc (dev, fb->fmt.pixelformat); + fmt =saa7146_format_by_fourcc (dev, fb->fmt.pixelformat);if (NULL == fmt)return -EINVAL ;
@@ -760,7 +760,7 @@ static int vidioc_try_fmt_vid_cap(struct file *file, void *fh, struct v4l2_formaDEB_EE (("V4L2_BUF_TYPE_VIDEO_CAPTURE: dev:%p, fh:%p\n" , dev, fh)); - fmt =format_by_fourcc (dev, f->fmt.pix.pixelformat); + fmt =saa7146_format_by_fourcc (dev, f->fmt.pix.pixelformat);if (NULL == fmt)return -EINVAL ;
@@ -1264,7 +1264,7 @@ static int buffer_prepare(struct videobuf_queue *q, buf->fmt = &fh->video_fmt; buf->vb.field = fh->video_fmt.field; - sfmt =format_by_fourcc (dev,buf->fmt->pixelformat); + sfmt =saa7146_format_by_fourcc (dev,buf->fmt->pixelformat);release_all_pagetables (dev, buf);if (0 !=IS_PLANAR (sfmt->trans)) {
@@ -1378,7 +1378,7 @@ static int video_open(struct saa7146_dev *dev, struct file *file) fh->video_fmt.pixelformat =V4L2_PIX_FMT_BGR24 ; fh->video_fmt.bytesperline =0 ; fh->video_fmt.field =V4L2_FIELD_ANY ; - sfmt =format_by_fourcc (dev,fh->video_fmt.pixelformat); + sfmt =saa7146_format_by_fourcc (dev,fh->video_fmt.pixelformat); fh->video_fmt.sizeimage = (fh->video_fmt.width * fh->video_fmt.height * sfmt->depth)/8 ; videobuf_queue_sg_init(&fh->video_q, &video_qops,
drivers/media/video/gspca/sonixj.c +13 -4
@@ -56,6 +56,7 @@ struct sd {u8 jpegqual;/* webcam quality */ u8 reg18; +u8 flags;s8 ag_cnt;#define AG_CNT_START 13
@@ -87,6 +88,9 @@ enum sensors { SENSOR_SP80708, }; +/* device flags */ +#define PDN_INV 1/* inverse pin S_PWR_DN / sn_xxx tables */ +/* V4L2 controls supported by the driver */ static int sd_setbrightness (struct gspca_dev *gspca_dev,__s32 val);static int sd_getbrightness (struct gspca_dev *gspca_dev,__s32 *val);
@@ -1777,7 +1781,8 @@ static int sd_config(struct gspca_dev *gspca_dev,struct cam *cam; sd->bridge = id->driver_info >>16 ; - sd->sensor = id->driver_info; + sd->sensor = id->driver_info >>8 ; + sd->flags = id->driver_info; cam = &gspca_dev->cam;if (sd->sensor ==SENSOR_ADCM1700 ) {
@@ -2984,14 +2989,18 @@ static const struct sd_desc sd_desc = {/* -- module initialisation -- */ #define BS (bridge, sensor) \ .driver_info = (BRIDGE_ ## bridge << 16) \ - | SENSOR_ ## sensor + | (SENSOR_ ## sensor << 8) +#define BSF (bridge, sensor, flags) \ + .driver_info = (BRIDGE_ ## bridge << 16) \ + | (SENSOR_ ## sensor << 8) \ + | (flags)static const __devinitdata struct usb_device_id device_table[] = { #if !defined CONFIG_USB_SN9C102 && !defined CONFIG_USB_SN9C102_MODULE {USB_DEVICE (0x0458 ,0x7025 ),BS (SN9C120 ,MI0360 )}, {USB_DEVICE (0x0458 ,0x702e ),BS (SN9C120 ,OV7660 )}, #endif - {USB_DEVICE (0x045e ,0x00f5 ),BS (SN9C105 ,OV7660 )}, - {USB_DEVICE (0x045e ,0x00f7 ),BS (SN9C105 ,OV7660 )}, + {USB_DEVICE (0x045e ,0x00f5 ),BSF (SN9C105 ,OV7660 ,PDN_INV )}, + {USB_DEVICE (0x045e ,0x00f7 ),BSF (SN9C105 ,OV7660 ,PDN_INV )}, {USB_DEVICE (0x0471 ,0x0327 ),BS (SN9C105 ,MI0360 )}, {USB_DEVICE (0x0471 ,0x0328 ),BS (SN9C105 ,MI0360 )}, {USB_DEVICE (0x0471 ,0x0330 ),BS (SN9C105 ,MI0360 )},
drivers/media/video/mx2_camera.c +0 -2
@@ -791,8 +791,6 @@ static int mx2_camera_set_bus_param(struct soc_camera_device *icd,if (common_flags &SOCAM_PCLK_SAMPLE_RISING ) csicr1 |=CSICR1_REDGE ; -if (common_flags &SOCAM_PCLK_SAMPLE_FALLING ) - csicr1 |=CSICR1_INV_PCLK ;if (common_flags &SOCAM_VSYNC_ACTIVE_HIGH ) csicr1 |=CSICR1_SOF_POL ;if (common_flags &SOCAM_HSYNC_ACTIVE_HIGH )
drivers/mfd/wm831x-core.c +6 -2
@@ -1464,7 +1464,11 @@ static int wm831x_device_init(struct wm831x *wm831x, unsigned long id, int irq)dev_err (wm831x->dev,"Failed to read parent ID: %d\n" , ret); goto err; } -if (ret !=0x6204 ) { +switch (ret) { +case 0x6204 : +case 0x6246 : +break ; +default :dev_err (wm831x->dev,"Device is not a WM831x: ID %x\n" , ret); ret = -EINVAL ; goto err;
@@ -1617,7 +1621,7 @@ static int wm831x_device_init(struct wm831x *wm831x, unsigned long id, int irq)case WM8321 : ret =mfd_add_devices (wm831x->dev,-1 , wm8320_devs,ARRAY_SIZE (wm8320_devs), -NULL ,0 ); +NULL , wm831x->irq_base);break ;default :
drivers/mmc/core/core.c +1 -0
@@ -1720,6 +1720,7 @@ int mmc_pm_notify(struct notifier_block *notify_block,case PM_POST_SUSPEND :case PM_POST_HIBERNATION : +case PM_POST_RESTORE :spin_lock_irqsave (&host->lock, flags); host->rescan_disable =0 ;
drivers/mmc/host/at91_mci.c +9 -4
@@ -69,6 +69,7 @@#include <linux/highmem.h> #include <linux/mmc/host.h> +#include <linux/mmc/sdio.h> #include <asm/io.h> #include <asm/irq.h>
@@ -493,10 +494,14 @@ static void at91_mci_send_command(struct at91mci_host *host, struct mmc_commandelse if (data->flags &MMC_DATA_WRITE ) cmdr |=AT91_MCI_TRCMD_START ; -if (data->flags &MMC_DATA_STREAM ) - cmdr |=AT91_MCI_TRTYP_STREAM ; -if (data->blocks >1 ) - cmdr |=AT91_MCI_TRTYP_MULTIPLE ; +if (cmd->opcode ==SD_IO_RW_EXTENDED ) { + cmdr |=AT91_MCI_TRTYP_SDIO_BLOCK ; + }else { +if (data->flags &MMC_DATA_STREAM ) + cmdr |=AT91_MCI_TRTYP_STREAM ; +if (data->blocks >1 ) + cmdr |=AT91_MCI_TRTYP_MULTIPLE ; + } }else { block_length =0 ;
drivers/mmc/host/atmel-mci.c +12 -6
@@ -26,6 +26,7 @@#include <linux/stat.h> #include <linux/mmc/host.h> +#include <linux/mmc/sdio.h> #include <mach/atmel-mci.h> #include <linux/atmel-mci.h>
@@ -532,12 +533,17 @@ static u32 atmci_prepare_command(struct mmc_host *mmc, data = cmd->data;if (data) { cmdr |=MCI_CMDR_START_XFER ; -if (data->flags &MMC_DATA_STREAM ) - cmdr |=MCI_CMDR_STREAM ; -else if (data->blocks >1 ) - cmdr |=MCI_CMDR_MULTI_BLOCK ; -else - cmdr |=MCI_CMDR_BLOCK ; + +if (cmd->opcode ==SD_IO_RW_EXTENDED ) { + cmdr |=MCI_CMDR_SDIO_BLOCK ; + }else { +if (data->flags &MMC_DATA_STREAM ) + cmdr |=MCI_CMDR_STREAM ; +else if (data->blocks >1 ) + cmdr |=MCI_CMDR_MULTI_BLOCK ; +else + cmdr |=MCI_CMDR_BLOCK ; + }if (data->flags &MMC_DATA_READ ) cmdr |=MCI_CMDR_TRDIR_READ ;
drivers/net/8139cp.c +4 -6
@@ -490,13 +490,11 @@ static inline unsigned int cp_rx_csum_ok (u32 status) {unsigned int protocol = (status >>16 ) &0x3 ; -if (likely ((protocol == RxProtoTCP) && (!(status & TCPFail)))) +if (((protocol == RxProtoTCP) && !(status & TCPFail)) || + ((protocol == RxProtoUDP) && !(status & UDPFail)))return 1 ; -else if ((protocol == RxProtoUDP) && (!(status & UDPFail))) -return 1 ; -else if ((protocol == RxProtoIP) && (!(status & IPFail))) -return 1 ; -return 0 ; +else +return 0 ; }static int cp_rx_poll (struct napi_struct *napi,int budget)
drivers/net/benet/be_cmds.c +1 -1
@@ -1179,7 +1179,7 @@ int be_cmd_multicast_set(struct be_adapter *adapter, u32 if_id, i =0 ;netdev_for_each_mc_addr (ha, netdev) -memcpy (req->mac[i].byte, ha->addr,ETH_ALEN ); +memcpy (req->mac[i++].byte, ha->addr,ETH_ALEN ); }else { req->promiscuous =1 ; }
drivers/net/bonding/bonding.h +2 -2
@@ -240,11 +240,11 @@ static inline struct slave *bond_get_slave_by_dev(struct bonding *bond, struct nbond_for_each_slave (bond, slave, i) {if (slave->dev == slave_dev) { -break ; +return slave; } } -return slave; +return 0 ; }static inline struct bonding *bond_get_bond_by_slave (struct slave *slave)
drivers/net/ifb.c +2 -0
@@ -104,6 +104,8 @@ static void ri_tasklet(unsigned long dev)rcu_read_unlock ();dev_kfree_skb (skb); stats->tx_dropped++; +if (skb_queue_len (&dp->tq) !=0 ) + goto resched;break ; }rcu_read_unlock ();
drivers/net/pppoe.c +1 -1
@@ -948,7 +948,7 @@ static int __pppoe_xmit(struct sock *sk, struct sk_buff *skb) abort:kfree_skb (skb); -return 0 ; +return 1 ; }/************************************************************************
drivers/net/r8169.c +2 -2
@@ -855,10 +855,10 @@ static int rtl8169_set_wol(struct net_device *dev, struct ethtool_wolinfo *wol)else tp->features &= ~RTL_FEATURE_WOL ;__rtl8169_set_wol (tp, wol->wolopts); -device_set_wakeup_enable (&tp->pci_dev->dev, wol->wolopts); -spin_unlock_irq (&tp->lock); +device_set_wakeup_enable (&tp->pci_dev->dev, wol->wolopts); +return 0 ; }
drivers/net/tehuti.c +2 -2
@@ -324,7 +324,7 @@ static int bdx_fw_load(struct bdx_priv *priv)ENTER ; master =READ_REG (priv, regINIT_SEMAPHORE);if (!READ_REG (priv, regINIT_STATUS) && master) { - rc =request_firmware (&fw,"tehuti/firmware.bin" , &priv->pdev->dev); + rc =request_firmware (&fw,"tehuti/bdx.bin" , &priv->pdev->dev);if (rc) goto out;bdx_tx_push_desc_safe (priv, (char *)fw->data, fw->size);
@@ -2516,4 +2516,4 @@ module_exit(bdx_module_exit);MODULE_LICENSE ("GPL" );MODULE_AUTHOR (DRIVER_AUTHOR );MODULE_DESCRIPTION (BDX_DRV_DESC ); -MODULE_FIRMWARE ("tehuti/firmware.bin" ); +MODULE_FIRMWARE ("tehuti/bdx.bin" );
drivers/net/wireless/ath/ath9k/ar9003_eeprom.c +38 -35
141 lines not on this page · raw message
drivers/net/wireless/ath/ath9k/ar9003_eeprom.h +2 -7
@@ -261,17 +261,12 @@ struct cal_tgt_pow_ht {u8 tPow2x[14 ]; } __packed; -struct cal_ctl_edge_pwr { -u8 tPower:6 , - flag:2 ; -} __packed; -struct cal_ctl_data_2g { -struct cal_ctl_edge_pwr ctlEdges[AR9300_NUM_BAND_EDGES_2G ]; +u8 ctlEdges[AR9300_NUM_BAND_EDGES_2G ]; } __packed;struct cal_ctl_data_5g { -struct cal_ctl_edge_pwr ctlEdges[AR9300_NUM_BAND_EDGES_5G ]; +u8 ctlEdges[AR9300_NUM_BAND_EDGES_5G ]; } __packed;struct ar9300_eeprom {
drivers/net/wireless/ath/ath9k/eeprom.c +3 -3
@@ -240,16 +240,16 @@ u16 ath9k_hw_get_max_edge_power(u16 freq, struct cal_ctl_edges *pRdEdgesPower,for (i =0 ; (i < num_band_edges) && (pRdEdgesPower[i].bChannel !=AR5416_BCHAN_UNUSED ); i++) {if (freq ==ath9k_hw_fbin2freq (pRdEdgesPower[i].bChannel, is2GHz)) { - twiceMaxEdgePower = pRdEdgesPower[i].tPower; + twiceMaxEdgePower =CTL_EDGE_TPOWER (pRdEdgesPower[i].ctl);break ; }else if ((i >0 ) && (freq <ath9k_hw_fbin2freq (pRdEdgesPower[i].bChannel, is2GHz))) {if (ath9k_hw_fbin2freq (pRdEdgesPower[i -1 ].bChannel, is2GHz) < freq && - pRdEdgesPower[i -1 ].flag) { +CTL_EDGE_FLAGS (pRdEdgesPower[i -1 ].ctl)) { twiceMaxEdgePower = - pRdEdgesPower[i -1 ].tPower; +CTL_EDGE_TPOWER (pRdEdgesPower[i -1 ].ctl); }break ; }
drivers/net/wireless/ath/ath9k/eeprom.h +4 -9
@@ -233,6 +233,9 @@#define AR9287_CHECKSUM_LOCATION (AR9287_EEP_START_LOC + 1) +#define CTL_EDGE_TPOWER (_ctl) ((_ctl) & 0x3f) +#define CTL_EDGE_FLAGS (_ctl) (((_ctl) >> 6) & 0x03) +enum eeprom_param {EEP_NFTHRESH_5 ,EEP_NFTHRESH_2 ,
@@ -533,18 +536,10 @@ struct cal_target_power_ht {u8 tPow2x[8 ]; } __packed; - -#ifdef __BIG_ENDIAN_BITFIELD -struct cal_ctl_edges { -u8 bChannel; -u8 flag:2 , tPower:6 ; -} __packed; -#else struct cal_ctl_edges {u8 bChannel; -u8 tPower:6 , flag:2 ; +u8 ctl; } __packed; -#endif struct cal_data_op_loop_ar9287 {u8 pwrPdg[2 ][5 ];
drivers/net/wireless/ath/ath9k/eeprom_def.c +8 -4
@@ -1062,15 +1062,19 @@ static void ath9k_hw_set_def_power_per_rate_table(struct ath_hw *ah,case 1 :break ;case 2 : - scaledPower -=REDUCE_SCALED_POWER_BY_TWO_CHAIN ; +if (scaledPower >REDUCE_SCALED_POWER_BY_TWO_CHAIN ) + scaledPower -=REDUCE_SCALED_POWER_BY_TWO_CHAIN ; +else + scaledPower =0 ;break ;case 3 : - scaledPower -=REDUCE_SCALED_POWER_BY_THREE_CHAIN ; +if (scaledPower >REDUCE_SCALED_POWER_BY_THREE_CHAIN ) + scaledPower -=REDUCE_SCALED_POWER_BY_THREE_CHAIN ; +else + scaledPower =0 ;break ; } - scaledPower =max ((u16 )0 , scaledPower); -if (IS_CHAN_2GHZ (chan)) { numCtlModes =ARRAY_SIZE (ctlModesFor11g) -SUB_NUM_CTL_MODES_AT_2G_40 ;
drivers/net/wireless/ath/ath9k/hw.c +2 -1
@@ -2351,7 +2351,8 @@ u32 ath9k_hw_gpio_get(struct ath_hw *ah, u32 gpio) val =REG_READ (ah,AR7010_GPIO_IN );return (MS (val,AR7010_GPIO_IN_VAL ) &AR_GPIO_BIT (gpio)) ==0 ; }else if (AR_SREV_9300_20_OR_LATER (ah)) -return MS_REG_READ (AR9300 , gpio) !=0 ; +return (MS (REG_READ (ah,AR_GPIO_IN ),AR9300_GPIO_IN_VAL ) & +AR_GPIO_BIT (gpio)) !=0 ;else if (AR_SREV_9271 (ah))return MS_REG_READ (AR9271 , gpio) !=0 ;else if (AR_SREV_9287_10_OR_LATER (ah))
drivers/net/wireless/ath/ath9k/mac.c +1 -2
@@ -711,8 +711,7 @@ int ath9k_hw_rxprocdesc(struct ath_hw *ah, struct ath_desc *ds, rs->rs_phyerr = phyerr; }else if (ads.ds_rxstatus8 & AR_DecryptCRCErr) rs->rs_status |=ATH9K_RXERR_DECRYPT ; -else if ((ads.ds_rxstatus8 & AR_MichaelErr) && - rs->rs_keyix !=ATH9K_RXKEYIX_INVALID ) +else if (ads.ds_rxstatus8 & AR_MichaelErr) rs->rs_status |=ATH9K_RXERR_MIC ;else if (ads.ds_rxstatus8 & AR_KeyMiss) rs->rs_status |=ATH9K_RXERR_DECRYPT ;
drivers/net/wireless/ath/ath9k/main.c +10 -1
@@ -1484,6 +1484,7 @@ static void ath9k_remove_interface(struct ieee80211_hw *hw,struct ath_softc *sc = aphy->sc;struct ath_common *common =ath9k_hw_common (sc->sc_ah);struct ath_vif *avp = (void *)vif->drv_priv; +bool bs_valid = false;int i;ath_print (common,ATH_DBG_CONFIG ,"Detach Interface\n" );
@@ -1512,7 +1513,15 @@ static void ath9k_remove_interface(struct ieee80211_hw *hw, "slot\n", __func__); sc->beacon.bslot[i] =NULL ; sc->beacon.bslot_aphy[i] =NULL ; - } + }else if (sc->beacon.bslot[i]) + bs_valid = true; + } +if (!bs_valid && (sc->sc_ah->imask &ATH9K_INT_SWBA )) { +/* Disable SWBA interrupt */ + sc->sc_ah->imask &= ~ATH9K_INT_SWBA ; +ath9k_ps_wakeup (sc); +ath9k_hw_set_interrupts (sc->sc_ah, sc->sc_ah->imask); +ath9k_ps_restore (sc); } sc->nvifs--;
drivers/net/wireless/ath/ath9k/recv.c +3 -1
@@ -1035,9 +1035,11 @@ static void ath9k_rx_skb_postprocess(struct ath_common *common,int hdrlen, padpos, padsize;u8 keyix;__le16 fc; +bool is_mc;/* see if any padding is done by the hw and remove it */ hdr = (struct ieee80211_hdr *) skb->data; + is_mc = !!is_multicast_ether_addr (hdr->addr1); hdrlen =ieee80211_get_hdrlen_from_skb (skb); fc = hdr->frame_control; padpos =ath9k_cmn_padpos (hdr->frame_control);
@@ -1058,7 +1060,7 @@ static void ath9k_rx_skb_postprocess(struct ath_common *common, keyix = rx_stats->rs_keyix; -if (!(keyix ==ATH9K_RXKEYIX_INVALID ) && !decrypt_error && +if ((is_mc || !(keyix ==ATH9K_RXKEYIX_INVALID )) && !decrypt_error &&ieee80211_has_protected (fc)) { rxs->flag |=RX_FLAG_DECRYPTED ; } else if (ieee80211_has_protected(fc)
drivers/net/wireless/ath/ath9k/reg.h +4 -2
@@ -1019,11 +1019,13 @@ enum {#define AR9287_GPIO_IN_VAL_S 11#define AR9271_GPIO_IN_VAL 0xFFFF0000#define AR9271_GPIO_IN_VAL_S 16 -#define AR9300_GPIO_IN_VAL 0x0001FFFF -#define AR9300_GPIO_IN_VAL_S 0#define AR7010_GPIO_IN_VAL 0x0000FFFF#define AR7010_GPIO_IN_VAL_S 0 +#define AR_GPIO_IN 0x404c +#define AR9300_GPIO_IN_VAL 0x0001FFFF +#define AR9300_GPIO_IN_VAL_S 0 +#define AR_GPIO_OE_OUT (AR_SREV_9300_20_OR_LATER(ah) ? 0x4050 : 0x404c)#define AR_GPIO_OE_OUT_DRV 0x3#define AR_GPIO_OE_OUT_DRV_NO 0x0
drivers/net/wireless/orinoco/main.c +6 -0
@@ -1813,6 +1813,12 @@ static int __orinoco_commit(struct orinoco_private *priv)struct net_device *dev = priv->ndev;int err =0 ; +/* If we've called commit, we are reconfiguring or bringing the +* interface up. Maintaining countermeasures across this would +* be confusing, so note that we've disabled them. The port will +* be enabled later in orinoco_commit or __orinoco_up. */ + priv->tkip_cm_active =0 ; + err =orinoco_hw_program_rids (priv);/* FIXME: what about netif_tx_lock */
drivers/net/wireless/orinoco/orinoco_cs.c +7 -7
@@ -248,20 +248,20 @@ orinoco_cs_config(struct pcmcia_device *link) goto failed; } - ret =pcmcia_request_irq (link, orinoco_interrupt); -if (ret) - goto failed; - -/* We initialize the hermes structure before completing PCMCIA -* configuration just in case the interrupt handler gets -* called. */ mem =ioport_map (link->resource[0 ]->start,resource_size (link->resource[0 ]));if (!mem) goto failed; +/* We initialize the hermes structure before completing PCMCIA +* configuration just in case the interrupt handler gets +* called. */ hermes_struct_init (hw, mem,HERMES_16BIT_REGSPACING ); + ret =pcmcia_request_irq (link, orinoco_interrupt); +if (ret) + goto failed; +/* * This actually configures the PCMCIA socket -- setting up * the I/O windows and the interrupt mapping, and putting the
drivers/net/wireless/orinoco/spectrum_cs.c +7 -7
@@ -310,21 +310,21 @@ spectrum_cs_config(struct pcmcia_device *link) goto failed; } - ret =pcmcia_request_irq (link, orinoco_interrupt); -if (ret) - goto failed; - -/* We initialize the hermes structure before completing PCMCIA -* configuration just in case the interrupt handler gets -* called. */ mem =ioport_map (link->resource[0 ]->start,resource_size (link->resource[0 ]));if (!mem) goto failed; +/* We initialize the hermes structure before completing PCMCIA +* configuration just in case the interrupt handler gets +* called. */ hermes_struct_init (hw, mem,HERMES_16BIT_REGSPACING ); hw->eeprom_pda = true; + ret =pcmcia_request_irq (link, orinoco_interrupt); +if (ret) + goto failed; +/* * This actually configures the PCMCIA socket -- setting up * the I/O windows and the interrupt mapping, and putting the
drivers/net/wireless/orinoco/wext.c +2 -2
@@ -904,10 +904,10 @@ static int orinoco_ioctl_set_auth(struct net_device *dev,*/ if (param->value) { priv->tkip_cm_active =1 ; - ret =hermes_enable_port (hw,0 ); + ret =hermes_disable_port (hw,0 ); }else { priv->tkip_cm_active =0 ; - ret =hermes_disable_port (hw,0 ); + ret =hermes_enable_port (hw,0 ); }break ;
drivers/net/wireless/p54/p54usb.c +6 -0
@@ -43,6 +43,7 @@ MODULE_FIRMWARE("isl3887usb");static struct usb_device_id p54u_table[]__devinitdata = {/* Version 1 devices (pci chip + net2280) */ + {USB_DEVICE (0x0411 ,0x0050 )},/* Buffalo WLI2-USB2-G54 */ {USB_DEVICE (0x045e ,0x00c2 )},/* Microsoft MN-710 */ {USB_DEVICE (0x0506 ,0x0a11 )},/* 3COM 3CRWE254G72 */ {USB_DEVICE (0x06b9 ,0x0120 )},/* Thomson SpeedTouch 120g */
@@ -56,9 +57,13 @@ static struct usb_device_id p54u_table[] __devinitdata = { {USB_DEVICE(0x0846, 0x4220)}, /* Netgear WG111 */ {USB_DEVICE(0x09aa, 0x1000)}, /* Spinnaker Proto board */ {USB_DEVICE(0x0cde, 0x0006)}, /* Medion 40900, Roper Europe */ + {USB_DEVICE(0x0db0, 0x6826)}, /* MSI UB54G (MS-6826) */ {USB_DEVICE(0x107b, 0x55f2)}, /* Gateway WGU-210 (Gemtek) */ {USB_DEVICE(0x124a, 0x4023)}, /* Shuttle PN15, Airvast WM168g, IOGear GWU513 */ + {USB_DEVICE(0x1435, 0x0210)}, /* Inventel UR054G */ + {USB_DEVICE(0x15a9, 0x0002)}, /* Gemtek WUBI-100GW 802.11g */ {USB_DEVICE(0x1630, 0x0005)}, /* 2Wire 802.11g USB (v1) / Z-Com */ + {USB_DEVICE(0x182d, 0x096b)}, /* Sitecom WL-107 */ {USB_DEVICE(0x1915, 0x2234)}, /* Linksys WUSB54G OEM */ {USB_DEVICE(0x1915, 0x2235)}, /* Linksys WUSB54G Portable OEM */ {USB_DEVICE(0x2001, 0x3701)}, /* DLink DWL-G120 Spinnaker */
@@ -94,6 +99,7 @@ static struct usb_device_id p54u_table[] __devinitdata = { {USB_DEVICE(0x1435, 0x0427)}, /* Inventel UR054G */ {USB_DEVICE(0x1668, 0x1050)}, /* Actiontec 802UIG-1 */ {USB_DEVICE(0x2001, 0x3704)}, /* DLink DWL-G122 rev A2 */ + {USB_DEVICE(0x2001, 0x3705)}, /* D-Link DWL-G120 rev C1 */ {USB_DEVICE(0x413c, 0x5513)}, /* Dell WLA3310 USB Wireless Adapter */ {USB_DEVICE(0x413c, 0x8102)}, /* Spinnaker DUT */ {USB_DEVICE(0x413c, 0x8104)}, /* Cohiba Proto board */
drivers/net/wireless/rt2x00/rt2400pci.c +4 -2
@@ -1488,8 +1488,10 @@ static int rt2400pci_probe_hw_mode(struct rt2x00_dev *rt2x00dev) spec->channels_info = info; tx_power =rt2x00_eeprom_addr (rt2x00dev,EEPROM_TXPOWER_START ); -for (i =0 ; i <14 ; i++) - info[i].tx_power1 =TXPOWER_FROM_DEV (tx_power[i]); +for (i =0 ; i <14 ; i++) { + info[i].max_power =TXPOWER_FROM_DEV (MAX_TXPOWER ); + info[i].default_power1 =TXPOWER_FROM_DEV (tx_power[i]); + }return 0 ; }
drivers/net/wireless/rt2x00/rt2500pci.c +8 -4
@@ -1802,12 +1802,16 @@ static int rt2500pci_probe_hw_mode(struct rt2x00_dev *rt2x00dev) spec->channels_info = info; tx_power =rt2x00_eeprom_addr (rt2x00dev,EEPROM_TXPOWER_START ); -for (i =0 ; i <14 ; i++) - info[i].tx_power1 =TXPOWER_FROM_DEV (tx_power[i]); +for (i =0 ; i <14 ; i++) { + info[i].max_power =MAX_TXPOWER ; + info[i].default_power1 =TXPOWER_FROM_DEV (tx_power[i]); + }if (spec->num_channels >14 ) { -for (i =14 ; i < spec->num_channels; i++) - info[i].tx_power1 =DEFAULT_TXPOWER ; +for (i =14 ; i < spec->num_channels; i++) { + info[i].max_power =MAX_TXPOWER ; + info[i].default_power1 =DEFAULT_TXPOWER ; + } }return 0 ;
drivers/net/wireless/rt2x00/rt2500usb.c +8 -4
@@ -1705,12 +1705,16 @@ static int rt2500usb_probe_hw_mode(struct rt2x00_dev *rt2x00dev) spec->channels_info = info; tx_power =rt2x00_eeprom_addr (rt2x00dev,EEPROM_TXPOWER_START ); -for (i =0 ; i <14 ; i++) - info[i].tx_power1 =TXPOWER_FROM_DEV (tx_power[i]); +for (i =0 ; i <14 ; i++) { + info[i].max_power =MAX_TXPOWER ; + info[i].default_power1 =TXPOWER_FROM_DEV (tx_power[i]); + }if (spec->num_channels >14 ) { -for (i =14 ; i < spec->num_channels; i++) - info[i].tx_power1 =DEFAULT_TXPOWER ; +for (i =14 ; i < spec->num_channels; i++) { + info[i].max_power =MAX_TXPOWER ; + info[i].default_power1 =DEFAULT_TXPOWER ; + } }return 0 ;
drivers/net/wireless/rt2x00/rt2800.h +7 -0
@@ -1841,6 +1841,13 @@ struct mac_iveiv_entry {#define EEPROM_RSSI_A2_LNA_A2 FIELD16(0xff00)/* +* EEPROM Maximum TX power values +*/ +#define EEPROM_MAX_TX_POWER 0x0027 +#define EEPROM_MAX_TX_POWER_24GHZ FIELD16(0x00ff) +#define EEPROM_MAX_TX_POWER_5GHZ FIELD16(0xff00) + +/* * EEPROM TXpower delta: 20MHZ AND 40 MHZ use different power. * This is delta in 40MHZ. * VALUE: Tx Power dalta value (MAX=4)
drivers/net/wireless/rt2x00/rt2800lib.c +35 -24
111 lines not on this page · raw message
drivers/net/wireless/rt2x00/rt2x00.h +3 -2
@@ -212,8 +212,9 @@ struct channel_info {unsigned int flags;#define GEOGRAPHY_ALLOWED 0x00000001 -short tx_power1; -short tx_power2; +short max_power; +short default_power1; +short default_power2; };/*
drivers/net/wireless/rt2x00/rt2x00dev.c +1 -1
@@ -710,7 +710,7 @@ static int rt2x00lib_probe_hw_modes(struct rt2x00_dev *rt2x00dev,for (i =0 ; i < spec->num_channels; i++) {rt2x00lib_channel (&channels[i], spec->channels[i].channel, - spec->channels_info[i].tx_power1, i); + spec->channels_info[i].max_power, i); }/*
drivers/net/wireless/rt2x00/rt61pci.c +8 -4
@@ -2661,13 +2661,17 @@ static int rt61pci_probe_hw_mode(struct rt2x00_dev *rt2x00dev) spec->channels_info = info; tx_power =rt2x00_eeprom_addr (rt2x00dev,EEPROM_TXPOWER_G_START ); -for (i =0 ; i <14 ; i++) - info[i].tx_power1 =TXPOWER_FROM_DEV (tx_power[i]); +for (i =0 ; i <14 ; i++) { + info[i].max_power =MAX_TXPOWER ; + info[i].default_power1 =TXPOWER_FROM_DEV (tx_power[i]); + }if (spec->num_channels >14 ) { tx_power =rt2x00_eeprom_addr (rt2x00dev,EEPROM_TXPOWER_A_START ); -for (i =14 ; i < spec->num_channels; i++) - info[i].tx_power1 =TXPOWER_FROM_DEV (tx_power[i]); +for (i =14 ; i < spec->num_channels; i++) { + info[i].max_power =MAX_TXPOWER ; + info[i].default_power1 =TXPOWER_FROM_DEV (tx_power[i]); + } }return 0 ;
drivers/net/wireless/rt2x00/rt73usb.c +8 -4
@@ -2091,13 +2091,17 @@ static int rt73usb_probe_hw_mode(struct rt2x00_dev *rt2x00dev) spec->channels_info = info; tx_power =rt2x00_eeprom_addr (rt2x00dev,EEPROM_TXPOWER_G_START ); -for (i =0 ; i <14 ; i++) - info[i].tx_power1 =TXPOWER_FROM_DEV (tx_power[i]); +for (i =0 ; i <14 ; i++) { + info[i].max_power =MAX_TXPOWER ; + info[i].default_power1 =TXPOWER_FROM_DEV (tx_power[i]); + }if (spec->num_channels >14 ) { tx_power =rt2x00_eeprom_addr (rt2x00dev,EEPROM_TXPOWER_A_START ); -for (i =14 ; i < spec->num_channels; i++) - info[i].tx_power1 =TXPOWER_FROM_DEV (tx_power[i]); +for (i =14 ; i < spec->num_channels; i++) { + info[i].max_power =MAX_TXPOWER ; + info[i].default_power1 =TXPOWER_FROM_DEV (tx_power[i]); + } }return 0 ;
drivers/net/xen-netfront.c +2 -2
@@ -66,8 +66,8 @@ struct netfront_cb {#define GRANT_INVALID_REF 0 -#define NET_TX_RING_SIZE __RING_SIZE((struct xen_netif_tx_sring *)0, PAGE_SIZE) -#define NET_RX_RING_SIZE __RING_SIZE((struct xen_netif_rx_sring *)0, PAGE_SIZE) +#define NET_TX_RING_SIZE __CONST_RING_SIZE(xen_netif_tx, PAGE_SIZE) +#define NET_RX_RING_SIZE __CONST_RING_SIZE(xen_netif_rx, PAGE_SIZE)#define TX_MAX_TARGET min_t(int, NET_RX_RING_SIZE, 256)struct netfront_info {
drivers/pci/dmar.c +5 -0
@@ -1414,6 +1414,11 @@ int __init enable_drhd_fault_handling(void) (unsigned long long)drhd->reg_base_addr, ret);return -1 ; } + +/* +* Clear any previous faults. +*/ +dmar_fault (iommu->irq, iommu); }return 0 ;
drivers/pci/quirks.c +23 -0
@@ -2714,6 +2714,29 @@ DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_RICOH, PCI_DEVICE_ID_RICOH_R5C832, ricoh_mDECLARE_PCI_FIXUP_RESUME_EARLY (PCI_VENDOR_ID_RICOH ,PCI_DEVICE_ID_RICOH_R5C832 , ricoh_mmc_fixup_r5c832);#endif /*CONFIG_MMC_RICOH_MMC*/
Lines of this file are not shown. View the raw message.
drivers/platform/x86/intel_ips.h new file +21 -0
Lines of this file are not shown. View the raw message.
drivers/staging/cx25821/cx25821-video.c +4 -4
Lines of this file are not shown. View the raw message.
drivers/staging/cx25821/cx25821-video.h +1 -1
Lines of this file are not shown. View the raw message.
fs/fuse/file.c +66 -6
72 lines not on this page · raw message
kernel/sched.c +142 -14
156 lines not on this page · raw message
net/ipv4/tcp_output.c +23 -19
42 lines not on this page · raw message
The rest of this diff is not shown. View the raw message.
Part of the diff is not shown here. View the raw message.