Re: [PATCH v3 0/5] block: loop: convert to blk-mq

From: Sedat Dilek
Date: Thu Jan 01 2015 - 10:14:36 EST


On Thu, Jan 1, 2015 at 1:29 AM, Ming Lei <tom.leiming@xxxxxxxxx> wrote:
[...]
>> How did you test with fio (your fio lines)?
>
> Your fio command line is basically same with my fio config, and you
> can attach one image to loop via: losetup -f file_name. Looks your
> randread result is good, and I can observe ~80 IOPS vs. ~200 IOPS
> on my slow HDD. in the randread test too.
>
> #################fio config##########################
> [global]
> direct=1
> size=128G
> bsrange=4k-4k
> timeout=30
> numjobs=1
> ioengine=libaio
> iodepth=64
> filename=/dev/loop0
> group_reporting=1
>
> [f]
> rw=${RW}
>

Thanks for your fio config-file.

When a 1GiB is created on my ext4-system, the IOPS raised up from 515 to 981.

# egrep 'iops=|Laying out IO file' fio-test*next20141231-1-loopmq-small*
fio-test1-3.19.0-rc2-next20141231-1-loopmq-small.txt: read :
io=1024.0MB, bw=2063.4KB/s, iops=515 , runt=508182msec
fio-test2-3.19.0-rc2-next20141231-1-loopmq-small.txt:randread: Laying
out IO file(s) (1 file(s) / 1024MB)
fio-test2-3.19.0-rc2-next20141231-1-loopmq-small.txt: read :
io=1024.0MB, bw=3924.3KB/s, iops=981 , runt=267206msec

I made some more testing with next-20141231 plus block-loop-mq-v3 and
block.git#for-linus on top (see attached full patch).

This increases IOPS from 981 up to 2103.

# egrep 'iops=|Laying out IO file'
fio-test2-3.19.0-rc2-next20141231-1-loopmq-small.txt
fio-test2-3.19.0-rc2-next20141231-3-loopmq-small.txt
fio-test2-3.19.0-rc2-next20141231-1-loopmq-small.txt:randread: Laying
out IO file(s) (1 file(s) / 1024MB)
fio-test2-3.19.0-rc2-next20141231-1-loopmq-small.txt: read :
io=1024.0MB, bw=3924.3KB/s, iops=981 , runt=267206msec
fio-test2-3.19.0-rc2-next20141231-3-loopmq-small.txt:randread: Laying
out IO file(s) (1 file(s) / 1024MB)
fio-test2-3.19.0-rc2-next20141231-3-loopmq-small.txt: read :
io=1024.0MB, bw=8414.9KB/s, iops=2103 , runt=124611msec

If you like you can have a closer look at the fio benchmark results, Thanks!

I also have added two patches which made it easy for me to cope with
the merge conflicts within block/loop stuff.

Have fun!

