1. 06 7月, 2006 14 次提交
  2. 05 7月, 2006 6 次提交
    • L
      Merge master.kernel.org:/pub/scm/linux/kernel/git/davej/cpufreq · ca78f6ba
      Linus Torvalds 提交于
      * master.kernel.org:/pub/scm/linux/kernel/git/davej/cpufreq:
        Move workqueue exports to where the functions are defined.
        [CPUFREQ] Misc cleanups in ondemand.
        [CPUFREQ] Make ondemand sampling per CPU and remove the mutex usage in sampling path.
        [CPUFREQ] Add queue_delayed_work_on() interface for workqueues.
        [CPUFREQ] Remove slowdown from ondemand sampling path.
      ca78f6ba
    • L
      Fix up headers_install wrt devfs removal · 7ad7153b
      Linus Torvalds 提交于
      No devfs_fs.h header any more..
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      7ad7153b
    • L
      Merge git://git.infradead.org/hdrinstall-2.6 · 6fa0cb11
      Linus Torvalds 提交于
      * git://git.infradead.org/hdrinstall-2.6:
        Remove export of include/linux/isdn/tpam.h
        Remove <linux/i2c-id.h> and <linux/i2c-algo-ite.h> from userspace export
        Restrict headers exported to userspace for SPARC and SPARC64
        Add empty Kbuild files for 'make headers_install' in remaining arches.
        Add Kbuild file for Alpha 'make headers_install'
        Add Kbuild file for SPARC 'make headers_install'
        Add Kbuild file for IA64 'make headers_install'
        Add Kbuild file for S390 'make headers_install'
        Add Kbuild file for i386 'make headers_install'
        Add Kbuild file for x86_64 'make headers_install'
        Add Kbuild file for PowerPC 'make headers_install'
        Add generic Kbuild files for 'make headers_install'
        Basic implementation of 'make headers_check'
        Basic implementation of 'make headers_install'
      6fa0cb11
    • A
      [PATCH] fix AB-BA deadlock inversion at cs46xx_dsp_remove_scb · c6482dde
      Arjan van de Ven 提交于
      There is a code sequence where the locking is substream->self_group.lock
      -> ins->scbs[index].lock
      
      substream->self_group.lock is interrupt safe, and taken from irq context
      as well (trace is snipped for brevity)
      
      so what can happen is
      
         cpu 0                   	cpu 1
         user context			user context
      
      				take ins->scbs[index].lock without disabling interrupts
      
         get substream->self_group.lock (irqsafe)
         try to get ins->scbs[index].lock (spins)
      
      				interrupt happens
      				try to get substream->self_group.lock (spins)
      
      which is an obvious AB-BA deadlock
      
      fix is to just take the lock with _irqsafe
      Signed-off-by: NArjan van de Ven <arjan@linux.intel.com>
      Cc: Jaroslav Kysela <perex@suse.cz>
      Acked-by: NTakashi Iwai <tiwai@suse.de>
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      c6482dde
    • Z
      [PATCH] mthca: initialize send and receive queue locks separately · a46f9484
      Zach Brown 提交于
      mthca: initialize send and receive queue locks separately
      
      lockdep identifies a lock by the call site of its initialization.  By
      initializing the send and receive queue locks in mthca_wq_init() we confuse
      lockdep.  It warns that that the ordered acquiry of both locks in
      mthca_modify_qp() is recursive acquiry of one lock:
      
        =============================================
        [ INFO: possible recursive locking detected ]
        ---------------------------------------------
        modprobe/1192 is trying to acquire lock:
         (&wq->lock){....}, at: [<f892b4db>] mthca_modify_qp+0x60/0xa7b [ib_mthca]
        but task is already holding lock:
         (&wq->lock){....}, at: [<f892b4ce>] mthca_modify_qp+0x53/0xa7b [ib_mthca]
      
      Initializing the locks separately in mthca_alloc_qp_common() stops the
      warning and will let lockdep enforce proper ordering on paths that acquire
      both locks.
      Signed-off-by: NZach Brown <zach.brown@oracle.com>
      Cc: Roland Dreier <rolandd@cisco.com>
      Cc: Arjan van de Ven <arjan@linux.intel.com>
      Cc: Ingo Molnar <mingo@elte.hu>
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      a46f9484
    • Y
      [PATCH] Fix copying of pgdat array on each node for ia64 memory hotplug · dd8041f1
      Yasunori Goto 提交于
      I found a bug in memory hot-add code for ia64.
      
      IA64's code has copies of pgdat's array on each node to reduce memory
      access over crossing node.  This array is used by NODE_DATA() macro.  When
      new node is hot-added, this pgdat's array should be updated and copied on
      new node too.
      
      However, I used for_each_online_node() in scatter_node_data() to copy
      it. This meant its array is not copied on new node.
      Because initialization of structures for new node was halfway,
      so online_node_map couldn't be set at this time.
      
      To copy arrays on new node, I changed it to check value of pgdat_list[]
      which is source array of copies.  I tested this patch with my Memory Hotadd
      emulation on Tiger4.  This patch is for 2.6.17-git20.
      Signed-off-by: NYasunori Goto <y-goto@jp.fujitsu.com>
      Cc: "Luck, Tony" <tony.luck@intel.com>
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      dd8041f1
  3. 04 7月, 2006 20 次提交
    • G
      [PATCH] uclinux: fix proc_task()/get_proc-task() naming · 31304c90
      Greg Ungerer 提交于
      Fix changed name of proc_task() to get_proc_task().
      Signed-off-by: NGreg Ungerer <gerg@uclinux.org>
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      31304c90
    • L
      Merge branch 'release' of git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux-acpi-2.6 · e82ca043
      Linus Torvalds 提交于
      * 'release' of git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux-acpi-2.6: (44 commits)
        ACPI: remove function tracing macros from drivers/acpi/*.c
        ACPI: add support for Smart Battery
        ACPI: handle battery notify event on broken BIOS
        ACPI: handle AC notify event on broken BIOS
        ACPI: asus_acpi: add S1N WLED control
        ACPI: asus_acpi: correct M6N/M6R display nodes
        ACPI: asus_acpi: add S1N WLED control
        ACPI: asus_acpi: rework model detection
        ACPI: asus_acpi: support L5D
        ACPI: asus_acpi: handle internal Bluetooth / support W5A
        ACPI: asus_acpi: support A4G
        ACPI: asus_acpi: support W3400N
        ACPI: asus_acpi: LED display support
        ACPI: asus_acpi: support A3G
        ACPI: asus_acpi: misc cleanups
        ACPI: video: Remove unneeded acpi_handle from driver.
        ACPI: thermal: Remove unneeded acpi_handle from driver.
        ACPI: power: Remove unneeded acpi_handle from driver.
        ACPI: pci_root: Remove unneeded acpi_handle from driver.
        ACPI: pci_link: Remove unneeded acpi_handle from driver.
        ...
      e82ca043
    • L
      Merge branch 'devel' of master.kernel.org:/home/rmk/linux-2.6-serial · 075395d2
      Linus Torvalds 提交于
      * 'devel' of master.kernel.org:/home/rmk/linux-2.6-serial:
        [SERIAL] Ensure 8250_pci quirks are not marked __devinit
        [SERIAL] Convert fifosize to an unsigned int
      075395d2
    • L
      Merge master.kernel.org:/home/rmk/linux-2.6-arm · 060ec6f2
      Linus Torvalds 提交于
      * master.kernel.org:/home/rmk/linux-2.6-arm:
        [ARM] Fix lh7a40x_udc.c
        [ARM] Fix warning in consistent.c
        [ARM] Fix warnings in arch/arm/kernel/setup.c
        [ARM] Fix ecard.c resource warnings.
        [ARM] Fix ISA IRQ resources
        [ARM] Fix bad asm instruction in proc-arm925.S
        [ARM] More missing proc-macros.S includes
        [ARM] 3708/2: fix SMP build after section ioremap changes
      060ec6f2
    • L
      Merge git://git.infradead.org/mtd-2.6 · 0d178214
      Linus Torvalds 提交于
      * git://git.infradead.org/mtd-2.6:
        [JFFS2][XATTR] Fix memory leak in POSIX-ACL support
        fs/jffs2/: make 2 functions static
        [MTD] NAND: Fix broken sharpsl driver
        [JFFS2][XATTR] Fix xd->refcnt race condition
        MTD: kernel-doc fixes + additions
        MTD: fix all kernel-doc warnings
        [MTD] DOC: Fixup read functions and do a little cleanup
      0d178214
    • L
      Merge master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6 · 67ab33db
      Linus Torvalds 提交于
      * master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6: (27 commits)
        [Bluetooth] Add RFCOMM role switch support
        [Bluetooth] Allow disabling of credit based flow control
        [Bluetooth] Small cleanup of the L2CAP source code
        [Bluetooth] Use real devices for host controllers
        [Bluetooth] Add platform device for virtual and serial devices
        [Bluetooth] Add automatic sniff mode support
        [Bluetooth] Correct SCO buffer size on request
        [Bluetooth] Add suspend/resume support to the HCI USB driver
        [Bluetooth] Use raw mode for the Frontline sniffer device
        [BRIDGE]: br_dump_ifinfo index fix
        [ATM]: add+use poison defines
        [NET]: add+use poison defines
        [IOAT]: fix kernel-doc in source files
        [IOAT]: fix header file kernel-doc
        [TG3]: Add ipv6 TSO feature
        [IPV6]: Fix ipv6 GSO payload length
        [TIPC] Fixed sk_buff panic caused by tipc_link_bundle_buf (REVISED)
        [NET]: Verify gso_type too in gso_segment
        [IPVS]: Add sysctl documentation
        [ROSE]: Try all routes when establishing a ROSE connections.
        ...
      67ab33db
    • L
      Merge master.kernel.org:/pub/scm/linux/kernel/git/jejb/scsi-misc-2.6 · f7d57e42
      Linus Torvalds 提交于
      * master.kernel.org:/pub/scm/linux/kernel/git/jejb/scsi-misc-2.6: (57 commits)
        [SCSI] fix error handling in scsi_io_completion
        [SCSI] qla1280: fix section mismatch warnings
        [SCSI] mptsas: eliminate ghost devices
        [SCSI] qla2xxx: make some more functions static
        [SCSI] small whitespace cleanup for qlogic driver
        [SCSI] mptbase: mpt_interrupt should return IRQ_NONE
        [SCSI] mptsas: make two functions static
        [SCSI] sg.c: Fix bad error handling in
        [SCSI] 53c700: fix breakage caused by the autosense update
        [SCSI] iscsi: add async notification of session events
        [SCSI] iscsi: pass target nr to session creation
        [SCSI] iscsi: break up session creation into two stages
        [SCSI] iscsi: rm channel usage from iscsi
        [SCSI] iscsi: fix session refcouting
        [SCSI] iscsi: convert iscsi_tcp to new set/get param fns
        [SCSI] iscsi: convert iser to new set/get param fns
        [SCSI] iscsi: fixup set/get param functions
        [SCSI] iscsi: add target discvery event to transport class
        [SCSI] st: remove unused st_buffer.in_use
        [SCSI] atp870u: reduce huge stack usage
        ...
      f7d57e42
    • L
      Merge git://git.kernel.org/pub/scm/linux/kernel/git/sam/kbuild · 51bece91
      Linus Torvalds 提交于
      * git://git.kernel.org/pub/scm/linux/kernel/git/sam/kbuild:
        kbuild: introduce utsrelease.h
        kbuild: explicit turn off gcc stack-protector
      51bece91
    • A
      [PATCH] revert "kthread: convert stop_machine into a kthread" · d8cb7c1d
      Andrew Morton 提交于
      Jiri reports that the stop_machin kthread conversion caused his machine to
      hang when suspending.  Hyperthreading is apparently involved.
      
      I don't see why that would be and I can't reproduce it.  Revert to the 2.6.17
      code.
      
      Cc: "Serge E. Hallyn" <serue@us.ibm.com>
      Cc: Jiri Slaby <jirislaby@gmail.com>
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      d8cb7c1d
    • H
      [PATCH] zfcp: fix incorrect usage of fsf_req_list_lock · 38c54ee8
      Heiko Carstens 提交于
        =================================
        [ INFO: inconsistent lock state ]
        ---------------------------------
        inconsistent {in-hardirq-W} -> {hardirq-on-W} usage.
        swapper/0 [HC0[0]:SC1[1]:HE1:SE0] takes:
         (&adapter->fsf_req_list_lock){++..}, at: [<0000000000274486>] zfcp_qdio_reqid_check+0x46/0x178
        {in-hardirq-W} state was registered at:
          [<000000000005fb0c>] __lock_acquire+0xad8/0xed0
          [<00000000000604ae>] lock_acquire+0x9a/0xc8
          [<000000000035a326>] _spin_lock+0x4e/0x68
          [<0000000000274486>] zfcp_qdio_reqid_check+0x46/0x178
          [<000000000027469e>] zfcp_qdio_response_handler+0xe6/0x430
          [<0000000000219dd4>] tiqdio_thinint_handler+0xd20/0x213c
          [<000000000020229a>] do_adapter_IO+0xb2/0xc0
          [<0000000000206f32>] do_IRQ+0x136/0x16c
          [<0000000000020462>] io_no_vtime+0x16/0x1c
          [<0000000000019432>] cpu_idle+0x222/0x250
        irq event stamp: 129220
        hardirqs last  enabled at (129220): [<00000000000411e6>] tasklet_hi_action+0x5a/0x19c
        hardirqs last disabled at (129219): [<00000000000411c0>] tasklet_hi_action+0x34/0x19c
        softirqs last  enabled at (129212): [<0000000000040b62>] __do_softirq+0x13a/0x180
        softirqs last disabled at (129217): [<000000000001fd58>] do_softirq+0xec/0xf0
      
        other info that might help us debug this:
        no locks held by swapper/0.
      
        stack backtrace:
        00000000012bb670 0000000000000002 0000000000000000 00000000012bb780
               00000000012bb6e8 0000000000399122 0000000000399122 0000000000016b0a
               0000000000000000 0000000000000000 0000000000000000 00000000004660e8
               0000000000000000 000000000000000d 00000000012bb6e0 00000000012bb758
               0000000000368b90 0000000000016b0a 00000000012bb6e0 00000000012bb730
        Call Trace:
        ([<0000000000016a26>] show_trace+0x76/0xdc)
         [<0000000000016b2c>] show_stack+0xa0/0xd0
         [<0000000000016b8a>] dump_stack+0x2e/0x3c
         [<000000000005e3da>] print_usage_bug+0x27e/0x290
         [<000000000005ea9c>] mark_lock+0x6b0/0x6c0
         [<000000000005f33e>] __lock_acquire+0x30a/0xed0
         [<00000000000604ae>] lock_acquire+0x9a/0xc8
         [<000000000035a326>] _spin_lock+0x4e/0x68
         [<0000000000274486>] zfcp_qdio_reqid_check+0x46/0x178
         [<000000000027469e>] zfcp_qdio_response_handler+0xe6/0x430
         [<0000000000217bd2>] tiqdio_tl+0xd02/0x2120
         [<000000000004123a>] tasklet_hi_action+0xae/0x19c
         [<0000000000040ae4>] __do_softirq+0xbc/0x180
         [<000000000001fd58>] do_softirq+0xec/0xf0
         [<0000000000040c38>] irq_exit+0x90/0xa8
         [<0000000000206f40>] do_IRQ+0x144/0x16c
         [<0000000000020462>] io_no_vtime+0x16/0x1c
         [<0000000000019432>] cpu_idle+0x222/0x250
        ([<0000000000019416>] cpu_idle+0x206/0x250)
         [<000000000001405a>] rest_init+0x5a/0x68
         [<0000000000536998>] start_kernel+0x39c/0x3dc
         [<0000000000013046>] _stext+0x46/0x1000
      
      Fix incorrect usage of fsf_req_list_lock. It's used in tasklet context
      (irqs on) as well as in irq context. Therefore use the spin_lock_irqsave
      variant to avoid deadlocks.
      Acked-by: NAndreas Herrmann <aherrman@de.ibm.com>
      Signed-off-by: NHeiko Carstens <heiko.carstens@de.ibm.com>
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      38c54ee8
    • H
      [PATCH] zfcp: fix incorrect usage of erp_lock · 9f09c548
      Heiko Carstens 提交于
        =================================
        [ INFO: inconsistent lock state ]
        ---------------------------------
        inconsistent {hardirq-on-W} -> {in-hardirq-W} usage.
        swapper/0 [HC1[1]:SC0[0]:HE0:SE1] takes:
         (&adapter->erp_lock){+-..}, at: [<000000000026c7f8>] zfcp_erp_async_handler+0x3c/0x70
        {hardirq-on-W} state was registered at:
          [<000000000005f33e>] __lock_acquire+0x30a/0xed0
          [<00000000000604ae>] lock_acquire+0x9a/0xc8
          [<000000000035a7ae>] _write_lock+0x4e/0x68
          [<000000000026d822>] zfcp_erp_adapter_strategy_generic+0x286/0xd94
          [<000000000026fd72>] zfcp_erp_strategy_do_action+0x91e/0x1a94
          [<0000000000271a3a>] zfcp_erp_thread+0x21a/0x1568
          [<0000000000019096>] kernel_thread_starter+0x6/0xc
          [<0000000000019090>] kernel_thread_starter+0x0/0xc
        irq event stamp: 12078
        hardirqs last  enabled at (12077): [<0000000000019416>] cpu_idle+0x206/0x250
        hardirqs last disabled at (12078): [<0000000000020458>] io_no_vtime+0xc/0x1c
        softirqs last  enabled at (12072): [<0000000000040b62>] __do_softirq+0x13a/0x180
        softirqs last disabled at (12059): [<000000000001fd58>] do_softirq+0xec/0xf0
      
        other info that might help us debug this:
        no locks held by swapper/0.
      
        stack backtrace:
        00000000012bb648 0000000000000002 0000000000000000 00000000012bb758
               00000000012bb6c0 0000000000399122 0000000000399122 0000000000016b0a
               0000000000000000 0000000000000001 0000000000000000 00000000004660e8
               0000000000000000 000000000000000d 00000000012bb6b8 00000000012bb730
               0000000000368b90 0000000000016b0a 00000000012bb6b8 00000000012bb708
        Call Trace:
        ([<0000000000016a26>] show_trace+0x76/0xdc)
         [<0000000000016b2c>] show_stack+0xa0/0xd0
         [<0000000000016b8a>] dump_stack+0x2e/0x3c
         [<000000000005e3da>] print_usage_bug+0x27e/0x290
         [<000000000005e934>] mark_lock+0x548/0x6c0
         [<000000000005fb0c>] __lock_acquire+0xad8/0xed0
         [<00000000000604ae>] lock_acquire+0x9a/0xc8
         [<000000000035a662>] _write_lock_irqsave+0x62/0x80
         [<000000000026c7f8>] zfcp_erp_async_handler+0x3c/0x70
         [<0000000000279178>] zfcp_fsf_req_dispatch+0xd8/0x1fa8
         [<000000000027e538>] zfcp_fsf_req_complete+0x104/0xe4c
         [<0000000000274534>] zfcp_qdio_reqid_check+0xf4/0x178
         [<000000000027469e>] zfcp_qdio_response_handler+0xe6/0x430
         [<0000000000219dd4>] tiqdio_thinint_handler+0xd20/0x213c
         [<000000000020229a>] do_adapter_IO+0xb2/0xc0
         [<0000000000206f32>] do_IRQ+0x136/0x16c
         [<0000000000020462>] io_no_vtime+0x16/0x1c
         [<0000000000019432>] cpu_idle+0x222/0x250
        ([<0000000000019416>] cpu_idle+0x206/0x250)
         [<000000000001405a>] rest_init+0x5a/0x68
         [<0000000000536998>] start_kernel+0x39c/0x3dc
         [<0000000000013046>] _stext+0x46/0x1000
      
      Fix incorrect usage of erp_lock. Using the write_lock() variant is wrong,
      since this might lead to deadlocks.
      Acked-by: NAndreas Herrmann <aherrman@de.ibm.com>
      Signed-off-by: NHeiko Carstens <heiko.carstens@de.ibm.com>
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      9f09c548
    • O
      [PATCH] Fix modular cpuid.ko · b6a7c79a
      OGAWA Hirofumi 提交于
      With recent change, if CONFIG_HOTPLUG_CPU is disabled,
      register_cpu_notifier() is not exported.  And it breaked moduler msr/cpuid
      (msr.c was already fixed).
      
      We need to use register_hotcpu_notifier() now in module, instead of
      register_cpu_notifier().
      Signed-off-by: NOGAWA Hirofumi <hirofumi@mail.parknet.co.jp>
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      b6a7c79a
    • M
      [Bluetooth] Add RFCOMM role switch support · 300b9397
      Marcel Holtmann 提交于
      This patch adds the support for RFCOMM role switching before the
      connection is fully established.
      Signed-off-by: NMarcel Holtmann <marcel@holtmann.org>
      300b9397
    • M
      [Bluetooth] Allow disabling of credit based flow control · 7c2660b0
      Marcel Holtmann 提交于
      This patch adds the module parameter disable_cfc which can be used to
      disable the credit based flow control. The credit based flow control
      was introduced with the Bluetooth 1.1 specification and devices can
      negotiate its support, but for testing purpose it is helpful to allow
      disabling of it.
      Signed-off-by: NMarcel Holtmann <marcel@holtmann.org>
      7c2660b0
    • M
      [Bluetooth] Small cleanup of the L2CAP source code · 0139418c
      Marcel Holtmann 提交于
      This patch is a small cleanup of the L2CAP source code. It makes some
      coding style changes and moves some functions around to avoid forward
      declarations.
      Signed-off-by: NMarcel Holtmann <marcel@holtmann.org>
      0139418c
    • M
      [Bluetooth] Use real devices for host controllers · a91f2e39
      Marcel Holtmann 提交于
      This patch converts the Bluetooth class devices into real devices. The
      Bluetooth class is kept and the driver core provides the appropriate
      symlinks for backward compatibility.
      Signed-off-by: NMarcel Holtmann <marcel@holtmann.org>
      a91f2e39
    • M
      [Bluetooth] Add platform device for virtual and serial devices · 27d35284
      Marcel Holtmann 提交于
      This patch adds a generic Bluetooth platform device that can be used
      as parent device by virtual and serial devices.
      Signed-off-by: NMarcel Holtmann <marcel@holtmann.org>
      27d35284
    • M
      [Bluetooth] Add automatic sniff mode support · 04837f64
      Marcel Holtmann 提交于
      This patch introduces the automatic sniff mode feature. This allows
      the host to switch idle connections into sniff mode to safe power.
      Signed-off-by: NUlisses Furquim <ulissesf@gmail.com>
      Signed-off-by: NMarcel Holtmann <marcel@holtmann.org>
      04837f64
    • M
      [Bluetooth] Correct SCO buffer size on request · da1f5198
      Marcel Holtmann 提交于
      This patch introduces a quirk that allows the drivers to tell the host
      to correct the SCO buffer size values.
      Signed-off-by: NOlivier Galibert <galibert@pobox.com>
      Signed-off-by: NMarcel Holtmann <marcel@holtmann.org>
      da1f5198
    • M
      [Bluetooth] Add suspend/resume support to the HCI USB driver · dcdcf63e
      Marcel Holtmann 提交于
      This patch implements the suspend/resume methods for the HCI USB
      driver by killing all outstanding URBs on suspend, and re-issuing
      them on resume.
      Signed-off-by: NJohannes Berg <johannes@sipsolutions.net>
      Signed-off-by: NMarcel Holtmann <marcel@holtmann.org>
      dcdcf63e