1. 10 Jun, 2014 30 commits
    • Alex Deucher's avatar
      drm/radeon: fix count in cik_sdma_ring_test() · bf11893c
      Alex Deucher authored
      commit 7e95cfb0 upstream.
      
      Should be 5 rather than 4.
      Noticed-by: default avatarMathias Fröhlich <Mathias.Froehlich@gmx.net>
      Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
      Signed-off-by: default avatarChristian König <christian.koenig@amd.com>
      Signed-off-by: default avatarKamal Mostafa <kamal@canonical.com>
      bf11893c
    • Hans de Goede's avatar
      Input: synaptics - add min/max quirk for ThinkPad T431s, L440, L540, S1 Yoga and X1 · 6108750f
      Hans de Goede authored
      commit 46a2986e upstream.
      
      We expect that all the Haswell series will need such quirks, sigh.
      
      The T431s seems to be T430 hardware in a T440s case, using the T440s touchpad,
      with the same min/max issue.
      
      The X1 Carbon 3rd generation name says 2nd while it is a 3rd generation.
      
      The X1 and T431s share a PnPID with the T540p, but the reported ranges are
      closer to those of the T440s.
      
      HdG: Squashed 5 quirk patches into one. T431s + L440 + L540 are written by me,
      S1 Yoga and X1 are written by Benjamin Tissoires.
      
      Hdg: Standardized S1 Yoga and X1 values, Yoga uses the same touchpad as the
      X240, X1 uses the same touchpad as the T440.
      Signed-off-by: default avatarBenjamin Tissoires <benjamin.tissoires@redhat.com>
      Signed-off-by: default avatarHans de Goede <hdegoede@redhat.com>
      Signed-off-by: default avatarDmitry Torokhov <dmitry.torokhov@gmail.com>
      Signed-off-by: default avatarKamal Mostafa <kamal@canonical.com>
      6108750f
    • Alex Deucher's avatar
      drm/radeon: disable dpm on rv770 by default · b81625a4
      Alex Deucher authored
      commit 76e6dcec upstream.
      
      There seem to be stability issues on a number of cards.
      
      bugs:
      https://bugs.freedesktop.org/show_bug.cgi?id=76286
      https://bugzilla.redhat.com/show_bug.cgi?id=1085785
      https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=741619Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
      Cc: matthias.graf@st.ovqu.de
      Cc: bp@alien8.de
      Signed-off-by: default avatarKamal Mostafa <kamal@canonical.com>
      b81625a4
    • Dan Williams's avatar
      libata/ahci: accommodate tag ordered controllers · f3b73275
      Dan Williams authored
      commit 8a4aeec8 upstream.
      
      The AHCI spec allows implementations to issue commands in tag order
      rather than FIFO order:
      
      	5.3.2.12 P:SelectCmd
      	HBA sets pSlotLoc = (pSlotLoc + 1) mod (CAP.NCS + 1)
      	or HBA selects the command to issue that has had the
      	PxCI bit set to '1' longer than any other command
      	pending to be issued.
      
      The result is that commands posted sequentially (time-wise) may play out
      of sequence when issued by hardware.
      
      This behavior has likely been hidden by drives that arrange for commands
      to complete in issue order.  However, it appears recent drives (two from
      different vendors that we have found so far) inflict out-of-order
      completions as a matter of course.  So, we need to take care to maintain
      ordered submission, otherwise we risk triggering a drive to fall out of
      sequential-io automation and back to random-io processing, which incurs
      large latency and degrades throughput.
      
      This issue was found in simple benchmarks where QD=2 seq-write
      performance was 30-50% *greater* than QD=32 seq-write performance.
      
      Tagging for -stable and making the change globally since it has a low
      risk-to-reward ratio.  Also, word is that recent versions of an unnamed
      OS also does it this way now.  So, drives in the field are already
      experienced with this tag ordering scheme.
      
      Cc: Dave Jiang <dave.jiang@intel.com>
      Cc: Ed Ciechanowski <ed.ciechanowski@intel.com>
      Reviewed-by: default avatarMatthew Wilcox <matthew.r.wilcox@intel.com>
      Signed-off-by: default avatarDan Williams <dan.j.williams@intel.com>
      Signed-off-by: default avatarTejun Heo <tj@kernel.org>
      Signed-off-by: default avatarKamal Mostafa <kamal@canonical.com>
      f3b73275
    • Alexander Gordeev's avatar
      ahci: Do not receive interrupts sent by dummy ports · 92cee439
      Alexander Gordeev authored
      commit 2cf532f5 upstream.
      
      In multiple MSI mode all AHCI ports (including dummy) get assigned
      separate MSI vectors and (as result of execution
      pci_enable_msi_exact() function) separate IRQ numbers, (mapped to the
      MSI vectors).
      
      Therefore, although interrupts from dummy ports are not desired they
      are still enabled. We do not request IRQs for dummy ports, but that
      only means we do not assign AHCI-specific ISRs to corresponding IRQ
      numbers.
      
      As result, dummy port interrupts still could come and traverse all the
      way from the PCI device to the kernel, causing unnecessary overhead.
      
      This update disables IRQs for dummy ports and prevents the described
      issue.
      Signed-off-by: default avatarAlexander Gordeev <agordeev@redhat.com>
      Signed-off-by: default avatarTejun Heo <tj@kernel.org>
      Tested-by: default avatarDavid Milburn <dmilburn@redhat.com>
      Cc: linux-ide@vger.kernel.org
      Fixes: 5ca72c4f ("AHCI: Support multiple MSIs")
      Signed-off-by: default avatarKamal Mostafa <kamal@canonical.com>
      92cee439
    • Jeff Layton's avatar
      nfsd: set timeparms.to_maxval in setup_callback_client · 758bdba7
      Jeff Layton authored
      commit 3758cf7e upstream.
      
      ...otherwise the logic in the timeout handling doesn't work correctly.
      Spotted-by: default avatarTrond Myklebust <trond.myklebust@primarydata.com>
      Signed-off-by: default avatarJeff Layton <jlayton@redhat.com>
      Signed-off-by: default avatarJ. Bruce Fields <bfields@redhat.com>
      Signed-off-by: default avatarKamal Mostafa <kamal@canonical.com>
      758bdba7
    • Krzysztof Kozlowski's avatar
      clocksource: Exynos_mct: Register clock event after request_irq() · ee54d831
      Krzysztof Kozlowski authored
      commit 8db6e510 upstream.
      
      After hotplugging CPU1 the first call of interrupt handler for CPU1
      oneshot timer was called on CPU0 because it fired before setting IRQ
      affinity. Affected are SoCs where Multi Core Timer interrupts are
      shared (SPI), e.g. Exynos 4210.
      
      During setup of the MCT timers the clock event device should be
      registered after setting the affinity for interrupt. This will prevent
      starting the timer too early.
      Signed-off-by: default avatarKrzysztof Kozlowski <k.kozlowski@samsung.com>
      Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
      Cc: Kyungmin Park <kyungmin.park@samsung.com>
      Cc: Marek Szyprowski <m.szyprowski@samsung.com>
      Cc: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
      Cc: Tomasz Figa <t.figa@samsung.com>,
      Cc: Daniel Lezcano <daniel.lezcano@linaro.org>,
      Cc: Kukjin Kim <kgene.kim@samsung.com>
      Cc: linux-arm-kernel@lists.infradead.org,
      Link: http://lkml.kernel.org/r/20140416143316.299247848@linutronix.deSigned-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
      Signed-off-by: default avatarKamal Mostafa <kamal@canonical.com>
      ee54d831
    • Thomas Gleixner's avatar
      clocksource: Exynos_mct: Use irq_force_affinity() in cpu bringup · 8200288d
      Thomas Gleixner authored
      commit 30ccf03b upstream.
      
      The starting cpu is not yet in the online mask so irq_set_affinity()
      fails which results in per cpu timers for this cpu ending up on some
      other online cpu, ususally cpu 0.
      
      Use irq_force_affinity() which disables the online mask check and
      makes things work.
      Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
      Tested-by: default avatarKrzysztof Kozlowski <k.kozlowski@samsung.com>
      Cc: Kyungmin Park <kyungmin.park@samsung.com>
      Cc: Marek Szyprowski <m.szyprowski@samsung.com>
      Cc: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
      Cc: Tomasz Figa <t.figa@samsung.com>,
      Cc: Daniel Lezcano <daniel.lezcano@linaro.org>,
      Cc: Kukjin Kim <kgene.kim@samsung.com>
      Cc: linux-arm-kernel@lists.infradead.org,
      Link: http://lkml.kernel.org/r/20140416143316.106665251@linutronix.deSigned-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
      Signed-off-by: default avatarKamal Mostafa <kamal@canonical.com>
      8200288d
    • Thomas Gleixner's avatar
      irqchip: Gic: Support forced affinity setting · d21eebc3
      Thomas Gleixner authored
      commit ffde1de6 upstream.
      
      To support the affinity setting of per cpu timers in the early startup
      of a not yet online cpu, implement the force logic, which disables the
      cpu online check.
      
      Tagged for stable to allow a simple fix of the affected SoC clock
      event drivers.
      Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
      Tested-by: default avatarKrzysztof Kozlowski <k.kozlowski@samsung.com>
      Cc: Kyungmin Park <kyungmin.park@samsung.com>
      Cc: Marek Szyprowski <m.szyprowski@samsung.com>
      Cc: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
      Cc: Tomasz Figa <t.figa@samsung.com>,
      Cc: Daniel Lezcano <daniel.lezcano@linaro.org>,
      Cc: Kukjin Kim <kgene.kim@samsung.com>
      Cc: linux-arm-kernel@lists.infradead.org,
      Link: http://lkml.kernel.org/r/20140416143315.916984416@linutronix.deSigned-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
      Signed-off-by: default avatarKamal Mostafa <kamal@canonical.com>
      d21eebc3
    • Thomas Gleixner's avatar
      genirq: Allow forcing cpu affinity of interrupts · 145e765e
      Thomas Gleixner authored
      commit 01f8fa4f upstream.
      
      The current implementation of irq_set_affinity() refuses rightfully to
      route an interrupt to an offline cpu.
      
      But there is a special case, where this is actually desired. Some of
      the ARM SoCs have per cpu timers which require setting the affinity
      during cpu startup where the cpu is not yet in the online mask.
      
      If we can't do that, then the local timer interrupt for the about to
      become online cpu is routed to some random online cpu.
      
      The developers of the affected machines tried to work around that
      issue, but that results in a massive mess in that timer code.
      
      We have a yet unused argument in the set_affinity callbacks of the irq
      chips, which I added back then for a similar reason. It was never
      required so it got not used. But I'm happy that I never removed it.
      
      That allows us to implement a sane handling of the above scenario. So
      the affected SoC drivers can add the required force handling to their
      interrupt chip, switch the timer code to irq_force_affinity() and
      things just work.
      
      This does not affect any existing user of irq_set_affinity().
      
      Tagged for stable to allow a simple fix of the affected SoC clock
      event drivers.
      Reported-and-tested-by: default avatarKrzysztof Kozlowski <k.kozlowski@samsung.com>
      Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
      Cc: Kyungmin Park <kyungmin.park@samsung.com>
      Cc: Marek Szyprowski <m.szyprowski@samsung.com>
      Cc: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
      Cc: Tomasz Figa <t.figa@samsung.com>,
      Cc: Daniel Lezcano <daniel.lezcano@linaro.org>,
      Cc: Kukjin Kim <kgene.kim@samsung.com>
      Cc: linux-arm-kernel@lists.infradead.org,
      Link: http://lkml.kernel.org/r/20140416143315.717251504@linutronix.deSigned-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
      Signed-off-by: default avatarKamal Mostafa <kamal@canonical.com>
      145e765e
    • David Milburn's avatar
      ahci: do not request irq for dummy port · 2d61c6ae
      David Milburn authored
      commit 9ae794ac upstream.
      
      System may crash in ahci_hw_interrupt() or ahci_thread_fn() when
      accessing the interrupt status in a port's private_data if the port is
      actually a DUMMY port.
      
      00:1f.2 SATA controller: Intel Corporation 82801JI (ICH10 Family) SATA AHCI Controller
      
      <snip console output for linux-3.15-rc1>
      [    9.352080] ahci 0000:00:1f.2: AHCI 0001.0200 32 slots 6 ports 3 Gbps 0x1 impl SATA mode
      [    9.352084] ahci 0000:00:1f.2: flags: 64bit ncq sntf pm led clo pio slum part ccc
      [    9.368155] Console: switching to colour frame buffer device 128x48
      [    9.439759] mgag200 0000:11:00.0: fb0: mgadrmfb frame buffer device
      [    9.446765] mgag200 0000:11:00.0: registered panic notifier
      [    9.470166] scsi1 : ahci
      [    9.479166] scsi2 : ahci
      [    9.488172] scsi3 : ahci
      [    9.497174] scsi4 : ahci
      [    9.506175] scsi5 : ahci
      [    9.515174] scsi6 : ahci
      [    9.518181] ata1: SATA max UDMA/133 abar m2048@0x95c00000 port 0x95c00100 irq 91
      [    9.526448] ata2: DUMMY
      [    9.529182] ata3: DUMMY
      [    9.531916] ata4: DUMMY
      [    9.534650] ata5: DUMMY
      [    9.537382] ata6: DUMMY
      [    9.576196] [drm] Initialized mgag200 1.0.0 20110418 for 0000:11:00.0 on minor 0
      [    9.845257] ata1: SATA link up 1.5 Gbps (SStatus 113 SControl 300)
      [    9.865161] ata1.00: ATAPI: Optiarc DVD RW AD-7580S, FX04, max UDMA/100
      [    9.891407] ata1.00: configured for UDMA/100
      [    9.900525] scsi 1:0:0:0: CD-ROM            Optiarc  DVD RW AD-7580S  FX04 PQ: 0 ANSI: 5
      [   10.247399] iTCO_vendor_support: vendor-support=0
      [   10.261572] iTCO_wdt: Intel TCO WatchDog Timer Driver v1.11
      [   10.269764] iTCO_wdt: unable to reset NO_REBOOT flag, device disabled by hardware/BIOS
      [   10.301932] sd 0:2:0:0: [sda] 570310656 512-byte logical blocks: (291 GB/271 GiB)
      [   10.317085] sd 0:2:0:0: [sda] Write Protect is off
      [   10.328326] sd 0:2:0:0: [sda] Write cache: disabled, read cache: disabled, supports DPO and FUA
      [   10.375452] BUG: unable to handle kernel NULL pointer dereference at 000000000000003c
      [   10.384217] IP: [<ffffffffa0133df0>] ahci_hw_interrupt+0x100/0x130 [libahci]
      [   10.392101] PGD 0
      [   10.394353] Oops: 0000 [#1] SMP
      [   10.397978] Modules linked in: sr_mod(+) cdrom sd_mod iTCO_wdt crc_t10dif iTCO_vendor_support crct10dif_common ahci libahci libata lpc_ich mfd_core mgag200 syscopyarea sysfillrect sysimgblt i2c_algo_bit drm_kms_helper ttm drm i2c_core megaraid_sas dm_mirror dm_region_hash
      dm_log dm_mod
      [   10.426499] CPU: 0 PID: 0 Comm: swapper/0 Not tainted 3.15.0-rc1 #1
      [   10.433495] Hardware name: QCI QSSC-S4R/QSSC-S4R, BIOS QSSC-S4R.QCI.01.00.S013.032920111005 03/29/2011
      [   10.443886] task: ffffffff81906460 ti: ffffffff818f0000 task.ti: ffffffff818f0000
      [   10.452239] RIP: 0010:[<ffffffffa0133df0>]  [<ffffffffa0133df0>] ahci_hw_interrupt+0x100/0x130 [libahci]
      [   10.462838] RSP: 0018:ffff880033c03d98  EFLAGS: 00010046
      [   10.468767] RAX: 0000000000a400a4 RBX: ffff880029a6bc18 RCX: 00000000fffffffa
      [   10.476731] RDX: 00000000000000a4 RSI: ffff880029bb0000 RDI: ffff880029a6bc18
      [   10.484696] RBP: ffff880033c03dc8 R08: 0000000000000000 R09: ffff88002f800490
      [   10.492661] R10: 0000000000000000 R11: 0000000000000005 R12: 0000000000000000
      [   10.500625] R13: ffff880029a6bd98 R14: 0000000000000000 R15: ffffc90000194000
      [   10.508590] FS:  0000000000000000(0000) GS:ffff880033c00000(0000) knlGS:0000000000000000
      [   10.517623] CS:  0010 DS: 0000 ES: 0000 CR0: 000000008005003b
      [   10.524035] CR2: 000000000000003c CR3: 00000000328ff000 CR4: 00000000000007b0
      [   10.531999] Stack:
      [   10.534241]  0000000000000017 ffff880031ba7d00 000000000000005c ffff880031ba7d00
      [   10.542535]  0000000000000000 000000000000005c ffff880033c03e10 ffffffff810c2a1e
      [   10.550827]  ffff880031ae2900 000000008108fb4f ffff880031ae2900 ffff880031ae2984
      [   10.559121] Call Trace:
      [   10.561849]  <IRQ>
      [   10.563994]  [<ffffffff810c2a1e>] handle_irq_event_percpu+0x3e/0x1a0
      [   10.571309]  [<ffffffff810c2bbd>] handle_irq_event+0x3d/0x60
      [   10.577631]  [<ffffffff810c4fdd>] try_one_irq.isra.6+0x8d/0xf0
      [   10.584142]  [<ffffffff810c5313>] note_interrupt+0x173/0x1f0
      [   10.590460]  [<ffffffff810c2a8e>] handle_irq_event_percpu+0xae/0x1a0
      [   10.597554]  [<ffffffff810c2bbd>] handle_irq_event+0x3d/0x60
      [   10.603872]  [<ffffffff810c5727>] handle_edge_irq+0x77/0x130
      [   10.610199]  [<ffffffff81014b8f>] handle_irq+0xbf/0x150
      [   10.616040]  [<ffffffff8109ff4e>] ? vtime_account_idle+0xe/0x50
      [   10.622654]  [<ffffffff815fca1a>] ? atomic_notifier_call_chain+0x1a/0x20
      [   10.630140]  [<ffffffff816038cf>] do_IRQ+0x4f/0xf0
      [   10.635490]  [<ffffffff815f8aed>] common_interrupt+0x6d/0x6d
      [   10.641805]  <EOI>
      [   10.643950]  [<ffffffff8149ca9f>] ? cpuidle_enter_state+0x4f/0xc0
      [   10.650972]  [<ffffffff8149ca98>] ? cpuidle_enter_state+0x48/0xc0
      [   10.657775]  [<ffffffff8149cb47>] cpuidle_enter+0x17/0x20
      [   10.663807]  [<ffffffff810b0070>] cpu_startup_entry+0x2c0/0x3d0
      [   10.670423]  [<ffffffff815dfcc7>] rest_init+0x77/0x80
      [   10.676065]  [<ffffffff81a60f47>] start_kernel+0x40f/0x41a
      [   10.682190]  [<ffffffff81a60941>] ? repair_env_string+0x5c/0x5c
      [   10.688799]  [<ffffffff81a60120>] ? early_idt_handlers+0x120/0x120
      [   10.695699]  [<ffffffff81a605ee>] x86_64_start_reservations+0x2a/0x2c
      [   10.702889]  [<ffffffff81a60733>] x86_64_start_kernel+0x143/0x152
      [   10.709689] Code: a0 fc ff 85 c0 8b 4d d4 74 c3 48 8b 7b 08 89 ca 48 c7 c6 60 66 13 a0 31 c0 e8 9d 70 28 e1 8b 4d d4 eb aa 0f 1f 84 00 00 00 00 00 <45> 8b 64 24 3c 48 89 df e8 23 47 4c e1 41 83 fc 01 19 c0 48 83
      [   10.731470] RIP  [<ffffffffa0133df0>] ahci_hw_interrupt+0x100/0x130 [libahci]
      [   10.739441]  RSP <ffff880033c03d98>
      [   10.743333] CR2: 000000000000003c
      [   10.747032] ---[ end trace b6e82636970e2690 ]---
      [   10.760190] Kernel panic - not syncing: Fatal exception in interrupt
      [   10.767291] Kernel Offset: 0x0 from 0xffffffff81000000 (relocation range: 0xffffffff80000000-0xffffffff9fffffff)
      
      Cc: Alexander Gordeev <agordeev@redhat.com>
      Cc: Tejun Heo <tj@kernel.org>
      Signed-of-by: default avatarDavid Milburn <dmilburn@redhat.com>
      Fixes: 5ca72c4f ("AHCI: Support multiple MSIs")
      Signed-off-by: default avatarKamal Mostafa <kamal@canonical.com>
      2d61c6ae
    • Roger Quadros's avatar
      usb: gadget: zero: Fix SuperSpeed enumeration for alternate setting 1 · affb5307
      Roger Quadros authored
      commit 9c1b7036 upstream.
      
      It was impossible to enumerate on a SuperSpeed (XHCI) host
      with alternate setting = 1 due to the wrongly set 'bMaxBurst'
      field in the SuperSpeed Endpoint Companion descriptor.
      
      Testcase:
      <host> modprobe -r usbtest; modprobe usbtest alt=1
      <device> modprobe g_zero
      plug device to SuperSpeed port on the host.
      
      Without this patch the host always complains like so
      "usb 12-2: Not enough bandwidth for new device state.
       usb 12-2: Not enough bandwidth for altsetting 1"
      
      Bug was introduced by commit cf9a08ae in v3.9
      
      Fixes: cf9a08ae (usb: gadget: convert source sink and loopback to
      new function interface)
      Reviewed-by: default avatarFelipe Balbi <balbi@ti.com>
      Acked-by: default avatarSebastian Andrzej Siewior <bigeasy@linutronix.de>
      Signed-off-by: default avatarRoger Quadros <rogerq@ti.com>
      Signed-off-by: default avatarFelipe Balbi <balbi@ti.com>
      Signed-off-by: default avatarKamal Mostafa <kamal@canonical.com>
      affb5307
    • Jeff Layton's avatar
      locks: allow __break_lease to sleep even when break_time is 0 · bcc88a3a
      Jeff Layton authored
      commit f1c6bb2c upstream.
      
      A fl->fl_break_time of 0 has a special meaning to the lease break code
      that basically means "never break the lease". knfsd uses this to ensure
      that leases don't disappear out from under it.
      
      Unfortunately, the code in __break_lease can end up passing this value
      to wait_event_interruptible as a timeout, which prevents it from going
      to sleep at all. This makes __break_lease to spin in a tight loop and
      causes soft lockups.
      
      Fix this by ensuring that we pass a minimum value of 1 as a timeout
      instead.
      
      Cc: J. Bruce Fields <bfields@fieldses.org>
      Reported-by: default avatarTerry Barnaby <terry1@beam.ltd.uk>
      Signed-off-by: default avatarJeff Layton <jlayton@redhat.com>
      Signed-off-by: default avatarKamal Mostafa <kamal@canonical.com>
      bcc88a3a
    • Theodore Ts'o's avatar
      ext4: use i_size_read in ext4_unaligned_aio() · 5b119656
      Theodore Ts'o authored
      commit 6e6358fc upstream.
      
      We haven't taken i_mutex yet, so we need to use i_size_read().
      Signed-off-by: default avatar"Theodore Ts'o" <tytso@mit.edu>
      Signed-off-by: default avatarKamal Mostafa <kamal@canonical.com>
      5b119656
    • Theodore Ts'o's avatar
      ext4: move ext4_update_i_disksize() into mpage_map_and_submit_extent() · aed2bf36
      Theodore Ts'o authored
      commit 622cad13 upstream.
      
      The function ext4_update_i_disksize() is used in only one place, in
      the function mpage_map_and_submit_extent().  Move its code to simplify
      the code paths, and also move the call to ext4_mark_inode_dirty() into
      the i_data_sem's critical region, to be consistent with all of the
      other places where we update i_disksize.  That way, we also keep the
      raw_inode's i_disksize protected, to avoid the following race:
      
            CPU #1                                 CPU #2
      
         down_write(&i_data_sem)
         Modify i_disk_size
         up_write(&i_data_sem)
                                              down_write(&i_data_sem)
                                              Modify i_disk_size
                                              Copy i_disk_size to on-disk inode
                                              up_write(&i_data_sem)
         Copy i_disk_size to on-disk inode
      Signed-off-by: default avatar"Theodore Ts'o" <tytso@mit.edu>
      Reviewed-by: default avatarJan Kara <jack@suse.cz>
      Signed-off-by: default avatarKamal Mostafa <kamal@canonical.com>
      aed2bf36
    • Jan Kara's avatar
      ext4: fix jbd2 warning under heavy xattr load · 160dfc8d
      Jan Kara authored
      commit ec4cb1aa upstream.
      
      When heavily exercising xattr code the assertion that
      jbd2_journal_dirty_metadata() shouldn't return error was triggered:
      
      WARNING: at /srv/autobuild-ceph/gitbuilder.git/build/fs/jbd2/transaction.c:1237
      jbd2_journal_dirty_metadata+0x1ba/0x260()
      
      CPU: 0 PID: 8877 Comm: ceph-osd Tainted: G    W 3.10.0-ceph-00049-g68d04c9 #1
      Hardware name: Dell Inc. PowerEdge R410/01V648, BIOS 1.6.3 02/07/2011
       ffffffff81a1d3c8 ffff880214469928 ffffffff816311b0 ffff880214469968
       ffffffff8103fae0 ffff880214469958 ffff880170a9dc30 ffff8802240fbe80
       0000000000000000 ffff88020b366000 ffff8802256e7510 ffff880214469978
      Call Trace:
       [<ffffffff816311b0>] dump_stack+0x19/0x1b
       [<ffffffff8103fae0>] warn_slowpath_common+0x70/0xa0
       [<ffffffff8103fb2a>] warn_slowpath_null+0x1a/0x20
       [<ffffffff81267c2a>] jbd2_journal_dirty_metadata+0x1ba/0x260
       [<ffffffff81245093>] __ext4_handle_dirty_metadata+0xa3/0x140
       [<ffffffff812561f3>] ext4_xattr_release_block+0x103/0x1f0
       [<ffffffff81256680>] ext4_xattr_block_set+0x1e0/0x910
       [<ffffffff8125795b>] ext4_xattr_set_handle+0x38b/0x4a0
       [<ffffffff810a319d>] ? trace_hardirqs_on+0xd/0x10
       [<ffffffff81257b32>] ext4_xattr_set+0xc2/0x140
       [<ffffffff81258547>] ext4_xattr_user_set+0x47/0x50
       [<ffffffff811935ce>] generic_setxattr+0x6e/0x90
       [<ffffffff81193ecb>] __vfs_setxattr_noperm+0x7b/0x1c0
       [<ffffffff811940d4>] vfs_setxattr+0xc4/0xd0
       [<ffffffff8119421e>] setxattr+0x13e/0x1e0
       [<ffffffff811719c7>] ? __sb_start_write+0xe7/0x1b0
       [<ffffffff8118f2e8>] ? mnt_want_write_file+0x28/0x60
       [<ffffffff8118c65c>] ? fget_light+0x3c/0x130
       [<ffffffff8118f2e8>] ? mnt_want_write_file+0x28/0x60
       [<ffffffff8118f1f8>] ? __mnt_want_write+0x58/0x70
       [<ffffffff811946be>] SyS_fsetxattr+0xbe/0x100
       [<ffffffff816407c2>] system_call_fastpath+0x16/0x1b
      
      The reason for the warning is that buffer_head passed into
      jbd2_journal_dirty_metadata() didn't have journal_head attached. This is
      caused by the following race of two ext4_xattr_release_block() calls:
      
      CPU1                                CPU2
      ext4_xattr_release_block()          ext4_xattr_release_block()
      lock_buffer(bh);
      /* False */
      if (BHDR(bh)->h_refcount == cpu_to_le32(1))
      } else {
        le32_add_cpu(&BHDR(bh)->h_refcount, -1);
        unlock_buffer(bh);
                                          lock_buffer(bh);
                                          /* True */
                                          if (BHDR(bh)->h_refcount == cpu_to_le32(1))
                                            get_bh(bh);
                                            ext4_free_blocks()
                                              ...
                                              jbd2_journal_forget()
                                                jbd2_journal_unfile_buffer()
                                                -> JH is gone
        error = ext4_handle_dirty_xattr_block(handle, inode, bh);
        -> triggers the warning
      
      We fix the problem by moving ext4_handle_dirty_xattr_block() under the
      buffer lock. Sadly this cannot be done in nojournal mode as that
      function can call sync_dirty_buffer() which would deadlock. Luckily in
      nojournal mode the race is harmless (we only dirty already freed buffer)
      and thus for nojournal mode we leave the dirtying outside of the buffer
      lock.
      Reported-by: default avatarSage Weil <sage@inktank.com>
      Signed-off-by: default avatarJan Kara <jack@suse.cz>
      Signed-off-by: default avatar"Theodore Ts'o" <tytso@mit.edu>
      Signed-off-by: default avatarKamal Mostafa <kamal@canonical.com>
      160dfc8d
    • Matthew Wilcox's avatar
      ext4: note the error in ext4_end_bio() · d5d7119b
      Matthew Wilcox authored
      commit 9503c67c upstream.
      
      ext4_end_bio() currently throws away the error that it receives.  Chances
      are this is part of a spate of errors, one of which will end up getting
      the error returned to userspace somehow, but we shouldn't take that risk.
      Also print out the errno to aid in debug.
      Signed-off-by: default avatarMatthew Wilcox <matthew.r.wilcox@intel.com>
      Signed-off-by: default avatar"Theodore Ts'o" <tytso@mit.edu>
      Reviewed-by: default avatarJan Kara <jack@suse.cz>
      Signed-off-by: default avatarKamal Mostafa <kamal@canonical.com>
      d5d7119b
    • Kazuya Mio's avatar
      ext4: FIBMAP ioctl causes BUG_ON due to handle EXT_MAX_BLOCKS · bb3dcbf7
      Kazuya Mio authored
      commit 4adb6ab3 upstream.
      
      When we try to get 2^32-1 block of the file which has the extent
      (ee_block=2^32-2, ee_len=1) with FIBMAP ioctl, it causes BUG_ON
      in ext4_ext_put_gap_in_cache().
      
      To avoid the problem, ext4_map_blocks() needs to check the file logical block
      number. ext4_ext_put_gap_in_cache() called via ext4_map_blocks() cannot
      handle 2^32-1 because the maximum file logical block number is 2^32-2.
      
      Note that ext4_ind_map_blocks() returns -EIO when the block number is invalid.
      So ext4_map_blocks() should also return the same errno.
      Signed-off-by: default avatarKazuya Mio <k-mio@sx.jp.nec.com>
      Signed-off-by: default avatar"Theodore Ts'o" <tytso@mit.edu>
      Signed-off-by: default avatarKamal Mostafa <kamal@canonical.com>
      bb3dcbf7
    • Theodore Ts'o's avatar
      ext4: avoid possible overflow in ext4_map_blocks() · 2dedb19f
      Theodore Ts'o authored
      commit e861b5e9 upstream.
      
      The ext4_map_blocks() function returns the number of blocks which
      satisfying the caller's request.  This number of blocks requested by
      the caller is specified by an unsigned integer, but the return value
      of ext4_map_blocks() is a signed integer (to accomodate error codes
      per the kernel's standard error signalling convention).
      
      Historically, overflows could never happen since mballoc() will refuse
      to allocate more than 2048 blocks at a time (which is something we
      should fix), and if the blocks were already allocated, the fact that
      there would be some number of intervening metadata blocks pretty much
      guaranteed that there could never be a contiguous region of data
      blocks that was greater than 2**31 blocks.
      
      However, this is now possible if there is a file system which is a bit
      bigger than 8TB, and is created using the new mke2fs hugeblock
      feature, which can create a perfectly contiguous file.  In that case,
      if a userspace program attempted to call fallocate() on this already
      fully allocated file, it's possible that ext4_map_blocks() could
      return a number large enough that it would overflow a signed integer,
      resulting in a ext4 thinking that the ext4_map_blocks() call had
      failed with some strange error code.
      
      Since ext4_map_blocks() is always free to return a smaller number of
      blocks than what was requested by the caller, fix this by capping the
      number of blocks that ext4_map_blocks() will ever try to map to 2**31
      - 1.  In practice this should never get hit, except by someone
      deliberately trying to provke the above-described bug.
      
      Thanks to the PaX team for asking whethre this could possibly happen
      in some off-line discussions about using some static code checking
      technology they are developing to find bugs in kernel code.
      Signed-off-by: default avatar"Theodore Ts'o" <tytso@mit.edu>
      Signed-off-by: default avatarKamal Mostafa <kamal@canonical.com>
      2dedb19f
    • Bartlomiej Zolnierkiewicz's avatar
      pata_at91: fix ata_host_activate() failure handling · 9b58042e
      Bartlomiej Zolnierkiewicz authored
      commit 27aa64b9 upstream.
      
      Add missing clk_put() call to ata_host_activate() failure path.
      
      Sergei says,
      
        "Hm, I have once fixed that (see that *if* (!ret)) but looks like a
         later commit 477c87e9 (ARM:
         at91/pata: use gpio_is_valid to check the gpio) broke it again. :-(
         Would be good if the changelog did mention that..."
      
      Cc: Andrew Victor <linux@maxim.org.za>
      Cc: Nicolas Ferre <nicolas.ferre@atmel.com>
      Cc: Jean-Christophe Plagniol-Villard <plagnioj@jcrosoft.com>
      Cc: Sergei Shtylyov <sergei.shtylyov@cogentembedded.com>
      Signed-off-by: default avatarBartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
      Signed-off-by: default avatarTejun Heo <tj@kernel.org>
      Signed-off-by: default avatarKamal Mostafa <kamal@canonical.com>
      9b58042e
    • Martin K. Petersen's avatar
      libata: Update queued trim blacklist for M5x0 drives · f12bbd61
      Martin K. Petersen authored
      commit d121f7d0 upstream.
      
      Crucial/Micron M500 drives properly support queued DSM TRIM starting
      with firmware MU05. Update the blacklist so we only disable queued trim
      for older firmware releases.
      
      Early M550 series drives suffer from the same issue as M500. A bugfix
      firmware is in the pipeline but not ready yet. Until then, blacklist
      queued trim for M550.
      Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
      Cc: Chris Samuel <chris@csamuel.org>
      Cc: Marc MERLIN <marc@merlins.org>
      Signed-off-by: default avatarTejun Heo <tj@kernel.org>
      Signed-off-by: default avatarKamal Mostafa <kamal@canonical.com>
      f12bbd61
    • Krzysztof Kozlowski's avatar
      iio: cm36651: Fix i2c client leak and possible NULL pointer dereference · 10c952af
      Krzysztof Kozlowski authored
      commit d0a588a5 upstream.
      
      During probe the driver allocates dummy I2C devices (i2c_new_dummy())
      but they aren't unregistered during driver remove or probe failure.
      
      Additionally driver does not check the return value of i2c_new_dummy().
      In case of error (i2c_new_device(): memory allocation failure or I2C
      address cannot be used) this function returns NULL which is later
      dereferenced by i2c_smbus_{read,write}_data() functions.
      
      Fix issues by properly checking for i2c_new_dummy() return value and
      unregistering I2C devices on driver remove or probe failure.
      Signed-off-by: default avatarKrzysztof Kozlowski <k.kozlowski@samsung.com>
      Acked-by: default avatarBeomho Seo <beomho.seo@samsung.com>
      Signed-off-by: default avatarJonathan Cameron <jic23@kernel.org>
      Signed-off-by: default avatarKamal Mostafa <kamal@canonical.com>
      10c952af
    • Alec Berg's avatar
      iio: querying buffer scan_mask should return 0/1 · 1d62d021
      Alec Berg authored
      commit 2076a20f upstream.
      
      Ensure that querying the IIO buffer scan_mask returns a value of
      0 or 1. Currently querying the scan mask has the value returned
      by test_bit(), which returns either true or false. For some
      architectures test_bit() may return -1 for true, which will appear
      to return an error when returning from iio_scan_mask_query().
      
      Additionally, it's important for the sysfs interface to consistently
      return the same thing when querying the scan_mask.
      Signed-off-by: default avatarAlec Berg <alecaberg@chromium.org>
      Signed-off-by: default avatarJonathan Cameron <jic23@kernel.org>
      Signed-off-by: default avatarKamal Mostafa <kamal@canonical.com>
      1d62d021
    • Alexandre Belloni's avatar
      iio: adc: at91_adc: Repair broken platform_data support · 6d706b76
      Alexandre Belloni authored
      commit 467a44b0 upstream.
      
      Trying to use the at91_adc driver while not using device tree is ending up in a
      kernel crash:
      
      Unable to handle kernel NULL pointer dereference at virtual address 00000004
      [...]
      [<c01f3510>] (at91_adc_probe) from [<c0183828>] (platform_drv_probe+0x18/0x48)
      [<c0183828>] (platform_drv_probe) from [<c01824a4>] (driver_probe_device+0x100/0x218)
      [<c01824a4>] (driver_probe_device) from [<c0182648>] (__driver_attach+0x8c/0x90)
      [<c0182648>] (__driver_attach) from [<c0180de4>] (bus_for_each_dev+0x58/0x88)
      [<c0180de4>] (bus_for_each_dev) from [<c0181c7c>] (bus_add_driver+0xd4/0x1d4)
      [<c0181c7c>] (bus_add_driver) from [<c0182c40>] (driver_register+0x78/0xf4)
      [<c0182c40>] (driver_register) from [<c0008998>] (do_one_initcall+0xe8/0x14c)
      [<c0008998>] (do_one_initcall) from [<c02f0b50>] (kernel_init_freeable+0xec/0x1b4)
      [<c02f0b50>] (kernel_init_freeable) from [<c022acdc>] (kernel_init+0x8/0xe4)
      [<c022acdc>] (kernel_init) from [<c0009670>] (ret_from_fork+0x14/0x24)
      
      This is because the at91_adc_caps structure is mandatory but is not filled when
      using platform_data. Correct that by using an id_table. It ensues that the
      driver will not match "at91_adc" anymore but it was crashing anyway.
      
      Fixes: c4601666 (iio: at91: ADC start-up time calculation changed since at91sam9x5)
      Signed-off-by: default avatarAlexandre Belloni <alexandre.belloni@free-electrons.com>
      Tested-by: default avatarJosh Wu <josh.wu@atmel.com>
      Acked-by: default avatarJosh Wu <josh.wu@atmel.com>
      Signed-off-by: default avatarJonathan Cameron <jic23@kernel.org>
      Signed-off-by: default avatarKamal Mostafa <kamal@canonical.com>
      6d706b76
    • Denis Turischev's avatar
      xhci: Switch Intel Lynx Point ports to EHCI on shutdown. · d0f8c04d
      Denis Turischev authored
      commit c09ec25d upstream.
      
      The same issue like with Panther Point chipsets. If the USB ports are
      switched to xHCI on shutdown, the xHCI host will send a spurious interrupt,
      which will wake the system. Some BIOS have work around for this, but not all.
      One example is Compulab's mini-desktop, the Intense-PC2.
      
      The bug can be avoided if the USB ports are switched back to EHCI on
      shutdown.
      
      This patch should be backported to stable kernels as old as 3.12,
      that contain the commit 638298dc
      "xhci: Fix spurious wakeups after S5 on Haswell"
      Signed-off-by: default avatarDenis Turischev <denis@compulab.co.il>
      Signed-off-by: default avatarMathias Nyman <mathias.nyman@linux.intel.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Cc: Andy Whitcroft <apw@canonical.com>
      Signed-off-by: default avatarKamal Mostafa <kamal@canonical.com>
      d0f8c04d
    • Helmut Schaa's avatar
      ath9k: Fix sequence number assignment for non-data frames · 098afa12
      Helmut Schaa authored
      commit 5998be87 upstream.
      
      Since commit 558ff225 (ath9k: fix
      ps-poll responses under a-mpdu sessions) non-data frames would have
      gotten a sequence number from a TIDs sequence counter instead of
      using the global sequence counter.
      
      This can lead to instable connections.
      
      To fix this only select the correct TID if we are processing a
      data frame. Furthermore, prevent non-data frames to get a sequence
      number from a TID sequence counter by adding a check to
      ath_tx_setup_buffer.
      
      Cc: Felix Fietkau <nbd@openwrt.org>
      Signed-off-by: default avatarHelmut Schaa <helmut.schaa@googlemail.com>
      Acked-by: default avatarFelix Fietkau <nbd@openwrt.org>
      Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
      Cc: Fejes József <jozsef.fejes@gmail.com>
      Signed-off-by: default avatarKamal Mostafa <kamal@canonical.com>
      098afa12
    • Kieran Clancy's avatar
      ACPI / EC: Process rather than discard events in acpi_ec_clear · 98d6798b
      Kieran Clancy authored
      commit 3eba563e upstream.
      
      Address a regression caused by commit ad332c8a:
      (ACPI / EC: Clear stale EC events on Samsung systems)
      
      After the earlier patch, there was found to be a race condition on some
      earlier Samsung systems (N150/N210/N220). The function acpi_ec_clear was
      sometimes discarding a new EC event before its GPE was triggered by the
      system. In the case of these systems, this meant that the "lid open"
      event was not registered on resume if that was the cause of the wake,
      leading to problems when attempting to close the lid to suspend again.
      
      After testing on a number of Samsung systems, both those affected by the
      previous EC bug and those affected by the race condition, it seemed that
      the best course of action was to process rather than discard the events.
      On Samsung systems which accumulate stale EC events, there does not seem
      to be any adverse side-effects of running the associated _Q methods.
      
      This patch adds an argument to the static function acpi_ec_sync_query so
      that it may be used within the acpi_ec_clear loop in place of
      acpi_ec_query_unlocked which was used previously.
      
      With thanks to Stefan Biereigel for reporting the issue, and for all the
      people who helped test the new patch on affected systems.
      
      Fixes: ad332c8a (ACPI / EC: Clear stale EC events on Samsung systems)
      References: https://lkml.kernel.org/r/532FE3B2.9060808@biereigel-wb.de
      References: https://bugzilla.kernel.org/show_bug.cgi?id=44161#c173Reported-by: default avatarStefan Biereigel <stefan@biereigel.de>
      Signed-off-by: default avatarKieran Clancy <clancy.kieran@gmail.com>
      Tested-by: default avatarStefan Biereigel <stefan@biereigel.de>
      Tested-by: default avatarDennis Jansen <dennis.jansen@web.de>
      Tested-by: default avatarNicolas Porcel <nicolasporcel06@gmail.com>
      Tested-by: default avatarMaurizio D'Addona <mauritiusdadd@gmail.com>
      Tested-by: default avatarJuan Manuel Cabo <juanmanuel.cabo@gmail.com>
      Tested-by: default avatarGiannis Koutsou <giannis.koutsou@gmail.com>
      Tested-by: default avatarKieran Clancy <clancy.kieran@gmail.com>
      Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
      Signed-off-by: default avatarKamal Mostafa <kamal@canonical.com>
      98d6798b
    • Michael Neuling's avatar
      powerpc/tm: Disable IRQ in tm_recheckpoint · db6c1d40
      Michael Neuling authored
      commit e6b8fd02 upstream.
      
      We can't take an IRQ when we're about to do a trechkpt as our GPR state is set
      to user GPR values.
      
      We've hit this when running some IBM Java stress tests in the lab resulting in
      the following dump:
      
        cpu 0x3f: Vector: 700 (Program Check) at [c000000007eb3d40]
            pc: c000000000050074: restore_gprs+0xc0/0x148
            lr: 00000000b52a8184
            sp: ac57d360
           msr: 8000000100201030
          current = 0xc00000002c500000
          paca    = 0xc000000007dbfc00     softe: 0     irq_happened: 0x00
            pid   = 34535, comm = Pooled Thread #
        R00 = 00000000b52a8184   R16 = 00000000b3e48fda
        R01 = 00000000ac57d360   R17 = 00000000ade79bd8
        R02 = 00000000ac586930   R18 = 000000000fac9bcc
        R03 = 00000000ade60000   R19 = 00000000ac57f930
        R04 = 00000000f6624918   R20 = 00000000ade79be8
        R05 = 00000000f663f238   R21 = 00000000ac218a54
        R06 = 0000000000000002   R22 = 000000000f956280
        R07 = 0000000000000008   R23 = 000000000000007e
        R08 = 000000000000000a   R24 = 000000000000000c
        R09 = 00000000b6e69160   R25 = 00000000b424cf00
        R10 = 0000000000000181   R26 = 00000000f66256d4
        R11 = 000000000f365ec0   R27 = 00000000b6fdcdd0
        R12 = 00000000f66400f0   R28 = 0000000000000001
        R13 = 00000000ada71900   R29 = 00000000ade5a300
        R14 = 00000000ac2185a8   R30 = 00000000f663f238
        R15 = 0000000000000004   R31 = 00000000f6624918
        pc  = c000000000050074 restore_gprs+0xc0/0x148
        cfar= c00000000004fe28 dont_restore_vec+0x1c/0x1a4
        lr  = 00000000b52a8184
        msr = 8000000100201030   cr  = 24804888
        ctr = 0000000000000000   xer = 0000000000000000   trap =  700
      
      This moves tm_recheckpoint to a C function and moves the tm_restore_sprs into
      that function.  It then adds IRQ disabling over the trechkpt critical section.
      It also sets the TEXASR FS in the signals code to ensure this is never set now
      that we explictly write the TM sprs in tm_recheckpoint.
      Signed-off-by: default avatarMichael Neuling <mikey@neuling.org>
      Signed-off-by: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
      [ luis: backported to 3.11: used mikey's backport to 3.10, which picks
        the definition of TEXASR_FS from commit
        e4e38121 ("KVM: PPC: Book3S HV: Add
        transactional memory support") ]
      Signed-off-by: default avatarLuis Henriques <luis.henriques@canonical.com>
      Signed-off-by: default avatarKamal Mostafa <kamal@canonical.com>
      db6c1d40
    • Emmanuel Grumbach's avatar
      iwlwifi: mvm: disable beacon filtering · f30f889c
      Emmanuel Grumbach authored
      commit 7bacc782 upstream.
      
      This feature has been causing trouble - disable it for now.
      Signed-off-by: default avatarEmmanuel Grumbach <emmanuel.grumbach@intel.com>
      Cc: Seth Forshee <seth.forshee@canonical.com>
      Signed-off-by: default avatarKamal Mostafa <kamal@canonical.com>
      f30f889c
    • Rik van Riel's avatar
      mm/numa: Remove BUG_ON() in __handle_mm_fault() · 1e6c38ef
      Rik van Riel authored
      commit 107437fe upstream.
      
      Changing PTEs and PMDs to pte_numa & pmd_numa is done with the
      mmap_sem held for reading, which means a pmd can be instantiated
      and turned into a numa one while __handle_mm_fault() is examining
      the value of old_pmd.
      
      If that happens, __handle_mm_fault() should just return and let
      the page fault retry, instead of throwing an oops. This is
      handled by the test for pmd_trans_huge(*pmd) below.
      Signed-off-by: default avatarRik van Riel <riel@redhat.com>
      Reviewed-by: default avatarNaoya Horiguchi <n-horiguchi@ah.jp.nec.com>
      Reported-by: default avatarSunil Pandey <sunil.k.pandey@intel.com>
      Signed-off-by: default avatarPeter Zijlstra <peterz@infradead.org>
      Cc: Andrew Morton <akpm@linux-foundation.org>
      Cc: Johannes Weiner <hannes@cmpxchg.org>
      Cc: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
      Cc: Linus Torvalds <torvalds@linux-foundation.org>
      Cc: Mel Gorman <mgorman@suse.de>
      Cc: linux-mm@kvack.org
      Cc: lwoodman@redhat.com
      Cc: dave.hansen@intel.com
      Link: http://lkml.kernel.org/r/20140429153615.2d72098e@annuminas.surriel.comSigned-off-by: default avatarIngo Molnar <mingo@kernel.org>
      Cc: Paul Gortmaker <paul.gortmaker@windriver.com>
      Signed-off-by: default avatarKamal Mostafa <kamal@canonical.com>
      1e6c38ef
  2. 09 Jun, 2014 10 commits