- Sedat -
[ 0.000000] Initializing cgroup subsys cpuset
[ 0.000000] Initializing cgroup subsys cpu
[ 0.000000] Initializing cgroup subsys cpuacct
[ 0.000000] Linux version 3.19.0-rc2-next20141231-3-loopmq-small (sedat.dilek@xxxxxxxxx@fambox) (gcc version 4.9.2 (Ubuntu 4.9.2-0ubuntu1~12.04) ) #1 SMP Thu Jan 1 15:35:53 CET 2015
[ 0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-3.19.0-rc2-next20141231-3-loopmq-small root=UUID=001AADA61AAD9964 loop=/ubuntu/disks/root.disk ro
[ 0.000000] KERNEL supported cpus:
[ 0.000000] Intel GenuineIntel
[ 0.000000] AMD AuthenticAMD
[ 0.000000] Centaur CentaurHauls
[ 0.000000] Disabled fast string operations
[ 0.000000] e820: BIOS-provided physical RAM map:
[ 0.000000] BIOS-e820: [mem 0x0000000000000000-0x000000000009d7ff] usable
[ 0.000000] BIOS-e820: [mem 0x000000000009d800-0x000000000009ffff] reserved
[ 0.000000] BIOS-e820: [mem 0x00000000000e0000-0x00000000000fffff] reserved
[ 0.000000] BIOS-e820: [mem 0x0000000000100000-0x000000001fffffff] usable
[ 0.000000] BIOS-e820: [mem 0x0000000020000000-0x00000000201fffff] reserved
[ 0.000000] BIOS-e820: [mem 0x0000000020200000-0x000000003fffffff] usable
[ 0.000000] BIOS-e820: [mem 0x0000000040000000-0x00000000401fffff] reserved
[ 0.000000] BIOS-e820: [mem 0x0000000040200000-0x00000000d9c9efff] usable
[ 0.000000] BIOS-e820: [mem 0x00000000d9c9f000-0x00000000dae7efff] reserved
[ 0.000000] BIOS-e820: [mem 0x00000000dae7f000-0x00000000daf9efff] ACPI NVS
[ 0.000000] BIOS-e820: [mem 0x00000000daf9f000-0x00000000daffefff] ACPI data
[ 0.000000] BIOS-e820: [mem 0x00000000dafff000-0x00000000daffffff] usable
[ 0.000000] BIOS-e820: [mem 0x00000000db000000-0x00000000df9fffff] reserved
[ 0.000000] BIOS-e820: [mem 0x00000000f8000000-0x00000000fbffffff] reserved
[ 0.000000] BIOS-e820: [mem 0x00000000fec00000-0x00000000fec00fff] reserved
[ 0.000000] BIOS-e820: [mem 0x00000000fed08000-0x00000000fed08fff] reserved
[ 0.000000] BIOS-e820: [mem 0x00000000fed10000-0x00000000fed19fff] reserved
[ 0.000000] BIOS-e820: [mem 0x00000000fed1c000-0x00000000fed1ffff] reserved
[ 0.000000] BIOS-e820: [mem 0x00000000fee00000-0x00000000fee00fff] reserved
[ 0.000000] BIOS-e820: [mem 0x00000000ffd80000-0x00000000ffffffff] reserved
[ 0.000000] BIOS-e820: [mem 0x0000000100000000-0x000000011fdfffff] usable
[ 0.000000] NX (Execute Disable) protection: active
[ 0.000000] SMBIOS 2.6 present.
[ 0.000000] DMI: SAMSUNG ELECTRONICS CO., LTD. 530U3BI/530U4BI/530U4BH/530U3BI/530U4BI/530U4BH, BIOS 13XK 03/28/2013
[ 0.000000] e820: update [mem 0x00000000-0x00000fff] usable ==> reserved
[ 0.000000] e820: remove [mem 0x000a0000-0x000fffff] usable
[ 0.000000] AGP: No AGP bridge found
[ 0.000000] e820: last_pfn = 0x11fe00 max_arch_pfn = 0x400000000
[ 0.000000] MTRR default type: uncachable
[ 0.000000] MTRR fixed ranges enabled:
[ 0.000000] 00000-9FFFF write-back
[ 0.000000] A0000-BFFFF uncachable
[ 0.000000] C0000-FFFFF write-protect
[ 0.000000] MTRR variable ranges enabled:
[ 0.000000] 0 base 000000000 mask F80000000 write-back
[ 0.000000] 1 base 080000000 mask FC0000000 write-back
[ 0.000000] 2 base 0C0000000 mask FE0000000 write-back
[ 0.000000] 3 base 0DC000000 mask FFC000000 uncachable
[ 0.000000] 4 base 0DB000000 mask FFF000000 uncachable
[ 0.000000] 5 base 100000000 mask FE0000000 write-back
[ 0.000000] 6 base 11FE00000 mask FFFE00000 uncachable
[ 0.000000] 7 base 0FFC00000 mask FFFC00000 write-protect
[ 0.000000] 8 disabled
[ 0.000000] 9 disabled
[ 0.000000] PAT configuration [0-7]: WB WC UC- UC WB WC UC- UC
[ 0.000000] e820: last_pfn = 0xdb000 max_arch_pfn = 0x400000000
[ 0.000000] found SMP MP-table at [mem 0x000f00e0-0x000f00ef] mapped at [ffff8800000f00e0]
[ 0.000000] Scanning 1 areas for low memory corruption
[ 0.000000] Base memory trampoline at [ffff880000097000] 97000 size 24576
[ 0.000000] reserving inaccessible SNB gfx pages
[ 0.000000] init_memory_mapping: [mem 0x00000000-0x000fffff]
[ 0.000000] [mem 0x00000000-0x000fffff] page 4k
[ 0.000000] BRK [0x02cad000, 0x02cadfff] PGTABLE
[ 0.000000] BRK [0x02cae000, 0x02caefff] PGTABLE
[ 0.000000] BRK [0x02caf000, 0x02caffff] PGTABLE
[ 0.000000] init_memory_mapping: [mem 0x11fc00000-0x11fdfffff]
[ 0.000000] [mem 0x11fc00000-0x11fdfffff] page 2M
[ 0.000000] BRK [0x02cb0000, 0x02cb0fff] PGTABLE
[ 0.000000] init_memory_mapping: [mem 0x11c000000-0x11fbfffff]
[ 0.000000] [mem 0x11c000000-0x11fbfffff] page 2M
[ 0.000000] init_memory_mapping: [mem 0x100000000-0x11bffffff]
[ 0.000000] [mem 0x100000000-0x11bffffff] page 2M
[ 0.000000] init_memory_mapping: [mem 0x00100000-0x1fffffff]
[ 0.000000] [mem 0x00100000-0x001fffff] page 4k
[ 0.000000] [mem 0x00200000-0x1fffffff] page 2M
[ 0.000000] init_memory_mapping: [mem 0x20200000-0x3fffffff]
[ 0.000000] [mem 0x20200000-0x3fffffff] page 2M
[ 0.000000] init_memory_mapping: [mem 0x40200000-0xd9c9efff]
[ 0.000000] [mem 0x40200000-0xd9bfffff] page 2M
[ 0.000000] [mem 0xd9c00000-0xd9c9efff] page 4k
[ 0.000000] BRK [0x02cb1000, 0x02cb1fff] PGTABLE
[ 0.000000] BRK [0x02cb2000, 0x02cb2fff] PGTABLE
[ 0.000000] init_memory_mapping: [mem 0xdafff000-0xdaffffff]
[ 0.000000] [mem 0xdafff000-0xdaffffff] page 4k
[ 0.000000] RAMDISK: [mem 0x37936000-0x37c92fff]
[ 0.000000] ACPI: Early table checksum verification disabled
[ 0.000000] ACPI: RSDP 0x00000000000F0100 000024 (v02 SECCSD)
[ 0.000000] ACPI: XSDT 0x00000000DAFFE170 00008C (v01 SECCSD LH43STAR 00000002 PTEC 00000002)
[ 0.000000] ACPI: FACP 0x00000000DAFEF000 00010C (v05 SECCSD LH43STAR 00000002 PTL 00000002)
[ 0.000000] ACPI: DSDT 0x00000000DAFF2000 0083AC (v02 SECCSD SNB-CPT 00000000 INTL 20061109)
[ 0.000000] ACPI: FACS 0x00000000DAF47000 000040
[ 0.000000] ACPI: SLIC 0x00000000DAFFD000 000176 (v01 SECCSD LH43STAR 00000002 PTEC 00000001)
[ 0.000000] ACPI: SSDT 0x00000000DAFFB000 001068 (v01 SECCSD PtidDevc 00001000 INTL 20061109)
[ 0.000000] ACPI: ASF! 0x00000000DAFF1000 0000A5 (v32 SECCSD LH43STAR 00000002 PTL 00000002)
[ 0.000000] ACPI: HPET 0x00000000DAFEE000 000038 (v01 SECCSD LH43STAR 00000002 PTL 00000002)
[ 0.000000] ACPI: APIC 0x00000000DAFED000 000098 (v03 SECCSD LH43STAR 00000002 PTL 00000002)
[ 0.000000] ACPI: MCFG 0x00000000DAFEC000 00003C (v01 SECCSD LH43STAR 00000002 PTL 00000002)
[ 0.000000] ACPI: SSDT 0x00000000DAFEB000 000804 (v01 PmRef Cpu0Ist 00003000 INTL 20061109)
[ 0.000000] ACPI: SSDT 0x00000000DAFEA000 000996 (v01 PmRef CpuPm 00003000 INTL 20061109)
[ 0.000000] ACPI: UEFI 0x00000000DAFE9000 00003E (v01 SECCSD LH43STAR 00000002 PTL 00000002)
[ 0.000000] ACPI: UEFI 0x00000000DAFE8000 000042 (v01 PTL COMBUF 00000001 PTL 00000001)
[ 0.000000] ACPI: UEFI 0x00000000DAFE7000 00026A (v01 SECCSD LH43STAR 00000002 PTL 00000002)
[ 0.000000] ACPI: SSDT 0x00000000DAFE6000 0000D0 (v01 Iffs IffsAsl 00003000 INTL 20061109)
[ 0.000000] ACPI: Local APIC address 0xfee00000
[ 0.000000] No NUMA configuration found
[ 0.000000] Faking a node at [mem 0x0000000000000000-0x000000011fdfffff]
[ 0.000000] NODE_DATA(0) allocated [mem 0x11fdf8000-0x11fdfcfff]
[ 0.000000] [ffffea0000000000-ffffea00047fffff] PMD -> [ffff88011b400000-ffff88011f3fffff] on node 0
[ 0.000000] Zone ranges:
[ 0.000000] DMA [mem 0x00001000-0x00ffffff]
[ 0.000000] DMA32 [mem 0x01000000-0xffffffff]
[ 0.000000] Normal [mem 0x100000000-0x11fdfffff]
[ 0.000000] Movable zone start for each node
[ 0.000000] Early memory node ranges
[ 0.000000] node 0: [mem 0x00001000-0x0009cfff]
[ 0.000000] node 0: [mem 0x00100000-0x1fffffff]
[ 0.000000] node 0: [mem 0x20200000-0x3fffffff]
[ 0.000000] node 0: [mem 0x40200000-0xd9c9efff]
[ 0.000000] node 0: [mem 0xdafff000-0xdaffffff]
[ 0.000000] node 0: [mem 0x100000000-0x11fdfffff]
[ 0.000000] Initmem setup node 0 [mem 0x00001000-0x11fdfffff]
[ 0.000000] On node 0 totalpages: 1021500
[ 0.000000] DMA zone: 64 pages used for memmap
[ 0.000000] DMA zone: 156 pages reserved
[ 0.000000] DMA zone: 3996 pages, LIFO batch:0
[ 0.000000] DMA32 zone: 13859 pages used for memmap
[ 0.000000] DMA32 zone: 886944 pages, LIFO batch:31
[ 0.000000] Normal zone: 2040 pages used for memmap
[ 0.000000] Normal zone: 130560 pages, LIFO batch:31
[ 0.000000] Reserving Intel graphics stolen memory at 0xdba00000-0xdf9fffff
[ 0.000000] ACPI: PM-Timer IO Port: 0x408
[ 0.000000] ACPI: Local APIC address 0xfee00000
[ 0.000000] ACPI: LAPIC (acpi_id[0x01] lapic_id[0x00] enabled)
[ 0.000000] ACPI: LAPIC (acpi_id[0x02] lapic_id[0x01] enabled)
[ 0.000000] ACPI: LAPIC (acpi_id[0x03] lapic_id[0x02] enabled)
[ 0.000000] ACPI: LAPIC (acpi_id[0x04] lapic_id[0x03] enabled)
[ 0.000000] ACPI: LAPIC (acpi_id[0x05] lapic_id[0x00] disabled)
[ 0.000000] ACPI: LAPIC (acpi_id[0x06] lapic_id[0x00] disabled)
[ 0.000000] ACPI: LAPIC (acpi_id[0x07] lapic_id[0x00] disabled)
[ 0.000000] ACPI: LAPIC (acpi_id[0x08] lapic_id[0x00] disabled)
[ 0.000000] ACPI: LAPIC_NMI (acpi_id[0x00] high edge lint[0x1])
[ 0.000000] ACPI: LAPIC_NMI (acpi_id[0x01] high edge lint[0x1])
[ 0.000000] ACPI: IOAPIC (id[0x0e] address[0xfec00000] gsi_base[0])
[ 0.000000] IOAPIC[0]: apic_id 14, version 32, address 0xfec00000, GSI 0-23
[ 0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 0 global_irq 2 dfl dfl)
[ 0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 9 global_irq 9 high level)
[ 0.000000] ACPI: IRQ0 used by override.
[ 0.000000] ACPI: IRQ9 used by override.
[ 0.000000] Using ACPI (MADT) for SMP configuration information
[ 0.000000] ACPI: HPET id: 0x8086a301 base: 0xfed00000
[ 0.000000] smpboot: Allowing 8 CPUs, 4 hotplug CPUs
[ 0.000000] PM: Registered nosave memory: [mem 0x00000000-0x00000fff]
[ 0.000000] PM: Registered nosave memory: [mem 0x0009d000-0x0009dfff]
[ 0.000000] PM: Registered nosave memory: [mem 0x0009e000-0x0009ffff]
[ 0.000000] PM: Registered nosave memory: [mem 0x000a0000-0x000dffff]
[ 0.000000] PM: Registered nosave memory: [mem 0x000e0000-0x000fffff]
[ 0.000000] PM: Registered nosave memory: [mem 0x20000000-0x201fffff]
[ 0.000000] PM: Registered nosave memory: [mem 0x40000000-0x401fffff]
[ 0.000000] PM: Registered nosave memory: [mem 0xd9c9f000-0xdae7efff]
[ 0.000000] PM: Registered nosave memory: [mem 0xdae7f000-0xdaf9efff]
[ 0.000000] PM: Registered nosave memory: [mem 0xdaf9f000-0xdaffefff]
[ 0.000000] PM: Registered nosave memory: [mem 0xdb000000-0xdf9fffff]
[ 0.000000] PM: Registered nosave memory: [mem 0xdfa00000-0xf7ffffff]
[ 0.000000] PM: Registered nosave memory: [mem 0xf8000000-0xfbffffff]
[ 0.000000] PM: Registered nosave memory: [mem 0xfc000000-0xfebfffff]
[ 0.000000] PM: Registered nosave memory: [mem 0xfec00000-0xfec00fff]
[ 0.000000] PM: Registered nosave memory: [mem 0xfec01000-0xfed07fff]
[ 0.000000] PM: Registered nosave memory: [mem 0xfed08000-0xfed08fff]
[ 0.000000] PM: Registered nosave memory: [mem 0xfed09000-0xfed0ffff]
[ 0.000000] PM: Registered nosave memory: [mem 0xfed10000-0xfed19fff]
[ 0.000000] PM: Registered nosave memory: [mem 0xfed1a000-0xfed1bfff]
[ 0.000000] PM: Registered nosave memory: [mem 0xfed1c000-0xfed1ffff]
[ 0.000000] PM: Registered nosave memory: [mem 0xfed20000-0xfedfffff]
[ 0.000000] PM: Registered nosave memory: [mem 0xfee00000-0xfee00fff]
[ 0.000000] PM: Registered nosave memory: [mem 0xfee01000-0xffd7ffff]
[ 0.000000] PM: Registered nosave memory: [mem 0xffd80000-0xffffffff]
[ 0.000000] e820: [mem 0xdfa00000-0xf7ffffff] available for PCI devices
[ 0.000000] Booting paravirtualized kernel on bare hardware
[ 0.000000] setup_percpu: NR_CPUS:256 nr_cpumask_bits:256 nr_cpu_ids:8 nr_node_ids:1
[ 0.000000] PERCPU: Embedded 32 pages/cpu @ffff88011fa00000 s91520 r8192 d31360 u262144
[ 0.000000] pcpu-alloc: s91520 r8192 d31360 u262144 alloc=1*2097152
[ 0.000000] pcpu-alloc: [0] 0 1 2 3 4 5 6 7
[ 0.000000] Built 1 zonelists in Node order, mobility grouping on. Total pages: 1005381
[ 0.000000] Policy zone: Normal
[ 0.000000] Kernel command line: BOOT_IMAGE=/boot/vmlinuz-3.19.0-rc2-next20141231-3-loopmq-small root=UUID=001AADA61AAD9964 loop=/ubuntu/disks/root.disk ro
[ 0.000000] PID hash table entries: 4096 (order: 3, 32768 bytes)
[ 0.000000] xsave: enabled xstate_bv 0x7, cntxt size 0x340 using standard form
[ 0.000000] AGP: Checking aperture...
[ 0.000000] AGP: No AGP bridge found
[ 0.000000] Calgary: detecting Calgary via BIOS EBDA area
[ 0.000000] Calgary: Unable to locate Rio Grande table in EBDA - bailing!
[ 0.000000] Memory: 3919072K/4086000K available (7598K kernel code, 1297K rwdata, 3376K rodata, 1380K init, 14360K bss, 166928K reserved, 0K cma-reserved)
[ 0.000000] Hierarchical RCU implementation.
[ 0.000000] RCU restricting CPUs from NR_CPUS=256 to nr_cpu_ids=8.
[ 0.000000] RCU: Adjusting geometry for rcu_fanout_leaf=16, nr_cpu_ids=8
[ 0.000000] NR_IRQS:16640 nr_irqs:488 16
[ 0.000000] Console: colour dummy device 80x25
[ 0.000000] console [tty0] enabled
[ 0.000000] Lock dependency validator: Copyright (c) 2006 Red Hat, Inc., Ingo Molnar
[ 0.000000] ... MAX_LOCKDEP_SUBCLASSES: 8
[ 0.000000] ... MAX_LOCK_DEPTH: 48
[ 0.000000] ... MAX_LOCKDEP_KEYS: 8191
[ 0.000000] ... CLASSHASH_SIZE: 4096
[ 0.000000] ... MAX_LOCKDEP_ENTRIES: 32768
[ 0.000000] ... MAX_LOCKDEP_CHAINS: 65536
[ 0.000000] ... CHAINHASH_SIZE: 32768
[ 0.000000] memory used by lock dependency info: 8159 kB
[ 0.000000] per task-struct memory footprint: 1920 bytes
[ 0.000000] hpet clockevent registered
[ 0.000000] tsc: Fast TSC calibration using PIT
[ 0.000000] tsc: Detected 1596.383 MHz processor
[ 0.000072] Calibrating delay loop (skipped), value calculated using timer frequency.. 3192.76 BogoMIPS (lpj=6385532)
[ 0.000080] pid_max: default: 32768 minimum: 301
[ 0.000101] ACPI: Core revision 20141107
[ 0.018148] ACPI: All ACPI Tables successfully acquired
[ 0.023400] Security Framework initialized
[ 0.023413] AppArmor: AppArmor initialized
[ 0.023416] Yama: becoming mindful.
[ 0.024353] Dentry cache hash table entries: 524288 (order: 10, 4194304 bytes)
[ 0.025634] Inode-cache hash table entries: 262144 (order: 9, 2097152 bytes)
[ 0.026104] Mount-cache hash table entries: 8192 (order: 4, 65536 bytes)
[ 0.026124] Mountpoint-cache hash table entries: 8192 (order: 4, 65536 bytes)
[ 0.027148] Initializing cgroup subsys memory
[ 0.027184] Initializing cgroup subsys devices
[ 0.027214] Initializing cgroup subsys freezer
[ 0.027241] Initializing cgroup subsys blkio
[ 0.027249] Initializing cgroup subsys perf_event
[ 0.027258] Initializing cgroup subsys hugetlb
[ 0.027311] Disabled fast string operations
[ 0.027315] CPU: Physical Processor ID: 0
[ 0.027318] CPU: Processor Core ID: 0
[ 0.027325] ENERGY_PERF_BIAS: Set to 'normal', was 'performance'
[ 0.027325] ENERGY_PERF_BIAS: View and update with x86_energy_perf_policy(8)
[ 0.027333] mce: CPU supports 7 MCE banks
[ 0.027348] CPU0: Thermal monitoring enabled (TM1)
[ 0.027368] Last level iTLB entries: 4KB 512, 2MB 8, 4MB 8
[ 0.027368] Last level dTLB entries: 4KB 512, 2MB 32, 4MB 32, 1GB 0
[ 0.027567] Freeing SMP alternatives memory: 24K (ffffffff81e9f000 - ffffffff81ea5000)
[ 0.028882] ftrace: allocating 28222 entries in 111 pages
[ 0.045271] ..TIMER: vector=0x30 apic1=0 pin1=2 apic2=-1 pin2=-1
[ 0.084935] smpboot: CPU0: Intel(R) Core(TM) i5-2467M CPU @ 1.60GHz (fam: 06, model: 2a, stepping: 07)
[ 0.084951] TSC deadline timer enabled
[ 0.084992] Performance Events: PEBS fmt1+, 16-deep LBR, SandyBridge events, full-width counters, Intel PMU driver.
[ 0.085029] ... version: 3
[ 0.085032] ... bit width: 48
[ 0.085035] ... generic registers: 4
[ 0.085038] ... value mask: 0000ffffffffffff
[ 0.085041] ... max period: 0000ffffffffffff
[ 0.085043] ... fixed-purpose events: 3
[ 0.085046] ... event mask: 000000070000000f
[ 0.086670] x86: Booting SMP configuration:
[ 0.086675] .... node #0, CPUs: #1
[ 0.097627] Disabled fast string operations
[ 0.100065] NMI watchdog: enabled on all CPUs, permanently consumes one hw-PMU counter.
[ 0.100430] #2
[ 0.111376] Disabled fast string operations
[ 0.113854] #3<6>[ 0.124803] Disabled fast string operations
[ 0.126959] x86: Booted up 1 node, 4 CPUs
[ 0.126968] smpboot: Total of 4 processors activated (12771.06 BogoMIPS)
[ 0.131656] devtmpfs: initialized
[ 0.137069] evm: security.selinux
[ 0.137074] evm: security.SMACK64
[ 0.137076] evm: security.capability
[ 0.137216] PM: Registering ACPI NVS region [mem 0xdae7f000-0xdaf9efff] (1179648 bytes)
[ 0.138623] NET: Registered protocol family 16
[ 0.151058] cpuidle: using governor ladder
[ 0.161535] cpuidle: using governor menu
[ 0.161702] ACPI: bus type PCI registered
[ 0.161954] PCI: MMCONFIG for domain 0000 [bus 00-3f] at [mem 0xf8000000-0xfbffffff] (base 0xf8000000)
[ 0.161962] PCI: MMCONFIG at [mem 0xf8000000-0xfbffffff] reserved in E820
[ 0.162094] PCI: Using configuration type 1 for base access
[ 0.175004] ACPI: Added _OSI(Module Device)
[ 0.175010] ACPI: Added _OSI(Processor Device)
[ 0.175014] ACPI: Added _OSI(3.0 _SCP Extensions)
[ 0.175017] ACPI: Added _OSI(Processor Aggregator Device)
[ 0.186682] ACPI: Executed 1 blocks of module-level executable AML code
[ 0.193517] [Firmware Bug]: ACPI: BIOS _OSI(Linux) query ignored
[ 0.195120] ACPI: Dynamic OEM Table Load:
[ 0.195143] ACPI: SSDT 0xFFFF88011A794000 000688 (v01 PmRef Cpu0Cst 00003001 INTL 20061109)
[ 0.197101] ACPI: Dynamic OEM Table Load:
[ 0.197121] ACPI: SSDT 0xFFFF88011A7C0800 000303 (v01 PmRef ApIst 00003000 INTL 20061109)
[ 0.198936] ACPI: Dynamic OEM Table Load:
[ 0.198955] ACPI: SSDT 0xFFFF88011A7BDA00 000119 (v01 PmRef ApCst 00003000 INTL 20061109)
[ 0.203257] ACPI: Interpreter enabled
[ 0.203280] ACPI Exception: AE_NOT_FOUND, While evaluating Sleep State [\_S2_] (20141107/hwxface-580)
[ 0.203331] ACPI: (supports S0 S1 S3 S4 S5)
[ 0.203334] ACPI: Using IOAPIC for interrupt routing
[ 0.203395] PCI: Using host bridge windows from ACPI; if necessary, use "pci=nocrs" and report a bug
[ 0.220497] ACPI: Power Resource [FN00] (off)
[ 0.220864] ACPI: Power Resource [FN01] (off)
[ 0.221134] ACPI: Power Resource [FN02] (off)
[ 0.221402] ACPI: Power Resource [FN03] (off)
[ 0.221677] ACPI: Power Resource [FN04] (off)
[ 0.223701] ACPI: PCI Root Bridge [PCI0] (domain 0000 [bus 00-3e])
[ 0.223712] acpi PNP0A08:00: _OSC: OS supports [ExtendedConfig ASPM ClockPM Segments MSI]
[ 0.224203] \_SB_.PCI0:_OSC invalid UUID
[ 0.224205] _OSC request data:1 1f 0
[ 0.224211] acpi PNP0A08:00: _OSC failed (AE_ERROR); disabling ASPM
[ 0.225388] PCI host bridge to bus 0000:00
[ 0.225395] pci_bus 0000:00: root bus resource [bus 00-3e]
[ 0.225400] pci_bus 0000:00: root bus resource [io 0x0000-0x0cf7]
[ 0.225404] pci_bus 0000:00: root bus resource [io 0x0d00-0xffff]
[ 0.225408] pci_bus 0000:00: root bus resource [mem 0x000a0000-0x000bffff]
[ 0.225412] pci_bus 0000:00: root bus resource [mem 0xdfa00000-0xfeafffff]
[ 0.225416] pci_bus 0000:00: root bus resource [mem 0xfed40000-0xfed44fff]
[ 0.225465] pci 0000:00:00.0: [8086:0104] type 00 class 0x060000
[ 0.225801] pci 0000:00:02.0: [8086:0116] type 00 class 0x030000
[ 0.225821] pci 0000:00:02.0: reg 0x10: [mem 0xf0000000-0xf03fffff 64bit]
[ 0.225832] pci 0000:00:02.0: reg 0x18: [mem 0xe0000000-0xefffffff 64bit pref]
[ 0.225840] pci 0000:00:02.0: reg 0x20: [io 0x3000-0x303f]
[ 0.226221] pci 0000:00:16.0: [8086:1c3a] type 00 class 0x078000
[ 0.226264] pci 0000:00:16.0: reg 0x10: [mem 0xf0705000-0xf070500f 64bit]
[ 0.226412] pci 0000:00:16.0: PME# supported from D0 D3hot D3cold
[ 0.226712] pci 0000:00:1a.0: [8086:1c2d] type 00 class 0x0c0320
[ 0.226752] pci 0000:00:1a.0: reg 0x10: [mem 0xf070a000-0xf070a3ff]
[ 0.226929] pci 0000:00:1a.0: PME# supported from D0 D3hot D3cold
[ 0.227217] pci 0000:00:1b.0: [8086:1c20] type 00 class 0x040300
[ 0.227253] pci 0000:00:1b.0: reg 0x10: [mem 0xf0700000-0xf0703fff 64bit]
[ 0.227422] pci 0000:00:1b.0: PME# supported from D0 D3hot D3cold
[ 0.227587] pci 0000:00:1b.0: System wakeup disabled by ACPI
[ 0.227724] pci 0000:00:1c.0: [8086:1c10] type 01 class 0x060400
[ 0.227898] pci 0000:00:1c.0: PME# supported from D0 D3hot D3cold
[ 0.228033] pci 0000:00:1c.0: System wakeup disabled by ACPI
[ 0.228169] pci 0000:00:1c.3: [8086:1c16] type 01 class 0x060400
[ 0.228342] pci 0000:00:1c.3: PME# supported from D0 D3hot D3cold
[ 0.228477] pci 0000:00:1c.3: System wakeup disabled by ACPI
[ 0.228612] pci 0000:00:1c.4: [8086:1c18] type 01 class 0x060400
[ 0.228789] pci 0000:00:1c.4: PME# supported from D0 D3hot D3cold
[ 0.229060] pci 0000:00:1d.0: [8086:1c26] type 00 class 0x0c0320
[ 0.229098] pci 0000:00:1d.0: reg 0x10: [mem 0xf0709000-0xf07093ff]
[ 0.229275] pci 0000:00:1d.0: PME# supported from D0 D3hot D3cold
[ 0.229529] pci 0000:00:1f.0: [8086:1c49] type 00 class 0x060100
[ 0.229934] pci 0000:00:1f.2: [8086:1c03] type 00 class 0x010601
[ 0.229976] pci 0000:00:1f.2: reg 0x10: [io 0x3088-0x308f]
[ 0.229993] pci 0000:00:1f.2: reg 0x14: [io 0x3094-0x3097]
[ 0.230009] pci 0000:00:1f.2: reg 0x18: [io 0x3080-0x3087]
[ 0.230025] pci 0000:00:1f.2: reg 0x1c: [io 0x3090-0x3093]
[ 0.230042] pci 0000:00:1f.2: reg 0x20: [io 0x3060-0x307f]
[ 0.230058] pci 0000:00:1f.2: reg 0x24: [mem 0xf0708000-0xf07087ff]
[ 0.230172] pci 0000:00:1f.2: PME# supported from D3hot
[ 0.230418] pci 0000:00:1f.3: [8086:1c22] type 00 class 0x0c0500
[ 0.230450] pci 0000:00:1f.3: reg 0x10: [mem 0xf0704000-0xf07040ff 64bit]
[ 0.230495] pci 0000:00:1f.3: reg 0x20: [io 0xefa0-0xefbf]
[ 0.231196] pci 0000:01:00.0: [8086:0091] type 00 class 0x028000
[ 0.231572] pci 0000:01:00.0: reg 0x10: [mem 0xf0600000-0xf0601fff 64bit]
[ 0.233285] pci 0000:01:00.0: PME# supported from D0 D3hot D3cold
[ 0.233617] pci 0000:01:00.0: System wakeup disabled by ACPI
[ 0.239331] pci 0000:00:1c.0: PCI bridge to [bus 01]
[ 0.239345] pci 0000:00:1c.0: bridge window [mem 0xf0600000-0xf06fffff]
[ 0.239585] pci 0000:02:00.0: [10ec:8168] type 00 class 0x020000
[ 0.239677] pci 0000:02:00.0: reg 0x10: [io 0x2000-0x20ff]
[ 0.239814] pci 0000:02:00.0: reg 0x18: [mem 0xf0404000-0xf0404fff 64bit pref]
[ 0.239899] pci 0000:02:00.0: reg 0x20: [mem 0xf0400000-0xf0403fff 64bit pref]
[ 0.240372] pci 0000:02:00.0: supports D1 D2
[ 0.240374] pci 0000:02:00.0: PME# supported from D0 D1 D2 D3hot D3cold
[ 0.240526] pci 0000:02:00.0: System wakeup disabled by ACPI
[ 0.247226] pci 0000:00:1c.3: PCI bridge to [bus 02]
[ 0.247235] pci 0000:00:1c.3: bridge window [io 0x2000-0x2fff]
[ 0.247250] pci 0000:00:1c.3: bridge window [mem 0xf0400000-0xf04fffff 64bit pref]
[ 0.247455] pci 0000:03:00.0: [1b21:1042] type 00 class 0x0c0330
[ 0.247503] pci 0000:03:00.0: reg 0x10: [mem 0xf0500000-0xf0507fff 64bit]
[ 0.247779] pci 0000:03:00.0: PME# supported from D3hot D3cold
[ 0.248025] pci 0000:00:1c.4: PCI bridge to [bus 03]
[ 0.248038] pci 0000:00:1c.4: bridge window [mem 0xf0500000-0xf05fffff]
[ 0.249802] ACPI: PCI Interrupt Link [LNKA] (IRQs 1 3 4 5 6 10 *11 12 14 15)
[ 0.249942] ACPI: PCI Interrupt Link [LNKB] (IRQs 1 3 4 5 6 10 11 12 14 15) *0, disabled.
[ 0.250080] ACPI: PCI Interrupt Link [LNKC] (IRQs 1 3 4 5 6 *10 11 12 14 15)
[ 0.250215] ACPI: PCI Interrupt Link [LNKD] (IRQs 1 3 4 5 6 *10 11 12 14 15)
[ 0.250361] ACPI: PCI Interrupt Link [LNKE] (IRQs 1 3 4 5 6 10 11 12 14 15) *9
[ 0.250496] ACPI: PCI Interrupt Link [LNKF] (IRQs 1 3 4 5 6 10 11 12 14 15) *0, disabled.
[ 0.250632] ACPI: PCI Interrupt Link [LNKG] (IRQs 1 3 4 5 6 10 *11 12 14 15)
[ 0.250774] ACPI: PCI Interrupt Link [LNKH] (IRQs 1 3 4 5 6 10 11 12 14 15) *9
[ 0.251879] ACPI: Enabled 4 GPEs in block 00 to 3F
[ 0.252004] ACPI : EC: GPE = 0x17, I/O: command/status = 0x66, data = 0x62
[ 0.252366] ACPI : EC: 0 stale EC events cleared
[ 0.252999] vgaarb: setting as boot device: PCI:0000:00:02.0
[ 0.253004] vgaarb: device added: PCI:0000:00:02.0,decodes=io+mem,owns=io+mem,locks=none
[ 0.253015] vgaarb: loaded
[ 0.253018] vgaarb: bridge control possible 0000:00:02.0
[ 0.253623] SCSI subsystem initialized
[ 0.253766] libata version 3.00 loaded.
[ 0.253850] ACPI: bus type USB registered
[ 0.253908] usbcore: registered new interface driver usbfs
[ 0.253939] usbcore: registered new interface driver hub
[ 0.254003] usbcore: registered new device driver usb
[ 0.254368] PCI: Using ACPI for IRQ routing
[ 0.257936] PCI: pci_cache_line_size set to 64 bytes
[ 0.258065] e820: reserve RAM buffer [mem 0x0009d800-0x0009ffff]
[ 0.258073] e820: reserve RAM buffer [mem 0xd9c9f000-0xdbffffff]
[ 0.258075] e820: reserve RAM buffer [mem 0xdb000000-0xdbffffff]
[ 0.258078] e820: reserve RAM buffer [mem 0x11fe00000-0x11fffffff]
[ 0.258693] NetLabel: Initializing
[ 0.258697] NetLabel: domain hash size = 128
[ 0.258700] NetLabel: protocols = UNLABELED CIPSOv4
[ 0.258753] NetLabel: unlabeled traffic allowed by default
[ 0.258912] hpet0: at MMIO 0xfed00000, IRQs 2, 8, 0, 0, 0, 0, 0, 0
[ 0.258923] hpet0: 8 comparators, 64-bit 14.318180 MHz counter
[ 0.261013] Switched to clocksource hpet
[ 0.299891] AppArmor: AppArmor Filesystem Enabled
[ 0.300114] pnp: PnP ACPI init
[ 0.300732] system 00:00: [io 0x0680-0x069f] has been reserved
[ 0.300739] system 00:00: [io 0x1000-0x100f] has been reserved
[ 0.300744] system 00:00: [io 0x5000-0x5003] has been reserved
[ 0.300749] system 00:00: [io 0xffff] has been reserved
[ 0.300754] system 00:00: [io 0x0400-0x0453] could not be reserved
[ 0.300759] system 00:00: [io 0x0458-0x047f] has been reserved
[ 0.300764] system 00:00: [io 0x0500-0x057f] has been reserved
[ 0.300768] system 00:00: [io 0x0a00-0x0a0f] has been reserved
[ 0.300773] system 00:00: [io 0x164e-0x164f] has been reserved
[ 0.300778] system 00:00: [io 0x5000-0x500f] could not be reserved
[ 0.300810] system 00:00: Plug and Play ACPI device, IDs PNP0c02 (active)
[ 0.300898] pnp 00:01: Plug and Play ACPI device, IDs PNP0b00 (active)
[ 0.301077] system 00:02: [io 0x0454-0x0457] has been reserved
[ 0.301085] system 00:02: Plug and Play ACPI device, IDs INT3f0d PNP0c02 (active)
[ 0.301173] pnp 00:03: Plug and Play ACPI device, IDs PNP0303 (active)
[ 0.301287] pnp 00:04: Plug and Play ACPI device, IDs ETD0b00 SYN0002 PNP0f13 (active)
[ 0.301635] system 00:05: [mem 0xfed1c000-0xfed1ffff] has been reserved
[ 0.301641] system 00:05: [mem 0xfed10000-0xfed17fff] has been reserved
[ 0.301646] system 00:05: [mem 0xfed18000-0xfed18fff] has been reserved
[ 0.301651] system 00:05: [mem 0xfed19000-0xfed19fff] has been reserved
[ 0.301657] system 00:05: [mem 0xf8000000-0xfbffffff] has been reserved
[ 0.301662] system 00:05: [mem 0xfed20000-0xfed3ffff] has been reserved
[ 0.301667] system 00:05: [mem 0xfed90000-0xfed93fff] has been reserved
[ 0.301672] system 00:05: [mem 0xfed45000-0xfed8ffff] has been reserved
[ 0.301677] system 00:05: [mem 0xff000000-0xffffffff] could not be reserved
[ 0.301682] system 00:05: [mem 0xfee00000-0xfeefffff] could not be reserved
[ 0.301690] system 00:05: Plug and Play ACPI device, IDs PNP0c02 (active)
[ 0.302481] system 00:06: Plug and Play ACPI device, IDs PNP0c01 (active)
[ 0.302542] pnp: PnP ACPI: found 7 devices
[ 0.312800] pci 0000:00:1c.0: PCI bridge to [bus 01]
[ 0.312813] pci 0000:00:1c.0: bridge window [mem 0xf0600000-0xf06fffff]
[ 0.312830] pci 0000:00:1c.3: PCI bridge to [bus 02]
[ 0.312837] pci 0000:00:1c.3: bridge window [io 0x2000-0x2fff]
[ 0.312851] pci 0000:00:1c.3: bridge window [mem 0xf0400000-0xf04fffff 64bit pref]
[ 0.312865] pci 0000:00:1c.4: PCI bridge to [bus 03]
[ 0.312875] pci 0000:00:1c.4: bridge window [mem 0xf0500000-0xf05fffff]
[ 0.312892] pci_bus 0000:00: resource 4 [io 0x0000-0x0cf7]
[ 0.312895] pci_bus 0000:00: resource 5 [io 0x0d00-0xffff]
[ 0.312897] pci_bus 0000:00: resource 6 [mem 0x000a0000-0x000bffff]
[ 0.312899] pci_bus 0000:00: resource 7 [mem 0xdfa00000-0xfeafffff]
[ 0.312901] pci_bus 0000:00: resource 8 [mem 0xfed40000-0xfed44fff]
[ 0.312903] pci_bus 0000:01: resource 1 [mem 0xf0600000-0xf06fffff]
[ 0.312905] pci_bus 0000:02: resource 0 [io 0x2000-0x2fff]
[ 0.312907] pci_bus 0000:02: resource 2 [mem 0xf0400000-0xf04fffff 64bit pref]
[ 0.312910] pci_bus 0000:03: resource 1 [mem 0xf0500000-0xf05fffff]
[ 0.313026] NET: Registered protocol family 2
[ 0.313503] TCP established hash table entries: 32768 (order: 6, 262144 bytes)
[ 0.313946] TCP bind hash table entries: 32768 (order: 9, 2097152 bytes)
[ 0.316159] TCP: Hash tables configured (established 32768 bind 32768)
[ 0.316244] TCP: reno registered
[ 0.316309] UDP hash table entries: 2048 (order: 6, 327680 bytes)
[ 0.316663] UDP-Lite hash table entries: 2048 (order: 6, 327680 bytes)
[ 0.317299] NET: Registered protocol family 1
[ 0.317330] pci 0000:00:02.0: Video device with shadowed ROM
[ 0.318798] PCI: CLS 64 bytes, default 64
[ 0.319017] Trying to unpack rootfs image as initramfs...
[ 0.399308] Freeing initrd memory: 3444K (ffff880037936000 - ffff880037c93000)
[ 0.399327] PCI-DMA: Using software bounce buffering for IO (SWIOTLB)
[ 0.399332] software IO TLB [mem 0xd5c9f000-0xd9c9f000] (64MB) mapped at [ffff8800d5c9f000-ffff8800d9c9efff]
[ 0.400015] RAPL PMU detected, hw unit 2^-16 Joules, API unit is 2^-32 Joules, 3 fixed counters 163840 ms ovfl timer
[ 0.400215] microcode: CPU0 sig=0x206a7, pf=0x10, revision=0x28
[ 0.400235] microcode: CPU1 sig=0x206a7, pf=0x10, revision=0x28
[ 0.400258] microcode: CPU2 sig=0x206a7, pf=0x10, revision=0x28
[ 0.400287] microcode: CPU3 sig=0x206a7, pf=0x10, revision=0x28
[ 0.400446] microcode: Microcode Update Driver: v2.00 <tigran@xxxxxxxxxxxxxxxxxxxx>, Peter Oruba
[ 0.400509] Scanning for low memory corruption every 60 seconds
[ 0.401726] futex hash table entries: 2048 (order: 6, 262144 bytes)
[ 0.401888] Initialise system trusted keyring
[ 0.402011] audit: initializing netlink subsys (disabled)
[ 0.402081] audit: type=2000 audit(1420126764.400:1): initialized
[ 0.402960] HugeTLB registered 2 MB page size, pre-allocated 0 pages
[ 0.403409] VFS: Disk quotas dquot_6.5.2
[ 0.403450] VFS: Dquot-cache hash table entries: 512 (order 0, 4096 bytes)
[ 0.404260] fuse init (API version 7.23)
[ 0.405380] Key type asymmetric registered
[ 0.405401] Asymmetric key parser 'x509' registered
[ 0.405457] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 252)
[ 0.405581] io scheduler noop registered
[ 0.405588] io scheduler deadline registered (default)
[ 0.405615] io scheduler cfq registered
[ 0.405621] start plist test
[ 0.408446] end plist test
[ 0.409499] pci_hotplug: PCI Hot Plug PCI Core version: 0.5
[ 0.409625] pciehp: PCI Express Hot Plug Controller Driver version: 0.4
[ 0.409815] intel_idle: MWAIT substates: 0x21120
[ 0.409817] intel_idle: v0.4 model 0x2A
[ 0.409818] intel_idle: lapic_timer_reliable_states 0xffffffff
[ 0.411267] ACPI: AC Adapter [ADP1] (on-line)
[ 0.411945] input: Lid Switch as /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0D:00/input/input0
[ 0.411988] ACPI: Lid Switch [LID0]
[ 0.412105] input: Power Button as /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0C:00/input/input1
[ 0.412147] ACPI: Power Button [PWRB]
[ 0.412269] input: Power Button as /devices/LNXSYSTM:00/LNXPWRBN:00/input/input2
[ 0.412277] ACPI: Power Button [PWRF]
[ 0.415515] thermal LNXTHERM:00: registered as thermal_zone0
[ 0.415522] ACPI: Thermal Zone [TZ00] (70 C)
[ 0.416122] thermal LNXTHERM:01: registered as thermal_zone1
[ 0.416127] ACPI: Thermal Zone [TZ01] (30 C)
[ 0.416237] GHES: HEST is not enabled!
[ 0.416449] Serial: 8250/16550 driver, 32 ports, IRQ sharing enabled
[ 0.424808] ACPI: Battery Slot [BAT1] (battery present)
[ 0.424867] Linux agpgart interface v0.103
[ 0.429441] brd: module loaded
[ 0.433246] loop: module loaded
[ 0.436991] ahci 0000:00:1f.2: version 3.0
[ 0.437330] ahci 0000:00:1f.2: SSS flag set, parallel bus scan disabled
[ 0.452911] ahci 0000:00:1f.2: AHCI 0001.0300 32 slots 6 ports 6 Gbps 0x1b impl SATA mode
[ 0.452918] ahci 0000:00:1f.2: flags: 64bit ncq sntf ilck stag pm led clo pio slum part ems sxs apst
[ 0.479035] scsi host0: ahci
[ 0.479558] scsi host1: ahci
[ 0.479972] scsi host2: ahci
[ 0.480439] scsi host3: ahci
[ 0.480812] scsi host4: ahci
[ 0.481284] scsi host5: ahci
[ 0.481458] ata1: SATA max UDMA/133 abar m2048@0xf0708000 port 0xf0708100 irq 25
[ 0.481465] ata2: SATA max UDMA/133 abar m2048@0xf0708000 port 0xf0708180 irq 25
[ 0.481469] ata3: DUMMY
[ 0.481474] ata4: SATA max UDMA/133 abar m2048@0xf0708000 port 0xf0708280 irq 25
[ 0.481479] ata5: SATA max UDMA/133 abar m2048@0xf0708000 port 0xf0708300 irq 25
[ 0.481483] ata6: DUMMY
[ 0.482783] libphy: Fixed MDIO Bus: probed
[ 0.483112] tun: Universal TUN/TAP device driver, 1.6
[ 0.483116] tun: (C) 1999-2004 Max Krasnyansky <maxk@xxxxxxxxxxxx>
[ 0.483290] PPP generic driver version 2.4.2
[ 0.483639] xhci_hcd 0000:03:00.0: xHCI Host Controller
[ 0.483802] xhci_hcd 0000:03:00.0: new USB bus registered, assigned bus number 1
[ 0.494212] usb usb1: New USB device found, idVendor=1d6b, idProduct=0002
[ 0.494218] usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[ 0.494223] usb usb1: Product: xHCI Host Controller
[ 0.494227] usb usb1: Manufacturer: Linux 3.19.0-rc2-next20141231-3-loopmq-small xhci-hcd
[ 0.494231] usb usb1: SerialNumber: 0000:03:00.0
[ 0.494971] hub 1-0:1.0: USB hub found
[ 0.495046] hub 1-0:1.0: 2 ports detected
[ 0.495835] xhci_hcd 0000:03:00.0: xHCI Host Controller
[ 0.495850] xhci_hcd 0000:03:00.0: new USB bus registered, assigned bus number 2
[ 0.496019] usb usb2: New USB device found, idVendor=1d6b, idProduct=0003
[ 0.496024] usb usb2: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[ 0.496029] usb usb2: Product: xHCI Host Controller
[ 0.496033] usb usb2: Manufacturer: Linux 3.19.0-rc2-next20141231-3-loopmq-small xhci-hcd
[ 0.496037] usb usb2: SerialNumber: 0000:03:00.0
[ 0.496467] hub 2-0:1.0: USB hub found
[ 0.496517] hub 2-0:1.0: 2 ports detected
[ 0.496993] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
[ 0.497001] ehci-pci: EHCI PCI platform driver
[ 0.497296] ehci-pci 0000:00:1a.0: EHCI Host Controller
[ 0.497318] ehci-pci 0000:00:1a.0: new USB bus registered, assigned bus number 3
[ 0.497345] ehci-pci 0000:00:1a.0: debug port 2
[ 0.501287] ehci-pci 0000:00:1a.0: cache line size of 64 is not supported
[ 0.501319] ehci-pci 0000:00:1a.0: irq 16, io mem 0xf070a000
[ 0.512879] ehci-pci 0000:00:1a.0: USB 2.0 started, EHCI 1.00
[ 0.512982] usb usb3: New USB device found, idVendor=1d6b, idProduct=0002
[ 0.512987] usb usb3: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[ 0.512992] usb usb3: Product: EHCI Host Controller
[ 0.512995] usb usb3: Manufacturer: Linux 3.19.0-rc2-next20141231-3-loopmq-small ehci_hcd
[ 0.513000] usb usb3: SerialNumber: 0000:00:1a.0
[ 0.513445] hub 3-0:1.0: USB hub found
[ 0.513469] hub 3-0:1.0: 2 ports detected
[ 0.514141] ehci-pci 0000:00:1d.0: EHCI Host Controller
[ 0.514169] ehci-pci 0000:00:1d.0: new USB bus registered, assigned bus number 4
[ 0.514193] ehci-pci 0000:00:1d.0: debug port 2
[ 0.518090] ehci-pci 0000:00:1d.0: cache line size of 64 is not supported
[ 0.518118] ehci-pci 0000:00:1d.0: irq 23, io mem 0xf0709000
[ 0.528842] ehci-pci 0000:00:1d.0: USB 2.0 started, EHCI 1.00
[ 0.528941] usb usb4: New USB device found, idVendor=1d6b, idProduct=0002
[ 0.528946] usb usb4: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[ 0.528951] usb usb4: Product: EHCI Host Controller
[ 0.528954] usb usb4: Manufacturer: Linux 3.19.0-rc2-next20141231-3-loopmq-small ehci_hcd
[ 0.528959] usb usb4: SerialNumber: 0000:00:1d.0
[ 0.529318] hub 4-0:1.0: USB hub found
[ 0.529337] hub 4-0:1.0: 2 ports detected
[ 0.529680] ehci-platform: EHCI generic platform driver
[ 0.529710] ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver
[ 0.529728] ohci-pci: OHCI PCI platform driver
[ 0.529762] ohci-platform: OHCI generic platform driver
[ 0.529790] uhci_hcd: USB Universal Host Controller Interface driver
[ 0.529908] i8042: PNP: PS/2 Controller [PNP0303:PS2K,PNP0f13:EPAD] at 0x60,0x64 irq 1,12
[ 0.537209] serio: i8042 KBD port at 0x60,0x64 irq 1
[ 0.537275] serio: i8042 AUX port at 0x60,0x64 irq 12
[ 0.537841] mousedev: PS/2 mouse device common for all mice
[ 0.539017] rtc_cmos 00:01: rtc core: registered rtc_cmos as rtc0
[ 0.539058] rtc_cmos 00:01: alarms up to one month, y3k, 242 bytes nvram, hpet irqs
[ 0.539111] device-mapper: uevent: version 1.0.3
[ 0.539265] device-mapper: ioctl: 4.30.0-ioctl (2014-12-22) initialised: dm-devel@xxxxxxxxxx
[ 0.539291] Intel P-state driver initializing.
[ 0.539770] ledtrig-cpu: registered to indicate activity on CPUs
[ 0.539929] TCP: cubic registered
[ 0.540121] NET: Registered protocol family 10
[ 0.540723] NET: Registered protocol family 17
[ 0.540747] Key type dns_resolver registered
[ 0.541910] Loading compiled-in X.509 certificates
[ 0.543227] Loaded X.509 cert 'Magrathea: Glacier signing key: bac039e2e4170134dc74c2da90973c100c9df625'
[ 0.543272] registered taskstats version 1
[ 0.548540] Key type trusted registered
[ 0.551762] input: AT Translated Set 2 keyboard as /devices/platform/i8042/serio0/input/input3
[ 0.556656] Key type encrypted registered
[ 0.556673] AppArmor: AppArmor sha1 policy hashing enabled
[ 0.556678] evm: HMAC attrs: 0x1
[ 0.557571] rtc_cmos 00:01: setting system clock to 2015-01-01 15:39:24 UTC (1420126764)
[ 0.557727] BIOS EDD facility v0.16 2004-Jun-25, 0 devices found
[ 0.557731] EDD information not available.
[ 0.800800] ata1: SATA link up 3.0 Gbps (SStatus 123 SControl 300)
[ 0.802131] ata1.00: ATA-8: Hitachi HTS545050A7E380, GG2OA6C0, max UDMA/133
[ 0.802150] ata1.00: 976773168 sectors, multi 16: LBA48 NCQ (depth 31/32), AA
[ 0.803525] ata1.00: configured for UDMA/133
[ 0.804314] scsi 0:0:0:0: Direct-Access ATA Hitachi HTS54505 A6C0 PQ: 0 ANSI: 5
[ 0.805408] sd 0:0:0:0: [sda] 976773168 512-byte logical blocks: (500 GB/465 GiB)
[ 0.805417] sd 0:0:0:0: [sda] 4096-byte physical blocks
[ 0.805645] sd 0:0:0:0: [sda] Write Protect is off
[ 0.805653] sd 0:0:0:0: [sda] Mode Sense: 00 3a 00 00
[ 0.805695] sd 0:0:0:0: Attached scsi generic sg0 type 0
[ 0.805730] sd 0:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
[ 0.817517] sda: sda1 sda2 sda3
[ 0.818723] sd 0:0:0:0: [sda] Attached SCSI disk
[ 0.824741] usb 3-1: new high-speed USB device number 2 using ehci-pci
[ 0.840795] usb 4-1: new high-speed USB device number 2 using ehci-pci
[ 0.957730] usb 3-1: New USB device found, idVendor=8087, idProduct=0024
[ 0.957739] usb 3-1: New USB device strings: Mfr=0, Product=0, SerialNumber=0
[ 0.958618] hub 3-1:1.0: USB hub found
[ 0.958774] hub 3-1:1.0: 6 ports detected
[ 0.973269] usb 4-1: New USB device found, idVendor=8087, idProduct=0024
[ 0.973279] usb 4-1: New USB device strings: Mfr=0, Product=0, SerialNumber=0
[ 0.973817] hub 4-1:1.0: USB hub found
[ 0.974025] hub 4-1:1.0: 6 ports detected
[ 1.124570] ata2: SATA link up 3.0 Gbps (SStatus 123 SControl 300)
[ 1.125153] ata2.00: ATA-8: SanDisk iSSD P4 16GB, SSD 9.14, max UDMA/133
[ 1.125160] ata2.00: 31277232 sectors, multi 1: LBA48
[ 1.125867] ata2.00: configured for UDMA/133
[ 1.126196] scsi 1:0:0:0: Direct-Access ATA SanDisk iSSD P4 9.14 PQ: 0 ANSI: 5
[ 1.126847] sd 1:0:0:0: [sdb] 31277232 512-byte logical blocks: (16.0 GB/14.9 GiB)
[ 1.126971] sd 1:0:0:0: [sdb] Write Protect is off
[ 1.126976] sd 1:0:0:0: [sdb] Mode Sense: 00 3a 00 00
[ 1.126978] sd 1:0:0:0: Attached scsi generic sg1 type 0
[ 1.127016] sd 1:0:0:0: [sdb] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
[ 1.128068] sdb: sdb1 sdb2
[ 1.128914] sd 1:0:0:0: [sdb] Attached SCSI disk
[ 1.232750] usb 3-1.2: new high-speed USB device number 3 using ehci-pci
[ 1.244781] usb 4-1.4: new low-speed USB device number 3 using ehci-pci
[ 1.327952] usb 3-1.2: New USB device found, idVendor=12d1, idProduct=1436
[ 1.327961] usb 3-1.2: New USB device strings: Mfr=4, Product=3, SerialNumber=0
[ 1.327966] usb 3-1.2: Product: HUAWEI Mobile
[ 1.327969] usb 3-1.2: Manufacturer: HUAWEI Technology
[ 1.343710] usb 4-1.4: New USB device found, idVendor=046d, idProduct=c00e
[ 1.343719] usb 4-1.4: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[ 1.343723] usb 4-1.4: Product: USB-PS/2 Optical Mouse
[ 1.343726] usb 4-1.4: Manufacturer: Logitech
[ 1.396480] tsc: Refined TSC clocksource calibration: 1596.374 MHz
[ 1.404678] usb 3-1.4: new high-speed USB device number 4 using ehci-pci
[ 1.416664] usb 4-1.5: new full-speed USB device number 4 using ehci-pci
[ 1.444290] ata4: SATA link down (SStatus 0 SControl 300)
[ 1.513485] usb 4-1.5: New USB device found, idVendor=8086, idProduct=0189
[ 1.513494] usb 4-1.5: New USB device strings: Mfr=0, Product=0, SerialNumber=0
[ 1.660738] usb 3-1.4: New USB device found, idVendor=2232, idProduct=1018
[ 1.660747] usb 3-1.4: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[ 1.660752] usb 3-1.4: Product: WebCam SC-13HDL11431N
[ 1.660755] usb 3-1.4: Manufacturer: 123
[ 1.764118] ata5: SATA link down (SStatus 0 SControl 300)
[ 1.764977] Freeing unused kernel memory: 1380K (ffffffff81d46000 - ffffffff81e9f000)
[ 1.764984] Write protecting the kernel read-only data: 12288k
[ 1.765700] Freeing unused kernel memory: 584K (ffff88000176e000 - ffff880001800000)
[ 1.766132] Freeing unused kernel memory: 720K (ffff880001b4c000 - ffff880001c00000)
[ 1.798710] udevd[131]: starting version 175
[ 2.031786] usb-storage 3-1.2:1.0: USB Mass Storage device detected
[ 2.036935] usb-storage 3-1.2:1.1: USB Mass Storage device detected
[ 2.047157] usb-storage 3-1.2:1.2: USB Mass Storage device detected
[ 2.050969] r8169 Gigabit Ethernet driver 2.3LK-NAPI loaded
[ 2.050999] r8169 0000:02:00.0: can't disable ASPM; OS doesn't have ASPM control
[ 2.056619] usb-storage 3-1.2:1.3: USB Mass Storage device detected
[ 2.060655] usb-storage 3-1.2:1.4: USB Mass Storage device detected
[ 2.062020] usb-storage 3-1.2:1.5: USB Mass Storage device detected
[ 2.063786] scsi host11: usb-storage 3-1.2:1.5
[ 2.066443] r8169 0000:02:00.0 eth0: RTL8168evl/8111evl at 0xffffc9000067e000, e8:03:9a:36:17:a9, XID 0c900800 IRQ 31
[ 2.066459] r8169 0000:02:00.0 eth0: jumbo features [frames: 9200 bytes, tx checksumming: ko]
[ 2.066886] usb-storage 3-1.2:1.6: USB Mass Storage device detected
[ 2.070388] scsi host12: usb-storage 3-1.2:1.6
[ 2.072571] usbcore: registered new interface driver usb-storage
[ 2.098478] usbcore: registered new interface driver usbhid
[ 2.098489] usbhid: USB HID core driver
[ 2.151447] input: Logitech USB-PS/2 Optical Mouse as /devices/pci0000:00/0000:00:1d.0/usb4/4-1/4-1.4/4-1.4:1.0/0003:046D:C00E.0001/input/input6
[ 2.151914] hid-generic 0003:046D:C00E.0001: input: USB HID v1.10 Mouse [Logitech USB-PS/2 Optical Mouse] on usb-0000:00:1d.0-1.4/input0
[ 2.399942] Switched to clocksource tsc
[ 2.913588] EXT4-fs (loop0): mounted filesystem with ordered data mode. Opts: (null)
[ 3.065311] scsi 11:0:0:0: CD-ROM HUAWEI Mass Storage 2.31 PQ: 0 ANSI: 2
[ 3.069153] sr 11:0:0:0: [sr0] scsi-1 drive
[ 3.069160] cdrom: Uniform CD-ROM driver Revision: 3.20
[ 3.069750] sr 11:0:0:0: Attached scsi CD-ROM sr0
[ 3.070018] sr 11:0:0:0: Attached scsi generic sg2 type 5
[ 3.072608] scsi 12:0:0:0: Direct-Access HUAWEI SD Storage 2.31 PQ: 0 ANSI: 2
[ 3.073189] sd 12:0:0:0: Attached scsi generic sg3 type 0
[ 3.075087] sd 12:0:0:0: [sdc] Attached SCSI removable disk
[ 3.565716] random: nonblocking pool is initialized
[ 4.976067] init: ureadahead main process (415) terminated with status 5
[ 9.004302] Adding 262140k swap on /host/ubuntu/disks/swap.disk. Priority:-1 extents:1 across:262140k FS
[ 9.180384] EXT4-fs (loop0): re-mounted. Opts: errors=remount-ro
[ 9.359395] udevd[692]: starting version 175
[ 10.455074] lp: driver loaded but no devices found
[ 12.495220] wmi: Mapper loaded
[ 12.677174] samsung_laptop: detected SABI interface: SwSmi@
[ 12.677179] samsung_laptop: Backlight controlled by ACPI video driver
[ 12.759863] ACPI Warning: SystemIO range 0x0000000000000428-0x000000000000042f conflicts with OpRegion 0x0000000000000400-0x000000000000047f (\PMIO) (20141107/utaddress-258)
[ 12.759876] ACPI: If an ACPI driver is available for this device, you should use it instead of the native driver
[ 12.759883] ACPI Warning: SystemIO range 0x0000000000000540-0x000000000000054f conflicts with OpRegion 0x0000000000000500-0x0000000000000563 (\GPIO) (20141107/utaddress-258)
[ 12.759891] ACPI: If an ACPI driver is available for this device, you should use it instead of the native driver
[ 12.759895] ACPI Warning: SystemIO range 0x0000000000000530-0x000000000000053f conflicts with OpRegion 0x0000000000000500-0x0000000000000563 (\GPIO) (20141107/utaddress-258)
[ 12.759902] ACPI: If an ACPI driver is available for this device, you should use it instead of the native driver
[ 12.759905] ACPI Warning: SystemIO range 0x0000000000000500-0x000000000000052f conflicts with OpRegion 0x0000000000000500-0x0000000000000563 (\GPIO) (20141107/utaddress-258)
[ 12.759912] ACPI: If an ACPI driver is available for this device, you should use it instead of the native driver
[ 12.759915] lpc_ich: Resource conflict(s) found affecting gpio_ich
[ 14.109355] [drm] Initialized drm 1.1.0 20060810
[ 14.129131] Bluetooth: Core ver 2.20
[ 14.129170] NET: Registered protocol family 31
[ 14.129172] Bluetooth: HCI device and connection manager initialized
[ 14.129244] Bluetooth: HCI socket layer initialized
[ 14.129250] Bluetooth: L2CAP socket layer initialized
[ 14.129278] Bluetooth: SCO socket layer initialized
[ 14.265218] cdc_ether 3-1.2:1.1 wwan0: register 'cdc_ether' at usb-0000:00:1a.0-1.2, Mobile Broadband Network Device, 02:50:f3:00:00:00
[ 14.265412] usbcore: registered new interface driver cdc_ether
[ 14.535263] usbcore: registered new interface driver btusb
[ 14.735514] psmouse serio1: elantech: assuming hardware version 3 (with firmware version 0x450f00)
[ 14.743107] audit: type=1400 audit(1420123178.692:2): apparmor="STATUS" operation="profile_load" name="/sbin/dhclient" pid=1000 comm="apparmor_parser"
[ 14.743116] audit: type=1400 audit(1420123178.692:3): apparmor="STATUS" operation="profile_load" name="/usr/lib/NetworkManager/nm-dhcp-client.action" pid=1000 comm="apparmor_parser"
[ 14.743122] audit: type=1400 audit(1420123178.692:4): apparmor="STATUS" operation="profile_load" name="/usr/lib/connman/scripts/dhclient-script" pid=1000 comm="apparmor_parser"
[ 14.743300] audit: type=1400 audit(1420123178.692:5): apparmor="STATUS" operation="profile_replace" name="/sbin/dhclient" pid=949 comm="apparmor_parser"
[ 14.743310] audit: type=1400 audit(1420123178.692:6): apparmor="STATUS" operation="profile_replace" name="/usr/lib/NetworkManager/nm-dhcp-client.action" pid=949 comm="apparmor_parser"
[ 14.743317] audit: type=1400 audit(1420123178.692:7): apparmor="STATUS" operation="profile_replace" name="/usr/lib/connman/scripts/dhclient-script" pid=949 comm="apparmor_parser"
[ 14.743845] audit: type=1400 audit(1420123178.692:8): apparmor="STATUS" operation="profile_replace" name="/usr/lib/NetworkManager/nm-dhcp-client.action" pid=1000 comm="apparmor_parser"
[ 14.743852] audit: type=1400 audit(1420123178.692:9): apparmor="STATUS" operation="profile_replace" name="/usr/lib/connman/scripts/dhclient-script" pid=1000 comm="apparmor_parser"
[ 14.743960] audit: type=1400 audit(1420123178.692:10): apparmor="STATUS" operation="profile_replace" name="/usr/lib/NetworkManager/nm-dhcp-client.action" pid=949 comm="apparmor_parser"
[ 14.743967] audit: type=1400 audit(1420123178.692:11): apparmor="STATUS" operation="profile_replace" name="/usr/lib/connman/scripts/dhclient-script" pid=949 comm="apparmor_parser"
[ 14.751718] psmouse serio1: elantech: Synaptics capabilities query result 0x08, 0x17, 0x0c.
[ 14.835545] input: ETPS/2 Elantech Touchpad as /devices/platform/i8042/serio1/input/input7
[ 14.866591] cfg80211: Calling CRDA to update world regulatory domain
[ 14.899858] usbcore: registered new interface driver usbserial
[ 15.903284] Linux video capture interface: v2.00
[ 16.054187] cfg80211: World regulatory domain updated:
[ 16.054193] cfg80211: DFS Master region: unset
[ 16.054195] cfg80211: (start_freq - end_freq @ bandwidth), (max_antenna_gain, max_eirp), (dfs_cac_time)
[ 16.054198] cfg80211: (2402000 KHz - 2472000 KHz @ 40000 KHz), (300 mBi, 2000 mBm), (N/A)
[ 16.054201] cfg80211: (2457000 KHz - 2482000 KHz @ 20000 KHz), (300 mBi, 2000 mBm), (N/A)
[ 16.054202] cfg80211: (2474000 KHz - 2494000 KHz @ 20000 KHz), (300 mBi, 2000 mBm), (N/A)
[ 16.054204] cfg80211: (5170000 KHz - 5250000 KHz @ 40000 KHz), (300 mBi, 2000 mBm), (N/A)
[ 16.054206] cfg80211: (5735000 KHz - 5835000 KHz @ 40000 KHz), (300 mBi, 2000 mBm), (N/A)
[ 16.400412] uvcvideo: Found UVC 1.00 device WebCam SC-13HDL11431N (2232:1018)
[ 16.420948] input: WebCam SC-13HDL11431N as /devices/pci0000:00/0000:00:1a.0/usb3/3-1/3-1.4/3-1.4:1.0/input/input8
[ 16.421315] usbcore: registered new interface driver uvcvideo
[ 16.421319] USB Video Class driver (1.1.1)
[ 16.825674] Bluetooth: BNEP (Ethernet Emulation) ver 1.3
[ 16.825680] Bluetooth: BNEP filters: protocol multicast
[ 16.825692] Bluetooth: BNEP socket layer initialized
[ 16.862367] usbcore: registered new interface driver option
[ 16.862716] usbserial: USB Serial support registered for GSM modem (1-port)
[ 16.862845] option 3-1.2:1.0: GSM modem (1-port) converter detected
[ 16.863580] usb 3-1.2: GSM modem (1-port) converter now attached to ttyUSB0
[ 16.864430] option 3-1.2:1.3: GSM modem (1-port) converter detected
[ 16.864758] usb 3-1.2: GSM modem (1-port) converter now attached to ttyUSB1
[ 16.864828] option 3-1.2:1.4: GSM modem (1-port) converter detected
[ 16.865307] usb 3-1.2: GSM modem (1-port) converter now attached to ttyUSB2
[ 16.985677] ppdev: user-space parallel port driver
[ 17.094410] init: failsafe main process (1039) killed by TERM signal
[ 17.314365] Intel(R) Wireless WiFi driver for Linux, in-tree:
[ 17.314370] Copyright(c) 2003- 2014 Intel Corporation
[ 17.314702] iwlwifi 0000:01:00.0: can't disable ASPM; OS doesn't have ASPM control
[ 17.400612] Bluetooth: RFCOMM TTY layer initialized
[ 17.400627] Bluetooth: RFCOMM socket layer initialized
[ 17.400642] Bluetooth: RFCOMM ver 1.11
[ 17.921709] iwlwifi 0000:01:00.0: loaded firmware version 18.168.6.1 op_mode iwldvm
[ 18.582372] [drm] Memory usable by graphics device = 2048M
[ 18.582429] [drm] Replacing VGA console driver
[ 18.608292] [drm] Supports vblank timestamp caching Rev 2 (21.10.2013).
[ 18.608296] [drm] Driver supports precise vblank timestamp query.
[ 18.608963] vgaarb: device changed decodes: PCI:0000:00:02.0,olddecodes=io+mem,decodes=io+mem:owns=io+mem
[ 18.621324] ACPI: Video Device [GFX0] (multi-head: yes rom: no post: no)
[ 18.621895] input: Video Bus as /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/LNXVIDEO:00/input/input9
[ 18.622811] [drm] Initialized i915 1.6.0 20141121 for 0000:00:02.0 on minor 0
[ 18.635173] fbcon: inteldrmfb (fb0) is primary device
[ 18.879957] sound hdaudioC0D0: autoconfig: line_outs=1 (0x14/0x0/0x0/0x0/0x0) type:speaker
[ 18.879960] sound hdaudioC0D0: speaker_outs=0 (0x0/0x0/0x0/0x0/0x0)
[ 18.879961] sound hdaudioC0D0: hp_outs=1 (0x15/0x0/0x0/0x0/0x0)
[ 18.879962] sound hdaudioC0D0: mono: mono_out=0x0
[ 18.879963] sound hdaudioC0D0: inputs:
[ 18.879966] sound hdaudioC0D0: Internal Mic=0x19
[ 18.879968] sound hdaudioC0D0: Mic=0x18
[ 19.032317] iwlwifi 0000:01:00.0: CONFIG_IWLWIFI_DEBUG disabled
[ 19.032318] iwlwifi 0000:01:00.0: CONFIG_IWLWIFI_DEBUGFS enabled
[ 19.032320] iwlwifi 0000:01:00.0: CONFIG_IWLWIFI_DEVICE_TRACING enabled
[ 19.032322] iwlwifi 0000:01:00.0: Detected Intel(R) Centrino(R) Advanced-N 6230 AGN, REV=0xB0
[ 19.033062] iwlwifi 0000:01:00.0: L1 Enabled - LTR Disabled
[ 19.052302] input: HDA Intel PCH Mic as /devices/pci0000:00/0000:00:1b.0/sound/card0/input10
[ 19.053050] input: HDA Intel PCH Headphone as /devices/pci0000:00/0000:00:1b.0/sound/card0/input11
[ 19.054390] input: HDA Intel PCH HDMI/DP,pcm=3 as /devices/pci0000:00/0000:00:1b.0/sound/card0/input12
[ 19.129075] ieee80211 phy0: Selected rate control algorithm 'iwl-agn-rs'
[ 19.660209] Console: switching to colour frame buffer device 170x48
[ 19.663289] i915 0000:00:02.0: fb0: inteldrmfb frame buffer device
[ 19.663292] i915 0000:00:02.0: registered panic notifier
[ 24.625980] r8169 0000:02:00.0 eth0: link down
[ 24.626175] IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready
[ 59.102331] usb 4-1.5: USB disconnect, device number 4
[ 62.515487] PPP BSD Compression module registered
[ 62.528765] PPP Deflate Compression module registered
Jens Axboe (1):
block: wake up waiters when a queue is marked dying

