06 Jan, 2012

2 commits

  • Use semaphores to sync buffers across rings in the CS
    ioctl. Add a reloc flag to allow userspace to skip
    sync for buffers.

    agd5f: port to latest CS ioctl changes.

    v2: add ring lock/unlock to make sure changes hit the ring.

    Signed-off-by: Christian König
    Signed-off-by: Alex Deucher
    Signed-off-by: Dave Airlie

    Christian König
     
  • Virtual address space are per drm client (opener of /dev/drm).
    Client are in charge of virtual address space, they need to
    map bo into it by calling DRM_RADEON_GEM_VA ioctl.

    First 16M of virtual address space is reserved by the kernel.

    Once using 2 level page table we should be able to have a small
    vram memory footprint for each pt (there would be one pt for all
    gart, one for all vram and then one first level for each virtual
    address space).

    Plan include using the sub allocator for a common vm page table
    area and using memcpy to copy vm page table in & out. Or use
    a gart object and copy things in & out using dma.

    v2: agd5f fixes:
    - Add vram base offset for vram pages. The GPU physical address of a
    vram page is FB_OFFSET + page offset. FB_OFFSET is 0 on discrete
    cards and the physical bus address of the stolen memory on
    integrated chips.
    - VM_CONTEXT1_PROTECTION_FAULT_DEFAULT_ADDR covers all vmid's >= 1

    v3: agd5f:
    - integrate with the semaphore/multi-ring stuff

    v4:
    - rebase on top ttm dma & multi-ring stuff
    - userspace is now in charge of the address space
    - no more specific cs vm ioctl, instead cs ioctl has a new
    chunk

    v5:
    - properly handle mem == NULL case from move_notify callback
    - fix the vm cleanup path

    v6:
    - fix update of page table to only happen on valid mem placement

    v7:
    - add tlb flush for each vm context
    - add flags to define mapping property (readable, writeable, snooped)
    - make ring id implicit from ib->fence->ring, up to each asic callback
    to then do ring specific scheduling if vm ib scheduling function

    v8:
    - add query for ib limit and kernel reserved virtual space
    - rename vm->size to max_pfn (maximum number of page)
    - update gem_va ioctl to also allow unmap operation
    - bump kernel version to allow userspace to query for vm support

    v9:
    - rebuild page table only when bind and incrementaly depending
    on bo referenced by cs and that have been moved
    - allow virtual address space to grow
    - use sa allocator for vram page table
    - return invalid when querying vm limit on non cayman GPU
    - dump vm fault register on lockup

    v10: agd5f:
    - Move the vm schedule_ib callback to a standalone function, remove
    the callback and use the existing ib_execute callback for VM IBs.

    v11:
    - rebase on top of lastest Linus

    v12: agd5f:
    - remove spurious backslash
    - set IB vm_id to 0 in radeon_ib_get()

    v13: agd5f:
    - fix handling of RADEON_CHUNK_ID_FLAGS

    v14:
    - fix va destruction
    - fix suspend resume
    - forbid bo to have several different va in same vm

    v15:
    - rebase

    v16:
    - cleanup left over of vm init/fini

    v17: agd5f:
    - cs checker

    v18: agd5f:
    - reworks the CS ioctl to better support multiple rings and
    VM. Rather than adding a new chunk id for VM, just re-use the
    IB chunk id and add a new flags for VM mode. Also define additional
    dwords for the flags chunk id to define the what ring we want to use
    (gfx, compute, uvd, etc.) and the priority.

    v19:
    - fix cs fini in weird case of no ib
    - semi working flush fix for ni
    - rebase on top of sa allocator changes

    v20: agd5f:
    - further CS ioctl cleanups from Christian's comments

    v21: agd5f:
    - integrate CS checker improvements

    v22: agd5f:
    - final cleanups for release, only allow VM CS on cayman

    Signed-off-by: Jerome Glisse
    Signed-off-by: Alex Deucher
    Signed-off-by: Dave Airlie

    Jerome Glisse
     

05 Jan, 2012

1 commit

  • In cases where the scanout hw is sufficiently similar between "overlay"
    and traditional crtc layers, it might be convenient to allow the driver
    to create internal drm_plane helper objects used by the drm_crtc
    implementation, rather than duplicate code between the plane and crtc.
    A private plane is not exposed to userspace.

    Signed-off-by: Rob Clark
    Signed-off-by: Dave Airlie

    Rob Clark
     

