Linux 3.4.5
I'm announcing the release of the 3.4.5 kernel.
All users of the 3.4 kernel series must upgrade.
The updated 3.4.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-3.4.y
and can be browsed at the normal kernel.org git web browser:
http://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
thanks,
greg k-h
------------
Documentation/device-mapper/verity.txt | 131 +++++++------------- Documentation/stable_kernel_rules.txt | 6 Makefile | 2 arch/arm/mach-dove/include/mach/bridge-regs.h | 1 arch/arm/mach-dove/include/mach/dove.h | 1 arch/arm/mach-kirkwood/include/mach/bridge-regs.h | 1 arch/arm/mach-kirkwood/include/mach/kirkwood.h | 1 arch/arm/mach-mv78xx0/include/mach/bridge-regs.h | 1 arch/arm/mach-mv78xx0/include/mach/mv78xx0.h | 2 arch/arm/mach-orion5x/include/mach/bridge-regs.h | 2 arch/arm/mach-orion5x/include/mach/orion5x.h | 1 arch/arm/mach-tegra/reset.c | 2 arch/arm/mm/mmu.c | 74 +++++++++++ arch/arm/plat-orion/common.c | 2 arch/arm/plat-samsung/include/plat/map-s3c.h | 2 arch/arm/plat-samsung/include/plat/watchdog-reset.h | 2 arch/powerpc/include/asm/hw_irq.h | 11 + arch/powerpc/kernel/irq.c | 50 +++++++ arch/powerpc/kvm/book3s_hv_rmhandlers.S | 2 arch/powerpc/mm/numa.c | 2 arch/powerpc/platforms/cell/pervasive.c | 11 - arch/powerpc/platforms/pseries/iommu.c | 4 arch/powerpc/platforms/pseries/processor_idle.c | 17 +- arch/powerpc/xmon/xmon.c | 2 arch/x86/ia32/ia32_signal.c | 2 arch/x86/include/asm/cpufeature.h | 2 arch/x86/include/asm/pgtable-3level.h | 54 ++++++++ arch/x86/kernel/acpi/boot.c | 27 ++-- arch/x86/kernel/cpu/scattered.c | 2 arch/x86/kernel/reboot.c | 8 + drivers/acpi/acpi_pad.c | 7 - drivers/acpi/acpica/hwsleep.c | 22 --- drivers/acpi/apei/apei-base.c | 17 ++ drivers/acpi/apei/apei-internal.h | 9 + drivers/acpi/apei/ghes.c | 6 drivers/acpi/sleep.c | 4 drivers/acpi/sysfs.c | 4 drivers/acpi/video.c | 2 drivers/base/power/main.c | 6 drivers/block/umem.c | 40 ++++++ drivers/block/xen-blkback/common.h | 2 drivers/clk/clk.c | 27 ++-- drivers/dma/pl330.c | 2 drivers/gpio/gpio-wm8994.c | 5 drivers/gpu/drm/drm_edid.c | 2 drivers/gpu/drm/i915/i915_irq.c | 57 ++++---- drivers/gpu/drm/i915/i915_suspend.c | 5 drivers/gpu/drm/nouveau/nouveau_fbcon.c | 2 drivers/gpu/drm/radeon/radeon_gart.c | 13 + drivers/gpu/drm/radeon/si.c | 4 drivers/hid/hid-multitouch.c | 58 +++++++- drivers/hwmon/applesmc.c | 4 drivers/hwmon/coretemp.c | 4 drivers/hwspinlock/hwspinlock_core.c | 4 drivers/iommu/amd_iommu.c | 9 + drivers/iommu/amd_iommu_init.c | 4 drivers/iommu/tegra-smmu.c | 4 drivers/md/persistent-data/dm-space-map-checker.c | 54 ++++---- drivers/md/persistent-data/dm-space-map-disk.c | 11 + drivers/md/persistent-data/dm-transaction-manager.c | 11 + drivers/md/raid10.c | 12 + drivers/md/raid5.c | 14 +- drivers/media/dvb/siano/smsusb.c | 2 drivers/media/video/gspca/gspca.c | 4 drivers/mtd/nand/cafe_nand.c | 2 drivers/net/bonding/bond_main.c | 9 - drivers/net/can/c_can/c_can.c | 4 drivers/net/can/flexcan.c | 4 drivers/net/dummy.c | 4 drivers/net/ethernet/broadcom/bnx2x/bnx2x.h | 15 -- drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c | 35 +++-- drivers/net/ethernet/broadcom/tg3.c | 3 drivers/net/ethernet/emulex/benet/be_main.c | 5 drivers/net/ethernet/intel/e1000e/defines.h | 1 drivers/net/ethernet/intel/e1000e/ethtool.c | 6 drivers/net/ethernet/intel/e1000e/mac.c | 2 drivers/net/ethernet/intel/e1000e/netdev.c | 79 ++---------- drivers/net/ethernet/intel/e1000e/phy.c | 8 - drivers/net/ethernet/intel/igbvf/ethtool.c | 29 ++-- drivers/net/ethernet/intel/ixgbe/ixgbe.h | 4 drivers/net/ethernet/intel/ixgbe/ixgbe_lib.c | 2 drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | 14 +- drivers/net/ethernet/marvell/sky2.c | 10 - drivers/net/ethernet/nxp/lpc_eth.c | 11 - drivers/net/ethernet/realtek/r8169.c | 3 drivers/net/ethernet/sun/niu.c | 12 - drivers/net/macvtap.c | 25 +++ drivers/net/usb/ipheth.c | 5 drivers/net/usb/qmi_wwan.c | 109 +++++++++------- drivers/net/wireless/ath/ath.h | 1 drivers/net/wireless/ath/ath9k/ath9k.h | 1 drivers/net/wireless/ath/ath9k/htc_drv_main.c | 5 drivers/net/wireless/ath/ath9k/hw.c | 16 ++ drivers/net/wireless/ath/ath9k/main.c | 18 +- drivers/net/wireless/ath/ath9k/recv.c | 7 - drivers/net/wireless/ath/ath9k/xmit.c | 31 ++-- drivers/net/wireless/ath/key.c | 4 drivers/net/wireless/ipw2x00/ipw.h | 23 +++ drivers/net/wireless/ipw2x00/ipw2100.c | 4 drivers/net/wireless/ipw2x00/ipw2200.c | 4 drivers/net/wireless/iwlwifi/iwl-mac80211.c | 12 + drivers/net/wireless/iwlwifi/iwl-trans-pcie.c | 6 drivers/net/wireless/mwifiex/11n_rxreorder.c | 5 drivers/net/wireless/mwifiex/11n_rxreorder.h | 7 + drivers/net/wireless/mwifiex/cfg80211.c | 21 +-- drivers/net/wireless/mwifiex/wmm.c | 3 drivers/net/wireless/rtl818x/rtl8187/leds.c | 2 drivers/net/wireless/rtlwifi/rtl8192cu/sw.c | 3 drivers/net/xen-netfront.c | 8 - drivers/oprofile/oprofile_perf.c | 2 drivers/pci/pci-driver.c | 12 + drivers/pci/pci.c | 5 drivers/pci/quirks.c | 26 --- drivers/remoteproc/Kconfig | 2 drivers/rpmsg/virtio_rpmsg_bus.c | 55 +++++++- drivers/rtc/rtc-ab8500.c | 2 drivers/rtc/rtc-mxc.c | 5 drivers/rtc/rtc-spear.c | 2 drivers/scsi/aic94xx/aic94xx_task.c | 2 drivers/scsi/libsas/sas_ata.c | 12 - drivers/scsi/sd.c | 2 drivers/staging/iio/adc/ad7606_core.c | 1 drivers/staging/rtl8712/usb_intf.c | 2 drivers/target/tcm_fc/tfc_sess.c | 3 drivers/usb/class/cdc-wdm.c | 2 drivers/usb/core/hub.c | 18 +- drivers/usb/host/xhci-hub.c | 44 +++++- drivers/usb/host/xhci-ring.c | 11 + drivers/usb/host/xhci.h | 6 drivers/usb/serial/cp210x.c | 11 + drivers/usb/serial/metro-usb.c | 8 - drivers/usb/serial/option.c | 34 +++++ drivers/usb/storage/scsiglue.c | 6 drivers/usb/storage/unusual_devs.h | 7 - drivers/video/omap2/dss/apply.c | 2 drivers/video/omap2/dss/dispc.c | 5 drivers/video/omap2/dss/dss.h | 3 fs/btrfs/tree-log.c | 6 fs/cifs/connect.c | 41 +++--- fs/ecryptfs/kthread.c | 2 fs/ecryptfs/miscdev.c | 48 ++++--- fs/exec.c | 2 fs/lockd/clntlock.c | 13 + fs/lockd/svc.c | 38 +++-- fs/nfs/callback.c | 16 +- fs/nfs/idmap.c | 13 + fs/nfsd/nfsctl.c | 12 + fs/nfsd/nfssvc.c | 29 +++- fs/nilfs2/gcinode.c | 2 fs/nilfs2/segment.c | 2 fs/ocfs2/file.c | 6 fs/open.c | 6 fs/ramfs/file-nommu.c | 1 fs/splice.c | 35 +++-- fs/udf/super.c | 102 +++++++++------ include/asm-generic/pgtable.h | 32 ++++ include/linux/aio.h | 1 include/linux/lockd/bind.h | 4 include/linux/memblock.h | 4 include/linux/mm_types.h | 10 + include/linux/mmzone.h | 2 include/linux/pci.h | 2 include/linux/rpmsg.h | 6 include/linux/skbuff.h | 7 - include/linux/splice.h | 8 - include/linux/sunrpc/svc.h | 1 include/net/cipso_ipv4.h | 29 ++++ include/net/inetpeer.h | 5 include/net/sch_generic.h | 7 - include/scsi/libsas.h | 6 include/scsi/scsi_cmnd.h | 8 + include/scsi/scsi_device.h | 1 kernel/exit.c | 1 kernel/relay.c | 5 kernel/trace/trace.c | 8 - lib/dynamic_queue_limits.c | 18 +- mm/compaction.c | 5 mm/madvise.c | 16 +- mm/memblock.c | 123 ++++++++++++------ mm/nobootmem.c | 38 +++-- mm/shmem.c | 3 mm/vmscan.c | 7 - net/batman-adv/routing.c | 2 net/batman-adv/translation-table.c | 8 - net/bridge/br_if.c | 1 net/bridge/br_netlink.c | 2 net/bridge/br_private.h | 1 net/can/raw.c | 3 net/core/dev.c | 23 --- net/core/drop_monitor.c | 102 +++++---------- net/core/neighbour.c | 14 -- net/core/netpoll.c | 11 - net/core/skbuff.c | 3 net/core/sock.c | 7 - net/ipv4/inetpeer.c | 16 +- net/ipv6/ip6_fib.c | 2 net/ipv6/route.c | 41 ++++-- net/iucv/af_iucv.c | 1 net/l2tp/l2tp_eth.c | 2 net/l2tp/l2tp_ip.c | 9 - net/mac80211/mlme.c | 24 +-- net/mac80211/rx.c | 5 net/nfc/nci/ntf.c | 10 - net/nfc/rawsock.c | 5 net/sunrpc/rpcb_clnt.c | 12 + net/sunrpc/svc.c | 23 +-- net/wireless/reg.c | 2 sound/pci/hda/hda_codec.c | 2 sound/pci/hda/patch_realtek.c | 1 sound/pci/hda/patch_sigmatel.c | 4 sound/soc/codecs/tlv320aic3x.c | 4 sound/soc/codecs/tlv320aic3x.h | 1 sound/soc/codecs/wm2200.c | 1 tools/hv/hv_kvp_daemon.c | 10 + 214 files changed, 1801 insertions(+), 1010 deletions(-)
Alan Stern (3):
SCSI & usb-storage: add try_rc_10_first flag
usb-storage: revert commit afff07e61a52 (Add 090c:1000 to unusal-devs)
PCI: EHCI: fix crash during suspend on ASUS computers
Alex Deucher (1):
drm/radeon: fix VM page table setup on SI
Alexander Duyck (1):
ixgbe: Do not pad FCoE frames as this can cause issues with FCoE DDP
Andrea Arcangeli (2):
mm: pmd_read_atomic: fix 32bit PAE pmd walk vs pmd_populate SMP race condition
thp: avoid atomic64_read in pmd_read_atomic for 32bit PAE
Andrew Bird (Sphere Systems) (2):
USB: qmi_wwan: Make forced int 4 whitelist generic
USB: qmi_wwan: Add ZTE (Vodafone) K3520-Z
Andrew Lunn (2):
ARM: Orion: Fix Virtual/Physical mixup with watchdog
ARM: Orion: Fix WDT compile for Dove and MV78xx0
Andy Lutomirski (1):
mm: Hold a file reference in madvise_remove
Anton Blanchard (2):
powerpc: check_and_cede_processor() never cedes powerpc/xmon: Use cpumask iterator to avoid warning
Antonio Quartulli (1):
batman-adv: fix skb->data assignment
Ben Skeggs (1):
drm/nouveau/fbcon: using nv_two_heads is not a good idea
Benjamin Herrenschmidt (2):
powerpc: More fixes for lazy IRQ vs. idle
powerpc: Fix build of some debug irq code
Benjamin Tissoires (1):
HID: hid-multitouch: fix wrong protocol detection
Benoît Thébaudeau (1):
drivers/rtc/rtc-mxc.c: fix irq enabled interrupts warning
Bing Zhao (1):
mwifiex: fix wrong return values in add_virtual_intf() error cases
Bjørn Mork (4):
net: qmi_wwan: fix Gobi device probing
net: qmi_wwan: fix Oops while disconnecting
USB: cdc-wdm: fix lockup on error in wdm_read
USB: option: add ZTE MF60
Bob Liu (1):
fs: ramfs: file-nommu: add SetPageUptodate()
Bruce Allan (2):
e1000e: remove use of IP payload checksum
e1000e: test for valid check_reset_block function pointer
Bryan Schumaker (1):
NFS: Force the legacy idmapper to be single threaded
Chris Mason (1):
Btrfs: run delayed directory updates during log replay
Chris Wilson (1):
drm/i915: Refactor the deferred PM_IIR handling into a single function
Craig Shelley (1):
USB: CP210x Add 10 Device IDs
Dan Carpenter (2):
can: c_can: precedence error in c_can_chip_config()
mtd: cafe_nand: fix an & vs | mistake
Dan Rosenberg (1):
NFC: Prevent multiple buffer overflows in NCI
Dan Williams (1):
SCSI: libsas: fix taskfile corruption in sas_ata_qc_fill_rtf
Daniel Vetter (2):
drm/edid: don't return stack garbage from supports_rb drm/i915: rip out the PM_IIR WARN
David Henningsson (1):
ALSA: hda - Add Realtek ALC280 codec support
David Rientjes (1):
mm, thp: abort compaction if migration page cannot be charged to memcg
David S. Miller (1):
Revert "niu: Add support for byte queue limits."
Davide Gerhard (1):
ipheth: add support for iPad
Devendra Naga (2):
r8169: call netif_napi_del at errpaths and at driver unload drivers/rtc/rtc-spear.c: fix use-after-free in spear_rtc_remove()
Dmitry Shmygov (1):
USB: option: add id for Cellient MEN-200
Eliad Peller (2):
cfg80211: fix potential deadlock in regulatory
mac80211: clear ifmgd->bssid only after building DELBA
Eric Dumazet (16):
drop_monitor: dont sleep in atomic context
inetpeer: fix a race in inetpeer_gc_worker()
net: l2tp_eth: fix kernel panic on rmmod l2tp_eth
l2tp: fix a race in l2tp_ip_sendmsg()
lpc_eth: add missing ndo_change_mtu()
lpc_eth: fix tx completion
net: neighbour: fix neigh_dump_info()
be2net: fix a race in be_xmit()
dummy: fix rcu_sched self-detected stalls
bonding: Fix corrupted queue_mapping
netpoll: fix netpoll_send_udp() bugs
bnx2x: fix checksum validation
bnx2x: fix panic when TX ring is full
net: remove skb_orphan_try()
NFC: Return from rawsock_release when sk is NULL
splice: fix racy pipe->buffers uses
Felix Fietkau (3):
ath9k: fix a tx rate duration calculation bug
ath9k: fix invalid pointer access in the tx path
ath9k: fix dynamic WEP related regression
Feng Tang (3):
ACPI: Make acpi_skip_timer_override cover all source_irq==0 cases
ACPI: Remove one board specific WARN when ignoring timer overriding
ACPI: Add a quirk for "AMILO PRO V2030" to ignore the timer overriding
Forest Bond (1):
USB: option: Add USB ID for Novatel Ovation MC551
Gaosen Zhang (1):
USB: option: Add MEDIATEK product ids
Gavin Shan (2):
mm/memblock: cleanup on duplicate VA/PA conversion mm/memblock: fix memory leak on extending regions
Greg Kroah-Hartman (1):
Linux 3.4.5
Greg Pearson (1):
mm/memblock: fix overlapping allocation when doubling reserved array
H. Peter Anvin (1):
x86, cpufeature: Rename X86_FEATURE_DTS to X86_FEATURE_DTHERM
Hans de Goede (1):
gspca-core: Fix buffers staying in queued state after a stream_off
Hebbar, Gururaja (1):
ASoC: tlv320aic3x: Fix codec pll configure bug
Henrik Rydberg (1):
hwmon: (applesmc) Limit key length in warning messages
Hiroaki SHIMODA (3):
bql: Fix POSDIFF() to integer overflow aware.
bql: Avoid unneeded limit decrement.
bql: Avoid possible inconsistent calculation.
Hiroshi DOYU (1):
iommu/tegra: smmu: Fix unsleepable memory allocation
Huang Ying (1):
ACPI, APEI, Avoid too much error reporting in runtime
Hui Wang (1):
can: flexcan: use be32_to_cpup to handle the value of dt entry
Ian Campbell (1):
xen/netfront: teardown the device before unregistering it.
Jan Kara (3):
udf: Use 'ret' instead of abusing 'i' in udf_load_logicalvol()
udf: Avoid run away loop when partition table length is corrupted
udf: Fortify loading of sparing table
Jason Wang (2):
net: sock: validate data_len before allocating skb in sock_alloc_send_pskb()
macvtap: zerocopy: validate vectors before building skb
Jeff Layton (1):
cifs: when server doesn't set CAP_LARGE_READ_X, cap default rsize at MaxBufferSize
Jiang Liu (1):
memory hotplug: fix invalid memory access caused by stale kswapd pointer
Joerg Roedel (1):
iommu/amd: Initialize dma_ops for hotplug and sriov devices
Johan Hovold (1):
USB: metro-usb: fix tty_flip_buffer_push use
Johannes Berg (4):
mac80211: correct behaviour on unrecognised action frames
iwlwifi: fix activating inactive stations
mac80211: fix queues stuck issue with HT bandwidth change
iwlwifi: remove log_event debugfs file debugging is disabled
Jonathan Nieder (1):
ACPI / PM: Leave Bus Master Arbitration enabled for suspend/resume
Jonghwan Choi (1):
ARM: SAMSUNG: Should check for IS_ERR(clk) instead of NULL
Jose Miguel Goncalves (1):
ARM: SAMSUNG: Fix for S3C2412 EBI memory mapping
Junxiao Bi (2):
aio: make kiocb->private NUll in init_sync_kiocb()
ocfs2: clear unaligned io flag when dio fails
Konrad Rzeszutek Wilk (1):
xen/blkback: Copy id field when doing BLKIF_DISCARD.
Konstantin Khlebnikov (1):
mm: correctly synchronize rss-counters at exit/exec
Larry Finger (1):
rtlwifi: rtl8192cu: New USB IDs
Lars-Peter Clausen (1):
staging:iio:ad7606: Re-add missing scale attribute
Lee Jones (1):
drivers/rtc/rtc-ab8500.c: use IRQF_ONESHOT when requesting a threaded IRQ
Linus Torvalds (1):
vfs: make O_PATH file descriptors usable for 'fchdir()'
Lubomir Schmidt (1):
staging: r8712u: Add new USB IDs
Luis Henriques (1):
ocfs2: fix NULL pointer dereference in __ocfs2_change_file_space()
Mandeep Singh Baines (1):
PM / Sleep: Prevent waiting forever on asynchronous suspend after abort
Marek Lindner (1):
batman-adv: only drop packets of known wifi clients
Mark Brown (2):
ASoC: wm2200: Add missing BCLK rate
gpiolib: wm8994: Pay attention to the value set when enabling as output
Mark Rustad (2):
tcm_fc: Resolve suspicious RCU usage warnings
SCSI: Fix NULL dereferences in scsi_cmd_to_driver
Matt Carlson (1):
tg3: Apply short DMA frag workaround to 5906
Mel Gorman (1):
stable: Allow merging of backports for serious user-visible performance issues
Michael Krufky (1):
media: smsusb: add autodetection support for USB ID 2040:f5a0
Michael Neuling (3):
powerpc: Fix uninitialised error in numa.c powerpc/pseries: Fix software invalidate TCE powerpc/kvm: sldi should be sld
Mike Snitzer (3):
dm persistent data: fix shadow_info_leak on dm_tm_destroy dm persistent data: handle space map checker creation failure dm persistent data: fix allocation failure in space map checker init
Milan Broz (1):
dm: verity fix documentation
Mitch A Williams (1):
igbvf: fix divide by zero
Mohammed Shafi Shajakhan (3):
ath9k: Fix a WARNING on suspend/resume with IBSS
ath9k: Fix softlockup in AR9485
ath9k_hw: avoid possible infinite loop in ar9003_get_pll_sqsum_dvc
NeilBrown (2):
md/raid10: Don't try to recovery unmatched (and unused) chunks. md/raid10: fix failure when trying to repair a read error.
Nicolas Pitre (1):
ARM: 7438/1: fill possible PMD empty section gaps
Ohad Ben-Cohen (4):
rpmsg: avoid premature deallocation of endpoints
rpmsg: make sure inflight messages don't invoke just-removed callbacks remoteproc/omap: fix randconfig unmet direct dependencies
remoteproc: fix missing CONFIG_FW_LOADER configurations
Olaf Hering (1):
Tools: hv: verify origin of netlink connector message
Panayiotis Karabassis (1):
ath9k: enable serialize_regmode for non-PCIE AR9287
Paul Moore (1):
cipso: handle CIPSO options correctly when NetLabel is disabled
Pavel Vasilyev (1):
ACPI sysfs.c strlen fix
Pravin B Shelar (1):
mm: fix slab->page _count corruption when using slub
Rafael J. Wysocki (1):
ACPI / PM: Make acpi_pm_device_sleep_state() follow the specification
Rajendra Nayak (2):
clk: Allow late cache allocation for clk->parents
clk: fix parent validation in __clk_set_parent()
Rajkumar Manoharan (1):
ath9k_htc: configure bssid on ASSOC/IBSS change
Ryusuke Konishi (1):
nilfs2: ensure proper cache clearing for gc-inodes
Sarah Sharp (1):
xhci: Fix hang on back-to-back Set TR Deq Ptr commands.
Shaohua Li (1):
raid5: delayed stripe fix
Shinya Kuribayashi (1):
hwspinlock/core: use global ID to register hwspinlocks on multiple devices
Shuah Khan (1):
iommu/amd: Fix missing iommu_shutdown initialization in passthrough mode
Stanislav Kinsbursky (4):
Lockd: pass network namespace to creation and destruction routines
SUNRPC: new svc_bind() routine introduced
SUNRPC: move per-net operations from svc_destroy()
NFS: hard-code init_net for NFS callback transports
Stanislav Yakovlev (1):
net/wireless: ipw2x00: add supported cipher suites to wiphy initialization
Stanislaw Gruszka (1):
rtl8187: ->brightness_set can not sleep
Stanislaw Ledwon (1):
usb: Add support for root hub port status CAS
Stephen Warren (1):
ARM: tegra: make tegra_cpu_reset_handler_enable() __init
Steven Rostedt (1):
powerpc/ftrace: Do not trace restore_interrupts()
Stone Piao (2):
mwifiex: fix 11n rx packet drop issue
mwifiex: fix WPS eapol handshake failure
Stuart Hayes (1):
acpi_pad: fix power_saving thread deadlock
Suresh Jayaraman (1):
cifs: fix parsing of password mount option
Suresh Siddha (1):
x86, compat: Use test_thread_flag(TIF_IA32) in compat signal delivery
Takashi Iwai (3):
ALSA: hda - Fix memory leaks at module unload
ALSA: hda - Fix power-map regression for HP dv6 & co drm/i915: Fix eDP blank screen after S3 resume on HP desktops
Tao Guo (1):
umem: fix up unplugging
Thomas Graf (2):
ipv6: fib: Restore NTF_ROUTER exception in fib6_age()
ipv6: Move ipv6 proc file registration to end of init order
Tom Hughes (1):
ath9k: fix panic caused by returning a descriptor we have queued for reuse
Tomi Valkeinen (1):
OMAPDSS: use DSI_FIFO_BUG workaround only for manual update displays
Tushar Behera (1):
dmaengine: pl330: dont complete descriptor for cyclic dma
Tyler Hicks (3):
eCryptfs: Gracefully refuse miscdev file ops on inherited/passed files
eCryptfs: Fix lockdep warning in miscdev operations
eCryptfs: Properly check for O_RDONLY flag before doing privileged open
Vaibhav Nagarnaik (1):
tracing: change CPU ring buffer state from tracing_cpumask
Will Deacon (1):
oprofile: perf: use NR_CPUS instead or nr_cpumask_bits for static array
Yinghai Lu (1):
memblock: free allocated memblock_reserved_regions later
Zhang Rui (2):
ACPI video: Still use ACPI backlight control if _DOS doesn't exist ACPI, x86: fix Dell M6600 ACPI reboot regression via DMI
majianpeng (2):
md/raid5: In ops_run_io, inc nr_pending before calling md_wait_for_blocked_rdev md/raid5: Do not add data_offset before call to is_badblock
stephen hemminger (2):
sky2: fix checksum bit management on some chips
bridge: Assign rtnl_link_ops to bridge devices created via ioctl (v2)
Documentation/device-mapper/verity.txt +46 -85
@@ -7,39 +7,39 @@ This target is read-only. Construction Parameters ======================= - <version> <dev> <hash_dev> <hash_start> + <version> <dev> <hash_dev> <data_block_size> <hash_block_size> <num_data_blocks> <hash_start_block> <algorithm> <digest> <salt> <version> - This is the version number of the on-disk format. + This is the type of the on-disk hash format. 0 is the original format used in the Chromium OS. - The salt is appended when hashing, digests are stored continuously and - the rest of the block is padded with zeros. + The salt is appended when hashing, digests are stored continuously and + the rest of the block is padded with zeros. 1 is the current format that should be used for new devices. - The salt is prepended when hashing and each digest is - padded with zeros to the power of two. + The salt is prepended when hashing and each digest is + padded with zeros to the power of two. <dev> - This is the device containing the data the integrity of which needs to be + This is the device containing data, the integrity of which needs to be checked. It may be specified as a path, like /dev/sdaX, or a device number, <major>:<minor>. <hash_dev> - This is the device that that supplies the hash tree data. It may be + This is the device that supplies the hash tree data. It may be specified similarly to the device path and may be the same device. If the - same device is used, the hash_start should be outside of the dm-verity - configured device size. + same device is used, the hash_start should be outside the configured + dm-verity device. <data_block_size> - The block size on a data device. Each block corresponds to one digest on - the hash device. + The block size on a data device in bytes. + Each block corresponds to one digest on the hash device. <hash_block_size> - The size of a hash block. + The size of a hash block in bytes. <num_data_blocks> The number of data blocks on the data device. Additional blocks are
@@ -65,7 +65,7 @@ Construction Parameters Theory of operation =================== -dm-verity is meant to be setup as part of a verified boot path. This +dm-verity is meant to be set up as part of a verified boot path. This may be anything ranging from a boot using tboot or trustedgrub to just booting from a known-good device (like a USB drive or CD).
@@ -73,20 +73,20 @@ When a dm-verity device is configured, it is expected that the caller has been authenticated in some way (cryptographic signatures, etc). After instantiation, all hashes will be verified on-demand during disk access. If they cannot be verified up to the root node of the -tree, the root hash, then the I/O will fail. This should identify +tree, the root hash, then the I/O will fail. This should detect tampering with any data on the device and the hash data. Cryptographic hashes are used to assert the integrity of the device on a -per-block basis. This allows for a lightweight hash computation on first read -into the page cache. Block hashes are stored linearly-aligned to the nearest -block the size of a page. +per-block basis. This allows for a lightweight hash computation on first read +into the page cache. Block hashes are stored linearly, aligned to the nearest +block size. Hash Tree --------- Each node in the tree is a cryptographic hash. If it is a leaf node, the hash -is of some block data on disk. If it is an intermediary node, then the hash is -of a number of child nodes. +of some data block on disk is calculated. If it is an intermediary node, +the hash of a number of child nodes is calculated. Each entry in the tree is a collection of neighboring nodes that fit in one block. The number is determined based on block_size and the size of the
@@ -110,63 +110,23 @@ alg = sha256, num_blocks = 32768, block_size = 4096 On-disk format ============== -Below is the recommended on-disk format. The verity kernel code does not -read the on-disk header. It only reads the hash blocks which directly -follow the header. It is expected that a user-space tool will verify the -integrity of the verity_header and then call dmsetup with the correct -parameters. Alternatively, the header can be omitted and the dmsetup -parameters can be passed via the kernel command-line in a rooted chain -of trust where the command-line is verified. +The verity kernel code does not read the verity metadata on-disk header. +It only reads the hash blocks which directly follow the header. +It is expected that a user-space tool will verify the integrity of the +verity header. -The on-disk format is especially useful in cases where the hash blocks -are on a separate partition. The magic number allows easy identification -of the partition contents. Alternatively, the hash blocks can be stored -in the same partition as the data to be verified. In such a configuration -the filesystem on the partition would be sized a little smaller than -the full-partition, leaving room for the hash blocks. - -struct superblock { - uint8_t signature[8] - "verity\0\0"; - - uint8_t version; - 1 - current format - - uint8_t data_block_bits; - log2(data block size) - - uint8_t hash_block_bits; - log2(hash block size) - - uint8_t pad1[1]; - zero padding - - uint16_t salt_size; - big-endian salt size - - uint8_t pad2[2]; - zero padding - - uint32_t data_blocks_hi; - big-endian high 32 bits of the 64-bit number of data blocks - - uint32_t data_blocks_lo; - big-endian low 32 bits of the 64-bit number of data blocks - - uint8_t algorithm[16]; - cryptographic algorithm - - uint8_t salt[384]; - salt (the salt size is specified above) - - uint8_t pad3[88]; - zero padding to 512-byte boundary -} +Alternatively, the header can be omitted and the dmsetup parameters can +be passed via the kernel command-line in a rooted chain of trust where +the command-line is verified. Directly following the header (and with sector number padded to the next hash block boundary) are the hash blocks which are stored a depth at a time (starting from the root), sorted in order of increasing index. +The full specification of kernel parameters and on-disk metadata format +is available at the cryptsetup project's wiki page + http://code.google.com/p/cryptsetup/wiki/DMVerity + Status ====== V (for Valid) is returned if every check performed so far was valid.
@@ -174,21 +134,22 @@ If any check failed, C (for Corruption) is returned. Example ======= - -Setup a device: - dmsetup create vroot --table \ - "0 2097152 "\ - "verity 1 /dev/sda1 /dev/sda2 4096 4096 2097152 1 "\ +Set up a device: + # dmsetup create vroot --readonly --table \ + "0 2097152 verity 1 /dev/sda1 /dev/sda2 4096 4096 262144 1 sha256 "\ "4392712ba01368efdf14b05c76f9e4df0d53664630b5d48632ed17a137f39076 "\ "1234000000000000000000000000000000000000000000000000000000000000" A command line tool veritysetup is available to compute or verify -the hash tree or activate the kernel driver. This is available from -the LVM2 upstream repository and may be supplied as a package called -device-mapper-verity-tools: - git://sources.redhat.com/git/lvm2 - http://sourceware.org/git/?p=lvm2.git - http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/verity?cvsroot=lvm2 - -veritysetup -a vroot /dev/sda1 /dev/sda2 \ - 4392712ba01368efdf14b05c76f9e4df0d53664630b5d48632ed17a137f39076 +the hash tree or activate the kernel device. This is available from +the cryptsetup upstream repository http://code.google.com/p/cryptsetup/ +(as a libcryptsetup extension). + +Create hash on the device: + # veritysetup format /dev/sda1 /dev/sda2 + ... + Root hash: 4392712ba01368efdf14b05c76f9e4df0d53664630b5d48632ed17a137f39076 + +Activate the device: + # veritysetup create vroot /dev/sda1 /dev/sda2 \ + 4392712ba01368efdf14b05c76f9e4df0d53664630b5d48632ed17a137f39076
Documentation/stable_kernel_rules.txt +6 -0
@@ -12,6 +12,12 @@ Rules on what kind of patches are accepted, and which ones are not, into the marked CONFIG_BROKEN), an oops, a hang, data corruption, a real security issue, or some "oh, that's not good" issue. In short, something critical. + - Serious issues as reported by a user of a distribution kernel may also + be considered if they fix a notable performance or interactivity issue. + As these fixes are not as obvious and have a higher risk of a subtle + regression they should only be submitted by a distribution kernel + maintainer and include an addendum linking to a bugzilla entry if it + exists and additional information on the user-visible impact. - New device IDs and quirks are also accepted. - No "theoretical race condition" issues, unless an explanation of how the race can be exploited is also provided.
Makefile +1 -1
@@ -1,6 +1,6 @@ VERSION = 3 PATCHLEVEL = 4 -SUBLEVEL = 4 +SUBLEVEL = 5 EXTRAVERSION = NAME = Saber-toothed Squirrel
arch/arm/mach-dove/include/mach/bridge-regs.h +1 -0
@@ -50,5 +50,6 @@#define POWER_MANAGEMENT (BRIDGE_VIRT_BASE | 0x011c)#define TIMER_VIRT_BASE (BRIDGE_VIRT_BASE | 0x0300) +#define TIMER_PHYS_BASE (BRIDGE_PHYS_BASE | 0x0300)#endif
arch/arm/mach-dove/include/mach/dove.h +1 -0
@@ -78,6 +78,7 @@/* North-South Bridge */ #define BRIDGE_VIRT_BASE (DOVE_SB_REGS_VIRT_BASE | 0x20000) +#define BRIDGE_PHYS_BASE (DOVE_SB_REGS_PHYS_BASE | 0x20000)/* Cryptographic Engine */ #define DOVE_CRYPT_PHYS_BASE (DOVE_SB_REGS_PHYS_BASE | 0x30000)
arch/arm/mach-kirkwood/include/mach/bridge-regs.h +1 -0
@@ -38,6 +38,7 @@#define IRQ_MASK_HIGH_OFF 0x0014#define TIMER_VIRT_BASE (BRIDGE_VIRT_BASE | 0x0300) +#define TIMER_PHYS_BASE (BRIDGE_PHYS_BASE | 0x0300)#define L2_CONFIG_REG (BRIDGE_VIRT_BASE | 0x0128)#define L2_WRITETHROUGH 0x00000010
arch/arm/mach-kirkwood/include/mach/kirkwood.h +1 -0
@@ -80,6 +80,7 @@#define UART1_VIRT_BASE (DEV_BUS_VIRT_BASE | 0x2100)#define BRIDGE_VIRT_BASE (KIRKWOOD_REGS_VIRT_BASE | 0x20000) +#define BRIDGE_PHYS_BASE (KIRKWOOD_REGS_PHYS_BASE | 0x20000)#define CRYPTO_PHYS_BASE (KIRKWOOD_REGS_PHYS_BASE | 0x30000)
arch/arm/mach-mv78xx0/include/mach/bridge-regs.h +1 -0
@@ -31,5 +31,6 @@#define IRQ_MASK_HIGH_OFF 0x0014#define TIMER_VIRT_BASE (BRIDGE_VIRT_BASE | 0x0300) +#define TIMER_PHYS_BASE (BRIDGE_PHYS_BASE | 0x0300)#endif
arch/arm/mach-mv78xx0/include/mach/mv78xx0.h +2 -0
@@ -42,6 +42,7 @@#define MV78XX0_CORE0_REGS_PHYS_BASE 0xf1020000#define MV78XX0_CORE1_REGS_PHYS_BASE 0xf1024000#define MV78XX0_CORE_REGS_VIRT_BASE 0xfe400000 +#define MV78XX0_CORE_REGS_PHYS_BASE 0xfe400000#define MV78XX0_CORE_REGS_SIZE SZ_16K#define MV78XX0_PCIE_IO_PHYS_BASE (i) (0xf0800000 + ((i) << 20))
@@ -59,6 +60,7 @@* Core-specific peripheral registers. */ #define BRIDGE_VIRT_BASE (MV78XX0_CORE_REGS_VIRT_BASE) +#define BRIDGE_PHYS_BASE (MV78XX0_CORE_REGS_PHYS_BASE)/* * Register Map
arch/arm/mach-orion5x/include/mach/bridge-regs.h +1 -1
@@ -35,5 +35,5 @@#define MAIN_IRQ_MASK (ORION5X_BRIDGE_VIRT_BASE | 0x204)#define TIMER_VIRT_BASE (ORION5X_BRIDGE_VIRT_BASE | 0x300) - +#define TIMER_PHYS_BASE (ORION5X_BRIDGE_PHYS_BASE | 0x300)#endif
arch/arm/mach-orion5x/include/mach/orion5x.h +1 -0
@@ -82,6 +82,7 @@#define UART1_VIRT_BASE (ORION5X_DEV_BUS_VIRT_BASE | 0x2100)#define ORION5X_BRIDGE_VIRT_BASE (ORION5X_REGS_VIRT_BASE | 0x20000) +#define ORION5X_BRIDGE_PHYS_BASE (ORION5X_REGS_PHYS_BASE | 0x20000)#define ORION5X_PCI_VIRT_BASE (ORION5X_REGS_VIRT_BASE | 0x30000)
arch/arm/mach-tegra/reset.c +1 -1
@@ -33,7 +33,7 @@static bool is_enabled; -static void tegra_cpu_reset_handler_enable (void ) +static void __init tegra_cpu_reset_handler_enable (void ) {void __iomem *iram_base =IO_ADDRESS (TEGRA_IRAM_RESET_BASE ); void __iomem *evp_cpu_reset =
arch/arm/mm/mmu.c +74 -0
86 lines not on this page · raw message
arch/arm/plat-orion/common.c +1 -1
@@ -570,7 +570,7 @@ void __init orion_spi_1_init(unsigned long mapbase,static struct orion_wdt_platform_data orion_wdt_data;static struct resource orion_wdt_resource = -DEFINE_RES_MEM (TIMER_VIRT_BASE ,0x28 ); +DEFINE_RES_MEM (TIMER_PHYS_BASE ,0x28 );static struct platform_device orion_wdt_device = { .name ="orion_wdt" ,
arch/arm/plat-samsung/include/plat/map-s3c.h +1 -1
@@ -22,7 +22,7 @@#define S3C24XX_VA_WATCHDOG S3C_VA_WATCHDOG#define S3C2412_VA_SSMC S3C_ADDR_CPU(0x00000000) -#define S3C2412_VA_EBI S3C_ADDR_CPU(0x00010000) +#define S3C2412_VA_EBI S3C_ADDR_CPU(0x00100000)#define S3C2410_PA_UART (0x50000000)#define S3C24XX_PA_UART S3C2410_PA_UART
arch/arm/plat-samsung/include/plat/watchdog-reset.h +1 -1
@@ -25,7 +25,7 @@ static inline void arch_wdt_reset(void)__raw_writel (0 ,S3C2410_WTCON );/* disable watchdog, to be safe */ -if (s3c2410_wdtclk) +if (!IS_ERR (s3c2410_wdtclk))clk_enable (s3c2410_wdtclk);/* put initial values into count and data */
arch/powerpc/include/asm/hw_irq.h +9 -2
@@ -85,8 +85,8 @@ static inline bool arch_irqs_disabled(void) }#ifdef CONFIG_PPC_BOOK3E -#define __hard_irq_enable () asm volatile("wrteei 1" : : : "memory"); -#define __hard_irq_disable () asm volatile("wrteei 0" : : : "memory"); +#define __hard_irq_enable () asm volatile("wrteei 1" : : : "memory") +#define __hard_irq_disable () asm volatile("wrteei 0" : : : "memory")#else #define __hard_irq_enable () __mtmsrd(local_paca->kernel_msr | MSR_EE, 1)#define __hard_irq_disable () __mtmsrd(local_paca->kernel_msr, 1)
@@ -102,6 +102,11 @@ static inline void hard_irq_disable(void)/* include/linux/interrupt.h needs hard_irq_disable to be a macro */ #define hard_irq_disable hard_irq_disable +static inline bool lazy_irq_pending (void ) +{ +return !!(get_paca ()->irq_happened & ~PACA_IRQ_HARD_DIS ); +} +/* * This is called by asynchronous interrupts to conditionally * re-enable hard interrupts when soft-disabled after having
@@ -119,6 +124,8 @@ static inline bool arch_irq_disabled_regs(struct pt_regs *regs) return !regs->softe; } +extern bool prep_irq_for_idle (void ); +#else /* CONFIG_PPC64 */ #define SET_MSR_EE (x) mtmsr(x)
arch/powerpc/kernel/irq.c +48 -2
68 lines not on this page · raw message
arch/powerpc/kvm/book3s_hv_rmhandlers.S +1 -1
@@ -776,7 +776,7 @@ END_FTR_SECTION_IFSET(CPU_FTR_ARCH_201) lwz r3,VCORE_NAPPING_THREADS(r5) lwz r4,VCPU_PTID(r9) li r0,1 - sldi r0,r0,r4 + sld r0,r0,r4 andc. r3,r3,r0 /* no sense IPI'ing ourselves */ beq 43f mulli r4,r4,PACA_SIZE /* get paca for thread 0 */
arch/powerpc/mm/numa.c +1 -1
@@ -635,7 +635,7 @@ static inline int __init read_usm_ranges(const u32 **usm)*/ static void __init parse_drconf_memory (struct device_node *memory) { -const u32 *dm, *usm; +const u32 *uninitialized_var (dm ), *usm;unsigned int n, rc, ranges, is_kexec_kdump =0 ;unsigned long lmb_size, base, size, sz;int nid;
arch/powerpc/platforms/cell/pervasive.c +6 -5
@@ -42,11 +42,9 @@ static void cbe_power_save(void) {unsigned long ctrl, thread_switch_control; -/* -* We need to hard disable interrupts, the local_irq_enable() done by -* our caller upon return will hard re-enable. -*/ -hard_irq_disable (); +/* Ensure our interrupt state is properly tracked */ +if (!prep_irq_for_idle ()) +return ; ctrl =mfspr (SPRN_CTRLF );
@@ -81,6 +79,9 @@ static void cbe_power_save(void)*/ ctrl &= ~(CTRL_RUNLATCH |CTRL_TE );mtspr (SPRN_CTRLT , ctrl); + +/* Re-enable interrupts in MSR */ +__hard_irq_enable (); }static int cbe_system_reset_exception (struct pt_regs *regs)
arch/powerpc/platforms/pseries/iommu.c +2 -2
@@ -106,7 +106,7 @@ static int tce_build_pSeries(struct iommu_table *tbl, long index, tcep++; } -if (tbl->it_type ==TCE_PCI_SWINV_CREATE ) +if (tbl->it_type &TCE_PCI_SWINV_CREATE )tce_invalidate_pSeries_sw (tbl, tces, tcep -1 );return 0 ; }
@@ -121,7 +121,7 @@ static void tce_free_pSeries(struct iommu_table *tbl, long index, long npages)while (npages--) *(tcep++) =0 ; -if (tbl->it_type ==TCE_PCI_SWINV_FREE ) +if (tbl->it_type &TCE_PCI_SWINV_FREE )tce_invalidate_pSeries_sw (tbl, tces, tcep -1 ); }
arch/powerpc/platforms/pseries/processor_idle.c +10 -7
@@ -99,15 +99,18 @@ out:static void check_and_cede_processor (void ) {/* -* Interrupts are soft-disabled at this point, -* but not hard disabled. So an interrupt might have -* occurred before entering NAP, and would be potentially -* lost (edge events, decrementer events, etc...) unless -* we first hard disable then check. +* Ensure our interrupt state is properly tracked, +* also checks if no interrupt has occurred while we +* were soft-disabled */ -hard_irq_disable (); -if (get_paca ()->irq_happened ==0 ) +if (prep_irq_for_idle ()) {cede_processor (); +#ifdef CONFIG_TRACE_IRQFLAGS +/* Ensure that H_CEDE returns with IRQs on */ +if (WARN_ON (!(mfmsr () &MSR_EE ))) +__hard_irq_enable (); +#endif + } } static int dedicated_cede_loop(struct cpuidle_device *dev,
arch/powerpc/xmon/xmon.c +1 -1
@@ -971,7 +971,7 @@ static int cpu_cmd(void)/* print cpus waiting or in xmon */ printf ("cpus stopped:" ); count =0 ; -for (cpu =0 ; cpu <NR_CPUS ; ++cpu) { +for_each_possible_cpu (cpu) {if (cpumask_test_cpu (cpu, &cpus_in_xmon)) {if (count ==0 )printf (" %x" , cpu);
arch/x86/ia32/ia32_signal.c +1 -1
@@ -38,7 +38,7 @@int copy_siginfo_to_user32 (compat_siginfo_t __user *to,siginfo_t *from) {int err =0 ; -bool ia32 =is_ia32_task (); +bool ia32 =test_thread_flag (TIF_IA32 );if (!access_ok (VERIFY_WRITE , to,sizeof (compat_siginfo_t)))return -EFAULT ;
arch/x86/include/asm/cpufeature.h +1 -1
@@ -176,7 +176,7 @@#define X86_FEATURE_XSAVEOPT (7*32+ 4)/* Optimized Xsave */ #define X86_FEATURE_PLN (7*32+ 5)/* Intel Power Limit Notification */ #define X86_FEATURE_PTS (7*32+ 6)/* Intel Package Thermal Status */ -#define X86_FEATURE_DTS (7*32+ 7)/* Digital Thermal Sensor */ +#define X86_FEATURE_DTHERM (7*32+ 7)/* Digital Thermal Sensor */ #define X86_FEATURE_HW_PSTATE (7*32+ 8)/* AMD HW-PState */ /* Virtualization flags: Linux defined, word 8 */
arch/x86/include/asm/pgtable-3level.h +54 -0
60 lines not on this page · raw message
arch/x86/kernel/acpi/boot.c +16 -11
@@ -422,12 +422,14 @@ acpi_parse_int_src_ovr(struct acpi_subtable_header * header,return 0 ; } -if (intsrc->source_irq ==0 && intsrc->global_irq ==2 ) { +if (intsrc->source_irq ==0 ) {if (acpi_skip_timer_override) { -printk (PREFIX "BIOS IRQ0 pin2 override ignored.\n" ); +printk (PREFIX "BIOS IRQ0 override ignored.\n" );return 0 ; } -if (acpi_fix_pin2_polarity && (intsrc->inti_flags &ACPI_MADT_POLARITY_MASK )) { + +if ((intsrc->global_irq ==2 ) && acpi_fix_pin2_polarity + && (intsrc->inti_flags &ACPI_MADT_POLARITY_MASK )) { intsrc->inti_flags &= ~ACPI_MADT_POLARITY_MASK ;printk (PREFIX "BIOS IRQ0 pin2 override: forcing polarity to high active.\n" ); }
@@ -1334,17 +1336,12 @@ static int __init dmi_disable_acpi(const struct dmi_system_id *d) }/* -* Force ignoring BIOS IRQ0 pin2 override +* Force ignoring BIOS IRQ0 override */ static int __init dmi_ignore_irq0_timer_override (const struct dmi_system_id *d) { -/* -* The ati_ixp4x0_rev() early PCI quirk should have set -* the acpi_skip_timer_override flag already: -*/ if (!acpi_skip_timer_override) { -WARN (1 ,KERN_ERR "ati_ixp4x0 quirk not complete.\n" ); -pr_notice ("%s detected: Ignoring BIOS IRQ0 pin2 override\n" , +pr_notice ("%s detected: Ignoring BIOS IRQ0 override\n" , d->ident); acpi_skip_timer_override =1 ; }
@@ -1438,7 +1435,7 @@ static struct dmi_system_id __initdata acpi_dmi_table_late[] = {* is enabled. This input is incorrectly designated the * ISA IRQ 0 via an interrupt source override even though * it is wired to the output of the master 8259A and INTIN0 -* is not connected at all. Force ignoring BIOS IRQ0 pin2 +* is not connected at all. Force ignoring BIOS IRQ0 * override in that cases. */ {
@@ -1473,6 +1470,14 @@ static struct dmi_system_id __initdata acpi_dmi_table_late[] = { DMI_MATCH(DMI_PRODUCT_NAME, "HP Compaq 6715b"), }, }, + { + .callback = dmi_ignore_irq0_timer_override, + .ident = "FUJITSU SIEMENS", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU SIEMENS"), + DMI_MATCH(DMI_PRODUCT_NAME, "AMILO PRO V2030"), + }, + }, {} };
arch/x86/kernel/cpu/scattered.c +1 -1
@@ -31,7 +31,7 @@ void __cpuinit init_scattered_cpuid_features(struct cpuinfo_x86 *c)const struct cpuid_bit *cb;static const struct cpuid_bit __cpuinitconst cpuid_bits[] = { - {X86_FEATURE_DTS ,CR_EAX ,0 ,0x00000006 ,0 }, + {X86_FEATURE_DTHERM ,CR_EAX ,0 ,0x00000006 ,0 }, {X86_FEATURE_IDA ,CR_EAX ,1 ,0x00000006 ,0 }, {X86_FEATURE_ARAT ,CR_EAX ,2 ,0x00000006 ,0 }, {X86_FEATURE_PLN ,CR_EAX ,4 ,0x00000006 ,0 },
arch/x86/kernel/reboot.c +8 -0
@@ -471,6 +471,14 @@ static struct dmi_system_id __initdata pci_reboot_dmi_table[] = { DMI_MATCH(DMI_PRODUCT_NAME, "OptiPlex 990"), }, }, + { /* Handle problems with rebooting on the Precision M6600. */ + .callback = set_pci_reboot, + .ident = "Dell OptiPlex 990", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), + DMI_MATCH(DMI_PRODUCT_NAME, "Precision M6600"), + }, + }, { } };
drivers/acpi/acpi_pad.c +4 -3
@@ -36,6 +36,7 @@#define ACPI_PROCESSOR_AGGREGATOR_DEVICE_NAME "Processor Aggregator"#define ACPI_PROCESSOR_AGGREGATOR_NOTIFY 0x80static DEFINE_MUTEX (isolated_cpus_lock); +static DEFINE_MUTEX (round_robin_lock);static unsigned long power_saving_mwait_eax;
@@ -107,7 +108,7 @@ static void round_robin_cpu(unsigned int tsk_index)if (!alloc_cpumask_var (&tmp,GFP_KERNEL ))return ; -mutex_lock (&isolated_cpus_lock); +mutex_lock (&round_robin_lock);cpumask_clear (tmp);for_each_cpu (cpu, pad_busy_cpus)cpumask_or (tmp, tmp,topology_thread_cpumask (cpu));
@@ -116,7 +117,7 @@ static void round_robin_cpu(unsigned int tsk_index)if (cpumask_empty (tmp))cpumask_andnot (tmp, cpu_online_mask, pad_busy_cpus);if (cpumask_empty (tmp)) { -mutex_unlock (&isolated_cpus_lock); +mutex_unlock (&round_robin_lock);return ; }for_each_cpu (cpu, tmp) {
@@ -131,7 +132,7 @@ static void round_robin_cpu(unsigned int tsk_index) tsk_in_cpu[tsk_index] = preferred_cpu;cpumask_set_cpu (preferred_cpu, pad_busy_cpus); cpu_weight[preferred_cpu]++; -mutex_unlock (&isolated_cpus_lock); +mutex_unlock (&round_robin_lock);set_cpus_allowed_ptr (current,cpumask_of (preferred_cpu)); }
drivers/acpi/acpica/hwsleep.c +0 -22
@@ -95,18 +95,6 @@ acpi_status acpi_hw_legacy_sleep(u8 sleep_state, u8 flags)return_ACPI_STATUS (status); } -if (sleep_state !=ACPI_STATE_S5 ) { -/* -* Disable BM arbitration. This feature is contained within an -* optional register (PM2 Control), so ignore a BAD_ADDRESS -* exception. -*/ - status =acpi_write_bit_register (ACPI_BITREG_ARB_DISABLE ,1 ); -if (ACPI_FAILURE (status) && (status !=AE_BAD_ADDRESS )) { -return_ACPI_STATUS (status); - } - } -/* * 1) Disable/Clear all GPEs * 2) Enable all wakeup GPEs
@@ -364,16 +352,6 @@ acpi_status acpi_hw_legacy_wake(u8 sleep_state, u8 flags) [ACPI_EVENT_POWER_BUTTON ]. status_register_id, ACPI_CLEAR_STATUS); -/* -* Enable BM arbitration. This feature is contained within an -* optional register (PM2 Control), so ignore a BAD_ADDRESS -* exception. -*/ - status =acpi_write_bit_register (ACPI_BITREG_ARB_DISABLE ,0 ); -if (ACPI_FAILURE (status) && (status !=AE_BAD_ADDRESS )) { -return_ACPI_STATUS (status); - } -acpi_hw_execute_sleep_method (METHOD_PATHNAME__SST ,ACPI_SST_WORKING );return_ACPI_STATUS (status); }
drivers/acpi/apei/apei-base.c +15 -2
@@ -243,7 +243,7 @@ static int pre_map_gar_callback(struct apei_exec_context *ctx,u8 ins = entry->instruction;if (ctx->ins_table[ins].flags &APEI_EXEC_INS_ACCESS_REGISTER ) -return acpi_os_map_generic_address (&entry->register_region); +return apei_map_generic_address (&entry->register_region);return 0 ; }
@@ -276,7 +276,7 @@ static int post_unmap_gar_callback(struct apei_exec_context *ctx,u8 ins = entry->instruction;if (ctx->ins_table[ins].flags &APEI_EXEC_INS_ACCESS_REGISTER ) -acpi_os_unmap_generic_address (&entry->register_region); +apei_unmap_generic_address (&entry->register_region);return 0 ; }
@@ -606,6 +606,19 @@ static int apei_check_gar(struct acpi_generic_address *reg, u64 *paddr,return 0 ; } +int apei_map_generic_address (struct acpi_generic_address *reg) +{ +int rc; +u32 access_bit_width; +u64 address; + + rc =apei_check_gar (reg, &address, &access_bit_width); +if (rc) +return rc; +return acpi_os_map_generic_address (reg); +} +EXPORT_SYMBOL_GPL (apei_map_generic_address); +/* read GAR in interrupt (including NMI) or process context */ int apei_read (u64 *val,struct acpi_generic_address *reg) {
drivers/acpi/apei/apei-internal.h +9 -0
@@ -7,6 +7,8 @@#define APEI_INTERNAL_H #include <linux/cper.h> +#include <linux/acpi.h> +#include <linux/acpi_io.h> struct apei_exec_context ;
@@ -68,6 +70,13 @@ static inline int apei_exec_run_optional(struct apei_exec_context *ctx, u8 actio/* IP has been set in instruction function */ #define APEI_EXEC_SET_IP 1 +int apei_map_generic_address (struct acpi_generic_address *reg); + +static inline void apei_unmap_generic_address (struct acpi_generic_address *reg) +{ +acpi_os_unmap_generic_address (reg); +} +int apei_read (u64 *val,struct acpi_generic_address *reg);int apei_write (u64 val,struct acpi_generic_address *reg);
drivers/acpi/apei/ghes.c +3 -3
@@ -301,7 +301,7 @@ static struct ghes *ghes_new(struct acpi_hest_generic *generic)if (!ghes)return ERR_PTR (-ENOMEM ); ghes->generic = generic; - rc =acpi_os_map_generic_address (&generic->error_status_address); + rc =apei_map_generic_address (&generic->error_status_address);if (rc) goto err_free; error_block_length = generic->error_block_length;
@@ -321,7 +321,7 @@ static struct ghes *ghes_new(struct acpi_hest_generic *generic)return ghes; err_unmap: -acpi_os_unmap_generic_address (&generic->error_status_address); +apei_unmap_generic_address (&generic->error_status_address); err_free:kfree (ghes);return ERR_PTR (rc);
@@ -330,7 +330,7 @@ err_free:static void ghes_fini (struct ghes *ghes) {kfree (ghes->estatus); -acpi_os_unmap_generic_address (&ghes->generic->error_status_address); +apei_unmap_generic_address (&ghes->generic->error_status_address); }enum {
drivers/acpi/sleep.c +2 -2
@@ -732,8 +732,8 @@ int acpi_pm_device_sleep_state(struct device *dev, int *d_min_p)* can wake the system. _S0W may be valid, too. */ if (acpi_target_sleep_state ==ACPI_STATE_S0 || - (device_may_wakeup (dev) && - adev->wakeup.sleep_state <= acpi_target_sleep_state)) { + (device_may_wakeup (dev) && adev->wakeup.flags.valid && + adev->wakeup.sleep_state >= acpi_target_sleep_state)) {acpi_status status; acpi_method[3 ] ='W' ;
drivers/acpi/sysfs.c +2 -2
@@ -173,7 +173,7 @@ static int param_set_trace_state(const char *val, struct kernel_param *kp) {int result =0 ; -if (!strncmp (val,"enable" ,strlen ("enable" ) -1 )) { +if (!strncmp (val,"enable" ,strlen ("enable" ))) { result =acpi_debug_trace (trace_method_name, trace_debug_level, trace_debug_layer,0 );if (result)
@@ -181,7 +181,7 @@ static int param_set_trace_state(const char *val, struct kernel_param *kp) goto exit; } -if (!strncmp (val,"disable" ,strlen ("disable" ) -1 )) { +if (!strncmp (val,"disable" ,strlen ("disable" ))) {int name =0 ; result =acpi_debug_trace ((char *)&name, trace_debug_level, trace_debug_layer,0 );
drivers/acpi/video.c +2 -0
@@ -558,6 +558,8 @@ acpi_video_bus_DOS(struct acpi_video_bus *video, int bios_flag, int lcd_flag)union acpi_object arg0 = {ACPI_TYPE_INTEGER };struct acpi_object_list args = {1 , &arg0 }; +if (!video->cap._DOS) +return 0 ;if (bios_flag <0 || bios_flag >3 || lcd_flag <0 || lcd_flag >1 )return -EINVAL ;
drivers/base/power/main.c +4 -2
@@ -1021,7 +1021,7 @@ static int __device_suspend(struct device *dev, pm_message_t state, bool async)dpm_wait_for_children (dev, async);if (async_error) -return 0 ; + goto Complete;pm_runtime_get_noresume (dev);if (pm_runtime_barrier (dev) &&device_may_wakeup (dev))
@@ -1030,7 +1030,7 @@ static int __device_suspend(struct device *dev, pm_message_t state, bool async)if (pm_wakeup_pending ()) {pm_runtime_put_sync (dev); async_error = -EBUSY ; -return 0 ; + goto Complete; }device_lock (dev);
@@ -1087,6 +1087,8 @@ static int __device_suspend(struct device *dev, pm_message_t state, bool async) }device_unlock (dev); + + Complete:complete_all (&dev->power.completion);if (error) {
drivers/block/umem.c +40 -0
@@ -513,6 +513,44 @@ static void process_page(unsigned long data) } } +struct mm_plug_cb { +struct blk_plug_cb cb; +struct cardinfo *card; +}; + +static void mm_unplug (struct blk_plug_cb *cb) +{ + struct mm_plug_cb *mmcb = container_of(cb, struct mm_plug_cb, cb); + +spin_lock_irq (&mmcb->card->lock); +activate (mmcb->card); +spin_unlock_irq (&mmcb->card->lock); +kfree (mmcb); +} + +static int mm_check_plugged (struct cardinfo *card) +{ +struct blk_plug *plug = current->plug; +struct mm_plug_cb *mmcb; + +if (!plug) +return 0 ; + +list_for_each_entry (mmcb, &plug->cb_list, cb.list) { +if (mmcb->cb.callback == mm_unplug && mmcb->card == card) +return 1 ; + } +/* Not currently on the callback list */ + mmcb =kmalloc (sizeof (*mmcb),GFP_ATOMIC ); +if (!mmcb) +return 0 ; + + mmcb->card = card; + mmcb->cb.callback = mm_unplug; +list_add (&mmcb->cb.list, &plug->cb_list); +return 1 ; +} +static void mm_make_request (struct request_queue *q,struct bio *bio) {struct cardinfo *card = q->queuedata;
@@ -523,6 +561,8 @@ static void mm_make_request(struct request_queue *q, struct bio *bio) *card->biotail = bio; bio->bi_next =NULL ; card->biotail = &bio->bi_next; +if (bio->bi_rw &REQ_SYNC || !mm_check_plugged (card)) +activate (card);spin_unlock_irq (&card->lock);return ;
drivers/block/xen-blkback/common.h +2 -0
@@ -257,6 +257,7 @@ static inline void blkif_get_x86_32_req(struct blkif_request *dst,break ;case BLKIF_OP_DISCARD : dst->u.discard.flag = src->u.discard.flag; + dst->u.discard.id = src->u.discard.id; dst->u.discard.sector_number = src->u.discard.sector_number; dst->u.discard.nr_sectors = src->u.discard.nr_sectors;break ;
@@ -287,6 +288,7 @@ static inline void blkif_get_x86_64_req(struct blkif_request *dst,break ;case BLKIF_OP_DISCARD : dst->u.discard.flag = src->u.discard.flag; + dst->u.discard.id = src->u.discard.id; dst->u.discard.sector_number = src->u.discard.sector_number; dst->u.discard.nr_sectors = src->u.discard.nr_sectors;break ;
drivers/clk/clk.c +15 -12
@@ -997,7 +997,7 @@ static struct clk *__clk_init_parent(struct clk *clk)if (!clk->parents) clk->parents = -kmalloc ((sizeof (struct clk *) * clk->num_parents), +kzalloc ((sizeof (struct clk *) * clk->num_parents),GFP_KERNEL );if (!clk->parents)
@@ -1062,21 +1062,24 @@ static int __clk_set_parent(struct clk *clk, struct clk *parent) old_parent = clk->parent; -/* find index of new parent clock using cached parent ptrs */ -for (i =0 ; i < clk->num_parents; i++) -if (clk->parents[i] == parent) -break ; +if (!clk->parents) + clk->parents =kzalloc ((sizeof (struct clk *) * clk->num_parents), +GFP_KERNEL );/* -* find index of new parent clock using string name comparison -* also try to cache the parent to avoid future calls to __clk_lookup +* find index of new parent clock using cached parent ptrs, +* or if not yet cached, use string name comparison and cache +* them now to avoid future calls to __clk_lookup. */ -if (i == clk->num_parents) -for (i =0 ; i < clk->num_parents; i++) -if (!strcmp (clk->parent_names[i], parent->name)) { +for (i =0 ; i < clk->num_parents; i++) { +if (clk->parents && clk->parents[i] == parent) +break ; +else if (!strcmp (clk->parent_names[i], parent->name)) { +if (clk->parents) clk->parents[i] =__clk_lookup (parent->name); -break ; - } +break ; + } + }if (i == clk->num_parents) { pr_debug("%s: clock %s is not a possible parent of clock %s\n",
drivers/dma/pl330.c +1 -1
@@ -2322,7 +2322,7 @@ static void pl330_tasklet(unsigned long data)/* Pick up ripe tomatoes */ list_for_each_entry_safe (desc, _dt, &pch->work_list, node)if (desc->status ==DONE ) { -if (pch->cyclic) +if (!pch->cyclic)dma_cookie_complete (&desc->txd);list_move_tail (&desc->node, &list); }
drivers/gpio/gpio-wm8994.c +4 -1
@@ -89,8 +89,11 @@ static int wm8994_gpio_direction_out(struct gpio_chip *chip,struct wm8994_gpio *wm8994_gpio =to_wm8994_gpio (chip);struct wm8994 *wm8994 = wm8994_gpio->wm8994; +if (value) + value =WM8994_GPN_LVL ; +return wm8994_set_bits (wm8994,WM8994_GPIO_1 + offset, -WM8994_GPN_DIR ,0 ); +WM8994_GPN_DIR |WM8994_GPN_LVL , value); }static void wm8994_gpio_set (struct gpio_chip *chip,unsigned offset,int value)
drivers/gpu/drm/drm_edid.c +1 -1
@@ -574,7 +574,7 @@ static bool drm_monitor_supports_rb(struct edid *edid) {if (edid->revision >=4 ) { -bool ret; +bool ret = false;drm_for_each_detailed_block ((u8 *)edid, is_rb, &ret);return ret; }
drivers/gpu/drm/i915/i915_irq.c +28 -29
75 lines not on this page · raw message
drivers/gpu/drm/i915/i915_suspend.c +4 -1
@@ -740,8 +740,11 @@ static void i915_restore_display(struct drm_device *dev)if (HAS_PCH_SPLIT (dev)) {I915_WRITE (BLC_PWM_PCH_CTL1 , dev_priv->saveBLC_PWM_CTL);I915_WRITE (BLC_PWM_PCH_CTL2 , dev_priv->saveBLC_PWM_CTL2); -I915_WRITE (BLC_PWM_CPU_CTL , dev_priv->saveBLC_CPU_PWM_CTL); +/* NOTE: BLC_PWM_CPU_CTL must be written after BLC_PWM_CPU_CTL2; +* otherwise we get blank eDP screen after S3 on some machines +*/ I915_WRITE (BLC_PWM_CPU_CTL2 , dev_priv->saveBLC_CPU_PWM_CTL2); +I915_WRITE (BLC_PWM_CPU_CTL , dev_priv->saveBLC_CPU_PWM_CTL);I915_WRITE (PCH_PP_ON_DELAYS , dev_priv->savePP_ON_DELAYS);I915_WRITE (PCH_PP_OFF_DELAYS , dev_priv->savePP_OFF_DELAYS);I915_WRITE (PCH_PP_DIVISOR , dev_priv->savePP_DIVISOR);
drivers/gpu/drm/nouveau/nouveau_fbcon.c +1 -1
@@ -497,7 +497,7 @@ int nouveau_fbcon_init(struct drm_device *dev) nfbdev->helper.funcs = &nouveau_fbcon_helper_funcs; ret =drm_fb_helper_init (dev, &nfbdev->helper, -nv_two_heads (dev) ?2 :1 ,4 ); + dev->mode_config.num_crtc,4 );if (ret) {kfree (nfbdev);return ret;
drivers/gpu/drm/radeon/radeon_gart.c +11 -2
@@ -289,8 +289,9 @@ int radeon_vm_manager_init(struct radeon_device *rdev) rdev->vm_manager.enabled = false;/* mark first vm as always in use, it's the system one */ +/* allocate enough for 2 full VM pts */ r =radeon_sa_bo_manager_init (rdev, &rdev->vm_manager.sa_manager, - rdev->vm_manager.max_pfn *8 , + rdev->vm_manager.max_pfn *8 *2 ,RADEON_GEM_DOMAIN_VRAM );if (r) { dev_err(rdev->dev, "failed to allocate vm bo (%dKB)\n",
@@ -635,7 +636,15 @@ int radeon_vm_init(struct radeon_device *rdev, struct radeon_vm *vm)mutex_init (&vm->mutex);INIT_LIST_HEAD (&vm->list);INIT_LIST_HEAD (&vm->va); - vm->last_pfn =0 ; +/* SI requires equal sized PTs for all VMs, so always set +* last_pfn to max_pfn. cayman allows variable sized +* pts so we can grow then as needed. Once we switch +* to two level pts we can unify this again. +*/ +if (rdev->family >=CHIP_TAHITI ) + vm->last_pfn = rdev->vm_manager.max_pfn; +else + vm->last_pfn =0 ;/* map the ib pool buffer at 0 in virtual address space, set * read only */
drivers/gpu/drm/radeon/si.c +2 -2
@@ -2527,12 +2527,12 @@ int si_pcie_gart_enable(struct radeon_device *rdev)WREG32 (0x15DC ,0 );/* empty context1-15 */ -/* FIXME start with 1G, once using 2 level pt switch to full +/* FIXME start with 4G, once using 2 level pt switch to full * vm size space */ /* set vm size, must be a multiple of 4 */ WREG32 (VM_CONTEXT1_PAGE_TABLE_START_ADDR ,0 ); -WREG32 (VM_CONTEXT1_PAGE_TABLE_END_ADDR , (1 <<30 ) /RADEON_GPU_PAGE_SIZE ); +WREG32 (VM_CONTEXT1_PAGE_TABLE_END_ADDR , rdev->vm_manager.max_pfn);for (i =1 ; i <16 ; i++) {if (i <8 ) WREG32(VM_CONTEXT0_PAGE_TABLE_BASE_ADDR + (i << 2),
drivers/hid/hid-multitouch.c +46 -12
152 lines not on this page · raw message
drivers/hwmon/applesmc.c +2 -2
@@ -215,7 +215,7 @@ static int read_smc(u8 cmd, const char *key, u8 *buffer, u8 len)int i;if (send_command (cmd) ||send_argument (key)) { -pr_warn ("%s: read arg fail\n" , key); +pr_warn ("%.4s: read arg fail\n" , key);return -EIO ; }
@@ -223,7 +223,7 @@ static int read_smc(u8 cmd, const char *key, u8 *buffer, u8 len)for (i =0 ; i < len; i++) {if (__wait_status (0x05 )) { -pr_warn ("%s: read data fail\n" , key); +pr_warn ("%.4s: read data fail\n" , key);return -EIO ; } buffer[i] =inb (APPLESMC_DATA_PORT );
drivers/hwmon/coretemp.c +2 -2
@@ -664,7 +664,7 @@ static void __cpuinit get_core_online(unsigned int cpu)* sensors. We check this bit only, all the early CPUs * without thermal sensors will be filtered out. */ -if (!cpu_has (c,X86_FEATURE_DTS )) +if (!cpu_has (c,X86_FEATURE_DTHERM ))return ;if (!pdev) {
@@ -765,7 +765,7 @@ static struct notifier_block coretemp_cpu_notifier __refdata = { };static const struct x86_cpu_id coretemp_ids[] = { - {X86_VENDOR_INTEL ,X86_FAMILY_ANY ,X86_MODEL_ANY ,X86_FEATURE_DTS }, + {X86_VENDOR_INTEL ,X86_FAMILY_ANY ,X86_MODEL_ANY ,X86_FEATURE_DTHERM }, {} };MODULE_DEVICE_TABLE (x86cpu, coretemp_ids);
drivers/hwspinlock/hwspinlock_core.c +2 -2
@@ -345,7 +345,7 @@ int hwspin_lock_register(struct hwspinlock_device *bank, struct device *dev,spin_lock_init (&hwlock->lock); hwlock->bank = bank; - ret =hwspin_lock_register_single (hwlock, i); + ret =hwspin_lock_register_single (hwlock, base_id + i);if (ret) goto reg_failed; }
@@ -354,7 +354,7 @@ int hwspin_lock_register(struct hwspinlock_device *bank, struct device *dev, reg_failed:while (--i >=0 ) -hwspin_lock_unregister_single (i); +hwspin_lock_unregister_single (base_id + i);return ret; }EXPORT_SYMBOL_GPL (hwspin_lock_register);
drivers/iommu/amd_iommu.c +9 -0
@@ -83,6 +83,8 @@ static struct iommu_ops amd_iommu_ops;static ATOMIC_NOTIFIER_HEAD (ppr_notifier);int amd_iommu_max_glx_val =-1 ; +static struct dma_map_ops amd_iommu_dma_ops; +/* * general struct to manage commands send to an IOMMU */
@@ -2267,6 +2269,13 @@ static int device_change_notifier(struct notifier_block *nb,list_add_tail (&dma_domain->list, &iommu_pd_list);spin_unlock_irqrestore (&iommu_pd_list_lock, flags); + dev_data =get_dev_data (dev); + +if (!dev_data->passthrough) + dev->archdata.dma_ops = &amd_iommu_dma_ops; +else + dev->archdata.dma_ops = &nommu_dma_ops; +break ;case BUS_NOTIFY_DEL_DEVICE :
drivers/iommu/amd_iommu_init.c +2 -2
@@ -1641,6 +1641,8 @@ static int __init amd_iommu_init(void)amd_iommu_init_api (); + x86_platform.iommu_shutdown = disable_iommus; +if (iommu_pass_through) goto out;
@@ -1649,8 +1651,6 @@ static int __init amd_iommu_init(void)else printk (KERN_INFO "AMD-Vi: Lazy IO/TLB flushing enabled\n" ); - x86_platform.iommu_shutdown = disable_iommus; - out:return ret;
drivers/iommu/tegra-smmu.c +2 -2
@@ -550,13 +550,13 @@ static int alloc_pdir(struct smmu_as *as)return 0 ; as->pte_count =devm_kzalloc (smmu->dev, -sizeof (as->pte_count[0 ]) *SMMU_PDIR_COUNT ,GFP_KERNEL ); +sizeof (as->pte_count[0 ]) *SMMU_PDIR_COUNT ,GFP_ATOMIC );if (!as->pte_count) {dev_err (smmu->dev,"failed to allocate smmu_device PTE cunters\n" );return -ENOMEM ; } - as->pdir_page =alloc_page (GFP_KERNEL | __GFP_DMA); + as->pdir_page =alloc_page (GFP_ATOMIC | __GFP_DMA);if (!as->pdir_page) {dev_err (smmu->dev,"failed to allocate smmu_device page directory\n" );
drivers/md/persistent-data/dm-space-map-checker.c +31 -23
137 lines not on this page · raw message
drivers/md/persistent-data/dm-space-map-disk.c +10 -1
@@ -290,7 +290,16 @@ struct dm_space_map *dm_sm_disk_create(struct dm_transaction_manager *tm, dm_block_t nr_blocks) {struct dm_space_map *sm =dm_sm_disk_create_real (tm, nr_blocks); -return dm_sm_checker_create_fresh (sm); +struct dm_space_map *smc; + +if (IS_ERR_OR_NULL (sm)) +return sm; + + smc =dm_sm_checker_create_fresh (sm); +if (IS_ERR (smc)) +dm_sm_destroy (sm); + +return smc; }EXPORT_SYMBOL_GPL (dm_sm_disk_create);
drivers/md/persistent-data/dm-transaction-manager.c +9 -2
@@ -138,6 +138,9 @@ EXPORT_SYMBOL_GPL(dm_tm_create_non_blocking_clone);void dm_tm_destroy (struct dm_transaction_manager *tm) { +if (!tm->is_clone) +wipe_shadow_table (tm); +kfree (tm); }EXPORT_SYMBOL_GPL (dm_tm_destroy);
@@ -342,8 +345,10 @@ static int dm_tm_create_internal(struct dm_block_manager *bm, } *sm =dm_sm_checker_create (inner); -if (!*sm) +if (IS_ERR (*sm)) { + r =PTR_ERR (*sm); goto bad2; + } }else { r = dm_bm_write_lock(dm_tm_get_bm(*tm), sb_location,
@@ -362,8 +367,10 @@ static int dm_tm_create_internal(struct dm_block_manager *bm, } *sm =dm_sm_checker_create (inner); -if (!*sm) +if (IS_ERR (*sm)) { + r =PTR_ERR (*sm); goto bad2; + } }return 0 ;
drivers/md/raid10.c +9 -3
@@ -2209,7 +2209,7 @@ static void fix_read_error(struct r10conf *conf, struct mddev *mddev, struct r10if (r10_sync_page_io (rdev, r10_bio->devs[sl].addr + sect, - s<<9 , conf->tmppage,WRITE ) + s, conf->tmppage,WRITE ) ==0 ) {/* Well, this device is dead */ printk(KERN_NOTICE
@@ -2246,7 +2246,7 @@ static void fix_read_error(struct r10conf *conf, struct mddev *mddev, struct r10switch (r10_sync_page_io (rdev, r10_bio->devs[sl].addr + sect, - s<<9 , conf->tmppage, + s, conf->tmppage,READ )) {case 0 :/* Well, this device is dead */
@@ -2407,7 +2407,7 @@ read_more: slot = r10_bio->read_slot; printk_ratelimited( KERN_ERR - "md/raid10:%s: %s: redirecting" + "md/raid10:%s: %s: redirecting " "sector %llu to another mirror\n", mdname(mddev), bdevname(rdev->bdev, b),
@@ -2772,6 +2772,12 @@ static sector_t sync_request(struct mddev *mddev, sector_t sector_nr,/* want to reconstruct this device */ rb2 = r10_bio; sect =raid10_find_virt (conf, sector_nr, i); +if (sect >= mddev->resync_max_sectors) { +/* last stripe is not complete - don't +* try to recover this sector. +*/ +continue ; + }/* Unless we are doing a full sync, or a replacement * we only need to recover the block if it is set in * the bitmap
drivers/md/raid5.c +12 -2
@@ -196,12 +196,14 @@ static void __release_stripe(struct r5conf *conf, struct stripe_head *sh)BUG_ON (!list_empty (&sh->lru));BUG_ON (atomic_read (&conf->active_stripes)==0 );if (test_bit (STRIPE_HANDLE , &sh->state)) { -if (test_bit (STRIPE_DELAYED , &sh->state)) +if (test_bit (STRIPE_DELAYED , &sh->state) && + !test_bit (STRIPE_PREREAD_ACTIVE , &sh->state))list_add_tail (&sh->lru, &conf->delayed_list);else if (test_bit (STRIPE_BIT_DELAY , &sh->state) && sh->bm_seq - conf->seq_write >0 )list_add_tail (&sh->lru, &conf->bitmap_list);else { +clear_bit (STRIPE_DELAYED , &sh->state);clear_bit (STRIPE_BIT_DELAY , &sh->state);list_add_tail (&sh->lru, &conf->handle_list); }
@@ -583,6 +585,12 @@ static void ops_run_io(struct stripe_head *sh, struct stripe_head_state *s)* a chance*/ md_check_recovery (conf->mddev); } +/* +* Because md_wait_for_blocked_rdev +* will dec nr_pending, we must +* increment it first. +*/ +atomic_inc (&rdev->nr_pending);md_wait_for_blocked_rdev (rdev, conf->mddev); }else {/* Acknowledged bad block - skip the write */
@@ -3842,7 +3850,6 @@ static int chunk_aligned_read(struct mddev *mddev, struct bio * raid_bio) raid_bio->bi_next = (void *)rdev; align_bi->bi_bdev = rdev->bdev; align_bi->bi_flags &= ~(1 <<BIO_SEG_VALID ); - align_bi->bi_sector += rdev->data_offset;if (!bio_fits_rdev (align_bi) || is_badblock(rdev, align_bi->bi_sector, align_bi->bi_size>>9,
@@ -3853,6 +3860,9 @@ static int chunk_aligned_read(struct mddev *mddev, struct bio * raid_bio)return 0 ; } +/* No reshape active, so we can trust rdev->data_offset */ + align_bi->bi_sector += rdev->data_offset; +spin_lock_irq (&conf->device_lock); wait_event_lock_irq(conf->wait_for_stripe, conf->quiesce == 0,
drivers/media/dvb/siano/smsusb.c +2 -0
@@ -544,6 +544,8 @@ static const struct usb_device_id smsusb_id_table[] __devinitconst = { .driver_info = SMS1XXX_BOARD_HAUPPAUGE_WINDHAM }, { USB_DEVICE(0x2040, 0xc0a0), .driver_info = SMS1XXX_BOARD_HAUPPAUGE_WINDHAM }, + { USB_DEVICE(0x2040, 0xf5a0), + .driver_info = SMS1XXX_BOARD_HAUPPAUGE_WINDHAM }, { }/* Terminating entry */ };
drivers/media/video/gspca/gspca.c +3 -1
@@ -1723,7 +1723,7 @@ static int vidioc_streamoff(struct file *file, void *priv, enum v4l2_buf_type buf_type) {struct gspca_dev *gspca_dev = priv; -int ret; +int i, ret;if (buf_type !=V4L2_BUF_TYPE_VIDEO_CAPTURE )return -EINVAL ;
@@ -1754,6 +1754,8 @@ static int vidioc_streamoff(struct file *file, void *priv,wake_up_interruptible (&gspca_dev->wq);/* empty the transfer queues */ +for (i =0 ; i < gspca_dev->nframes; i++) + gspca_dev->frame[i].v4l2_buf.flags &= ~BUF_ALL_FLAGS ;atomic_set (&gspca_dev->fr_q,0 );atomic_set (&gspca_dev->fr_i,0 ); gspca_dev->fr_o =0 ;
drivers/mtd/nand/cafe_nand.c +1 -1
@@ -102,7 +102,7 @@ static const char *part_probes[] = { "cmdlinepart", "RedBoot", NULL };static int cafe_device_ready (struct mtd_info *mtd) {struct cafe_priv *cafe = mtd->priv; -int result = !!(cafe_readl (cafe,NAND_STATUS ) |0x40000000 ); +int result = !!(cafe_readl (cafe,NAND_STATUS ) &0x40000000 );uint32_t irqs =cafe_readl (cafe,NAND_IRQ );cafe_writel (cafe, irqs,NAND_IRQ );
drivers/net/bonding/bond_main.c +5 -4
@@ -76,6 +76,7 @@#include <net/route.h> #include <net/net_namespace.h> #include <net/netns/generic.h> +#include <net/pkt_sched.h> #include "bonding.h" #include "bond_3ad.h" #include "bond_alb.h"
@@ -381,8 +382,6 @@ struct vlan_entry *bond_next_vlan(struct bonding *bond, struct vlan_entry *curr)return next; } -#define bond_queue_mapping (skb) (*(u16 *)((skb)->cb)) -/** * bond_dev_queue_xmit - Prepare skb for xmit. *
@@ -395,7 +394,9 @@ int bond_dev_queue_xmit(struct bonding *bond, struct sk_buff *skb, { skb->dev = slave_dev; - skb->queue_mapping =bond_queue_mapping (skb); +BUILD_BUG_ON (sizeof (skb->queue_mapping) != +sizeof (qdisc_skb_cb (skb)->bond_queue_mapping)); + skb->queue_mapping =qdisc_skb_cb (skb)->bond_queue_mapping;if (unlikely (netpoll_tx_running (slave_dev)))bond_netpoll_send_skb (bond_get_slave_by_dev (bond, slave_dev), skb);
@@ -4162,7 +4163,7 @@ static u16 bond_select_queue(struct net_device *dev, struct sk_buff *skb)/* * Save the original txq to restore before passing to the driver */ -bond_queue_mapping (skb) = skb->queue_mapping; +qdisc_skb_cb (skb)->bond_queue_mapping = skb->queue_mapping;if (unlikely (txq >= dev->real_num_tx_queues)) { do {
drivers/net/can/c_can/c_can.c +2 -2
@@ -590,8 +590,8 @@ static void c_can_chip_config(struct net_device *dev) priv->write_reg (priv, &priv->regs->control,CONTROL_ENABLE_AR ); -if (priv->can.ctrlmode & (CAN_CTRLMODE_LISTENONLY & -CAN_CTRLMODE_LOOPBACK )) { +if ((priv->can.ctrlmode &CAN_CTRLMODE_LISTENONLY ) && + (priv->can.ctrlmode &CAN_CTRLMODE_LOOPBACK )) {/* loopback + silent mode : useful for hot self-test */ priv->write_reg (priv, &priv->regs->control,CONTROL_EIE |CONTROL_SIE |CONTROL_IE |CONTROL_TEST );
drivers/net/can/flexcan.c +2 -2
@@ -933,12 +933,12 @@ static int __devinit flexcan_probe(struct platform_device *pdev)u32 clock_freq =0 ;if (pdev->dev.of_node) { -const u32 *clock_freq_p; +const __be32 *clock_freq_p; clock_freq_p =of_get_property (pdev->dev.of_node,"clock-frequency" ,NULL );if (clock_freq_p) - clock_freq = *clock_freq_p; + clock_freq =be32_to_cpup (clock_freq_p); }if (!clock_freq) {
drivers/net/dummy.c +3 -1
@@ -187,8 +187,10 @@ static int __init dummy_init_module(void)rtnl_lock (); err =__rtnl_link_register (&dummy_link_ops); -for (i =0 ; i < numdummies && !err; i++) +for (i =0 ; i < numdummies && !err; i++) { err =dummy_init_one (); +cond_resched (); + }if (err <0 )__rtnl_link_unregister (&dummy_link_ops);rtnl_unlock ();
drivers/net/ethernet/broadcom/bnx2x/bnx2x.h +0 -15
@@ -744,21 +744,6 @@ struct bnx2x_fastpath {#define ETH_RX_ERROR_FALGS ETH_FAST_PATH_RX_CQE_PHY_DECODE_ERR_FLG -#define BNX2X_IP_CSUM_ERR (cqe) \ - (!((cqe)->fast_path_cqe.status_flags & \ - ETH_FAST_PATH_RX_CQE_IP_XSUM_NO_VALIDATION_FLG) && \ - ((cqe)->fast_path_cqe.type_error_flags & \ - ETH_FAST_PATH_RX_CQE_IP_BAD_XSUM_FLG)) - -#define BNX2X_L4_CSUM_ERR (cqe) \ - (!((cqe)->fast_path_cqe.status_flags & \ - ETH_FAST_PATH_RX_CQE_L4_XSUM_NO_VALIDATION_FLG) && \ - ((cqe)->fast_path_cqe.type_error_flags & \ - ETH_FAST_PATH_RX_CQE_L4_BAD_XSUM_FLG)) - -#define BNX2X_RX_CSUM_OK (cqe) \ - (!(BNX2X_L4_CSUM_ERR(cqe) || BNX2X_IP_CSUM_ERR(cqe))) -#define BNX2X_PRS_FLAG_OVERETH_IPV4 (flags) \ (((le16_to_cpu(flags) & \ PARSING_FLAGS_OVER_ETHERNET_PROTOCOL) >> \
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c +24 -11
@@ -191,7 +191,7 @@ int bnx2x_tx_int(struct bnx2x *bp, struct bnx2x_fp_txdata *txdata)if ((netif_tx_queue_stopped (txq)) && (bp->state ==BNX2X_STATE_OPEN ) && - (bnx2x_tx_avail (bp, txdata) >=MAX_SKB_FRAGS +3 )) + (bnx2x_tx_avail (bp, txdata) >=MAX_SKB_FRAGS +4 ))netif_tx_wake_queue (txq);__netif_tx_unlock (txq);
@@ -568,6 +568,25 @@ drop: fp->eth_q_stats.rx_skb_alloc_failed++; } +static void bnx2x_csum_validate (struct sk_buff *skb,union eth_rx_cqe *cqe, +struct bnx2x_fastpath *fp) +{ +/* Do nothing if no IP/L4 csum validation was done */ + +if (cqe->fast_path_cqe.status_flags & + (ETH_FAST_PATH_RX_CQE_IP_XSUM_NO_VALIDATION_FLG | +ETH_FAST_PATH_RX_CQE_L4_XSUM_NO_VALIDATION_FLG )) +return ; + +/* If both IP/L4 validation were done, check if an error was found. */ + +if (cqe->fast_path_cqe.type_error_flags & + (ETH_FAST_PATH_RX_CQE_IP_BAD_XSUM_FLG | +ETH_FAST_PATH_RX_CQE_L4_BAD_XSUM_FLG )) + fp->eth_q_stats.hw_csum_err++; +else + skb->ip_summed =CHECKSUM_UNNECESSARY ; +}int bnx2x_rx_int (struct bnx2x_fastpath *fp,int budget) {
@@ -757,13 +776,9 @@ reuse_rx:skb_checksum_none_assert (skb); -if (bp->dev->features &NETIF_F_RXCSUM ) { +if (bp->dev->features &NETIF_F_RXCSUM ) +bnx2x_csum_validate (skb, cqe, fp); -if (likely (BNX2X_RX_CSUM_OK (cqe))) - skb->ip_summed =CHECKSUM_UNNECESSARY ; -else - fp->eth_q_stats.hw_csum_err++; - }skb_record_rx_queue (skb, fp->rx_queue);
@@ -2334,8 +2349,6 @@ int bnx2x_poll(struct napi_struct *napi, int budget)/* we split the first BD into headers and data BDs * to ease the pain of our fellow microcode engineers * we use one mapping for both BDs -* So far this has only been observed to happen -* in Other Operating Systems(TM) */ static noinline u16 bnx2x_tx_split(struct bnx2x *bp, struct bnx2x_fp_txdata *txdata,
@@ -2987,7 +3000,7 @@ netdev_tx_t bnx2x_start_xmit(struct sk_buff *skb, struct net_device *dev) txdata->tx_bd_prod += nbd; -if (unlikely (bnx2x_tx_avail (bp, txdata) <MAX_SKB_FRAGS +3 )) { +if (unlikely (bnx2x_tx_avail (bp, txdata) <MAX_SKB_FRAGS +4 )) {netif_tx_stop_queue (txq);/* paired memory barrier is in bnx2x_tx_int(), we have to keep
@@ -2996,7 +3009,7 @@ netdev_tx_t bnx2x_start_xmit(struct sk_buff *skb, struct net_device *dev)smp_mb (); fp->eth_q_stats.driver_xoff++; -if (bnx2x_tx_avail (bp, txdata) >=MAX_SKB_FRAGS +3 ) +if (bnx2x_tx_avail (bp, txdata) >=MAX_SKB_FRAGS +4 )netif_tx_wake_queue (txq); } txdata->tx_pkt++;
drivers/net/ethernet/broadcom/tg3.c +2 -1
@@ -14248,7 +14248,8 @@ static int __devinit tg3_get_invariants(struct tg3 *tp) } } - if (tg3_flag(tp, 5755_PLUS)) + if (tg3_flag(tp, 5755_PLUS) || +GET_ASIC_REV (tp->pci_chip_rev_id) ==ASIC_REV_5906 )tg3_flag_set (tp,SHORT_DMA_BUG );if (GET_ASIC_REV (tp->pci_chip_rev_id) ==ASIC_REV_5719 )
drivers/net/ethernet/emulex/benet/be_main.c +3 -2
@@ -731,6 +731,8 @@ static netdev_tx_t be_xmit(struct sk_buff *skb, copied =make_tx_wrbs (adapter, txq, skb, wrb_cnt, dummy_wrb);if (copied) { +int gso_segs =skb_shinfo (skb)->gso_segs; +/* record the sent skb in the sent_skb table */ BUG_ON (txo->sent_skb_list[start]); txo->sent_skb_list[start] = skb;
@@ -748,8 +750,7 @@ static netdev_tx_t be_xmit(struct sk_buff *skb,be_txq_notify (adapter, txq->id, wrb_cnt); -be_tx_stats_update (txo, wrb_cnt, copied, -skb_shinfo (skb)->gso_segs, stopped); +be_tx_stats_update (txo, wrb_cnt, copied, gso_segs, stopped); }else { txq->head = start;dev_kfree_skb_any (skb);
drivers/net/ethernet/intel/e1000e/defines.h +1 -0
@@ -101,6 +101,7 @@#define E1000_RXD_ERR_SEQ 0x04/* Sequence Error */ #define E1000_RXD_ERR_CXE 0x10/* Carrier Extension Error */ #define E1000_RXD_ERR_TCPE 0x20/* TCP/UDP Checksum Error */ +#define E1000_RXD_ERR_IPE 0x40/* IP Checksum Error */ #define E1000_RXD_ERR_RXE 0x80/* Rx Data Error */ #define E1000_RXD_SPC_VLAN_MASK 0x0FFF/* VLAN ID is in lower 12 bits */
drivers/net/ethernet/intel/e1000e/ethtool.c +4 -2
@@ -258,7 +258,8 @@ static int e1000_set_settings(struct net_device *netdev,* When SoL/IDER sessions are active, autoneg/speed/duplex * cannot be changed */ -if (hw->phy.ops.check_reset_block (hw)) { +if (hw->phy.ops.check_reset_block && + hw->phy.ops.check_reset_block (hw)) {e_err ("Cannot change link characteristics when SoL/IDER is " "active.\n" );return -EINVAL ;
@@ -1604,7 +1605,8 @@ static int e1000_loopback_test(struct e1000_adapter *adapter, u64 *data)* PHY loopback cannot be performed if SoL/IDER * sessions are active */ -if (hw->phy.ops.check_reset_block (hw)) { +if (hw->phy.ops.check_reset_block && + hw->phy.ops.check_reset_block (hw)) {e_err ("Cannot do PHY loopback test when SoL/IDER is active.\n" ); *data =0 ; goto out;
drivers/net/ethernet/intel/e1000e/mac.c +1 -1
@@ -709,7 +709,7 @@ s32 e1000e_setup_link_generic(struct e1000_hw *hw)* In the case of the phy reset being blocked, we already have a link. * We do not need to set it up again. */ -if (hw->phy.ops.check_reset_block (hw)) +if (hw->phy.ops.check_reset_block && hw->phy.ops.check_reset_block (hw))return 0 ;/*
drivers/net/ethernet/intel/e1000e/netdev.c +16 -63
147 lines not on this page · raw message
drivers/net/ethernet/intel/e1000e/phy.c +5 -3
@@ -2121,9 +2121,11 @@ s32 e1000e_phy_hw_reset_generic(struct e1000_hw *hw)s32 ret_val;u32 ctrl; - ret_val = phy->ops.check_reset_block (hw); -if (ret_val) -return 0 ; +if (phy->ops.check_reset_block) { + ret_val = phy->ops.check_reset_block (hw); +if (ret_val) +return 0 ; + } ret_val = phy->ops.acquire (hw);if (ret_val)
drivers/net/ethernet/intel/igbvf/ethtool.c +18 -11
@@ -357,21 +357,28 @@ static int igbvf_set_coalesce(struct net_device *netdev,struct igbvf_adapter *adapter =netdev_priv (netdev);struct e1000_hw *hw = &adapter->hw; -if ((ec->rx_coalesce_usecs >IGBVF_MAX_ITR_USECS ) || - ((ec->rx_coalesce_usecs >3 ) && - (ec->rx_coalesce_usecs <IGBVF_MIN_ITR_USECS )) || - (ec->rx_coalesce_usecs ==2 )) -return -EINVAL ; - -/* convert to rate of irq's per second */ -if (ec->rx_coalesce_usecs && ec->rx_coalesce_usecs <=3 ) { +if ((ec->rx_coalesce_usecs >=IGBVF_MIN_ITR_USECS ) && + (ec->rx_coalesce_usecs <=IGBVF_MAX_ITR_USECS )) { + adapter->current_itr = ec->rx_coalesce_usecs <<2 ; + adapter->requested_itr =1000000000 / + (adapter->current_itr *256 ); + }else if ((ec->rx_coalesce_usecs ==3 ) || + (ec->rx_coalesce_usecs ==2 )) { adapter->current_itr =IGBVF_START_ITR ; adapter->requested_itr = ec->rx_coalesce_usecs; - }else { - adapter->current_itr = ec->rx_coalesce_usecs <<2 ; + }else if (ec->rx_coalesce_usecs ==0 ) { +/* +* The user's desire is to turn off interrupt throttling +* altogether, but due to HW limitations, we can't do that. +* Instead we set a very small value in EITR, which would +* allow ~967k interrupts per second, but allow the adapter's +* internal clocking to still function properly. +*/ + adapter->current_itr =4 ; adapter->requested_itr =1000000000 / (adapter->current_itr *256 ); - } + }else +return -EINVAL ;writel (adapter->current_itr, hw->hw_addr + adapter->rx_ring->itr_register);
drivers/net/ethernet/intel/ixgbe/ixgbe.h +2 -2
@@ -189,7 +189,7 @@ enum ixgbe_ring_state_t { __IXGBE_HANG_CHECK_ARMED, __IXGBE_RX_RSC_ENABLED, __IXGBE_RX_CSUM_UDP_ZERO_ERR, - __IXGBE_RX_FCOE_BUFSZ, + __IXGBE_RX_FCOE, };#define check_for_tx_hang (ring) \
@@ -283,7 +283,7 @@ struct ixgbe_ring_feature {#if defined(IXGBE_FCOE ) && (PAGE_SIZE <8192 )static inline unsigned int ixgbe_rx_pg_order (struct ixgbe_ring *ring) { -return test_bit (__IXGBE_RX_FCOE_BUFSZ, &ring->state) ?1 :0 ; +return test_bit (__IXGBE_RX_FCOE, &ring->state) ?1 :0 ; }#else #define ixgbe_rx_pg_order (_ring) 0
drivers/net/ethernet/intel/ixgbe/ixgbe_lib.c +1 -1
@@ -628,7 +628,7 @@ static int ixgbe_alloc_q_vector(struct ixgbe_adapter *adapter, int v_idx, f = &adapter->ring_feature[RING_F_FCOE ];if ((rxr_idx >= f->mask) && (rxr_idx < f->mask + f->indices)) - set_bit(__IXGBE_RX_FCOE_BUFSZ, &ring->state); + set_bit(__IXGBE_RX_FCOE, &ring->state); }#endif /* IXGBE_FCOE */
drivers/net/ethernet/intel/ixgbe/ixgbe_main.c +10 -4
@@ -1036,17 +1036,17 @@ static inline void ixgbe_rx_hash(struct ixgbe_ring *ring,#ifdef IXGBE_FCOE /** * ixgbe_rx_is_fcoe - check the rx desc for incoming pkt type -* @adapter: address of board private structure +* @ring: structure containing ring specific data * @rx_desc: advanced rx descriptor * * Returns : true if it is FCoE pkt */ -static inline bool ixgbe_rx_is_fcoe (struct ixgbe_adapter *adapter, +static inline bool ixgbe_rx_is_fcoe (struct ixgbe_ring *ring,union ixgbe_adv_rx_desc *rx_desc) {__le16 pkt_info = rx_desc->wb.lower.lo_dword.hs_rss.pkt_info; -return (adapter->flags &IXGBE_FLAG_FCOE_ENABLED ) && +return test_bit (__IXGBE_RX_FCOE, &ring->state) && ((pkt_info &cpu_to_le16 (IXGBE_RXDADV_PKTTYPE_ETQF_MASK )) == (cpu_to_le16 (IXGBE_ETQF_FILTER_FCOE <<IXGBE_RXDADV_PKTTYPE_ETQF_SHIFT )));
@@ -1519,6 +1519,12 @@ static bool ixgbe_cleanup_headers(struct ixgbe_ring *rx_ring, skb->truesize -=ixgbe_rx_bufsz (rx_ring); } +#ifdef IXGBE_FCOE +/* do not attempt to pad FCoE Frames as this will disrupt DDP */ +if (ixgbe_rx_is_fcoe (rx_ring, rx_desc)) +return false; + +#endif /* if skb_pad returns an error the skb was freed */ if (unlikely (skb->len <60 )) {int pad_len =60 - skb->len;
@@ -1745,7 +1751,7 @@ static bool ixgbe_clean_rx_irq(struct ixgbe_q_vector *q_vector,#ifdef IXGBE_FCOE /* if ddp, not passing to ULD unless for FCP_RSP or error */ -if (ixgbe_rx_is_fcoe (adapter, rx_desc)) { +if (ixgbe_rx_is_fcoe (rx_ring, rx_desc)) { ddp_bytes =ixgbe_fcoe_ddp (adapter, rx_desc, skb);if (!ddp_bytes) {dev_kfree_skb_any (skb);
drivers/net/ethernet/marvell/sky2.c +6 -4
@@ -4381,10 +4381,12 @@ static int sky2_set_features(struct net_device *dev, netdev_features_t features)struct sky2_port *sky2 =netdev_priv (dev);netdev_features_t changed = dev->features ^ features; -if (changed &NETIF_F_RXCSUM ) { -bool on = features &NETIF_F_RXCSUM ; -sky2_write32 (sky2->hw,Q_ADDR (rxqaddr[sky2->port],Q_CSR ), - on ?BMU_ENA_RX_CHKSUM :BMU_DIS_RX_CHKSUM ); +if ((changed &NETIF_F_RXCSUM ) && + !(sky2->hw->flags &SKY2_HW_NEW_LE )) { +sky2_write32 (sky2->hw, +Q_ADDR (rxqaddr[sky2->port],Q_CSR ), + (features &NETIF_F_RXCSUM ) + ?BMU_ENA_RX_CHKSUM :BMU_DIS_RX_CHKSUM ); }if (changed &NETIF_F_RXHASH )
drivers/net/ethernet/nxp/lpc_eth.c +6 -5
@@ -936,16 +936,16 @@ static void __lpc_handle_xmit(struct net_device *ndev)/* Update stats */ ndev->stats.tx_packets++; ndev->stats.tx_bytes += skb->len; - -/* Free buffer */ -dev_kfree_skb_irq (skb); } +dev_kfree_skb_irq (skb); txcidx =readl (LPC_ENET_TXCONSUMEINDEX (pldat->net_base)); } -if (netif_queue_stopped (ndev)) -netif_wake_queue (ndev); +if (pldat->num_used_tx_buffs <=ENET_TX_DESC /2 ) { +if (netif_queue_stopped (ndev)) +netif_wake_queue (ndev); + } }static int __lpc_handle_recv (struct net_device *ndev,int budget)
@@ -1310,6 +1310,7 @@ static const struct net_device_ops lpc_netdev_ops = { .ndo_set_rx_mode = lpc_eth_set_multicast_list, .ndo_do_ioctl = lpc_eth_ioctl, .ndo_set_mac_address = lpc_set_mac_address, + .ndo_change_mtu = eth_change_mtu, };static int lpc_eth_drv_probe (struct platform_device *pdev)
drivers/net/ethernet/realtek/r8169.c +3 -0
@@ -5966,6 +5966,8 @@ static void __devexit rtl_remove_one(struct pci_dev *pdev)cancel_work_sync (&tp->wk.work); +netif_napi_del (&tp->napi); +unregister_netdev (dev);rtl_release_firmware (tp);
@@ -6288,6 +6290,7 @@ out:return rc; err_out_msi_4: +netif_napi_del (&tp->napi);rtl_disable_msi (pdev, tp);iounmap (ioaddr); err_out_free_res_3:
drivers/net/ethernet/sun/niu.c +1 -11
@@ -3598,7 +3598,6 @@ static int release_tx_packet(struct niu *np, struct tx_ring_info *rp, int idx)static void niu_tx_work (struct niu *np,struct tx_ring_info *rp) {struct netdev_queue *txq; -unsigned int tx_bytes;u16 pkt_cnt, tmp;int cons, index;u64 cs;
@@ -3621,18 +3620,12 @@ static void niu_tx_work(struct niu *np, struct tx_ring_info *rp)netif_printk (np, tx_done,KERN_DEBUG , np->dev,"%s() pkt_cnt[%u] cons[%d]\n" , __func__, pkt_cnt, cons); - tx_bytes =0 ; - tmp = pkt_cnt; -while (tmp--) { - tx_bytes += rp->tx_buffs[cons].skb->len; +while (pkt_cnt--) cons =release_tx_packet (np, rp, cons); - } rp->cons = cons;smp_mb (); -netdev_tx_completed_queue (txq, pkt_cnt, tx_bytes); - out:if (unlikely (netif_tx_queue_stopped (txq) && (niu_tx_avail (rp) >NIU_TX_WAKEUP_THRESH (rp)))) {
@@ -4333,7 +4326,6 @@ static void niu_free_channels(struct niu *np)struct tx_ring_info *rp = &np->tx_rings[i];niu_free_tx_ring_info (np, rp); -netdev_tx_reset_queue (netdev_get_tx_queue (np->dev, i)); }kfree (np->tx_rings); np->tx_rings =NULL ;
@@ -6739,8 +6731,6 @@ static netdev_tx_t niu_start_xmit(struct sk_buff *skb, prod =NEXT_TX (rp, prod); } -netdev_tx_sent_queue (txq, skb->len); -if (prod < rp->prod) rp->wrap_bit ^=TX_RING_KICK_WRAP ; rp->prod = prod;
drivers/net/macvtap.c +21 -4
@@ -528,9 +528,10 @@ static int zerocopy_sg_from_iovec(struct sk_buff *skb, const struct iovec *from, } base = (unsigned long )from->iov_base + offset1; size = ((base & ~PAGE_MASK ) + len + ~PAGE_MASK ) >>PAGE_SHIFT ; +if (i + size >MAX_SKB_FRAGS ) +return -EMSGSIZE ; num_pages =get_user_pages_fast (base, size,0 , &page[i]); -if ((num_pages != size) || - (num_pages >MAX_SKB_FRAGS -skb_shinfo (skb)->nr_frags)) +if (num_pages != size)/* put_page is in skb free */ return -EFAULT ; skb->data_len += len;
@@ -647,7 +648,7 @@ static ssize_t macvtap_get_user(struct macvtap_queue *q, struct msghdr *m,int err;struct virtio_net_hdr vnet_hdr = {0 };int vnet_hdr_len =0 ; -int copylen; +int copylen =0 ;bool zerocopy = false;if (q->flags &IFF_VNET_HDR ) {
@@ -676,15 +677,31 @@ static ssize_t macvtap_get_user(struct macvtap_queue *q, struct msghdr *m,if (unlikely (len <ETH_HLEN )) goto err; + err = -EMSGSIZE ; +if (unlikely (count >UIO_MAXIOV )) + goto err; +if (m && m->msg_control &&sock_flag (&q->sk,SOCK_ZEROCOPY )) zerocopy = true;if (zerocopy) { +/* Userspace may produce vectors with count greater than +* MAX_SKB_FRAGS, so we need to linearize parts of the skb +* to let the rest of data to be fit in the frags. +*/ +if (count >MAX_SKB_FRAGS ) { + copylen =iov_length (iv, count -MAX_SKB_FRAGS ); +if (copylen < vnet_hdr_len) + copylen =0 ; +else + copylen -= vnet_hdr_len; + }/* There are 256 bytes to be copied in skb, so there is enough * room for skb expand head in case it is used. * The rest buffer is mapped from userspace. */ - copylen = vnet_hdr.hdr_len; +if (copylen < vnet_hdr.hdr_len) + copylen = vnet_hdr.hdr_len;if (!copylen) copylen =GOODCOPY_LEN ; }else
drivers/net/usb/ipheth.c +5 -0
@@ -59,6 +59,7 @@#define USB_PRODUCT_IPHONE_3G 0x1292#define USB_PRODUCT_IPHONE_3GS 0x1294#define USB_PRODUCT_IPHONE_4 0x1297 +#define USB_PRODUCT_IPAD 0x129a#define USB_PRODUCT_IPHONE_4_VZW 0x129c#define USB_PRODUCT_IPHONE_4S 0x12a0
@@ -101,6 +102,10 @@ static struct usb_device_id ipheth_table[] = { IPHETH_USBINTF_CLASS, IPHETH_USBINTF_SUBCLASS, IPHETH_USBINTF_PROTO) }, { USB_DEVICE_AND_INTERFACE_INFO( +USB_VENDOR_APPLE ,USB_PRODUCT_IPAD , +IPHETH_USBINTF_CLASS ,IPHETH_USBINTF_SUBCLASS , + IPHETH_USBINTF_PROTO) }, + { USB_DEVICE_AND_INTERFACE_INFO(USB_VENDOR_APPLE ,USB_PRODUCT_IPHONE_4_VZW ,IPHETH_USBINTF_CLASS ,IPHETH_USBINTF_SUBCLASS , IPHETH_USBINTF_PROTO) },
drivers/net/usb/qmi_wwan.c +64 -45
160 lines not on this page · raw message
drivers/net/wireless/ath/ath.h +1 -0
@@ -143,6 +143,7 @@ struct ath_common {u32 keymax;DECLARE_BITMAP (keymap,ATH_KEYMAX );DECLARE_BITMAP (tkip_keymap,ATH_KEYMAX ); +DECLARE_BITMAP (ccmp_keymap,ATH_KEYMAX );enum ath_crypt_caps crypt_caps;unsigned int clockrate;
drivers/net/wireless/ath/ath9k/ath9k.h +1 -0
@@ -213,6 +213,7 @@ struct ath_frame_info {enum ath9k_key_type keytype;u8 keyix;u8 retries; +u8 rtscts_rate; };struct ath_buf_state {
drivers/net/wireless/ath/ath9k/htc_drv_main.c +2 -3
@@ -1496,6 +1496,7 @@ static void ath9k_htc_bss_info_changed(struct ieee80211_hw *hw, priv->num_sta_assoc_vif++ : priv->num_sta_assoc_vif--;if (priv->ah->opmode ==NL80211_IFTYPE_STATION ) { +ath9k_htc_choose_set_bssid (priv);if (bss_conf->assoc && (priv->num_sta_assoc_vif ==1 ))ath9k_htc_start_ani (priv);else if (priv->num_sta_assoc_vif ==0 )
@@ -1503,13 +1504,11 @@ static void ath9k_htc_bss_info_changed(struct ieee80211_hw *hw, } } -if (changed &BSS_CHANGED_BSSID ) { +if (changed &BSS_CHANGED_IBSS ) {if (priv->ah->opmode ==NL80211_IFTYPE_ADHOC ) { common->curaid = bss_conf->aid;memcpy (common->curbssid, bss_conf->bssid,ETH_ALEN );ath9k_htc_set_bssid (priv); - }else if (priv->ah->opmode ==NL80211_IFTYPE_STATION ) { -ath9k_htc_choose_set_bssid (priv); } }
drivers/net/wireless/ath/ath9k/hw.c +14 -2
@@ -558,7 +558,7 @@ static int __ath9k_hw_init(struct ath_hw *ah)if (NR_CPUS >1 && ah->config.serialize_regmode ==SER_REG_MODE_AUTO ) {if (ah->hw_version.macVersion ==AR_SREV_VERSION_5416_PCI || - ((AR_SREV_9160 (ah) ||AR_SREV_9280 (ah)) && + ((AR_SREV_9160 (ah) ||AR_SREV_9280 (ah) ||AR_SREV_9287 (ah)) && !ah->is_pciexpress)) { ah->config.serialize_regmode =SER_REG_MODE_ON ;
@@ -720,13 +720,25 @@ static void ath9k_hw_init_qos(struct ath_hw *ah)u32 ar9003_get_pll_sqsum_dvc (struct ath_hw *ah) { +struct ath_common *common =ath9k_hw_common (ah); +int i =0 ; +REG_CLR_BIT (ah,PLL3 ,PLL3_DO_MEAS_MASK );udelay (100 );REG_SET_BIT (ah,PLL3 ,PLL3_DO_MEAS_MASK ); -while ((REG_READ (ah,PLL4 ) &PLL4_MEAS_DONE ) ==0 ) +while ((REG_READ (ah,PLL4 ) &PLL4_MEAS_DONE ) ==0 ) { +udelay (100 ); +if (WARN_ON_ONCE (i >=100 )) { +ath_err (common,"PLL4 meaurement not done\n" ); +break ; + } + + i++; + } +return (REG_READ (ah,PLL3 ) &SQSUM_DVC_MASK ) >>3 ; }EXPORT_SYMBOL (ar9003_get_pll_sqsum_dvc);
drivers/net/wireless/ath/ath9k/main.c +9 -9
@@ -960,6 +960,15 @@ void ath_hw_pll_work(struct work_struct *work) hw_pll_work.work);u32 pll_sqsum; +/* +* ensure that the PLL WAR is executed only +* after the STA is associated (or) if the +* beaconing had started in interfaces that +* uses beacons. +*/ +if (!(sc->sc_flags &SC_OP_BEACONS )) +return ; +if (AR_SREV_9485 (sc->sc_ah)) {ath9k_ps_wakeup (sc);
@@ -1419,15 +1428,6 @@ static int ath9k_add_interface(struct ieee80211_hw *hw, } } -if ((ah->opmode ==NL80211_IFTYPE_ADHOC ) || - ((vif->type ==NL80211_IFTYPE_ADHOC ) && - sc->nvifs >0 )) { -ath_err (common,"Cannot create ADHOC interface when other" -" interfaces already exist.\n" ); - ret = -EINVAL ; - goto out; - } -ath_dbg (common,CONFIG ,"Attach a VIF of type: %d\n" , vif->type); sc->nvifs++;
drivers/net/wireless/ath/ath9k/recv.c +4 -3
@@ -695,9 +695,9 @@ static bool ath_edma_get_buffers(struct ath_softc *sc,__skb_unlink (skb, &rx_edma->rx_fifo);list_add_tail (&bf->list, &sc->rx.rxbuf);ath_rx_edma_buf_link (sc, qtype); - }else { - bf =NULL ; } + + bf =NULL ; } *dest = bf;
@@ -821,7 +821,8 @@ static bool ath9k_rx_accept(struct ath_common *common,* descriptor does contain a valid key index. This has been observed * mostly with CCMP encryption. */ -if (rx_stats->rs_keyix ==ATH9K_RXKEYIX_INVALID ) +if (rx_stats->rs_keyix ==ATH9K_RXKEYIX_INVALID || + !test_bit (rx_stats->rs_keyix, common->ccmp_keymap)) rx_stats->rs_status &= ~ATH9K_RXERR_KEYMISS ;if (!rx_stats->rs_datalen)
drivers/net/wireless/ath/ath9k/xmit.c +18 -13
@@ -938,6 +938,7 @@ static void ath_buf_set_rate(struct ath_softc *sc, struct ath_buf *bf,struct ieee80211_tx_rate *rates;const struct ieee80211_rate *rate;struct ieee80211_hdr *hdr; +struct ath_frame_info *fi =get_frame_info (bf->bf_mpdu);int i;u8 rix =0 ;
@@ -948,18 +949,7 @@ static void ath_buf_set_rate(struct ath_softc *sc, struct ath_buf *bf,/* set dur_update_en for l-sig computation except for PS-Poll frames */ info->dur_update = !ieee80211_is_pspoll (hdr->frame_control); - -/* -* We check if Short Preamble is needed for the CTS rate by -* checking the BSS's global flag. -* But for the rate series, IEEE80211_TX_RC_USE_SHORT_PREAMBLE is used. -*/ - rate =ieee80211_get_rts_cts_rate (sc->hw, tx_info); - info->rtscts_rate = rate->hw_value; - -if (tx_info->control.vif && - tx_info->control.vif->bss_conf.use_short_preamble) - info->rtscts_rate |= rate->hw_value_short; + info->rtscts_rate = fi->rtscts_rate;for (i =0 ; i <4 ; i++) {bool is_40, is_sgi, is_sp;
@@ -1001,13 +991,13 @@ static void ath_buf_set_rate(struct ath_softc *sc, struct ath_buf *bf, }/* legacy rates */ + rate = &sc->sbands[tx_info->band].bitrates[rates[i].idx];if ((tx_info->band ==IEEE80211_BAND_2GHZ ) && !(rate->flags &IEEE80211_RATE_ERP_G )) phy =WLAN_RC_PHY_CCK ;else phy =WLAN_RC_PHY_OFDM ; - rate = &sc->sbands[tx_info->band].bitrates[rates[i].idx]; info->rates[i].Rate = rate->hw_value;if (rate->hw_value_short) {if (rates[i].flags &IEEE80211_TX_RC_USE_SHORT_PREAMBLE )
@@ -1776,10 +1766,22 @@ static void setup_frame_info(struct ieee80211_hw *hw, struct sk_buff *skb,struct ieee80211_sta *sta = tx_info->control.sta;struct ieee80211_key_conf *hw_key = tx_info->control.hw_key;struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data; +const struct ieee80211_rate *rate;struct ath_frame_info *fi =get_frame_info (skb);struct ath_node *an =NULL ;enum ath9k_key_type keytype; +bool short_preamble = false; + +/* +* We check if Short Preamble is needed for the CTS rate by +* checking the BSS's global flag. +* But for the rate series, IEEE80211_TX_RC_USE_SHORT_PREAMBLE is used. +*/ +if (tx_info->control.vif && + tx_info->control.vif->bss_conf.use_short_preamble) + short_preamble = true; + rate =ieee80211_get_rts_cts_rate (hw, tx_info); keytype =ath9k_cmn_get_hw_crypto_keytype (skb);if (sta)
@@ -1794,6 +1796,9 @@ static void setup_frame_info(struct ieee80211_hw *hw, struct sk_buff *skb, fi->keyix =ATH9K_TXKEYIX_INVALID ; fi->keytype = keytype; fi->framelen = framelen; + fi->rtscts_rate = rate->hw_value; +if (short_preamble) + fi->rtscts_rate |= rate->hw_value_short; }u8 ath_txchainmask_reduction (struct ath_softc *sc,u8 chainmask,u32 rate)
drivers/net/wireless/ath/key.c +4 -0
@@ -556,6 +556,9 @@ int ath_key_config(struct ath_common *common,return -EIO ;set_bit (idx, common->keymap); +if (key->cipher ==WLAN_CIPHER_SUITE_CCMP ) +set_bit (idx, common->ccmp_keymap); +if (key->cipher ==WLAN_CIPHER_SUITE_TKIP ) {set_bit (idx +64 , common->keymap);set_bit (idx, common->tkip_keymap);
@@ -582,6 +585,7 @@ void ath_key_delete(struct ath_common *common, struct ieee80211_key_conf *key)return ;clear_bit (key->hw_key_idx, common->keymap); +clear_bit (key->hw_key_idx, common->ccmp_keymap);if (key->cipher !=WLAN_CIPHER_SUITE_TKIP )return ;
drivers/net/wireless/ipw2x00/ipw.h new file +23 -0
@@ -0,0 +1,23 @@ +/* +* Intel Pro/Wireless 2100, 2200BG, 2915ABG network connection driver +* +* Copyright 2012 Stanislav Yakovlev <[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 as +* published by the Free Software Foundation. +*/ + +#ifndef __IPW_H__ +#define __IPW_H__ + +#include <linux/ieee80211.h> + +static const u32 ipw_cipher_suites[] = { +WLAN_CIPHER_SUITE_WEP40 , +WLAN_CIPHER_SUITE_WEP104 , +WLAN_CIPHER_SUITE_TKIP , +WLAN_CIPHER_SUITE_CCMP , +}; + +#endif
drivers/net/wireless/ipw2x00/ipw2100.c +4 -0
@@ -166,6 +166,7 @@ that only one external action is invoked at a time.#include <net/lib80211.h> #include "ipw2100.h" +#include "ipw.h" #define IPW2100_VERSION "git-1.2.2"
@@ -1946,6 +1947,9 @@ static int ipw2100_wdev_init(struct net_device *dev) wdev->wiphy->bands[IEEE80211_BAND_2GHZ ] = bg_band; } + wdev->wiphy->cipher_suites = ipw_cipher_suites; + wdev->wiphy->n_cipher_suites =ARRAY_SIZE (ipw_cipher_suites); +set_wiphy_dev (wdev->wiphy, &priv->pci_dev->dev);if (wiphy_register (wdev->wiphy)) {ipw2100_down (priv);
drivers/net/wireless/ipw2x00/ipw2200.c +4 -0
@@ -34,6 +34,7 @@#include <linux/slab.h> #include <net/cfg80211-wext.h> #include "ipw2200.h" +#include "ipw.h" #ifndef KBUILD_EXTMOD
@@ -11544,6 +11545,9 @@ static int ipw_wdev_init(struct net_device *dev) wdev->wiphy->bands[IEEE80211_BAND_5GHZ ] = a_band; } + wdev->wiphy->cipher_suites = ipw_cipher_suites; + wdev->wiphy->n_cipher_suites =ARRAY_SIZE (ipw_cipher_suites); +set_wiphy_dev (wdev->wiphy, &priv->pci_dev->dev);/* With that information in place, we can now register the wiphy... */
drivers/net/wireless/iwlwifi/iwl-mac80211.c +12 -0
@@ -788,6 +788,18 @@ static int iwlagn_mac_sta_state(struct ieee80211_hw *hw,switch (op) {case ADD : ret =iwlagn_mac_sta_add (hw, vif, sta); +if (ret) +break ; +/* +* Clear the in-progress flag, the AP station entry was added +* but we'll initialize LQ only when we've associated (which +* would also clear the in-progress flag). This is necessary +* in case we never initialize LQ because association fails. +*/ +spin_lock_bh (&priv->sta_lock); + priv->stations[iwl_sta_id (sta)].used &= + ~IWL_STA_UCODE_INPROGRESS ; +spin_unlock_bh (&priv->sta_lock);break ;case REMOVE : ret =iwlagn_mac_sta_remove (hw, vif, sta);
drivers/net/wireless/iwlwifi/iwl-trans-pcie.c +6 -0
@@ -2000,6 +2000,7 @@ static ssize_t iwl_dbgfs_rx_queue_read(struct file *file,return simple_read_from_buffer (user_buf, count, ppos, buf, pos); } +#ifdef CONFIG_IWLWIFI_DEBUG static ssize_t iwl_dbgfs_log_event_read (struct file *file,char __user *user_buf,size_t count,loff_t *ppos)
@@ -2037,6 +2038,7 @@ static ssize_t iwl_dbgfs_log_event_write(struct file *file,return count; } +#endif static ssize_t iwl_dbgfs_interrupt_read(struct file *file, char __user *user_buf,
@@ -2164,7 +2166,9 @@ static ssize_t iwl_dbgfs_fh_reg_read(struct file *file,return ret; } +#ifdef CONFIG_IWLWIFI_DEBUG DEBUGFS_READ_WRITE_FILE_OPS (log_event); +#endif DEBUGFS_READ_WRITE_FILE_OPS (interrupt);DEBUGFS_READ_FILE_OPS (fh_reg);DEBUGFS_READ_FILE_OPS (rx_queue);
@@ -2180,7 +2184,9 @@ static int iwl_trans_pcie_dbgfs_register(struct iwl_trans *trans, {DEBUGFS_ADD_FILE (rx_queue, dir,S_IRUSR );DEBUGFS_ADD_FILE (tx_queue, dir,S_IRUSR ); +#ifdef CONFIG_IWLWIFI_DEBUG DEBUGFS_ADD_FILE (log_event, dir,S_IWUSR |S_IRUSR ); +#endif DEBUGFS_ADD_FILE (interrupt, dir,S_IWUSR |S_IRUSR );DEBUGFS_ADD_FILE (csr, dir,S_IWUSR );DEBUGFS_ADD_FILE (fh_reg, dir,S_IRUSR );
drivers/net/wireless/mwifiex/11n_rxreorder.c +3 -2
@@ -256,7 +256,8 @@ mwifiex_11n_create_rx_reorder_tbl(struct mwifiex_private *priv, u8 *ta,else last_seq = priv->rx_seq[tid]; -if (last_seq >= new_node->start_win) +if (last_seq !=MWIFIEX_DEF_11N_RX_SEQ_NUM && + last_seq >= new_node->start_win) new_node->start_win = last_seq +1 ; new_node->win_size = win_size;
@@ -596,5 +597,5 @@ void mwifiex_11n_cleanup_reorder_tbl(struct mwifiex_private *priv)spin_unlock_irqrestore (&priv->rx_reorder_tbl_lock, flags);INIT_LIST_HEAD (&priv->rx_reorder_tbl_ptr); -memset (priv->rx_seq,0 ,sizeof (priv->rx_seq)); +mwifiex_reset_11n_rx_seq_num (priv); }
drivers/net/wireless/mwifiex/11n_rxreorder.h +7 -0
@@ -37,6 +37,13 @@#define ADDBA_RSP_STATUS_ACCEPT 0 +#define MWIFIEX_DEF_11N_RX_SEQ_NUM 0xffff + +static inline void mwifiex_reset_11n_rx_seq_num (struct mwifiex_private *priv) +{ +memset (priv->rx_seq,0xff ,sizeof (priv->rx_seq)); +} + int mwifiex_11n_rx_reorder_pkt(struct mwifiex_private *, u16 seqNum, u16 tid, u8 *ta,
drivers/net/wireless/mwifiex/cfg80211.c +9 -12
@@ -1214,11 +1214,11 @@ struct net_device *mwifiex_add_virtual_intf(struct wiphy *wiphy,void *mdev_priv;if (!priv) -return NULL ; +return ERR_PTR (-EFAULT ); adapter = priv->adapter;if (!adapter) -return NULL ; +return ERR_PTR (-EFAULT );switch (type) {case NL80211_IFTYPE_UNSPECIFIED :
@@ -1227,7 +1227,7 @@ struct net_device *mwifiex_add_virtual_intf(struct wiphy *wiphy,if (priv->bss_mode) {wiphy_err (wiphy,"cannot create multiple" " station/adhoc interfaces\n" ); -return NULL ; +return ERR_PTR (-EINVAL ); }if (type ==NL80211_IFTYPE_UNSPECIFIED )
@@ -1244,14 +1244,15 @@ struct net_device *mwifiex_add_virtual_intf(struct wiphy *wiphy,break ;default :wiphy_err (wiphy,"type not supported\n" ); -return NULL ; +return ERR_PTR (-EINVAL ); } dev =alloc_netdev_mq (sizeof (struct mwifiex_private *), name, ether_setup,1 );if (!dev) {wiphy_err (wiphy,"no memory available for netdevice\n" ); - goto error; + priv->bss_mode =NL80211_IFTYPE_UNSPECIFIED ; +return ERR_PTR (-ENOMEM ); }dev_net_set (dev,wiphy_net (wiphy));
@@ -1276,7 +1277,9 @@ struct net_device *mwifiex_add_virtual_intf(struct wiphy *wiphy,/* Register network device */ if (register_netdevice (dev)) {wiphy_err (wiphy,"cannot register virtual network device\n" ); - goto error; +free_netdev (dev); + priv->bss_mode =NL80211_IFTYPE_UNSPECIFIED ; +return ERR_PTR (-EFAULT ); }sema_init (&priv->async_sem,1 );
@@ -1288,12 +1291,6 @@ struct net_device *mwifiex_add_virtual_intf(struct wiphy *wiphy,mwifiex_dev_debugfs_init (priv);#endif return dev; -error: -if (dev && (dev->reg_state ==NETREG_UNREGISTERED )) -free_netdev (dev); - priv->bss_mode =NL80211_IFTYPE_UNSPECIFIED ; - -return NULL ; }EXPORT_SYMBOL_GPL (mwifiex_add_virtual_intf);
drivers/net/wireless/mwifiex/wmm.c +3 -0
@@ -404,6 +404,8 @@ mwifiex_wmm_init(struct mwifiex_adapter *adapter) priv->add_ba_param.tx_win_size =MWIFIEX_AMPDU_DEF_TXWINSIZE ; priv->add_ba_param.rx_win_size =MWIFIEX_AMPDU_DEF_RXWINSIZE ; +mwifiex_reset_11n_rx_seq_num (priv); +atomic_set (&priv->wmm.tx_pkts_queued,0 );atomic_set (&priv->wmm.highest_queued_prio,HIGH_PRIO_TID ); }
@@ -1209,6 +1211,7 @@ mwifiex_dequeue_tx_packet(struct mwifiex_adapter *adapter)if (!ptr->is_11n_enabled ||mwifiex_is_ba_stream_setup (priv, ptr, tid) || + priv->wps.session_enable || ((priv->sec_info.wpa_enabled || priv->sec_info.wpa2_enabled) && !priv->wpa_is_gtk_set)) {
drivers/net/wireless/rtl818x/rtl8187/leds.c +1 -1
@@ -117,7 +117,7 @@ static void rtl8187_led_brightness_set(struct led_classdev *led_dev, radio_on = true; }else if (radio_on) { radio_on = false; -cancel_delayed_work_sync (&priv->led_on); +cancel_delayed_work (&priv->led_on);ieee80211_queue_delayed_work (hw, &priv->led_off,0 ); } }else if (radio_on) {
drivers/net/wireless/rtlwifi/rtl8192cu/sw.c +3 -0
@@ -301,9 +301,11 @@ static struct usb_device_id rtl8192c_usb_ids[] = { {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(0x0bda, 0x5088, rtl92cu_hal_cfg)}, /*Thinkware-CC&C*/ {RTL_USB_DEVICE(0x0df6, 0x0052, rtl92cu_hal_cfg)}, /*Sitecom - Edimax*/ {RTL_USB_DEVICE(0x0df6, 0x005c, rtl92cu_hal_cfg)}, /*Sitecom - Edimax*/ {RTL_USB_DEVICE(0x0eb0, 0x9071, rtl92cu_hal_cfg)}, /*NO Brand - Etop*/ + {RTL_USB_DEVICE(0x4856, 0x0091, rtl92cu_hal_cfg)}, /*NetweeN - Feixun*/
Lines of this file are not shown. View the raw message.
drivers/rpmsg/virtio_rpmsg_bus.c +50 -5
55 lines not on this page · raw message
drivers/usb/host/xhci-hub.c +38 -6
44 lines not on this page · raw message
fs/cifs/connect.c +20 -21
41 lines not on this page · raw message
fs/ecryptfs/miscdev.c +29 -19
48 lines not on this page · raw message
fs/udf/super.c +64 -38
102 lines not on this page · raw message
mm/memblock.c +79 -44
123 lines not on this page · raw message
net/core/drop_monitor.c +33 -69
102 lines not on this page · raw message
net/ipv6/route.c +31 -10
41 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.