Keith Busch (3):
blk-mq: Exit queue on alloc failure
blk-mq: Export freeze/unfreeze functions
NVMe: Fix double free irq

Michal Marek (2):
kbuild: Fix removal of the debian/ directory
kbuild: Drop support for clean-rule

Ming Lei (5):
blk-mq: export blk_mq_freeze_queue and blk_mq_unfreeze_queue
block: loop: improve performance via blk-mq
block: loop: say goodby to bio
block: loop: introduce lo_discard() and lo_req_flush()
block: loop: don't handle REQ_FUA explicitly

Sedat Dilek (11):
kbuild: deb-pkg: Try to determine distribution
kbuild: deb-pkg: Bump year in debian/copyright file (v3)
kbuild: deb-pkg: Update git repository URL in debian/copyright file (v3)
Merge branch 'for-linus' of git://git.kernel.org/.../axboe/linux-block into for-3.19/block-fixes
Revert "blk-mq: export blk_mq_freeze_queue and blk_mq_unfreeze_queue"
Merge branch 'for-3.19/block-fixes' into for-next20141231/block-loop-mq-v3-dileks
blk-mq: Export blk_mq_freeze_queue() function
Merge branch 'for-3.19/deb-pkg-fixes' into 3.19.0-rc2-next20141231-3-loopmq-small
Merge branch 'for-3.19/kbuild-fixes' into 3.19.0-rc2-next20141231-3-loopmq-small
Merge branch 'for-3.19/block-fixes' into 3.19.0-rc2-next20141231-3-loopmq-small
Merge branch 'for-next20141231/block-loop-mq-v3-dileks' into 3.19.0-rc2-next20141231-3-loopmq-small