04 Jan, 2012

2 commits

  • These registers are automatically incremented by the hardware during
    transform feedback to track where the next streamed vertex output
    should go. Unlike the previous generation, which had a packet for
    setting the corresponding registers to a defined value, gen7 only has
    MI_LOAD_REGISTER_IMM to do so. That's a secure packet (since it loads
    an arbitrary register), so we need to do it from the kernel, and it
    needs to be settable atomically with the batchbuffer execution so that
    two clients doing transform feedback don't stomp on each others'
    state.

    Instead of building a more complicated interface involcing setting the
    registers to a specific value, just set them to 0 when asked and
    userland can tweak its pointers accordingly.

    Signed-off-by: Eric Anholt
    Reviewed-by: Eugeni Dodonov
    Reviewed-by: Kenneth Graunke
    Signed-off-by: Keith Packard

    Eric Anholt
     
  • Add new ioctls for getting and setting the current destination color
    key. This allows for simple overlay display control by matching a color
    key value in the primary plane before blending the overlay on top.

    v2: remove unnecessary mutex acquire/release around reg accesses
    v3: add support for full color key management
    v4: fix copy & paste bug in snb_get_colorkey
    don't bother checking min/max values against docs as the docs are likely
    wrong (how could we handle 10bpc surface formats?)

    Reviewed-by: Daniel Vetter
    Signed-off-by: Jesse Barnes

    Jesse Barnes
     

29 Dec, 2011

2 commits

  • This patch is hdmi display support for exynos drm driver.

    There is already v4l2 based exynos hdmi driver in drivers/media/video/s5p-tv
    and some low level code is already in s5p-tv and even headers for register
    define are almost same. but in this patch, we decide not to consider separated
    common code with s5p-tv.

    Exynos HDMI is composed of 5 blocks, mixer, vp, hdmi, hdmiphy and ddc.

    1. mixer. The piece of hardware responsible for mixing and blending multiple
    data inputs before passing it to an output device. The mixer is capable of
    handling up to three image layers. One is the output of VP. Other two are
    images in RGB format. The blending factor, and layers' priority are controlled
    by mixer's registers. The output is passed to HDMI.

    2. vp (video processor). It is used for processing of NV12/NV21 data. An image
    stored in RAM is accessed by DMA. The output in YCbCr444 format is send to
    mixer.

    3. hdmi. The piece of HW responsible for generation of HDMI packets. It takes
    pixel data from mixer and transforms it into data frames. The output is send
    to HDMIPHY interface.

    4. hdmiphy. Physical interface for HDMI. Its duties are sending HDMI packets to
    HDMI connector. Basically, it contains a PLL that produces source clock for
    mixer, vp and hdmi.

    5. ddc (display data channel). It is dedicated i2c channel to exchange display
    information as edid with display monitor.

    With plane support, exynos hdmi driver fully supports two mixer layes and vp
    layer. Also vp layer supports multi buffer plane pixel formats having non
    contigus memory spaces.

    In exynos drm driver, common drm_hdmi driver to interface with drm framework
    has opertion pointers for mixer and hdmi. this drm_hdmi driver is registered as
    sub driver of exynos_drm. hdmi has hdmiphy and ddc i2c clients and controls
    them. mixer controls all overlay layers in both mixer and vp.

    Vblank interrupts for hdmi are handled by mixer internally because drm
    framework cannot support multiple irq id. And pipe number is used to check
    which display device irq happens.

    History
    v2: this version
    - drm plane feature support to handle overlay layers.
    - multi buffer plane pixel format support for vp layer.
    - vp layer support

    RFCv1: original
    - at https://lkml.org/lkml/2011/11/4/164

    Signed-off-by: Seung-Woo Kim
    Signed-off-by: Inki Dae
    Signed-off-by: Joonyoung Shim
    Signed-off-by: Kyungmin Park

    Seung-Woo Kim
     
  • Multi buffer plane pixel format has seperated memory spaces for each
    plane. For example, NV12M has Y plane and CbCr plane and these are in
    non contiguous memory region. Compared with NV12, NV12M's memory shape
    is like following.
    NV12 : ______(Y)(CbCr)_______
    NV12M : __(Y)_ ..... _(CbCr)__

    Signed-off-by: Seung-Woo Kim
    Signed-off-by: Inki Dae
    Signed-off-by: Kyungmin Park

    Seung-Woo Kim
     

