Messages in this thread Patches in this message | | | Date | Thu, 1 Jan 2015 16:14:21 +0100 | Subject | Re: [PATCH v3 0/5] block: loop: convert to blk-mq | From | Sedat Dilek <> |
| |
On Thu, Jan 1, 2015 at 1:29 AM, Ming Lei <tom.leiming@gmail.com> 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@gmail.com@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@aivazian.fsnet.co.uk>, 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@qualcomm.com> [ 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@redhat.com [ 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[unhandled content-type:application/octet-stream]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@gmail.com@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@gmail.com@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@gmail.com@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@gmail.com> 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@canonical.com> Signed-off-by: Sedat Dilek <sedat.dilek@gmail.com> --- 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@gmail.com> 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@canonical.com> Signed-off-by: Sedat Dilek <sedat.dilek@gmail.com> --- 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
| |