block/blk-core.c | 21 ++-
block/blk-mq-tag.c | 14 +-
block/blk-mq-tag.h | 1 +
block/blk-mq.c | 21 ++-
block/blk-mq.h | 1 +
drivers/block/loop.c | 417 +++++++++++++++++++++++-----------------------
drivers/block/loop.h | 17 +-
drivers/block/nvme-core.c | 17 +-
include/linux/blk-mq.h | 3 +
scripts/Makefile.clean | 19 +--
scripts/package/builddeb | 19 ++-
11 files changed, 305 insertions(+), 245 deletions(-)

diff --git a/block/blk-core.c b/block/blk-core.c
index 7e78931..c81f02c 100644
--- a/block/blk-core.c
+++ b/block/blk-core.c
@@ -473,6 +473,25 @@ void blk_queue_bypass_end(struct request_queue *q)
}
EXPORT_SYMBOL_GPL(blk_queue_bypass_end);

+void blk_set_queue_dying(struct request_queue *q)
+{
+ queue_flag_set_unlocked(QUEUE_FLAG_DYING, q);
+
+ if (q->mq_ops)
+ blk_mq_wake_waiters(q);
+ else {
+ struct request_list *rl;
+
+ blk_queue_for_each_rl(rl, q) {
+ if (rl->rq_pool) {
+ wake_up(&rl->wait[BLK_RW_SYNC]);
+ wake_up(&rl->wait[BLK_RW_ASYNC]);
+ }
+ }
+ }
+}
+EXPORT_SYMBOL_GPL(blk_set_queue_dying);
+
/**
* blk_cleanup_queue - shutdown a request queue
* @q: request queue to shutdown
@@ -486,7 +505,7 @@ void blk_cleanup_queue(struct request_queue *q)

/* mark @q DYING, no new request or merges will be allowed afterwards */
mutex_lock(&q->sysfs_lock);
- queue_flag_set_unlocked(QUEUE_FLAG_DYING, q);
+ blk_set_queue_dying(q);
spin_lock_irq(lock);