22 Dec, 2011

6 commits


21 Dec, 2011

3 commits


20 Dec, 2011

6 commits


19 Dec, 2011

1 commit

  • * git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi-rc-fixes-2.6: (22 commits)
    [SCSI] fcoe: fix fcoe in a DCB environment by adding DCB notifiers to set skb priority
    [SCSI] bnx2i: Fixed kernel panic caused by unprotected task->sc->request deref
    [SCSI] qla4xxx: check for failed conn setup
    [SCSI] qla4xxx: a small loop fix
    [SCSI] qla4xxx: fix flash/ddb support
    [SCSI] zfcp: return early from slave_destroy if slave_alloc returned early
    [SCSI] fcoe: Fix preempt count leak in fcoe_filter_frames()
    [SCSI] qla2xxx: Update version number to 8.03.07.12-k.
    [SCSI] qla2xxx: Submit all chained IOCBs for passthrough commands on request queue 0.
    [SCSI] qla2xxx: Correct fc_host port_state display.
    [SCSI] qla2xxx: Disable generating pause frames when firmware hang detected for ISP82xx.
    [SCSI] qla2xxx: Clear mailbox busy flag during premature mailbox completion for ISP82xx.
    [SCSI] qla2xxx: Encapsulate prematurely completing mailbox commands during ISP82xx firmware hang.
    [SCSI] qla2xxx: Display IPE error message for ISP82xx.
    [SCSI] qla2xxx: Return the correct value for a mailbox command if 82xx is in reset recovery.
    [SCSI] qla2xxx: Enable Minidump by default with default capture mask 0x1f.
    [SCSI] qla2xxx: Stop unconditional completion of mailbox commands issued in interrupt mode during firmware hang.
    [SCSI] qla2xxx: Revert back the request queue mapping to request queue 0.
    [SCSI] qla2xxx: Don't call alloc_fw_dump for ISP82XX.
    [SCSI] qla2xxx: Check for SCSI status on underruns.
    ...

    Linus Torvalds
     

17 Dec, 2011

3 commits

  • * 'drm-intel-fixes' of git://people.freedesktop.org/~keithp/linux:
    drm/i915/dp: Dither down to 6bpc if it makes the mode fit
    drm/i915: enable semaphores on per-device defaults
    drm/i915: don't set unpin_work if vblank_get fails
    drm/i915: By default, enable RC6 on IVB and SNB when reasonable
    iommu: Export intel_iommu_enabled to signal when iommu is in use
    drm/i915/sdvo: Include LVDS panels for the IS_DIGITAL check
    drm/i915: prevent division by zero when asking for chipset power
    drm/i915: add PCH info to i915_capabilities
    drm/i915: set the right SDVO transcoder for CPT
    drm/i915: no-lvds quirk for ASUS AT5NM10T-I
    drm/i915: Treat pre-gen4 backlight duty cycle value consistently
    drm/i915: Hook up Ivybridge eDP
    drm/i915: add multi-threaded forcewake support

    Linus Torvalds
     
  • * 'for-linus' of git://git.kernel.dk/linux-block:
    block: don't kick empty queue in blk_drain_queue()
    block/swim3: Locking fixes
    loop: Fix discard_alignment default setting
    cfq-iosched: fix cfq_cic_link() race confition
    cfq-iosched: free cic_index if blkio_alloc_blkg_stats fails
    cciss: fix flush cache transfer length
    cciss: Add IRQF_SHARED back in for the non-MSI(X) interrupt handler
    loop: fix loop block driver discard and encryption comment
    block: initialize request_queue's numa node during

    Linus Torvalds
     
  • In i915 driver, we do not enable either rc6 or semaphores on SNB when dmar
    is enabled. The new 'intel_iommu_enabled' variable signals when the
    iommu code is in operation.

    Cc: Ted Phelps
    Cc: Peter
    Cc: Lukas Hejtmanek
    Cc: Andrew Lutomirski
    CC: Daniel Vetter
    Cc: Eugeni Dodonov
    Signed-off-by: Keith Packard

    Eugeni Dodonov
     