/*
diff --git a/block/blk-mq-tag.c b/block/blk-mq-tag.c
index 32e8dbb..60c9d4a 100644
--- a/block/blk-mq-tag.c
+++ b/block/blk-mq-tag.c
@@ -68,9 +68,9 @@ bool __blk_mq_tag_busy(struct blk_mq_hw_ctx *hctx)
}

/*
- * Wakeup all potentially sleeping on normal (non-reserved) tags
+ * Wakeup all potentially sleeping on tags
*/
-static void blk_mq_tag_wakeup_all(struct blk_mq_tags *tags)
+void blk_mq_tag_wakeup_all(struct blk_mq_tags *tags, bool include_reserve)
{
struct blk_mq_bitmap_tags *bt;
int i, wake_index;
@@ -85,6 +85,12 @@ static void blk_mq_tag_wakeup_all(struct blk_mq_tags *tags)

wake_index = bt_index_inc(wake_index);
}
+
+ if (include_reserve) {
+ bt = &tags->breserved_tags;
+ if (waitqueue_active(&bt->bs[0].wait))
+ wake_up(&bt->bs[0].wait);
+ }
}

/*
@@ -100,7 +106,7 @@ void __blk_mq_tag_idle(struct blk_mq_hw_ctx *hctx)

atomic_dec(&tags->active_queues);

- blk_mq_tag_wakeup_all(tags);
+ blk_mq_tag_wakeup_all(tags, false);
}

/*
@@ -584,7 +590,7 @@ int blk_mq_tag_update_depth(struct blk_mq_tags *tags, unsigned int tdepth)
* static and should never need resizing.
*/
bt_update_count(&tags->bitmap_tags, tdepth);
- blk_mq_tag_wakeup_all(tags);
+ blk_mq_tag_wakeup_all(tags, false);
return 0;
}

diff --git a/block/blk-mq-tag.h b/block/blk-mq-tag.h
index 6206ed1..a6fa0fc 100644
--- a/block/blk-mq-tag.h
+++ b/block/blk-mq-tag.h
@@ -54,6 +54,7 @@ extern bool blk_mq_has_free_tags(struct blk_mq_tags *tags);
extern ssize_t blk_mq_tag_sysfs_show(struct blk_mq_tags *tags, char *page);
extern void blk_mq_tag_init_last_tag(struct blk_mq_tags *tags, unsigned int *last_tag);
extern int blk_mq_tag_update_depth(struct blk_mq_tags *tags, unsigned int depth);
+extern void blk_mq_tag_wakeup_all(struct blk_mq_tags *tags, bool);

enum {
BLK_MQ_TAG_CACHE_MIN = 1,
diff --git a/block/blk-mq.c b/block/blk-mq.c
index 1076f86..04caf9f 100644
--- a/block/blk-mq.c
+++ b/block/blk-mq.c
@@ -107,7 +107,7 @@ static void blk_mq_usage_counter_release(struct percpu_ref *ref)
wake_up_all(&q->mq_freeze_wq);
}

-static void blk_mq_freeze_queue_start(struct request_queue *q)
+void blk_mq_freeze_queue_start(struct request_queue *q)
{
bool freeze;

@@ -120,6 +120,7 @@ static void blk_mq_freeze_queue_start(struct request_queue *q)
blk_mq_run_queues(q, false);
}
}
+EXPORT_SYMBOL_GPL(blk_mq_freeze_queue_start);

static void blk_mq_freeze_queue_wait(struct request_queue *q)
{
@@ -135,8 +136,9 @@ void blk_mq_freeze_queue(struct request_queue *q)
blk_mq_freeze_queue_start(q);
blk_mq_freeze_queue_wait(q);
}
+EXPORT_SYMBOL_GPL(blk_mq_freeze_queue);

-static void blk_mq_unfreeze_queue(struct request_queue *q)
+void blk_mq_unfreeze_queue(struct request_queue *q)
{
bool wake;

@@ -149,6 +151,17 @@ static void blk_mq_unfreeze_queue(struct request_queue *q)
wake_up_all(&q->mq_freeze_wq);
}
}
+EXPORT_SYMBOL_GPL(blk_mq_unfreeze_queue);
+
+void blk_mq_wake_waiters(struct request_queue *q)
+{
+ struct blk_mq_hw_ctx *hctx;
+ unsigned int i;
+
+ queue_for_each_hw_ctx(q, hctx, i)
+ if (blk_mq_hw_queue_mapped(hctx))
+ blk_mq_tag_wakeup_all(hctx->tags, true);
+}

bool blk_mq_can_queue(struct blk_mq_hw_ctx *hctx)
{
@@ -259,8 +272,10 @@ struct request *blk_mq_alloc_request(struct request_queue *q, int rw, gfp_t gfp,
ctx = alloc_data.ctx;
}
blk_mq_put_ctx(ctx);
- if (!rq)
+ if (!rq) {
+ blk_mq_queue_exit(q);
return ERR_PTR(-EWOULDBLOCK);
+ }
return rq;
}
EXPORT_SYMBOL(blk_mq_alloc_request);
diff --git a/block/blk-mq.h b/block/blk-mq.h
index 206230e..4f4f943 100644
--- a/block/blk-mq.h
+++ b/block/blk-mq.h
@@ -32,6 +32,7 @@ void blk_mq_free_queue(struct request_queue *q);
void blk_mq_clone_flush_request(struct request *flush_rq,
struct request *orig_rq);
int blk_mq_update_nr_requests(struct request_queue *q, unsigned int nr);
+void blk_mq_wake_waiters(struct request_queue *q);

/*
* CPU hotplug helpers
diff --git a/drivers/block/loop.c b/drivers/block/loop.c
index 6cb1beb..185a86d 100644
--- a/drivers/block/loop.c
+++ b/drivers/block/loop.c
@@ -75,6 +75,7 @@
#include <linux/sysfs.h>
#include <linux/miscdevice.h>
#include <linux/falloc.h>
+#include <linux/blk-mq.h>
#include "loop.h"

#include <asm/uaccess.h>
@@ -85,6 +86,8 @@ static DEFINE_MUTEX(loop_index_mutex);
static int max_part;
static int part_shift;

+static struct workqueue_struct *loop_wq;
+
/*
* Transfer functions
*/
@@ -284,12 +287,12 @@ static int do_lo_send_write(struct loop_device *lo, struct bio_vec *bvec,
return ret;
}

-static int lo_send(struct loop_device *lo, struct bio *bio, loff_t pos)
+static int lo_send(struct loop_device *lo, struct request *rq, loff_t pos)
{
int (*do_lo_send)(struct loop_device *, struct bio_vec *, loff_t,
struct page *page);
struct bio_vec bvec;
- struct bvec_iter iter;
+ struct req_iterator iter;
struct page *page = NULL;
int ret = 0;

@@ -303,7 +306,7 @@ static int lo_send(struct loop_device *lo, struct bio *bio, loff_t pos)
do_lo_send = do_lo_send_direct_write;
}