15 Dec, 2011

1 commit


14 Dec, 2011

1 commit


13 Dec, 2011

2 commits

  • Exactly like roundup_pow_of_two(1), the rounddown version was buggy for
    the case of a compile-time constant '1' argument. Probably because it
    originated from the same code, sharing history with the roundup version
    from before the bugfix (for that one, see commit 1a06a52ee1b0: "Fix
    roundup_pow_of_two(1)").

    However, unlike the roundup version, the fix for rounddown is to just
    remove the broken special case entirely. It's simply not needed - the
    generic code

    1UL << ilog2(n)

    does the right thing for the constant '1' argment too. The only reason
    roundup needed that special case was because rounding up does so by
    subtracting one from the argument (and then adding one to the result)
    causing the obvious problems with "ilog2(0)".

    But rounddown doesn't do any of that, since ilog2() naturally truncates
    (ie "rounds down") to the right rounded down value. And without the
    ilog2(0) case, there's no reason for the special case that had the wrong
    value.

    tl;dr: rounddown_pow_of_two(1) should be 1, not 0.

    Acked-by: Dmitry Torokhov
    Cc: stable@kernel.org
    Signed-off-by: Linus Torvalds

    Linus Torvalds
     
  • * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/cjb/mmc:
    mmc: core: Fix deadlock when the CONFIG_MMC_UNSAFE_RESUME is not defined
    mmc: sdhci-s3c: Remove old and misprototyped suspend operations
    mmc: tmio: fix clock gating on platforms with a .set_pwr() method
    mmc: sh_mmcif: fix clock gating on platforms with a .down_pwr() method
    mmc: core: Fix typo at mmc_card_sleep
    mmc: core: Fix power_off_notify during suspend
    mmc: core: Fix setting power notify state variable for non-eMMC
    mmc: core: Add quirk for long data read time
    mmc: Add module.h include to sdhci-cns3xxx.c
    mmc: mxcmmc: fix falling back to PIO
    mmc: omap_hsmmc: DMA unmap only once in case of MMC error

    Linus Torvalds
     

11 Dec, 2011

1 commit

  • Adds a quirk that sets the data read timeout to a fixed value instead
    of relying on the information in the CSD. The timeout value chosen
    is 300ms since that has proven enough for the problematic cards found,
    but could be increased if other cards require this.

    This patch also enables this quirk for certain Micron cards known to
    have this problem.

    Signed-off-by: Stefan Nilsson XK
    Signed-off-by: Ulf Hansson
    Acked-by: Linus Walleij
    Cc:
    Signed-off-by: Chris Ball

    Stefan Nilsson XK
     

10 Dec, 2011

1 commit

  • * git://git.kernel.org/pub/scm/linux/kernel/git/cmetcalf/linux-tile:
    arch/tile: use new generic {enable,disable}_percpu_irq() routines
    drivers/net/ethernet/tile: use skb_frag_page() API
    asm-generic/unistd.h: support new process_vm_{readv,write} syscalls
    arch/tile: fix double-free bug in homecache_free_pages()
    arch/tile: add a few #includes and an EXPORT to catch up with kernel changes.

    Linus Torvalds
     

09 Dec, 2011

1 commit


08 Dec, 2011

2 commits

  • * '3.2-rc-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/nab/target-pending: (25 commits)
    iscsi-target: Fix hex2bin warn_unused compile message
    target: Don't return an error if disabling unsupported features
    target/rd: fix or rewrite the copy routine
    target/rd: simplify the page/offset computation
    target: remove the unused se_dev_list
    target/file: walk properly over sg list
    target: remove unused struct fields
    target: Fix page length in emulated INQUIRY VPD page 86h
    target: Handle 0 correctly in transport_get_sectors_6()
    target: Don't return an error status for 0-length READ and WRITE
    iscsi-target: Use kmemdup rather than duplicating its implementation
    iscsi-target: Add missing F_BIT for iscsi_tm_rsp
    iscsi-target: Fix residual count hanlding + remove iscsi_cmd->residual_count
    target: Reject SCSI data overflow for fabrics using transport_generic_map_mem_to_cmd
    target: remove the unused t_task_pt_sgl and t_task_pt_sgl_num se_cmd fields
    target: remove the t_tasks_bidi se_cmd field
    target: remove the t_tasks_fua se_cmd field
    target: remove the se_ordered_node se_cmd field
    target: remove the se_obj_ptr and se_orig_obj_ptr se_cmd fields
    target: Drop config_item_name usage in fabric TFO->free_wwn()
    ...

    Linus Torvalds
     
  • * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs:
    fix apparmor dereferencing potentially freed dentry, sanitize __d_path() API

    Linus Torvalds
     

07 Dec, 2011

2 commits

  • __d_path() API is asking for trouble and in case of apparmor d_namespace_path()
    getting just that. The root cause is that when __d_path() misses the root
    it had been told to look for, it stores the location of the most remote ancestor
    in *root. Without grabbing references. Sure, at the moment of call it had
    been pinned down by what we have in *path. And if we raced with umount -l, we
    could have very well stopped at vfsmount/dentry that got freed as soon as
    prepend_path() dropped vfsmount_lock.

    It is safe to compare these pointers with pre-existing (and known to be still
    alive) vfsmount and dentry, as long as all we are asking is "is it the same
    address?". Dereferencing is not safe and apparmor ended up stepping into
    that. d_namespace_path() really wants to examine the place where we stopped,
    even if it's not connected to our namespace. As the result, it looked
    at ->d_sb->s_magic of a dentry that might've been already freed by that point.
    All other callers had been careful enough to avoid that, but it's really
    a bad interface - it invites that kind of trouble.

    The fix is fairly straightforward, even though it's bigger than I'd like:
    * prepend_path() root argument becomes const.
    * __d_path() is never called with NULL/NULL root. It was a kludge
    to start with. Instead, we have an explicit function - d_absolute_root().
    Same as __d_path(), except that it doesn't get root passed and stops where
    it stops. apparmor and tomoyo are using it.
    * __d_path() returns NULL on path outside of root. The main
    caller is show_mountinfo() and that's precisely what we pass root for - to
    skip those outside chroot jail. Those who don't want that can (and do)
    use d_path().
    * __d_path() root argument becomes const. Everyone agrees, I hope.
    * apparmor does *NOT* try to use __d_path() or any of its variants
    when it sees that path->mnt is an internal vfsmount. In that case it's
    definitely not mounted anywhere and dentry_path() is exactly what we want
    there. Handling of sysctl()-triggered weirdness is moved to that place.
    * if apparmor is asked to do pathname relative to chroot jail
    and __d_path() tells it we it's not in that jail, the sucker just calls
    d_absolute_path() instead. That's the other remaining caller of __d_path(),
    BTW.
    * seq_path_root() does _NOT_ return -ENAMETOOLONG (it's stupid anyway -
    the normal seq_file logics will take care of growing the buffer and redoing
    the call of ->show() just fine). However, if it gets path not reachable
    from root, it returns SEQ_SKIP. The only caller adjusted (i.e. stopped
    ignoring the return value as it used to do).

    Reviewed-by: John Johansen
    ACKed-by: John Johansen
    Signed-off-by: Al Viro
    Cc: stable@vger.kernel.org

    Al Viro
     
  • * 'perf-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
    ftrace: Fix hash record accounting bug
    perf: Fix parsing of __print_flags() in TP_printk()
    jump_label: jump_label_inc may return before the code is patched
    ftrace: Remove force undef config value left for testing
    tracing: Restore system filter behavior
    tracing: fix event_subsystem ref counting

    Linus Torvalds
     

06 Dec, 2011

3 commits

  • Provide helper function to compute the kernel memory size needed
    for each buffer object. Move all the accounting inside ttm, simplifying
    driver and avoiding code duplication accross them.

    v2 fix accounting of ghost object, one would have thought that i
    would have run into the issue since a longtime but it seems
    ghost object are rare when you have plenty of vram ;)

    Signed-off-by: Jerome Glisse
    Reviewed-by: Thomas Hellstrom

    Jerome Glisse
     
  • Move dma data to a superset ttm_dma_tt structure which herit
    from ttm_tt. This allow driver that don't use dma functionalities
    to not have to waste memory for it.

    V2 Rebase on top of no memory account changes (where/when is my
    delorean when i need it ?)
    V3 Make sure page list is initialized empty
    V4 typo/syntax fixes

    Signed-off-by: Jerome Glisse
    Reviewed-by: Thomas Hellstrom

    Jerome Glisse
     
  • In TTM world the pages for the graphic drivers are kept in three different
    pools: write combined, uncached, and cached (write-back). When the pages
    are used by the graphic driver the graphic adapter via its built in MMU
    (or AGP) programs these pages in. The programming requires the virtual address
    (from the graphic adapter perspective) and the physical address (either System RAM
    or the memory on the card) which is obtained using the pci_map_* calls (which does the
    virtual to physical - or bus address translation). During the graphic application's
    "life" those pages can be shuffled around, swapped out to disk, moved from the
    VRAM to System RAM or vice-versa. This all works with the existing TTM pool code
    - except when we want to use the software IOTLB (SWIOTLB) code to "map" the physical
    addresses to the graphic adapter MMU. We end up programming the bounce buffer's
    physical address instead of the TTM pool memory's and get a non-worky driver.
    There are two solutions:
    1) using the DMA API to allocate pages that are screened by the DMA API, or
    2) using the pci_sync_* calls to copy the pages from the bounce-buffer and back.

    This patch fixes the issue by allocating pages using the DMA API. The second
    is a viable option - but it has performance drawbacks and potential correctness
    issues - think of the write cache page being bounced (SWIOTLB->TTM), the
    WC is set on the TTM page and the copy from SWIOTLB not making it to the TTM
    page until the page has been recycled in the pool (and used by another application).

    The bounce buffer does not get activated often - only in cases where we have
    a 32-bit capable card and we want to use a page that is allocated above the
    4GB limit. The bounce buffer offers the solution of copying the contents
    of that 4GB page to an location below 4GB and then back when the operation has been
    completed (or vice-versa). This is done by using the 'pci_sync_*' calls.
    Note: If you look carefully enough in the existing TTM page pool code you will
    notice the GFP_DMA32 flag is used - which should guarantee that the provided page
    is under 4GB. It certainly is the case, except this gets ignored in two cases:
    - If user specifies 'swiotlb=force' which bounces _every_ page.
    - If user is using a Xen's PV Linux guest (which uses the SWIOTLB and the
    underlaying PFN's aren't necessarily under 4GB).

    To not have this extra copying done the other option is to allocate the pages
    using the DMA API so that there is not need to map the page and perform the
    expensive 'pci_sync_*' calls.

    This DMA API capable TTM pool requires for this the 'struct device' to
    properly call the DMA API. It also has to track the virtual and bus address of
    the page being handed out in case it ends up being swapped out or de-allocated -
    to make sure it is de-allocated using the proper's 'struct device'.

    Implementation wise the code keeps two lists: one that is attached to the
    'struct device' (via the dev->dma_pools list) and a global one to be used when
    the 'struct device' is unavailable (think shrinker code). The global list can
    iterate over all of the 'struct device' and its associated dma_pool. The list
    in dev->dma_pools can only iterate the device's dma_pool.
    /[struct device_pool]\
    /---------------------------------------------------| dev |
    / +-------| dma_pool |
    /-----+------\ / \--------------------/
    |struct device| /-->[struct dma_pool for WC]</ /[struct device_pool]\
    | dma_pools +----+ /-| dev |
    | ... | \--->[struct dma_pool for uncached]
    [v1: Using swiotlb_nr_tbl instead of swiotlb_enabled]
    [v2: Major overhaul - added 'inuse_list' to seperate used from inuse and reorder
    the order of lists to get better performance.]
    [v3: Added comments/and some logic based on review, Added Jerome tag]
    [v4: rebase on top of ttm_tt & ttm_backend merge]
    [v5: rebase on top of ttm memory accounting overhaul]
    [v6: New rebase on top of more memory accouting changes]
    [v7: well rebase on top of no memory accounting changes]
    [v8: make sure pages list is initialized empty]
    [v9: calll ttm_mem_global_free_page in unpopulate for accurate accountg]
    Signed-off-by: Konrad Rzeszutek Wilk
    Reviewed-by: Jerome Glisse
    Acked-by: Thomas Hellstrom

    Konrad Rzeszutek Wilk