- bio_for_each_segment(bvec, bio, iter) {
+ rq_for_each_segment(bvec, rq, iter) {
ret = do_lo_send(lo, &bvec, pos, page);
if (ret < 0)
break;
@@ -391,19 +394,22 @@ do_lo_receive(struct loop_device *lo,
}

static int
-lo_receive(struct loop_device *lo, struct bio *bio, int bsize, loff_t pos)
+lo_receive(struct loop_device *lo, struct request *rq, int bsize, loff_t pos)
{
struct bio_vec bvec;
- struct bvec_iter iter;
+ struct req_iterator iter;
ssize_t s;

- bio_for_each_segment(bvec, bio, iter) {
+ rq_for_each_segment(bvec, rq, iter) {
s = do_lo_receive(lo, &bvec, bsize, pos);
if (s < 0)
return s;

if (s != bvec.bv_len) {
- zero_fill_bio(bio);
+ struct bio *bio;
+
+ __rq_for_each_bio(bio, rq)
+ zero_fill_bio(bio);
break;
}
pos += bvec.bv_len;
@@ -411,106 +417,58 @@ lo_receive(struct loop_device *lo, struct bio *bio, int bsize, loff_t pos)
return 0;
}

-static int do_bio_filebacked(struct loop_device *lo, struct bio *bio)
+static int lo_discard(struct loop_device *lo, struct request *rq, loff_t pos)
{
- loff_t pos;
+ /*
+ * We use punch hole to reclaim the free space used by the
+ * image a.k.a. discard. However we do not support discard if
+ * encryption is enabled, because it may give an attacker
+ * useful information.
+ */
+ struct file *file = lo->lo_backing_file;
+ int mode = FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE;
int ret;

- pos = ((loff_t) bio->bi_iter.bi_sector << 9) + lo->lo_offset;
-
- if (bio_rw(bio) == WRITE) {
- struct file *file = lo->lo_backing_file;
-
- if (bio->bi_rw & REQ_FLUSH) {
- ret = vfs_fsync(file, 0);
- if (unlikely(ret && ret != -EINVAL)) {
- ret = -EIO;
- goto out;
- }
- }
-
- /*
- * We use punch hole to reclaim the free space used by the
- * image a.k.a. discard. However we do not support discard if
- * encryption is enabled, because it may give an attacker
- * useful information.
- */
- if (bio->bi_rw & REQ_DISCARD) {
- struct file *file = lo->lo_backing_file;
- int mode = FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE;
-
- if ((!file->f_op->fallocate) ||
- lo->lo_encrypt_key_size) {
- ret = -EOPNOTSUPP;
- goto out;
- }
- ret = file->f_op->fallocate(file, mode, pos,
- bio->bi_iter.bi_size);
- if (unlikely(ret && ret != -EINVAL &&
- ret != -EOPNOTSUPP))
- ret = -EIO;
- goto out;
- }
-
- ret = lo_send(lo, bio, pos);
-
- if ((bio->bi_rw & REQ_FUA) && !ret) {
- ret = vfs_fsync(file, 0);
- if (unlikely(ret && ret != -EINVAL))
- ret = -EIO;
- }
- } else
- ret = lo_receive(lo, bio, lo->lo_blocksize, pos);
+ if ((!file->f_op->fallocate) || lo->lo_encrypt_key_size) {
+ ret = -EOPNOTSUPP;
+ goto out;
+ }

-out:
+ ret = file->f_op->fallocate(file, mode, pos, blk_rq_bytes(rq));
+ if (unlikely(ret && ret != -EINVAL && ret != -EOPNOTSUPP))
+ ret = -EIO;
+ out:
return ret;
}

-/*
- * Add bio to back of pending list
- */
-static void loop_add_bio(struct loop_device *lo, struct bio *bio)
+static int lo_req_flush(struct loop_device *lo, struct request *rq)
{
- lo->lo_bio_count++;
- bio_list_add(&lo->lo_bio_list, bio);
-}
+ struct file *file = lo->lo_backing_file;
+ int ret = vfs_fsync(file, 0);
+ if (unlikely(ret && ret != -EINVAL))
+ ret = -EIO;

-/*
- * Grab first pending buffer
- */
-static struct bio *loop_get_bio(struct loop_device *lo)
-{
- lo->lo_bio_count--;
- return bio_list_pop(&lo->lo_bio_list);
+ return ret;
}

-static void loop_make_request(struct request_queue *q, struct bio *old_bio)
+static int do_req_filebacked(struct loop_device *lo, struct request *rq)
{
- struct loop_device *lo = q->queuedata;
- int rw = bio_rw(old_bio);
-
- if (rw == READA)
- rw = READ;
+ loff_t pos;
+ int ret;

- BUG_ON(!lo || (rw != READ && rw != WRITE));
+ pos = ((loff_t) blk_rq_pos(rq) << 9) + lo->lo_offset;

- spin_lock_irq(&lo->lo_lock);
- if (lo->lo_state != Lo_bound)
- goto out;
- if (unlikely(rw == WRITE && (lo->lo_flags & LO_FLAGS_READ_ONLY)))
- goto out;
- if (lo->lo_bio_count >= q->nr_congestion_on)
- wait_event_lock_irq(lo->lo_req_wait,
- lo->lo_bio_count < q->nr_congestion_off,
- lo->lo_lock);
- loop_add_bio(lo, old_bio);
- wake_up(&lo->lo_event);
- spin_unlock_irq(&lo->lo_lock);
- return;
+ if (rq->cmd_flags & REQ_WRITE) {
+ if (rq->cmd_flags & REQ_FLUSH)
+ ret = lo_req_flush(lo, rq);
+ else if (rq->cmd_flags & REQ_DISCARD)
+ ret = lo_discard(lo, rq, pos);
+ else
+ ret = lo_send(lo, rq, pos);
+ } else
+ ret = lo_receive(lo, rq, lo->lo_blocksize, pos);

-out:
- spin_unlock_irq(&lo->lo_lock);
- bio_io_error(old_bio);
+ return ret;
}

struct switch_request {
@@ -518,57 +476,26 @@ struct switch_request {
struct completion wait;
};

-static void do_loop_switch(struct loop_device *, struct switch_request *);
-
-static inline void loop_handle_bio(struct loop_device *lo, struct bio *bio)
-{
- if (unlikely(!bio->bi_bdev)) {
- do_loop_switch(lo, bio->bi_private);
- bio_put(bio);
- } else {
- int ret = do_bio_filebacked(lo, bio);
- bio_endio(bio, ret);
- }
-}
-
/*
- * worker thread that handles reads/writes to file backed loop devices,
- * to avoid blocking in our make_request_fn. it also does loop decrypting
- * on reads for block backed loop, as that is too heavy to do from
- * b_end_io context where irqs may be disabled.
- *
- * Loop explanation: loop_clr_fd() sets lo_state to Lo_rundown before
- * calling kthread_stop(). Therefore once kthread_should_stop() is
- * true, make_request will not place any more requests. Therefore
- * once kthread_should_stop() is true and lo_bio is NULL, we are
- * done with the loop.
+ * Do the actual switch; called from the BIO completion routine
*/
-static int loop_thread(void *data)
+static void do_loop_switch(struct loop_device *lo, struct switch_request *p)
{
- struct loop_device *lo = data;
- struct bio *bio;
-
- set_user_nice(current, MIN_NICE);
-
- while (!kthread_should_stop() || !bio_list_empty(&lo->lo_bio_list)) {
-
- wait_event_interruptible(lo->lo_event,
- !bio_list_empty(&lo->lo_bio_list) ||
- kthread_should_stop());
-
- if (bio_list_empty(&lo->lo_bio_list))
- continue;
- spin_lock_irq(&lo->lo_lock);
- bio = loop_get_bio(lo);
- if (lo->lo_bio_count < lo->lo_queue->nr_congestion_off)
- wake_up(&lo->lo_req_wait);
- spin_unlock_irq(&lo->lo_lock);
+ struct file *file = p->file;
+ struct file *old_file = lo->lo_backing_file;
+ struct address_space *mapping;

- BUG_ON(!bio);
- loop_handle_bio(lo, bio);
- }
+ /* if no new file, only flush of queued bios requested */
+ if (!file)
+ return;

- return 0;
+ mapping = file->f_mapping;
+ mapping_set_gfp_mask(old_file->f_mapping, lo->old_gfp_mask);
+ lo->lo_backing_file = file;
+ lo->lo_blocksize = S_ISBLK(mapping->host->i_mode) ?
+ mapping->host->i_bdev->bd_block_size : PAGE_SIZE;
+ lo->old_gfp_mask = mapping_gfp_mask(mapping);
+ mapping_set_gfp_mask(mapping, lo->old_gfp_mask & ~(__GFP_IO|__GFP_FS));
}

/*
@@ -579,15 +506,18 @@ static int loop_thread(void *data)
static int loop_switch(struct loop_device *lo, struct file *file)
{
struct switch_request w;
- struct bio *bio = bio_alloc(GFP_KERNEL, 0);
- if (!bio)
- return -ENOMEM;
- init_completion(&w.wait);
+
w.file = file;
- bio->bi_private = &w;
- bio->bi_bdev = NULL;
- loop_make_request(lo->lo_queue, bio);
- wait_for_completion(&w.wait);
+
+ /* freeze queue and wait for completion of scheduled requests */
+ blk_mq_freeze_queue(lo->lo_queue);
+
+ /* do the switch action */
+ do_loop_switch(lo, &w);
+
+ /* unfreeze */
+ blk_mq_unfreeze_queue(lo->lo_queue);
+
return 0;
}

@@ -596,39 +526,10 @@ static int loop_switch(struct loop_device *lo, struct file *file)
*/
static int loop_flush(struct loop_device *lo)
{
- /* loop not yet configured, no running thread, nothing to flush */
- if (!lo->lo_thread)
- return 0;
-
return loop_switch(lo, NULL);
}

/*
- * Do the actual switch; called from the BIO completion routine
- */
-static void do_loop_switch(struct loop_device *lo, struct switch_request *p)
-{
- struct file *file = p->file;
- struct file *old_file = lo->lo_backing_file;
- struct address_space *mapping;
-
- /* if no new file, only flush of queued bios requested */
- if (!file)
- goto out;
-
- mapping = file->f_mapping;
- mapping_set_gfp_mask(old_file->f_mapping, lo->old_gfp_mask);
- lo->lo_backing_file = file;
- lo->lo_blocksize = S_ISBLK(mapping->host->i_mode) ?
- mapping->host->i_bdev->bd_block_size : PAGE_SIZE;
- lo->old_gfp_mask = mapping_gfp_mask(mapping);
- mapping_set_gfp_mask(mapping, lo->old_gfp_mask & ~(__GFP_IO|__GFP_FS));
-out:
- complete(&p->wait);
-}
-
-
-/*
* loop_change_fd switched the backing store of a loopback device to
* a new file. This is useful for operating system installers to free up
* the original file and in High Availability environments to switch to
@@ -889,12 +790,9 @@ static int loop_set_fd(struct loop_device *lo, fmode_t mode,
lo->transfer = transfer_none;
lo->ioctl = NULL;
lo->lo_sizelimit = 0;
- lo->lo_bio_count = 0;
lo->old_gfp_mask = mapping_gfp_mask(mapping);
mapping_set_gfp_mask(mapping, lo->old_gfp_mask & ~(__GFP_IO|__GFP_FS));

- bio_list_init(&lo->lo_bio_list);
-
if (!(lo_flags & LO_FLAGS_READ_ONLY) && file->f_op->fsync)
blk_queue_flush(lo->lo_queue, REQ_FLUSH);

@@ -906,14 +804,7 @@ static int loop_set_fd(struct loop_device *lo, fmode_t mode,

set_blocksize(bdev, lo_blocksize);

- lo->lo_thread = kthread_create(loop_thread, lo, "loop%d",
- lo->lo_number);
- if (IS_ERR(lo->lo_thread)) {
- error = PTR_ERR(lo->lo_thread);
- goto out_clr;
- }
lo->lo_state = Lo_bound;
- wake_up_process(lo->lo_thread);
if (part_shift)
lo->lo_flags |= LO_FLAGS_PARTSCAN;
if (lo->lo_flags & LO_FLAGS_PARTSCAN)
@@ -925,18 +816,6 @@ static int loop_set_fd(struct loop_device *lo, fmode_t mode,
bdgrab(bdev);
return 0;

-out_clr:
- loop_sysfs_exit(lo);
- lo->lo_thread = NULL;
- lo->lo_device = NULL;
- lo->lo_backing_file = NULL;
- lo->lo_flags = 0;
- set_capacity(lo->lo_disk, 0);
- invalidate_bdev(bdev);
- bd_set_size(bdev, 0);
- kobject_uevent(&disk_to_dev(bdev->bd_disk)->kobj, KOBJ_CHANGE);
- mapping_set_gfp_mask(mapping, lo->old_gfp_mask);
- lo->lo_state = Lo_unbound;
out_putf:
fput(file);
out:
@@ -1012,11 +891,6 @@ static int loop_clr_fd(struct loop_device *lo)

spin_lock_irq(&lo->lo_lock);
lo->lo_state = Lo_rundown;
- spin_unlock_irq(&lo->lo_lock);
-
- kthread_stop(lo->lo_thread);
-
- spin_lock_irq(&lo->lo_lock);
lo->lo_backing_file = NULL;
spin_unlock_irq(&lo->lo_lock);

@@ -1028,7 +902,6 @@ static int loop_clr_fd(struct loop_device *lo)
lo->lo_offset = 0;
lo->lo_sizelimit = 0;
lo->lo_encrypt_key_size = 0;
- lo->lo_thread = NULL;
memset(lo->lo_encrypt_key, 0, LO_KEY_SIZE);
memset(lo->lo_crypt_name, 0, LO_NAME_SIZE);
memset(lo->lo_file_name, 0, LO_NAME_SIZE);
@@ -1601,6 +1474,105 @@ int loop_unregister_transfer(int number)
EXPORT_SYMBOL(loop_register_transfer);
EXPORT_SYMBOL(loop_unregister_transfer);

+static int loop_queue_rq(struct blk_mq_hw_ctx *hctx,
+ const struct blk_mq_queue_data *bd)
+{
+ struct loop_cmd *cmd = blk_mq_rq_to_pdu(bd->rq);
+
+ blk_mq_start_request(bd->rq);
+
+ if (cmd->rq->cmd_flags & REQ_WRITE) {
+ struct loop_device *lo = cmd->rq->q->queuedata;
+ bool need_sched = true;
+
+ spin_lock_irq(&lo->lo_lock);
+ if (lo->write_started)
+ need_sched = false;
+ else
+ lo->write_started = true;
+ list_add_tail(&cmd->list, &lo->write_cmd_head);
+ spin_unlock_irq(&lo->lo_lock);
+
+ if (need_sched)
+ queue_work(loop_wq, &lo->write_work);
+ } else {
+ queue_work(loop_wq, &cmd->read_work);
+ }
+
+ return BLK_MQ_RQ_QUEUE_OK;
+}
+
+static void loop_handle_cmd(struct loop_cmd *cmd)
+{
+ const bool write = cmd->rq->cmd_flags & REQ_WRITE;
+ struct loop_device *lo = cmd->rq->q->queuedata;
+ int ret = -EIO;
+
+ if (lo->lo_state != Lo_bound)
+ goto failed;
+
+ if (write && (lo->lo_flags & LO_FLAGS_READ_ONLY))
+ goto failed;
+
+ ret = do_req_filebacked(lo, cmd->rq);
+
+ failed:
+ if (ret)
+ cmd->rq->errors = -EIO;
+ blk_mq_complete_request(cmd->rq);
+}
+
+static void loop_queue_write_work(struct work_struct *work)
+{
+ struct loop_device *lo =
+ container_of(work, struct loop_device, write_work);
+ LIST_HEAD(cmd_list);
+
+ spin_lock_irq(&lo->lo_lock);
+ repeat:
+ list_splice_init(&lo->write_cmd_head, &cmd_list);
+ spin_unlock_irq(&lo->lo_lock);
+
+ while (!list_empty(&cmd_list)) {
+ struct loop_cmd *cmd = list_first_entry(&cmd_list,
+ struct loop_cmd, list);
+ list_del_init(&cmd->list);
+ loop_handle_cmd(cmd);
+ }
+
+ spin_lock_irq(&lo->lo_lock);
+ if (!list_empty(&lo->write_cmd_head))
+ goto repeat;
+ lo->write_started = false;
+ spin_unlock_irq(&lo->lo_lock);
+}
+
+static void loop_queue_read_work(struct work_struct *work)
+{
+ struct loop_cmd *cmd =
+ container_of(work, struct loop_cmd, read_work);
+
+ loop_handle_cmd(cmd);
+}
+
+static int loop_init_request(void *data, struct request *rq,
+ unsigned int hctx_idx, unsigned int request_idx,
+ unsigned int numa_node)
+{
+ struct loop_cmd *cmd = blk_mq_rq_to_pdu(rq);
+
+ cmd->rq = rq;
+ INIT_WORK(&cmd->read_work, loop_queue_read_work);
+
+ return 0;
+}
+
+static struct blk_mq_ops loop_mq_ops = {
+ .queue_rq = loop_queue_rq,
+ .map_queue = blk_mq_map_queue,
+ .init_request = loop_init_request,
+};
+
static int loop_add(struct loop_device **l, int i)
{
struct loop_device *lo;
@@ -1627,16 +1599,28 @@ static int loop_add(struct loop_device **l, int i)
i = err;

err = -ENOMEM;
- lo->lo_queue = blk_alloc_queue(GFP_KERNEL);
- if (!lo->lo_queue)
+ lo->tag_set.ops = &loop_mq_ops;
+ lo->tag_set.nr_hw_queues = 1;
+ lo->tag_set.queue_depth = 128;
+ lo->tag_set.numa_node = NUMA_NO_NODE;
+ lo->tag_set.cmd_size = sizeof(struct loop_cmd);
+ lo->tag_set.flags = BLK_MQ_F_SHOULD_MERGE | BLK_MQ_F_SG_MERGE;
+ lo->tag_set.driver_data = lo;
+
+ err = blk_mq_alloc_tag_set(&lo->tag_set);
+ if (err)
goto out_free_idr;

- /*
- * set queue make_request_fn
- */
- blk_queue_make_request(lo->lo_queue, loop_make_request);
+ lo->lo_queue = blk_mq_init_queue(&lo->tag_set);
+ if (IS_ERR_OR_NULL(lo->lo_queue)) {
+ err = PTR_ERR(lo->lo_queue);
+ goto out_cleanup_tags;
+ }
lo->lo_queue->queuedata = lo;

+ INIT_LIST_HEAD(&lo->write_cmd_head);
+ INIT_WORK(&lo->write_work, loop_queue_write_work);
+
disk = lo->lo_disk = alloc_disk(1 << part_shift);
if (!disk)
goto out_free_queue;
@@ -1664,9 +1648,6 @@ static int loop_add(struct loop_device **l, int i)
disk->flags |= GENHD_FL_EXT_DEVT;
mutex_init(&lo->lo_ctl_mutex);
lo->lo_number = i;
- lo->lo_thread = NULL;
- init_waitqueue_head(&lo->lo_event);
- init_waitqueue_head(&lo->lo_req_wait);
spin_lock_init(&lo->lo_lock);
disk->major = LOOP_MAJOR;
disk->first_minor = i << part_shift;
@@ -1680,6 +1661,8 @@ static int loop_add(struct loop_device **l, int i)

out_free_queue:
blk_cleanup_queue(lo->lo_queue);
+out_cleanup_tags:
+ blk_mq_free_tag_set(&lo->tag_set);
out_free_idr:
idr_remove(&loop_index_idr, i);
out_free_dev:
@@ -1692,6 +1675,7 @@ static void loop_remove(struct loop_device *lo)
{
del_gendisk(lo->lo_disk);
blk_cleanup_queue(lo->lo_queue);
+ blk_mq_free_tag_set(&lo->tag_set);
put_disk(lo->lo_disk);
kfree(lo);
}
@@ -1875,6 +1859,13 @@ static int __init loop_init(void)
goto misc_out;
}

+ loop_wq = alloc_workqueue("kloopd",
+ WQ_MEM_RECLAIM | WQ_HIGHPRI | WQ_UNBOUND, 0);
+ if (!loop_wq) {
+ err = -ENOMEM;
+ goto misc_out;
+ }
+
blk_register_region(MKDEV(LOOP_MAJOR, 0), range,
THIS_MODULE, loop_probe, NULL, NULL);

@@ -1912,6 +1903,8 @@ static void __exit loop_exit(void)
blk_unregister_region(MKDEV(LOOP_MAJOR, 0), range);
unregister_blkdev(LOOP_MAJOR, "loop");

+ destroy_workqueue(loop_wq);
+
misc_deregister(&loop_misc);
}

diff --git a/drivers/block/loop.h b/drivers/block/loop.h
index 90df5d6..e20cdbb 100644
--- a/drivers/block/loop.h
+++ b/drivers/block/loop.h
@@ -13,6 +13,7 @@
#include <linux/blkdev.h>
#include <linux/spinlock.h>
#include <linux/mutex.h>
+#include <linux/workqueue.h>
#include <uapi/linux/loop.h>

/* Possible states of device */
@@ -52,19 +53,23 @@ struct loop_device {
gfp_t old_gfp_mask;

spinlock_t lo_lock;
- struct bio_list lo_bio_list;
- unsigned int lo_bio_count;
+ struct list_head write_cmd_head;
+ struct work_struct write_work;
+ bool write_started;
int lo_state;
struct mutex lo_ctl_mutex;
- struct task_struct *lo_thread;
- wait_queue_head_t lo_event;
- /* wait queue for incoming requests */
- wait_queue_head_t lo_req_wait;

struct request_queue *lo_queue;
+ struct blk_mq_tag_set tag_set;
struct gendisk *lo_disk;
};

+struct loop_cmd {
+ struct work_struct read_work;
+ struct request *rq;
+ struct list_head list;
+};
+
/* Support for loadable transfer modules */
struct loop_func_table {
int number; /* filter type */
diff --git a/drivers/block/nvme-core.c b/drivers/block/nvme-core.c
index b1d5d87..52d0f2d 100644
--- a/drivers/block/nvme-core.c
+++ b/drivers/block/nvme-core.c
@@ -1131,10 +1131,16 @@ static void nvme_free_queues(struct nvme_dev *dev, int lowest)
*/
static int nvme_suspend_queue(struct nvme_queue *nvmeq)
{
- int vector = nvmeq->dev->entry[nvmeq->cq_vector].vector;
+ int vector;

spin_lock_irq(&nvmeq->q_lock);
+ if (nvmeq->cq_vector == -1) {
+ spin_unlock_irq(&nvmeq->q_lock);
+ return 1;
+ }
+ vector = nvmeq->dev->entry[nvmeq->cq_vector].vector;
nvmeq->dev->online_queues--;
+ nvmeq->cq_vector = -1;
spin_unlock_irq(&nvmeq->q_lock);

irq_set_affinity_hint(vector, NULL);
@@ -1173,7 +1179,7 @@ static void nvme_disable_queue(struct nvme_dev *dev, int qid)
}

static struct nvme_queue *nvme_alloc_queue(struct nvme_dev *dev, int qid,
- int depth, int vector)
+ int depth)
{
struct device *dmadev = &dev->pci_dev->dev;
struct nvme_queue *nvmeq = kzalloc(sizeof(*nvmeq), GFP_KERNEL);
@@ -1199,7 +1205,6 @@ static struct nvme_queue *nvme_alloc_queue(struct nvme_dev *dev, int qid,
nvmeq->cq_phase = 1;
nvmeq->q_db = &dev->dbs[qid * 2 * dev->db_stride];
nvmeq->q_depth = depth;
- nvmeq->cq_vector = vector;
nvmeq->qid = qid;
dev->queue_count++;
dev->queues[qid] = nvmeq;
@@ -1244,6 +1249,7 @@ static int nvme_create_queue(struct nvme_queue *nvmeq, int qid)
struct nvme_dev *dev = nvmeq->dev;
int result;

+ nvmeq->cq_vector = qid - 1;
result = adapter_alloc_cq(dev, qid, nvmeq);
if (result < 0)
return result;
@@ -1416,7 +1422,7 @@ static int nvme_configure_admin_queue(struct nvme_dev *dev)

nvmeq = dev->queues[0];
if (!nvmeq) {
- nvmeq = nvme_alloc_queue(dev, 0, NVME_AQ_DEPTH, 0);
+ nvmeq = nvme_alloc_queue(dev, 0, NVME_AQ_DEPTH);
if (!nvmeq)
return -ENOMEM;
}
@@ -1443,6 +1449,7 @@ static int nvme_configure_admin_queue(struct nvme_dev *dev)
if (result)
goto free_nvmeq;

+ nvmeq->cq_vector = 0;
result = queue_request_irq(dev, nvmeq, nvmeq->irqname);
if (result)
goto free_tags;
@@ -1944,7 +1951,7 @@ static void nvme_create_io_queues(struct nvme_dev *dev)
unsigned i;

for (i = dev->queue_count; i <= dev->max_qid; i++)
- if (!nvme_alloc_queue(dev, i, dev->q_depth, i - 1))
+ if (!nvme_alloc_queue(dev, i, dev->q_depth))
break;

for (i = dev->online_queues; i <= dev->queue_count - 1; i++)
diff --git a/include/linux/blk-mq.h b/include/linux/blk-mq.h
index 8aded9a..5b6500c 100644
--- a/include/linux/blk-mq.h
+++ b/include/linux/blk-mq.h
@@ -212,6 +212,9 @@ void blk_mq_start_stopped_hw_queues(struct request_queue *q, bool async);
void blk_mq_delay_queue(struct blk_mq_hw_ctx *hctx, unsigned long msecs);
void blk_mq_tag_busy_iter(struct blk_mq_hw_ctx *hctx, busy_iter_fn *fn,
void *priv);
+void blk_mq_freeze_queue(struct request_queue *q);
+void blk_mq_unfreeze_queue(struct request_queue *q);
+void blk_mq_freeze_queue_start(struct request_queue *q);

/*
* Driver command data is immediately after the request. So subtract request
diff --git a/scripts/Makefile.clean b/scripts/Makefile.clean
index 1bca180..55c96cb 100644
--- a/scripts/Makefile.clean
+++ b/scripts/Makefile.clean
@@ -42,19 +42,19 @@ __clean-files := $(extra-y) $(extra-m) $(extra-) \

__clean-files := $(filter-out $(no-clean-files), $(__clean-files))

-# as clean-files is given relative to the current directory, this adds
-# a $(obj) prefix, except for absolute paths
+# clean-files is given relative to the current directory, unless it
+# starts with $(objtree)/ (which means "./", so do not add "./" unless
+# you want to delete a file from the toplevel object directory).

__clean-files := $(wildcard \
- $(addprefix $(obj)/, $(filter-out /%, $(__clean-files))) \
- $(filter /%, $(__clean-files)))
+ $(addprefix $(obj)/, $(filter-out $(objtree)/%, $(__clean-files))) \
+ $(filter $(objtree)/%, $(__clean-files)))

-# as clean-dirs is given relative to the current directory, this adds
-# a $(obj) prefix, except for absolute paths
+# same as clean-files

__clean-dirs := $(wildcard \
- $(addprefix $(obj)/, $(filter-out /%, $(clean-dirs))) \
- $(filter /%, $(clean-dirs)))
+ $(addprefix $(obj)/, $(filter-out $(objtree)/%, $(clean-dirs))) \
+ $(filter $(objtree)/%, $(clean-dirs)))

# ==========================================================================

@@ -71,9 +71,6 @@ endif
ifneq ($(strip $(__clean-dirs)),)
+$(call cmd,cleandir)
endif
-ifneq ($(strip $(clean-rule)),)
- +$(clean-rule)
-endif
@:


diff --git a/scripts/package/builddeb b/scripts/package/builddeb
index 5972624..7a60d1a 100755
--- a/scripts/package/builddeb
+++ b/scripts/package/builddeb
@@ -217,9 +217,22 @@ else
fi
maintainer="$name <$email>"

+# Try to determine distribution
+if [ -e $(which lsb_release) ]; then
+ codename=$(lsb_release --codename --short)
+ if [ "$codename" != "" ]; then
+ distribution=$codename
+ else
+ distribution="UNRELEASED"
+ echo "WARNING: The distribution could NOT be determined!"
+ fi
+else
+ echo "HINT: Install lsb_release binary, this helps to identify your distribution!"
+fi
+
# Generate a simple changelog template
cat <<EOF > debian/changelog
-linux-upstream ($packageversion) unstable; urgency=low
+linux-upstream ($packageversion) $distribution; urgency=low

* Custom built Linux kernel.

@@ -233,10 +246,10 @@ This is a packacked upstream version of the Linux kernel.
The sources may be found at most Linux ftp sites, including:
ftp://ftp.kernel.org/pub/linux/kernel

-Copyright: 1991 - 2009 Linus Torvalds and others.
+Copyright: 1991 - 2014 Linus Torvalds and others.

The git repository for mainline kernel development is at:
-git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git
+git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by

Attachment: config-3.19.0-rc2-next20141231-3-loopmq-small
Description: Binary data

root# LC_ALL=C fio --name=randread --rw=randread --bs=4k --ioengine=libaio --iodepth=64 --direct=1 --numjobs=1 --size=1G
randread: (g=0): rw=randread, bs=4K-4K/4K-4K, ioengine=libaio, iodepth=64
fio 1.59
Starting 1 process
randread: Laying out IO file(s) (1 file(s) / 1024MB)
Jobs: 1 (f=1): [r] [100.0% done] [74485K/0K /s] [18.2K/0 iops] [eta 00m:00s]
randread: (groupid=0, jobs=1): err= 0: pid=2647
read : io=1024.0MB, bw=3924.3KB/s, iops=981 , runt=267206msec
slat (usec): min=10 , max=337 , avg=14.82, stdev= 3.26
clat (usec): min=3 , max=5184.1K, avg=65218.98, stdev=192201.89
lat (usec): min=14 , max=5184.2K, avg=65234.04, stdev=192202.68
bw (KB/s) : min= 1386, max=79231, per=98.28%, avg=3856.44, stdev=5637.10
cpu : usr=0.41%, sys=99.46%, ctx=1402, majf=0, minf=69
IO depths : 1=0.1%, 2=0.1%, 4=0.1%, 8=0.1%, 16=0.1%, 32=0.1%, >=64=100.0%
submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.1%, >=64=0.0%
issued r/w/d: total=262144/0/0, short=0/0/0
lat (usec): 4=0.01%, 10=42.19%, 20=13.81%, 50=19.01%, 100=7.11%
lat (usec): 250=4.38%, 500=1.10%, 750=0.07%, 1000=0.03%
lat (msec): 2=0.02%, 4=0.01%, 10=0.01%, 20=0.01%, 50=0.06%
lat (msec): 100=0.24%, 250=0.79%, 500=2.67%, 750=7.84%, 1000=0.39%
lat (msec): 2000=0.21%, >=2000=0.04%

Run status group 0 (all jobs):
READ: io=1024.0MB, aggrb=3924KB/s, minb=4018KB/s, maxb=4018KB/s, mint=267206msec, maxt=267206msec

Disk stats (read/write):
loop0: ios=261741/211, merge=0/5, ticks=17229012/262104, in_queue=17494268, util=100.00%

root# cat /proc/version
Linux version 3.19.0-rc2-next20141231-1-loopmq-small (sedat.dilek@xxxxxxxxx@fambox) (gcc version 4.9.2 (Ubuntu 4.9.2-0ubuntu1~12.04) ) #1 SMP Thu Jan 1 00:07:54 CET 2015


-dileks // 01-JAN-2015
root# LC_ALL=C fio --name=randread --rw=randread --bs=4k --ioengine=libaio --iodepth=64 --direct=1 --numjobs=1 --size=1G
randread: (g=0): rw=randread, bs=4K-4K/4K-4K, ioengine=libaio, iodepth=64
fio 1.59
Starting 1 process
randread: Laying out IO file(s) (1 file(s) / 1024MB)
Jobs: 1 (f=1): [r] [95.4% done] [99.42M/0K /s] [24.9K/0 iops] [eta 00m:06s]
randread: (groupid=0, jobs=1): err= 0: pid=2667
read : io=1024.0MB, bw=8414.9KB/s, iops=2103 , runt=124611msec
slat (usec): min=10 , max=334 , avg=12.70, stdev= 2.20
clat (usec): min=3 , max=4002.9K, avg=30407.90, stdev=125176.49
lat (usec): min=17 , max=4002.9K, avg=30420.81, stdev=125176.50
bw (KB/s) : min= 4015, max=106776, per=97.50%, avg=8203.31, stdev=10305.31
cpu : usr=0.84%, sys=99.03%, ctx=499, majf=0, minf=69
IO depths : 1=0.1%, 2=0.1%, 4=0.1%, 8=0.1%, 16=0.1%, 32=0.1%, >=64=100.0%
submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.1%, >=64=0.0%
issued r/w/d: total=262144/0/0, short=0/0/0
lat (usec): 4=0.01%, 10=50.46%, 20=8.13%, 50=19.64%, 100=7.28%
lat (usec): 250=5.70%, 500=2.10%, 750=0.03%, 1000=0.03%
lat (msec): 2=0.09%, 4=0.01%, 10=0.01%, 20=0.01%, 50=0.05%
lat (msec): 100=0.16%, 250=0.51%, 500=2.78%, 750=2.78%, 1000=0.15%
lat (msec): 2000=0.08%, >=2000=0.01%

Run status group 0 (all jobs):
READ: io=1024.0MB, aggrb=8414KB/s, minb=8616KB/s, maxb=8616KB/s, mint=124611msec, maxt=124611msec

Disk stats (read/write):
loop0: ios=260996/62, merge=0/2, ticks=8051072/48132, in_queue=8102608, util=100.00%

root# cat /proc/version
Linux version 3.19.0-rc2-next20141231-3-loopmq-small (sedat.dilek@xxxxxxxxx@fambox) (gcc version 4.9.2 (Ubuntu 4.9.2-0ubuntu1~12.04) ) #1 SMP Thu Jan 1 15:35:53 CET 2015


-dileks // 01-JAN-2015
root# fio --name=randread --rw=randread --bs=4k --ioengine=libaio --iodepth=64 --direct=1 --numjobs=1 --size=1G
randread: (g=0): rw=randread, bs=4K-4K/4K-4K, ioengine=libaio, iodepth=64
fio 1.59
Starting 1 process
Jobs: 1 (f=1): [r] [98.6% done] [20742K/0K /s] [5064 /0 iops] [eta 00m:07s]
randread: (groupid=0, jobs=1): err= 0: pid=31823
read : io=1024.0MB, bw=2063.4KB/s, iops=515 , runt=508182msec
slat (usec): min=9 , max=238 , avg=15.32, stdev= 3.57
clat (usec): min=3 , max=5198.5K, avg=124050.36, stdev=251834.37
lat (usec): min=16 , max=5198.6K, avg=124065.92, stdev=251835.77
bw (KB/s) : min= 667, max=103842, per=99.29%, avg=2048.36, stdev=3861.47
cpu : usr=0.23%, sys=99.69%, ctx=2185, majf=0, minf=69
IO depths : 1=0.1%, 2=0.1%, 4=0.1%, 8=0.1%, 16=0.1%, 32=0.1%, >=64=100.0%
submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.1%, >=64=0.0%
issued r/w/d: total=262144/0/0, short=0/0/0
lat (usec): 4=0.01%, 10=28.56%, 20=18.97%, 50=17.88%, 100=4.63%
lat (usec): 250=2.02%, 500=0.17%, 750=0.01%, 1000=0.01%
lat (msec): 2=4.97%, 4=0.01%, 10=0.01%, 20=0.03%, 50=0.13%
lat (msec): 100=0.29%, 250=1.31%, 500=4.89%, 750=14.65%, 1000=0.90%
lat (msec): 2000=0.51%, >=2000=0.06%

Run status group 0 (all jobs):
READ: io=1024.0MB, aggrb=2063KB/s, minb=2112KB/s, maxb=2112KB/s, mint=508182msec, maxt=508182msec

Disk stats (read/write):
loop0: ios=260831/137, merge=0/5, ticks=32479636/918584, in_queue=33408644, util=100.00%

root# cat /proc/version
Linux version 3.19.0-rc2-next20141231-1-loopmq-small (sedat.dilek@xxxxxxxxx@fambox) (gcc version 4.9.2 (Ubuntu 4.9.2-0ubuntu1~12.04) ) #1 SMP Thu Jan 1 00:07:54 CET 2015


-dileks // 31-DEC-2014
From 5f7f81bb242544105a1a7cbf224aae6eb9f63ce6 Mon Sep 17 00:00:00 2001
From: Sedat Dilek <sedat.dilek@xxxxxxxxx>
Date: Thu, 1 Jan 2015 13:11:53 +0100
Subject: [PATCH] Revert "blk-mq: export blk_mq_freeze_queue and
blk_mq_unfreeze_queue"

This reverts commit 8f1f11d965c3129a76ffa833107005c0d3b6af8e.

Commit b4c6a028774b ("blk-mq: Export freeze/unfreeze functions")
pending in block.git#for-linus has already blk_mq_unfreeze_queue()
exported.
Thus, I revert this patch entirely and export blk_mq_freeze_queue()
in an additional patch.

CC: Ming Lei <ming.lei@xxxxxxxxxxxxx>
Signed-off-by: Sedat Dilek <sedat.dilek@xxxxxxxxx>
---
block/blk-mq.c | 4 +---
block/blk-mq.h | 1 +
include/linux/blk-mq.h | 2 --
3 files changed, 2 insertions(+), 5 deletions(-)

diff --git a/block/blk-mq.c b/block/blk-mq.c
index 2a0afea..1076f86 100644
--- a/block/blk-mq.c
+++ b/block/blk-mq.c
@@ -135,9 +135,8 @@ void blk_mq_freeze_queue(struct request_queue *q)
blk_mq_freeze_queue_start(q);
blk_mq_freeze_queue_wait(q);
}
-EXPORT_SYMBOL(blk_mq_freeze_queue);

-void blk_mq_unfreeze_queue(struct request_queue *q)
+static void blk_mq_unfreeze_queue(struct request_queue *q)
{
bool wake;

@@ -150,7 +149,6 @@ void blk_mq_unfreeze_queue(struct request_queue *q)
wake_up_all(&q->mq_freeze_wq);
}
}
-EXPORT_SYMBOL(blk_mq_unfreeze_queue);

bool blk_mq_can_queue(struct blk_mq_hw_ctx *hctx)
{
diff --git a/block/blk-mq.h b/block/blk-mq.h
index 1bc1be9..206230e 100644
--- a/block/blk-mq.h
+++ b/block/blk-mq.h
@@ -27,6 +27,7 @@ struct blk_mq_ctx {

void __blk_mq_complete_request(struct request *rq);
void blk_mq_run_hw_queue(struct blk_mq_hw_ctx *hctx, bool async);
+void blk_mq_freeze_queue(struct request_queue *q);
void blk_mq_free_queue(struct request_queue *q);
void blk_mq_clone_flush_request(struct request *flush_rq,
struct request *orig_rq);
diff --git a/include/linux/blk-mq.h b/include/linux/blk-mq.h
index a855a69..8aded9a 100644
--- a/include/linux/blk-mq.h
+++ b/include/linux/blk-mq.h
@@ -212,8 +212,6 @@ void blk_mq_start_stopped_hw_queues(struct request_queue *q, bool async);
void blk_mq_delay_queue(struct blk_mq_hw_ctx *hctx, unsigned long msecs);
void blk_mq_tag_busy_iter(struct blk_mq_hw_ctx *hctx, busy_iter_fn *fn,
void *priv);
-void blk_mq_freeze_queue(struct request_queue *q);
-void blk_mq_unfreeze_queue(struct request_queue *q);

/*
* Driver command data is immediately after the request. So subtract request
--
2.2.1

From 1d7575101ddc8dd4275a614c8679499dff2bdc60 Mon Sep 17 00:00:00 2001
From: Sedat Dilek <sedat.dilek@xxxxxxxxx>
Date: Thu, 1 Jan 2015 13:18:06 +0100
Subject: [PATCH] blk-mq: Export blk_mq_freeze_queue() function

The revert of "blk-mq: export blk_mq_freeze_queue and blk_mq_unfreeze_queue"
requires this missing export.

This patch is on top of next-20141231 with block-loop-mq-v3 and
"blk-mq: Export freeze/unfreeze functions" from block.git#for-linus.

CC: Ming Lei <ming.lei@xxxxxxxxxxxxx>
Signed-off-by: Sedat Dilek <sedat.dilek@xxxxxxxxx>
---
block/blk-mq.c | 1 +
include/linux/blk-mq.h | 1 +
2 files changed, 2 insertions(+)

diff --git a/block/blk-mq.c b/block/blk-mq.c
index 032e435..04caf9f 100644
--- a/block/blk-mq.c
+++ b/block/blk-mq.c
@@ -136,6 +136,7 @@ void blk_mq_freeze_queue(struct request_queue *q)
blk_mq_freeze_queue_start(q);
blk_mq_freeze_queue_wait(q);
}
+EXPORT_SYMBOL_GPL(blk_mq_freeze_queue);

void blk_mq_unfreeze_queue(struct request_queue *q)
{
diff --git a/include/linux/blk-mq.h b/include/linux/blk-mq.h
index 3b43f50..5b6500c 100644
--- a/include/linux/blk-mq.h
+++ b/include/linux/blk-mq.h
@@ -212,6 +212,7 @@ void blk_mq_start_stopped_hw_queues(struct request_queue *q, bool async);
void blk_mq_delay_queue(struct blk_mq_hw_ctx *hctx, unsigned long msecs);
void blk_mq_tag_busy_iter(struct blk_mq_hw_ctx *hctx, busy_iter_fn *fn,
void *priv);
+void blk_mq_freeze_queue(struct request_queue *q);
void blk_mq_unfreeze_queue(struct request_queue *q);
void blk_mq_freeze_queue_start(struct request_queue *q);

--
2.2.1