* Re: [PATCH RFC 3/4] barriers: convert a control to a data dependency
From: Jason Wang @ 2019-01-07 6:50 UTC (permalink / raw)
To: Michael S. Tsirkin
Cc: Andrea Parri, linux-doc, Peter Zijlstra, Akira Yokosawa,
Will Deacon, virtualization, David Howells, linux-arch,
Jonathan Corbet, linux-sparse, Alan Stern, Matt Turner,
Paul E. McKenney, Daniel Lustig, Arnd Bergmann, Boqun Feng,
Nicholas Piggin, Ivan Kokshaysky, Luc Maranget, Richard Henderson,
Jade Alglave, netdev, linux-kernel, linux-alpha
In-Reply-To: <20190106231756-mutt-send-email-mst@kernel.org>
On 2019/1/7 下午12:23, Michael S. Tsirkin wrote:
> On Mon, Jan 07, 2019 at 11:58:23AM +0800, Jason Wang wrote:
>> On 2019/1/3 上午4:57, Michael S. Tsirkin wrote:
>>> It's not uncommon to have two access two unrelated memory locations in a
>>> specific order. At the moment one has to use a memory barrier for this.
>>>
>>> However, if the first access was a read and the second used an address
>>> depending on the first one we would have a data dependency and no
>>> barrier would be necessary.
>>>
>>> This adds a new interface: dependent_ptr_mb which does exactly this: it
>>> returns a pointer with a data dependency on the supplied value.
>>>
>>> Signed-off-by: Michael S. Tsirkin<mst@redhat.com>
>>> ---
>>> Documentation/memory-barriers.txt | 20 ++++++++++++++++++++
>>> arch/alpha/include/asm/barrier.h | 1 +
>>> include/asm-generic/barrier.h | 18 ++++++++++++++++++
>>> include/linux/compiler.h | 4 ++++
>>> 4 files changed, 43 insertions(+)
>>>
>>> diff --git a/Documentation/memory-barriers.txt b/Documentation/memory-barriers.txt
>>> index c1d913944ad8..9dbaa2e1dbf6 100644
>>> --- a/Documentation/memory-barriers.txt
>>> +++ b/Documentation/memory-barriers.txt
>>> @@ -691,6 +691,18 @@ case what's actually required is:
>>> p = READ_ONCE(b);
>>> }
>>> +Alternatively, a control dependency can be converted to a data dependency,
>>> +e.g.:
>>> +
>>> + q = READ_ONCE(a);
>>> + if (q) {
>>> + b = dependent_ptr_mb(b, q);
>>> + p = READ_ONCE(b);
>>> + }
>>> +
>>> +Note how the result of dependent_ptr_mb must be used with the following
>>> +accesses in order to have an effect.
>>> +
>>> However, stores are not speculated. This means that ordering -is- provided
>>> for load-store control dependencies, as in the following example:
>>> @@ -836,6 +848,12 @@ out-guess your code. More generally, although READ_ONCE() does force
>>> the compiler to actually emit code for a given load, it does not force
>>> the compiler to use the results.
>>> +Converting to a data dependency helps with this too:
>>> +
>>> + q = READ_ONCE(a);
>>> + b = dependent_ptr_mb(b, q);
>>> + WRITE_ONCE(b, 1);
>>> +
>>> In addition, control dependencies apply only to the then-clause and
>>> else-clause of the if-statement in question. In particular, it does
>>> not necessarily apply to code following the if-statement:
>>> @@ -875,6 +893,8 @@ to the CPU containing it. See the section on "Multicopy atomicity"
>>> for more information.
>>> +
>>> +
>>> In summary:
>>> (*) Control dependencies can order prior loads against later stores.
>>> diff --git a/arch/alpha/include/asm/barrier.h b/arch/alpha/include/asm/barrier.h
>>> index 92ec486a4f9e..b4934e8c551b 100644
>>> --- a/arch/alpha/include/asm/barrier.h
>>> +++ b/arch/alpha/include/asm/barrier.h
>>> @@ -59,6 +59,7 @@
>>> * as Alpha, "y" could be set to 3 and "x" to 0. Use rmb()
>>> * in cases like this where there are no data dependencies.
>>> */
>>> +#define ARCH_NEEDS_READ_BARRIER_DEPENDS 1
>>> #define read_barrier_depends() __asm__ __volatile__("mb": : :"memory")
>>> #ifdef CONFIG_SMP
>>> diff --git a/include/asm-generic/barrier.h b/include/asm-generic/barrier.h
>>> index 2cafdbb9ae4c..fa2e2ef72b68 100644
>>> --- a/include/asm-generic/barrier.h
>>> +++ b/include/asm-generic/barrier.h
>>> @@ -70,6 +70,24 @@
>>> #define __smp_read_barrier_depends() read_barrier_depends()
>>> #endif
>>> +#if defined(COMPILER_HAS_OPTIMIZER_HIDE_VAR) && \
>>> + !defined(ARCH_NEEDS_READ_BARRIER_DEPENDS)
>>> +
>>> +#define dependent_ptr_mb(ptr, val) ({ \
>>> + long dependent_ptr_mb_val = (long)(val); \
>>> + long dependent_ptr_mb_ptr = (long)(ptr) - dependent_ptr_mb_val; \
>>> + \
>>> + BUILD_BUG_ON(sizeof(val) > sizeof(long)); \
>>> + OPTIMIZER_HIDE_VAR(dependent_ptr_mb_val); \
>>> + (typeof(ptr))(dependent_ptr_mb_ptr + dependent_ptr_mb_val); \
>>> +})
>>> +
>>> +#else
>>> +
>>> +#define dependent_ptr_mb(ptr, val) ({ mb(); (ptr); })
>> So for the example of patch 4, we'd better fall back to rmb() or need a
>> dependent_ptr_rmb()?
>>
>> Thanks
> You mean for strongly ordered architectures like Intel?
> Yes, maybe it makes sense to have dependent_ptr_smp_rmb,
> dependent_ptr_dma_rmb and dependent_ptr_virt_rmb.
>
> mb variant is unused right now so I'll remove it.
>
>
Yes.
Thanks
_______________________________________________
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/virtualization
^ permalink raw reply
* Re: [RFC PATCH V3 0/5] Hi:
From: Jason Wang @ 2019-01-07 6:58 UTC (permalink / raw)
To: Michael S. Tsirkin; +Cc: netdev, davem, linux-kernel, kvm, virtualization
In-Reply-To: <20190104163516-mutt-send-email-mst@kernel.org>
On 2019/1/5 上午5:41, Michael S. Tsirkin wrote:
> On Sat, Dec 29, 2018 at 08:46:51PM +0800, Jason Wang wrote:
>> This series tries to access virtqueue metadata through kernel virtual
>> address instead of copy_user() friends since they had too much
>> overheads like checks, spec barriers or even hardware feature
>> toggling.
>
> I think it's a reasonable approach.
> However I need to look at whether and which mmu notifiers are invoked before
> writeback. Do you know?
I don't know but just looking at the MMU notifier ops definition,
there's no such callback if my understanding is correct.
Thanks
>
>> Test shows about 24% improvement on TX PPS. It should benefit other
>> cases as well.
>>
>> Changes from V2:
>> - fix buggy range overlapping check
>> - tear down MMU notifier during vhost ioctl to make sure invalidation
>> request can read metadata userspace address and vq size without
>> holding vq mutex.
>> Changes from V1:
>> - instead of pinning pages, use MMU notifier to invalidate vmaps and
>> remap duing metadata prefetch
>> - fix build warning on MIPS
>>
>> Jason Wang (5):
>> vhost: generalize adding used elem
>> vhost: fine grain userspace memory accessors
>> vhost: rename vq_iotlb_prefetch() to vq_meta_prefetch()
>> vhost: introduce helpers to get the size of metadata area
>> vhost: access vq metadata through kernel virtual address
>>
>> drivers/vhost/net.c | 4 +-
>> drivers/vhost/vhost.c | 416 +++++++++++++++++++++++++++++++++++++-----
>> drivers/vhost/vhost.h | 15 +-
>> 3 files changed, 384 insertions(+), 51 deletions(-)
>>
>> --
>> 2.17.1
_______________________________________________
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/virtualization
^ permalink raw reply
* Re: [RFC PATCH V3 1/5] vhost: generalize adding used elem
From: Jason Wang @ 2019-01-07 7:00 UTC (permalink / raw)
To: Sean Christopherson, Michael S. Tsirkin
Cc: netdev, davem, linux-kernel, kvm, virtualization
In-Reply-To: <20190105003339.GE11288@linux.intel.com>
On 2019/1/5 上午8:33, Sean Christopherson wrote:
> On Fri, Jan 04, 2019 at 04:29:34PM -0500, Michael S. Tsirkin wrote:
>> On Sat, Dec 29, 2018 at 08:46:52PM +0800, Jason Wang wrote:
>>> Use one generic vhost_copy_to_user() instead of two dedicated
>>> accessor. This will simplify the conversion to fine grain
>>> accessors. About 2% improvement of PPS were seen during vitio-user
>>> txonly test.
>>>
>>> Signed-off-by: Jason Wang <jasowang@redhat.com>
>> I don't hve a problem with this patch but do you have
>> any idea how come removing what's supposed to be
>> an optimization speeds things up?
> With SMAP, the 2x vhost_put_user() will also mean an extra STAC/CLAC pair,
> which is probably slower than the overhead of CALL+RET to whatever flavor
> of copy_user_generic() gets used. CALL+RET is really the only overhead
> since all variants of copy_user_generic() unroll accesses smaller than
> 64 bytes, e.g. on a 64-bit system, __copy_to_user() will write all 8
> bytes in a single MOV.
>
> Removing the special casing also eliminates a few hundred bytes of code
> as well as the need for hardware to predict count==1 vs. count>1.
>
Yes, I don't measure, but STAC/CALC is pretty expensive when we are do
very small copies based on the result of nosmap PPS.
Thanks
_______________________________________________
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/virtualization
^ permalink raw reply
* [PATCH v3 0/3] virtio-balloon: tweak config_changed
From: Wei Wang @ 2019-01-07 7:01 UTC (permalink / raw)
To: virtio-dev, linux-kernel, virtualization, kvm, mst, cohuck
Cc: pasic, dgilbert, pbonzini
Since virtio-ccw doesn't work with accessing to the config space
inside an interrupt context, this patch series avoids that issue by
moving the config register accesses to the related workqueue contexts.
v2->v3 ChangeLog:
- rename cmd_id_received to cmd_id_received_cache, and have call sites
read the latest value via virtio_balloon_cmd_id_received. (Still
kept Cornelia and Halil's reviewed-by as it's a minor change)
- remove zeroing vb->num_free_page_blocks in probe since vb is
allocated via kzalloc.
v1->v2 ChangeLog:
- add config_read_bitmap to indicate to the workqueue callbacks about
the necessity of reading the related config fields.
Wei Wang (3):
virtio-balloon: tweak config_changed implementation
virtio-balloon: improve update_balloon_size_func
virtio_balloon: remove the unnecessary 0-initialization
drivers/virtio/virtio_balloon.c | 104 ++++++++++++++++++++++++++--------------
1 file changed, 69 insertions(+), 35 deletions(-)
--
2.7.4
^ permalink raw reply
* [PATCH v3 1/3] virtio-balloon: tweak config_changed implementation
From: Wei Wang @ 2019-01-07 7:01 UTC (permalink / raw)
To: virtio-dev, linux-kernel, virtualization, kvm, mst, cohuck
Cc: pasic, dgilbert, pbonzini
In-Reply-To: <1546844466-38079-1-git-send-email-wei.w.wang@intel.com>
virtio-ccw has deadlock issues with reading the config space inside the
interrupt context, so we tweak the virtballoon_changed implementation
by moving the config read operations into the related workqueue contexts.
The config_read_bitmap is used as a flag to the workqueue callbacks
about the related config fields that need to be read.
The cmd_id_received is also renamed to cmd_id_received_cache, and
the value should be obtained via virtio_balloon_cmd_id_received.
Reported-by: Christian Borntraeger <borntraeger@de.ibm.com>
Signed-off-by: Wei Wang <wei.w.wang@intel.com>
Reviewed-by: Cornelia Huck <cohuck@redhat.com>
Reviewed-by: Halil Pasic <pasic@linux.ibm.com>
---
drivers/virtio/virtio_balloon.c | 98 +++++++++++++++++++++++++++--------------
1 file changed, 65 insertions(+), 33 deletions(-)
diff --git a/drivers/virtio/virtio_balloon.c b/drivers/virtio/virtio_balloon.c
index 728ecd1..fb12fe2 100644
--- a/drivers/virtio/virtio_balloon.c
+++ b/drivers/virtio/virtio_balloon.c
@@ -61,6 +61,10 @@ enum virtio_balloon_vq {
VIRTIO_BALLOON_VQ_MAX
};
+enum virtio_balloon_config_read {
+ VIRTIO_BALLOON_CONFIG_READ_CMD_ID = 0,
+};
+
struct virtio_balloon {
struct virtio_device *vdev;
struct virtqueue *inflate_vq, *deflate_vq, *stats_vq, *free_page_vq;
@@ -77,14 +81,20 @@ struct virtio_balloon {
/* Prevent updating balloon when it is being canceled. */
spinlock_t stop_update_lock;
bool stop_update;
+ /* Bitmap to indicate if reading the related config fields are needed */
+ unsigned long config_read_bitmap;
/* The list of allocated free pages, waiting to be given back to mm */
struct list_head free_page_list;
spinlock_t free_page_list_lock;
/* The number of free page blocks on the above list */
unsigned long num_free_page_blocks;
- /* The cmd id received from host */
- u32 cmd_id_received;
+ /*
+ * The cmd id received from host.
+ * Read it via virtio_balloon_cmd_id_received to get the latest value
+ * sent from host.
+ */
+ u32 cmd_id_received_cache;
/* The cmd id that is actively in use */
__virtio32 cmd_id_active;
/* Buffer to store the stop sign */
@@ -390,37 +400,31 @@ static unsigned long return_free_pages_to_mm(struct virtio_balloon *vb,
return num_returned;
}
+static void virtio_balloon_queue_free_page_work(struct virtio_balloon *vb)
+{
+ if (!virtio_has_feature(vb->vdev, VIRTIO_BALLOON_F_FREE_PAGE_HINT))
+ return;
+
+ /* No need to queue the work if the bit was already set. */
+ if (test_and_set_bit(VIRTIO_BALLOON_CONFIG_READ_CMD_ID,
+ &vb->config_read_bitmap))
+ return;
+
+ queue_work(vb->balloon_wq, &vb->report_free_page_work);
+}
+
static void virtballoon_changed(struct virtio_device *vdev)
{
struct virtio_balloon *vb = vdev->priv;
unsigned long flags;
- s64 diff = towards_target(vb);
-
- if (diff) {
- spin_lock_irqsave(&vb->stop_update_lock, flags);
- if (!vb->stop_update)
- queue_work(system_freezable_wq,
- &vb->update_balloon_size_work);
- spin_unlock_irqrestore(&vb->stop_update_lock, flags);
- }
- if (virtio_has_feature(vdev, VIRTIO_BALLOON_F_FREE_PAGE_HINT)) {
- virtio_cread(vdev, struct virtio_balloon_config,
- free_page_report_cmd_id, &vb->cmd_id_received);
- if (vb->cmd_id_received == VIRTIO_BALLOON_CMD_ID_DONE) {
- /* Pass ULONG_MAX to give back all the free pages */
- return_free_pages_to_mm(vb, ULONG_MAX);
- } else if (vb->cmd_id_received != VIRTIO_BALLOON_CMD_ID_STOP &&
- vb->cmd_id_received !=
- virtio32_to_cpu(vdev, vb->cmd_id_active)) {
- spin_lock_irqsave(&vb->stop_update_lock, flags);
- if (!vb->stop_update) {
- queue_work(vb->balloon_wq,
- &vb->report_free_page_work);
- }
- spin_unlock_irqrestore(&vb->stop_update_lock, flags);
- }
+ spin_lock_irqsave(&vb->stop_update_lock, flags);
+ if (!vb->stop_update) {
+ queue_work(system_freezable_wq,
+ &vb->update_balloon_size_work);
+ virtio_balloon_queue_free_page_work(vb);
}
+ spin_unlock_irqrestore(&vb->stop_update_lock, flags);
}
static void update_balloon_size(struct virtio_balloon *vb)
@@ -527,6 +531,17 @@ static int init_vqs(struct virtio_balloon *vb)
return 0;
}
+static u32 virtio_balloon_cmd_id_received(struct virtio_balloon *vb)
+{
+ if (test_and_clear_bit(VIRTIO_BALLOON_CONFIG_READ_CMD_ID,
+ &vb->config_read_bitmap))
+ virtio_cread(vb->vdev, struct virtio_balloon_config,
+ free_page_report_cmd_id,
+ &vb->cmd_id_received_cache);
+
+ return vb->cmd_id_received_cache;
+}
+
static int send_cmd_id_start(struct virtio_balloon *vb)
{
struct scatterlist sg;
@@ -537,7 +552,8 @@ static int send_cmd_id_start(struct virtio_balloon *vb)
while (virtqueue_get_buf(vq, &unused))
;
- vb->cmd_id_active = cpu_to_virtio32(vb->vdev, vb->cmd_id_received);
+ vb->cmd_id_active = virtio32_to_cpu(vb->vdev,
+ virtio_balloon_cmd_id_received(vb));
sg_init_one(&sg, &vb->cmd_id_active, sizeof(vb->cmd_id_active));
err = virtqueue_add_outbuf(vq, &sg, 1, &vb->cmd_id_active, GFP_KERNEL);
if (!err)
@@ -620,7 +636,8 @@ static int send_free_pages(struct virtio_balloon *vb)
* stop the reporting.
*/
cmd_id_active = virtio32_to_cpu(vb->vdev, vb->cmd_id_active);
- if (cmd_id_active != vb->cmd_id_received)
+ if (unlikely(cmd_id_active !=
+ virtio_balloon_cmd_id_received(vb)))
break;
/*
@@ -637,11 +654,9 @@ static int send_free_pages(struct virtio_balloon *vb)
return 0;
}
-static void report_free_page_func(struct work_struct *work)
+static void virtio_balloon_report_free_page(struct virtio_balloon *vb)
{
int err;
- struct virtio_balloon *vb = container_of(work, struct virtio_balloon,
- report_free_page_work);
struct device *dev = &vb->vdev->dev;
/* Start by sending the received cmd id to host with an outbuf. */
@@ -659,6 +674,23 @@ static void report_free_page_func(struct work_struct *work)
dev_err(dev, "Failed to send a stop id, err = %d\n", err);
}
+static void report_free_page_func(struct work_struct *work)
+{
+ struct virtio_balloon *vb = container_of(work, struct virtio_balloon,
+ report_free_page_work);
+ u32 cmd_id_received;
+
+ cmd_id_received = virtio_balloon_cmd_id_received(vb);
+ if (cmd_id_received == VIRTIO_BALLOON_CMD_ID_DONE) {
+ /* Pass ULONG_MAX to give back all the free pages */
+ return_free_pages_to_mm(vb, ULONG_MAX);
+ } else if (cmd_id_received != VIRTIO_BALLOON_CMD_ID_STOP &&
+ cmd_id_received !=
+ virtio32_to_cpu(vb->vdev, vb->cmd_id_active)) {
+ virtio_balloon_report_free_page(vb);
+ }
+}
+
#ifdef CONFIG_BALLOON_COMPACTION
/*
* virtballoon_migratepage - perform the balloon page migration on behalf of
@@ -885,7 +917,7 @@ static int virtballoon_probe(struct virtio_device *vdev)
goto out_del_vqs;
}
INIT_WORK(&vb->report_free_page_work, report_free_page_func);
- vb->cmd_id_received = VIRTIO_BALLOON_CMD_ID_STOP;
+ vb->cmd_id_received_cache = VIRTIO_BALLOON_CMD_ID_STOP;
vb->cmd_id_active = cpu_to_virtio32(vb->vdev,
VIRTIO_BALLOON_CMD_ID_STOP);
vb->cmd_id_stop = cpu_to_virtio32(vb->vdev,
--
2.7.4
^ permalink raw reply related
* [PATCH v3 2/3] virtio-balloon: improve update_balloon_size_func
From: Wei Wang @ 2019-01-07 7:01 UTC (permalink / raw)
To: virtio-dev, linux-kernel, virtualization, kvm, mst, cohuck
Cc: pasic, dgilbert, pbonzini
In-Reply-To: <1546844466-38079-1-git-send-email-wei.w.wang@intel.com>
There is no need to update the balloon actual register when there is no
ballooning request. This patch avoids update_balloon_size when diff is 0.
Signed-off-by: Wei Wang <wei.w.wang@intel.com>
Reviewed-by: Cornelia Huck <cohuck@redhat.com>
Reviewed-by: Halil Pasic <pasic@linux.ibm.com>
---
drivers/virtio/virtio_balloon.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/drivers/virtio/virtio_balloon.c b/drivers/virtio/virtio_balloon.c
index fb12fe2..e33dc8e 100644
--- a/drivers/virtio/virtio_balloon.c
+++ b/drivers/virtio/virtio_balloon.c
@@ -457,9 +457,12 @@ static void update_balloon_size_func(struct work_struct *work)
update_balloon_size_work);
diff = towards_target(vb);
+ if (!diff)
+ return;
+
if (diff > 0)
diff -= fill_balloon(vb, diff);
- else if (diff < 0)
+ else
diff += leak_balloon(vb, -diff);
update_balloon_size(vb);
--
2.7.4
^ permalink raw reply related
* [PATCH v3 3/3] virtio_balloon: remove the unnecessary 0-initialization
From: Wei Wang @ 2019-01-07 7:01 UTC (permalink / raw)
To: virtio-dev, linux-kernel, virtualization, kvm, mst, cohuck
Cc: pasic, dgilbert, pbonzini
In-Reply-To: <1546844466-38079-1-git-send-email-wei.w.wang@intel.com>
We've changed to kzalloc the vb struct, so no need to 0-initialize
this field one more time.
Signed-off-by: Wei Wang <wei.w.wang@intel.com>
---
drivers/virtio/virtio_balloon.c | 1 -
1 file changed, 1 deletion(-)
diff --git a/drivers/virtio/virtio_balloon.c b/drivers/virtio/virtio_balloon.c
index e33dc8e..f19061b 100644
--- a/drivers/virtio/virtio_balloon.c
+++ b/drivers/virtio/virtio_balloon.c
@@ -925,7 +925,6 @@ static int virtballoon_probe(struct virtio_device *vdev)
VIRTIO_BALLOON_CMD_ID_STOP);
vb->cmd_id_stop = cpu_to_virtio32(vb->vdev,
VIRTIO_BALLOON_CMD_ID_STOP);
- vb->num_free_page_blocks = 0;
spin_lock_init(&vb->free_page_list_lock);
INIT_LIST_HEAD(&vb->free_page_list);
if (virtio_has_feature(vdev, VIRTIO_BALLOON_F_PAGE_POISON)) {
--
2.7.4
^ permalink raw reply related
* Re: [RFC PATCH V3 0/5] Hi:
From: Dan Williams @ 2019-01-07 7:15 UTC (permalink / raw)
To: Michael S. Tsirkin
Cc: KVM list, Netdev, Linux Kernel Mailing List, virtualization,
David Miller
In-Reply-To: <20190106230224-mutt-send-email-mst@kernel.org>
On Sun, Jan 6, 2019 at 8:17 PM Michael S. Tsirkin <mst@redhat.com> wrote:
>
> On Mon, Jan 07, 2019 at 11:53:41AM +0800, Jason Wang wrote:
> >
> > On 2019/1/7 上午11:28, Michael S. Tsirkin wrote:
> > > On Mon, Jan 07, 2019 at 10:19:03AM +0800, Jason Wang wrote:
> > > > On 2019/1/3 上午4:47, Michael S. Tsirkin wrote:
> > > > > On Sat, Dec 29, 2018 at 08:46:51PM +0800, Jason Wang wrote:
> > > > > > This series tries to access virtqueue metadata through kernel virtual
> > > > > > address instead of copy_user() friends since they had too much
> > > > > > overheads like checks, spec barriers or even hardware feature
> > > > > > toggling.
> > > > > Will review, thanks!
> > > > > One questions that comes to mind is whether it's all about bypassing
> > > > > stac/clac. Could you please include a performance comparison with
> > > > > nosmap?
> > > > >
> > > > On machine without SMAP (Sandy Bridge):
> > > >
> > > > Before: 4.8Mpps
> > > >
> > > > After: 5.2Mpps
> > > OK so would you say it's really unsafe versus safe accesses?
> > > Or would you say it's just a better written code?
> >
> >
> > It's the effect of removing speculation barrier.
>
>
> You mean __uaccess_begin_nospec introduced by
> commit 304ec1b050310548db33063e567123fae8fd0301
> ?
>
> So fundamentally we do access_ok checks when supplying
> the memory table to the kernel thread, and we should
> do the spec barrier there.
>
> Then we can just create and use a variant of uaccess macros that does
> not include the barrier?
>
> Or, how about moving the barrier into access_ok?
> This way repeated accesses with a single access_ok get a bit faster.
> CC Dan Williams on this idea.
It would be interesting to see how expensive re-doing the address
limit check is compared to the speculation barrier. I.e. just switch
vhost_get_user() to use get_user() rather than __get_user(). That will
sanitize the pointer in the speculative path without a barrier.
I recall we had a convert access_ok() discussion with this result here:
https://lkml.org/lkml/2018/1/17/929
...but it sounds like you are proposing a smaller scope fixup for the
vhost use case? Something like barrier_nospec() in the success path
for all vhost access_ok() checks and then a get_user() variant that
disables the barrier.
_______________________________________________
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/virtualization
^ permalink raw reply
* Re: [RFC PATCH V3 5/5] vhost: access vq metadata through kernel virtual address
From: Jason Wang @ 2019-01-07 8:40 UTC (permalink / raw)
To: Michael S. Tsirkin; +Cc: netdev, davem, linux-kernel, kvm, virtualization
In-Reply-To: <20190104162600-mutt-send-email-mst@kernel.org>
On 2019/1/5 上午5:34, Michael S. Tsirkin wrote:
> On Sat, Dec 29, 2018 at 08:46:56PM +0800, Jason Wang wrote:
>> It was noticed that the copy_user() friends that was used to access
>> virtqueue metdata tends to be very expensive for dataplane
>> implementation like vhost since it involves lots of software checks,
>> speculation barrier, hardware feature toggling (e.g SMAP). The
>> extra cost will be more obvious when transferring small packets since
>> the time spent on metadata accessing become significant..
>>
>> This patch tries to eliminate those overhead by accessing them through
>> kernel virtual address by vmap(). To make the pages can be migrated,
>> instead of pinning them through GUP, we use mmu notifiers to
>> invalidate vmaps and re-establish vmaps during each round of metadata
>> prefetching in necessary. For devices that doesn't use metadata
>> prefetching, the memory acessors fallback to normal copy_user()
>> implementation gracefully. The invalidation was synchronized with
>> datapath through vq mutex, and in order to avoid hold vq mutex during
>> range checking, MMU notifier was teared down when trying to modify vq
>> metadata.
>>
>> Note that this was only done when device IOTLB is not enabled. We
>> could use similar method to optimize it in the future.
>>
>> Tests shows about ~24% improvement on TX PPS when using virtio-user +
>> vhost_net + xdp1 on TAP:
>>
>> Before: ~5.0Mpps
>> After: ~6.1Mpps
>>
>> Signed-off-by: Jason Wang <jasowang@redhat.com>
>> ---
>> drivers/vhost/vhost.c | 263 +++++++++++++++++++++++++++++++++++++++++-
>> drivers/vhost/vhost.h | 13 +++
>> 2 files changed, 274 insertions(+), 2 deletions(-)
>>
>> diff --git a/drivers/vhost/vhost.c b/drivers/vhost/vhost.c
>> index 54b43feef8d9..e1ecb8acf8a3 100644
>> --- a/drivers/vhost/vhost.c
>> +++ b/drivers/vhost/vhost.c
>> @@ -440,6 +440,9 @@ void vhost_dev_init(struct vhost_dev *dev,
>> vq->indirect = NULL;
>> vq->heads = NULL;
>> vq->dev = dev;
>> + memset(&vq->avail_ring, 0, sizeof(vq->avail_ring));
>> + memset(&vq->used_ring, 0, sizeof(vq->used_ring));
>> + memset(&vq->desc_ring, 0, sizeof(vq->desc_ring));
>> mutex_init(&vq->mutex);
>> vhost_vq_reset(dev, vq);
>> if (vq->handle_kick)
>> @@ -510,6 +513,73 @@ static size_t vhost_get_desc_size(struct vhost_virtqueue *vq, int num)
>> return sizeof(*vq->desc) * num;
>> }
>>
>> +static void vhost_uninit_vmap(struct vhost_vmap *map)
>> +{
>> + if (map->addr)
>> + vunmap(map->unmap_addr);
>> +
>> + map->addr = NULL;
>> + map->unmap_addr = NULL;
>> +}
>> +
>> +static int vhost_invalidate_vmap(struct vhost_virtqueue *vq,
>> + struct vhost_vmap *map,
>> + unsigned long ustart,
>> + size_t size,
>> + unsigned long start,
>> + unsigned long end,
>> + bool blockable)
>> +{
>> + if (end < ustart || start > ustart - 1 + size)
>> + return 0;
>> +
>> + if (!blockable)
>> + return -EAGAIN;
>> +
>> + mutex_lock(&vq->mutex);
>> + vhost_uninit_vmap(map);
>> + mutex_unlock(&vq->mutex);
>> +
>> + return 0;
>> +}
>> +
>> +static int vhost_mmu_notifier_invalidate_range_start(struct mmu_notifier *mn,
>> + struct mm_struct *mm,
>> + unsigned long start,
>> + unsigned long end,
>> + bool blockable)
>> +{
>> + struct vhost_dev *dev = container_of(mn, struct vhost_dev,
>> + mmu_notifier);
>> + int i;
>> +
>> + for (i = 0; i < dev->nvqs; i++) {
>> + struct vhost_virtqueue *vq = dev->vqs[i];
>> +
>> + if (vhost_invalidate_vmap(vq, &vq->avail_ring,
>> + (unsigned long)vq->avail,
>> + vhost_get_avail_size(vq, vq->num),
>> + start, end, blockable))
>> + return -EAGAIN;
>> + if (vhost_invalidate_vmap(vq, &vq->desc_ring,
>> + (unsigned long)vq->desc,
>> + vhost_get_desc_size(vq, vq->num),
>> + start, end, blockable))
>> + return -EAGAIN;
>> + if (vhost_invalidate_vmap(vq, &vq->used_ring,
>> + (unsigned long)vq->used,
>> + vhost_get_used_size(vq, vq->num),
>> + start, end, blockable))
>> + return -EAGAIN;
>> + }
>> +
>> + return 0;
>> +}
>> +
>> +static const struct mmu_notifier_ops vhost_mmu_notifier_ops = {
>> + .invalidate_range_start = vhost_mmu_notifier_invalidate_range_start,
>> +};
>> +
>> /* Caller should have device mutex */
>> long vhost_dev_set_owner(struct vhost_dev *dev)
>> {
>> @@ -541,7 +611,14 @@ long vhost_dev_set_owner(struct vhost_dev *dev)
>> if (err)
>> goto err_cgroup;
>>
>> + dev->mmu_notifier.ops = &vhost_mmu_notifier_ops;
>> + err = mmu_notifier_register(&dev->mmu_notifier, dev->mm);
>> + if (err)
>> + goto err_mmu_notifier;
>> +
>> return 0;
>> +err_mmu_notifier:
>> + vhost_dev_free_iovecs(dev);
>> err_cgroup:
>> kthread_stop(worker);
>> dev->worker = NULL;
>> @@ -632,6 +709,72 @@ static void vhost_clear_msg(struct vhost_dev *dev)
>> spin_unlock(&dev->iotlb_lock);
>> }
>>
>> +static int vhost_init_vmap(struct vhost_vmap *map, unsigned long uaddr,
>> + size_t size, int write)
>> +{
>> + struct page **pages;
>> + int npages = DIV_ROUND_UP(size, PAGE_SIZE);
>> + int npinned;
>> + void *vaddr;
>> + int err = 0;
>> +
>> + pages = kmalloc_array(npages, sizeof(struct page *), GFP_KERNEL);
>> + if (!pages)
>> + return -ENOMEM;
>> +
>> + npinned = get_user_pages_fast(uaddr, npages, write, pages);
>> + if (npinned != npages) {
>> + err = -EFAULT;
>> + goto err;
>> + }
>> +
>> + vaddr = vmap(pages, npages, VM_MAP, PAGE_KERNEL);
>> + if (!vaddr) {
>> + err = EFAULT;
>> + goto err;
>> + }
>> +
>> + map->addr = vaddr + (uaddr & (PAGE_SIZE - 1));
>> + map->unmap_addr = vaddr;
>> +
>> +err:
>> + /* Don't pin pages, mmu notifier will notify us about page
>> + * migration.
>> + */
>> + if (npinned > 0)
>> + release_pages(pages, npinned);
>> + kfree(pages);
>> + return err;
>> +}
>> +
>> +static void vhost_clean_vmaps(struct vhost_virtqueue *vq)
>> +{
>> + vhost_uninit_vmap(&vq->avail_ring);
>> + vhost_uninit_vmap(&vq->desc_ring);
>> + vhost_uninit_vmap(&vq->used_ring);
>> +}
>> +
>> +static int vhost_setup_avail_vmap(struct vhost_virtqueue *vq,
>> + unsigned long avail)
>> +{
>> + return vhost_init_vmap(&vq->avail_ring, avail,
>> + vhost_get_avail_size(vq, vq->num), false);
>> +}
>> +
>> +static int vhost_setup_desc_vmap(struct vhost_virtqueue *vq,
>> + unsigned long desc)
>> +{
>> + return vhost_init_vmap(&vq->desc_ring, desc,
>> + vhost_get_desc_size(vq, vq->num), false);
>> +}
>> +
>> +static int vhost_setup_used_vmap(struct vhost_virtqueue *vq,
>> + unsigned long used)
>> +{
>> + return vhost_init_vmap(&vq->used_ring, used,
>> + vhost_get_used_size(vq, vq->num), true);
>> +}
>> +
>> void vhost_dev_cleanup(struct vhost_dev *dev)
>> {
>> int i;
>> @@ -661,8 +804,12 @@ void vhost_dev_cleanup(struct vhost_dev *dev)
>> kthread_stop(dev->worker);
>> dev->worker = NULL;
>> }
>> - if (dev->mm)
>> + if (dev->mm) {
>> + mmu_notifier_unregister(&dev->mmu_notifier, dev->mm);
>> mmput(dev->mm);
>> + }
>> + for (i = 0; i < dev->nvqs; i++)
>> + vhost_clean_vmaps(dev->vqs[i]);
>> dev->mm = NULL;
>> }
>> EXPORT_SYMBOL_GPL(vhost_dev_cleanup);
>> @@ -891,6 +1038,16 @@ static inline void __user *__vhost_get_user(struct vhost_virtqueue *vq,
>>
>> static inline int vhost_put_avail_event(struct vhost_virtqueue *vq)
>> {
>> + if (!vq->iotlb) {
> Do we have to limit this to !iotlb?
No need, but for simplicity I leave this for the future.
>
>> + struct vring_used *used = vq->used_ring.addr;
>> +
>> + if (likely(used)) {
>> + *((__virtio16 *)&used->ring[vq->num]) =
>> + cpu_to_vhost16(vq, vq->avail_idx);
> So here we are modifying userspace memory without marking it dirty.
> Is this OK? And why?
Probably not, any suggestion to fix this?
>
>
>> + return 0;
>> + }
>> + }
>> +
>> return vhost_put_user(vq, cpu_to_vhost16(vq, vq->avail_idx),
>> vhost_avail_event(vq));
>> }
>> @@ -899,6 +1056,16 @@ static inline int vhost_put_used(struct vhost_virtqueue *vq,
>> struct vring_used_elem *head, int idx,
>> int count)
>> {
>> + if (!vq->iotlb) {
>> + struct vring_used *used = vq->used_ring.addr;
>> +
>> + if (likely(used)) {
>> + memcpy(used->ring + idx, head,
>> + count * sizeof(*head));
>> + return 0;
> Same here.
>
>> + }
>> + }
>> +
>> return vhost_copy_to_user(vq, vq->used->ring + idx, head,
>> count * sizeof(*head));
>> }
>> @@ -906,6 +1073,15 @@ static inline int vhost_put_used(struct vhost_virtqueue *vq,
>> static inline int vhost_put_used_flags(struct vhost_virtqueue *vq)
>>
>> {
>> + if (!vq->iotlb) {
>> + struct vring_used *used = vq->used_ring.addr;
>> +
>> + if (likely(used)) {
>> + used->flags = cpu_to_vhost16(vq, vq->used_flags);
>> + return 0;
>> + }
>> + }
>> +
>> return vhost_put_user(vq, cpu_to_vhost16(vq, vq->used_flags),
>> &vq->used->flags);
>> }
>> @@ -913,6 +1089,15 @@ static inline int vhost_put_used_flags(struct vhost_virtqueue *vq)
>> static inline int vhost_put_used_idx(struct vhost_virtqueue *vq)
>>
>> {
>> + if (!vq->iotlb) {
>> + struct vring_used *used = vq->used_ring.addr;
>> +
>> + if (likely(used)) {
>> + used->idx = cpu_to_vhost16(vq, vq->last_used_idx);
>> + return 0;
>> + }
>> + }
>> +
>> return vhost_put_user(vq, cpu_to_vhost16(vq, vq->last_used_idx),
>> &vq->used->idx);
>> }
>> @@ -958,12 +1143,30 @@ static void vhost_dev_unlock_vqs(struct vhost_dev *d)
>> static inline int vhost_get_avail_idx(struct vhost_virtqueue *vq,
>> __virtio16 *idx)
>> {
>> + if (!vq->iotlb) {
>> + struct vring_avail *avail = vq->avail_ring.addr;
>> +
>> + if (likely(avail)) {
>> + *idx = avail->idx;
>> + return 0;
>> + }
>> + }
>> +
>> return vhost_get_avail(vq, *idx, &vq->avail->idx);
>> }
>>
>> static inline int vhost_get_avail_head(struct vhost_virtqueue *vq,
>> __virtio16 *head, int idx)
>> {
>> + if (!vq->iotlb) {
>> + struct vring_avail *avail = vq->avail_ring.addr;
>> +
>> + if (likely(avail)) {
>> + *head = avail->ring[idx & (vq->num - 1)];
>> + return 0;
>> + }
>> + }
>> +
>> return vhost_get_avail(vq, *head,
>> &vq->avail->ring[idx & (vq->num - 1)]);
>> }
>> @@ -971,24 +1174,60 @@ static inline int vhost_get_avail_head(struct vhost_virtqueue *vq,
>> static inline int vhost_get_avail_flags(struct vhost_virtqueue *vq,
>> __virtio16 *flags)
>> {
>> + if (!vq->iotlb) {
>> + struct vring_avail *avail = vq->avail_ring.addr;
>> +
>> + if (likely(avail)) {
>> + *flags = avail->flags;
>> + return 0;
>> + }
>> + }
>> +
>> return vhost_get_avail(vq, *flags, &vq->avail->flags);
>> }
>>
>> static inline int vhost_get_used_event(struct vhost_virtqueue *vq,
>> __virtio16 *event)
>> {
>> + if (!vq->iotlb) {
>> + struct vring_avail *avail = vq->avail_ring.addr;
>> +
>> + if (likely(avail)) {
>> + *event = (__virtio16)avail->ring[vq->num];
>> + return 0;
>> + }
>> + }
>> +
>> return vhost_get_avail(vq, *event, vhost_used_event(vq));
>> }
>>
>> static inline int vhost_get_used_idx(struct vhost_virtqueue *vq,
>> __virtio16 *idx)
>> {
>> + if (!vq->iotlb) {
>> + struct vring_used *used = vq->used_ring.addr;
>> +
>> + if (likely(used)) {
>> + *idx = used->idx;
>> + return 0;
>> + }
>> + }
>> +
>> return vhost_get_used(vq, *idx, &vq->used->idx);
>> }
>>
>> static inline int vhost_get_desc(struct vhost_virtqueue *vq,
>> struct vring_desc *desc, int idx)
>> {
>> + if (!vq->iotlb) {
>> + struct vring_desc *d = vq->desc_ring.addr;
>> +
>> + if (likely(d)) {
>> + *desc = *(d + idx);
>> + return 0;
>> + }
>> + }
>> +
>> return vhost_copy_from_user(vq, desc, vq->desc + idx, sizeof(*desc));
>> }
>>
>> @@ -1325,8 +1564,16 @@ int vq_meta_prefetch(struct vhost_virtqueue *vq)
>> {
>> unsigned int num = vq->num;
>>
>> - if (!vq->iotlb)
>> + if (!vq->iotlb) {
>> + if (unlikely(!vq->avail_ring.addr))
>> + vhost_setup_avail_vmap(vq, (unsigned long)vq->avail);
>> + if (unlikely(!vq->desc_ring.addr))
>> + vhost_setup_desc_vmap(vq, (unsigned long)vq->desc);
>> + if (unlikely(!vq->used_ring.addr))
>> + vhost_setup_used_vmap(vq, (unsigned long)vq->used);
>> +
>> return 1;
>> + }
>>
>> return iotlb_access_ok(vq, VHOST_ACCESS_RO, (u64)(uintptr_t)vq->desc,
>> vhost_get_desc_size(vq, num), VHOST_ADDR_DESC) &&
>> @@ -1478,6 +1725,13 @@ long vhost_vring_ioctl(struct vhost_dev *d, unsigned int ioctl, void __user *arg
>>
>> mutex_lock(&vq->mutex);
>>
>> + /* Unregister MMU notifer to allow invalidation callback
>> + * can access vq->avail, vq->desc , vq->used and vq->num
>> + * without holding vq->mutex.
>> + */
>> + if (d->mm)
>> + mmu_notifier_unregister(&d->mmu_notifier, d->mm);
>> +
>> switch (ioctl) {
>> case VHOST_SET_VRING_NUM:
>> /* Resizing ring with an active backend?
>> @@ -1494,6 +1748,7 @@ long vhost_vring_ioctl(struct vhost_dev *d, unsigned int ioctl, void __user *arg
>> r = -EINVAL;
>> break;
>> }
>> + vhost_clean_vmaps(vq);
>> vq->num = s.num;
>> break;
>> case VHOST_SET_VRING_BASE:
>> @@ -1571,6 +1826,8 @@ long vhost_vring_ioctl(struct vhost_dev *d, unsigned int ioctl, void __user *arg
>> }
>> }
>>
>> + vhost_clean_vmaps(vq);
>> +
>> vq->log_used = !!(a.flags & (0x1 << VHOST_VRING_F_LOG));
>> vq->desc = (void __user *)(unsigned long)a.desc_user_addr;
>> vq->avail = (void __user *)(unsigned long)a.avail_user_addr;
>> @@ -1651,6 +1908,8 @@ long vhost_vring_ioctl(struct vhost_dev *d, unsigned int ioctl, void __user *arg
>> if (pollstart && vq->handle_kick)
>> r = vhost_poll_start(&vq->poll, vq->kick);
>>
>> + if (d->mm)
>> + mmu_notifier_register(&d->mmu_notifier, d->mm);
>> mutex_unlock(&vq->mutex);
>>
>> if (pollstop && vq->handle_kick)
>> diff --git a/drivers/vhost/vhost.h b/drivers/vhost/vhost.h
>> index 0d1ff977a43e..00f016a4f198 100644
>> --- a/drivers/vhost/vhost.h
>> +++ b/drivers/vhost/vhost.h
>> @@ -12,6 +12,8 @@
>> #include <linux/virtio_config.h>
>> #include <linux/virtio_ring.h>
>> #include <linux/atomic.h>
>> +#include <linux/pagemap.h>
>> +#include <linux/mmu_notifier.h>
>>
>> struct vhost_work;
>> typedef void (*vhost_work_fn_t)(struct vhost_work *work);
>> @@ -80,6 +82,11 @@ enum vhost_uaddr_type {
>> VHOST_NUM_ADDRS = 3,
>> };
>>
>> +struct vhost_vmap {
>> + void *addr;
>> + void *unmap_addr;
>> +};
>> +
> How about using actual types like struct vring_used etc so we get type
> safety and do not need to cast on access?
Yes, we can.
Thanks
>
>
>> /* The virtqueue structure describes a queue attached to a device. */
>> struct vhost_virtqueue {
>> struct vhost_dev *dev;
>> @@ -90,6 +97,11 @@ struct vhost_virtqueue {
>> struct vring_desc __user *desc;
>> struct vring_avail __user *avail;
>> struct vring_used __user *used;
>> +
>> + struct vhost_vmap avail_ring;
>> + struct vhost_vmap desc_ring;
>> + struct vhost_vmap used_ring;
>> +
>> const struct vhost_umem_node *meta_iotlb[VHOST_NUM_ADDRS];
>> struct file *kick;
>> struct eventfd_ctx *call_ctx;
>> @@ -158,6 +170,7 @@ struct vhost_msg_node {
>>
>> struct vhost_dev {
>> struct mm_struct *mm;
>> + struct mmu_notifier mmu_notifier;
>> struct mutex mutex;
>> struct vhost_virtqueue **vqs;
>> int nvqs;
>> --
>> 2.17.1
_______________________________________________
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/virtualization
^ permalink raw reply
* Re: [PATCH 7/7] drm: Split out drm_probe_helper.h
From: Daniel Vetter @ 2019-01-07 9:45 UTC (permalink / raw)
To: Liviu Dudau
Cc: linux-samsung-soc, nouveau, Daniel Vetter, Daniel Vetter,
Intel Graphics Development, etnaviv, amd-gfx, virtualization,
linux-renesas-soc, linux-rockchip, linux-mediatek,
DRI Development, linux-arm-msm, linux-tegra, spice-devel,
linux-amlogic, xen-devel, freedreno, linux-stm32,
linux-arm-kernel
In-Reply-To: <20181229225639.GC20342@bart.dudau.co.uk>
On Sat, Dec 29, 2018 at 10:56:39PM +0000, Liviu Dudau wrote:
> On Mon, Dec 10, 2018 at 11:11:33AM +0100, Daniel Vetter wrote:
> > Having the probe helper stuff (which pretty much everyone needs) in
> > the drm_crtc_helper.h file (which atomic drivers should never need) is
> > confusing. Split them out.
> >
> > To make sure I actually achieved the goal here I went through all
> > drivers. And indeed, all atomic drivers are now free of
> > drm_crtc_helper.h includes.
> >
> > Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
> > Cc: linux-arm-kernel@lists.infradead.org
> > Cc: virtualization@lists.linux-foundation.org
> > Cc: etnaviv@lists.freedesktop.org
> > Cc: linux-samsung-soc@vger.kernel.org
> > Cc: intel-gfx@lists.freedesktop.org
> > Cc: linux-mediatek@lists.infradead.org
> > Cc: linux-amlogic@lists.infradead.org
> > Cc: linux-arm-msm@vger.kernel.org
> > Cc: freedreno@lists.freedesktop.org
> > Cc: nouveau@lists.freedesktop.org
> > Cc: spice-devel@lists.freedesktop.org
> > Cc: amd-gfx@lists.freedesktop.org
> > Cc: linux-renesas-soc@vger.kernel.org
> > Cc: linux-rockchip@lists.infradead.org
> > Cc: linux-stm32@st-md-mailman.stormreply.com
> > Cc: linux-tegra@vger.kernel.org
> > Cc: xen-devel@lists.xen.org
>
> Daniel, please fix whatever script you're using to generate the list
> of people being Cc-ed. ./scripts/get_maintainer.pl generates my work
> email address for HDLCD and the Mali DP maintainers for malidp changes,
> but we were not Cc-ed and I've only found this patch in the linux-rockchip
> ML because there was not enough traffic there to be hidden under other patches.
The number of Cc recipients this will generate is too much to be
acceptable for smtp servers. My scripts do generate the full lists, but
for patches like this here I need to delete a lot of them. So what I ended
up doing is deleting all the people and leaving the mailing lists behind.
Plan B would be to split this up into a massive per-driver patch series,
which I found overkill in this case. But for anything with functional
changes that's what I usually end up doing.
Hope that explains what happened.
btw the tool I'm using is dim add-missing-cc from the maintainer-tools
repos.
Cheers, Daniel
>
> Best regards,
> Liviu
>
> > ---
> > .../gpu/drm/amd/amdgpu/amdgpu_connectors.c | 2 +-
> > drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 2 +-
> > drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | 2 +-
> > drivers/gpu/drm/amd/amdgpu/amdgpu_mode.h | 1 +
> > .../amd/display/amdgpu_dm/amdgpu_dm_helpers.c | 2 +-
> > .../amd/display/amdgpu_dm/amdgpu_dm_pp_smu.c | 2 +-
> > .../display/amdgpu_dm/amdgpu_dm_services.c | 2 +-
> > drivers/gpu/drm/arc/arcpgu_crtc.c | 2 +-
> > drivers/gpu/drm/arc/arcpgu_drv.c | 2 +-
> > drivers/gpu/drm/arc/arcpgu_sim.c | 2 +-
> > drivers/gpu/drm/arm/hdlcd_crtc.c | 2 +-
> > drivers/gpu/drm/arm/hdlcd_drv.c | 2 +-
> > drivers/gpu/drm/arm/malidp_crtc.c | 2 +-
> > drivers/gpu/drm/arm/malidp_drv.c | 2 +-
> > drivers/gpu/drm/arm/malidp_mw.c | 2 +-
> > drivers/gpu/drm/armada/armada_510.c | 2 +-
> > drivers/gpu/drm/armada/armada_crtc.c | 2 +-
> > drivers/gpu/drm/armada/armada_drv.c | 2 +-
> > drivers/gpu/drm/armada/armada_fb.c | 2 +-
> > drivers/gpu/drm/ast/ast_drv.c | 1 +
> > drivers/gpu/drm/ast/ast_mode.c | 1 +
> > .../gpu/drm/atmel-hlcdc/atmel_hlcdc_crtc.c | 2 +-
> > drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.h | 2 +-
> > drivers/gpu/drm/bochs/bochs_drv.c | 1 +
> > drivers/gpu/drm/bochs/bochs_kms.c | 1 +
> > drivers/gpu/drm/bridge/adv7511/adv7511.h | 2 +-
> > drivers/gpu/drm/bridge/analogix-anx78xx.c | 3 +-
> > .../drm/bridge/analogix/analogix_dp_core.c | 2 +-
> > drivers/gpu/drm/bridge/cdns-dsi.c | 2 +-
> > drivers/gpu/drm/bridge/dumb-vga-dac.c | 2 +-
> > .../bridge/megachips-stdpxxxx-ge-b850v3-fw.c | 2 +-
> > drivers/gpu/drm/bridge/nxp-ptn3460.c | 2 +-
> > drivers/gpu/drm/bridge/panel.c | 2 +-
> > drivers/gpu/drm/bridge/parade-ps8622.c | 2 +-
> > drivers/gpu/drm/bridge/sii902x.c | 2 +-
> > drivers/gpu/drm/bridge/synopsys/dw-hdmi.c | 2 +-
> > drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c | 2 +-
> > drivers/gpu/drm/bridge/tc358764.c | 2 +-
> > drivers/gpu/drm/bridge/tc358767.c | 2 +-
> > drivers/gpu/drm/bridge/ti-sn65dsi86.c | 2 +-
> > drivers/gpu/drm/bridge/ti-tfp410.c | 2 +-
> > drivers/gpu/drm/cirrus/cirrus_drv.c | 1 +
> > drivers/gpu/drm/cirrus/cirrus_mode.c | 1 +
> > drivers/gpu/drm/drm_atomic_helper.c | 1 -
> > drivers/gpu/drm/drm_dp_mst_topology.c | 2 +-
> > drivers/gpu/drm/drm_modeset_helper.c | 2 +-
> > drivers/gpu/drm/drm_probe_helper.c | 2 +-
> > drivers/gpu/drm/drm_simple_kms_helper.c | 2 +-
> > drivers/gpu/drm/etnaviv/etnaviv_drv.h | 1 -
> > drivers/gpu/drm/exynos/exynos_dp.c | 2 +-
> > drivers/gpu/drm/exynos/exynos_drm_crtc.c | 2 +-
> > drivers/gpu/drm/exynos/exynos_drm_dpi.c | 2 +-
> > drivers/gpu/drm/exynos/exynos_drm_drv.c | 2 +-
> > drivers/gpu/drm/exynos/exynos_drm_dsi.c | 2 +-
> > drivers/gpu/drm/exynos/exynos_drm_fb.c | 2 +-
> > drivers/gpu/drm/exynos/exynos_drm_fbdev.c | 2 +-
> > drivers/gpu/drm/exynos/exynos_drm_vidi.c | 2 +-
> > drivers/gpu/drm/exynos/exynos_hdmi.c | 2 +-
> > drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_crtc.c | 2 +-
> > drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c | 2 +-
> > drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_kms.c | 2 +-
> > drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_plane.c | 2 +-
> > drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_rgb.c | 2 +-
> > drivers/gpu/drm/gma500/psb_intel_drv.h | 1 +
> > .../gpu/drm/hisilicon/hibmc/hibmc_drm_de.c | 2 +-
> > .../gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c | 2 +-
> > .../gpu/drm/hisilicon/hibmc/hibmc_drm_fbdev.c | 2 +-
> > .../gpu/drm/hisilicon/hibmc/hibmc_drm_vdac.c | 2 +-
> > drivers/gpu/drm/hisilicon/kirin/dw_drm_dsi.c | 2 +-
> > .../gpu/drm/hisilicon/kirin/kirin_drm_ade.c | 2 +-
> > .../gpu/drm/hisilicon/kirin/kirin_drm_drv.c | 2 +-
> > drivers/gpu/drm/i2c/ch7006_priv.h | 2 +-
> > drivers/gpu/drm/i2c/sil164_drv.c | 2 +-
> > drivers/gpu/drm/i2c/tda998x_drv.c | 2 +-
> > drivers/gpu/drm/i915/i915_drv.c | 2 +-
> > drivers/gpu/drm/i915/intel_crt.c | 2 +-
> > drivers/gpu/drm/i915/intel_display.c | 2 +-
> > drivers/gpu/drm/i915/intel_dp.c | 2 +-
> > drivers/gpu/drm/i915/intel_dp_mst.c | 2 +-
> > drivers/gpu/drm/i915/intel_drv.h | 2 +-
> > drivers/gpu/drm/imx/dw_hdmi-imx.c | 2 +-
> > drivers/gpu/drm/imx/imx-drm-core.c | 2 +-
> > drivers/gpu/drm/imx/imx-ldb.c | 2 +-
> > drivers/gpu/drm/imx/imx-tve.c | 2 +-
> > drivers/gpu/drm/imx/ipuv3-crtc.c | 2 +-
> > drivers/gpu/drm/imx/parallel-display.c | 2 +-
> > drivers/gpu/drm/mediatek/mtk_dpi.c | 2 +-
> > drivers/gpu/drm/mediatek/mtk_drm_crtc.c | 2 +-
> > drivers/gpu/drm/mediatek/mtk_drm_drv.c | 2 +-
> > drivers/gpu/drm/mediatek/mtk_drm_fb.c | 2 +-
> > drivers/gpu/drm/mediatek/mtk_dsi.c | 2 +-
> > drivers/gpu/drm/mediatek/mtk_hdmi.c | 2 +-
> > drivers/gpu/drm/meson/meson_crtc.c | 2 +-
> > drivers/gpu/drm/meson/meson_drv.c | 2 +-
> > drivers/gpu/drm/meson/meson_dw_hdmi.c | 2 +-
> > drivers/gpu/drm/meson/meson_venc_cvbs.c | 2 +-
> > drivers/gpu/drm/mgag200/mgag200_mode.c | 1 +
> > drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c | 2 +-
> > drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c | 2 +-
> > drivers/gpu/drm/msm/disp/mdp4/mdp4_crtc.c | 2 +-
> > .../gpu/drm/msm/disp/mdp4/mdp4_dsi_encoder.c | 2 +-
> > .../gpu/drm/msm/disp/mdp4/mdp4_dtv_encoder.c | 2 +-
> > .../gpu/drm/msm/disp/mdp4/mdp4_lcdc_encoder.c | 2 +-
> > .../gpu/drm/msm/disp/mdp5/mdp5_cmd_encoder.c | 2 +-
> > drivers/gpu/drm/msm/disp/mdp5/mdp5_crtc.c | 2 +-
> > drivers/gpu/drm/msm/disp/mdp5/mdp5_encoder.c | 2 +-
> > drivers/gpu/drm/msm/msm_drv.h | 2 +-
> > drivers/gpu/drm/msm/msm_fb.c | 2 +-
> > drivers/gpu/drm/mxsfb/mxsfb_crtc.c | 2 +-
> > drivers/gpu/drm/mxsfb/mxsfb_drv.c | 2 +-
> > drivers/gpu/drm/mxsfb/mxsfb_out.c | 2 +-
> > drivers/gpu/drm/nouveau/dispnv04/tvnv17.c | 1 +
> > drivers/gpu/drm/nouveau/dispnv50/disp.c | 2 +-
> > drivers/gpu/drm/nouveau/nouveau_connector.c | 1 +
> > drivers/gpu/drm/nouveau/nouveau_display.c | 1 +
> > drivers/gpu/drm/omapdrm/omap_connector.c | 2 +-
> > drivers/gpu/drm/omapdrm/omap_crtc.c | 2 +-
> > drivers/gpu/drm/omapdrm/omap_drv.c | 2 +-
> > drivers/gpu/drm/omapdrm/omap_drv.h | 2 +-
> > drivers/gpu/drm/omapdrm/omap_encoder.c | 2 +-
> > drivers/gpu/drm/omapdrm/omap_fb.c | 2 +-
> > drivers/gpu/drm/pl111/pl111_drv.c | 2 +-
> > drivers/gpu/drm/qxl/qxl_display.c | 2 +-
> > drivers/gpu/drm/qxl/qxl_drv.c | 3 +-
> > drivers/gpu/drm/qxl/qxl_fb.c | 2 +-
> > drivers/gpu/drm/qxl/qxl_kms.c | 2 +-
> > drivers/gpu/drm/radeon/radeon_acpi.c | 1 +
> > drivers/gpu/drm/radeon/radeon_connectors.c | 1 +
> > drivers/gpu/drm/radeon/radeon_device.c | 1 +
> > drivers/gpu/drm/radeon/radeon_display.c | 1 +
> > drivers/gpu/drm/radeon/radeon_dp_mst.c | 1 +
> > drivers/gpu/drm/radeon/radeon_drv.c | 1 +
> > drivers/gpu/drm/radeon/radeon_irq_kms.c | 1 +
> > drivers/gpu/drm/rcar-du/rcar_du_crtc.c | 2 +-
> > drivers/gpu/drm/rcar-du/rcar_du_drv.c | 2 +-
> > drivers/gpu/drm/rcar-du/rcar_du_encoder.c | 2 +-
> > drivers/gpu/drm/rcar-du/rcar_du_kms.c | 2 +-
> > drivers/gpu/drm/rcar-du/rcar_du_plane.c | 2 +-
> > drivers/gpu/drm/rcar-du/rcar_du_vsp.c | 2 +-
> > drivers/gpu/drm/rcar-du/rcar_lvds.c | 2 +-
> > .../gpu/drm/rockchip/analogix_dp-rockchip.c | 2 +-
> > drivers/gpu/drm/rockchip/cdn-dp-core.c | 2 +-
> > drivers/gpu/drm/rockchip/cdn-dp-core.h | 2 +-
> > drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c | 2 +-
> > drivers/gpu/drm/rockchip/inno_hdmi.c | 2 +-
> > drivers/gpu/drm/rockchip/rockchip_drm_drv.c | 2 +-
> > drivers/gpu/drm/rockchip/rockchip_drm_fb.c | 2 +-
> > drivers/gpu/drm/rockchip/rockchip_drm_fbdev.c | 2 +-
> > drivers/gpu/drm/rockchip/rockchip_drm_psr.c | 2 +-
> > drivers/gpu/drm/rockchip/rockchip_drm_vop.c | 2 +-
> > drivers/gpu/drm/rockchip/rockchip_lvds.c | 2 +-
> > drivers/gpu/drm/rockchip/rockchip_rgb.c | 2 +-
> > drivers/gpu/drm/sti/sti_crtc.c | 2 +-
> > drivers/gpu/drm/sti/sti_drv.c | 2 +-
> > drivers/gpu/drm/sti/sti_dvo.c | 2 +-
> > drivers/gpu/drm/sti/sti_hda.c | 2 +-
> > drivers/gpu/drm/sti/sti_hdmi.c | 2 +-
> > drivers/gpu/drm/sti/sti_tvout.c | 2 +-
> > drivers/gpu/drm/stm/drv.c | 2 +-
> > drivers/gpu/drm/stm/ltdc.c | 2 +-
> > drivers/gpu/drm/sun4i/sun4i_backend.c | 2 +-
> > drivers/gpu/drm/sun4i/sun4i_crtc.c | 2 +-
> > drivers/gpu/drm/sun4i/sun4i_drv.c | 2 +-
> > drivers/gpu/drm/sun4i/sun4i_hdmi_enc.c | 2 +-
> > drivers/gpu/drm/sun4i/sun4i_lvds.c | 2 +-
> > drivers/gpu/drm/sun4i/sun4i_rgb.c | 2 +-
> > drivers/gpu/drm/sun4i/sun4i_tcon.c | 2 +-
> > drivers/gpu/drm/sun4i/sun4i_tv.c | 2 +-
> > drivers/gpu/drm/sun4i/sun6i_mipi_dsi.c | 2 +-
> > drivers/gpu/drm/sun4i/sun8i_dw_hdmi.c | 2 +-
> > drivers/gpu/drm/sun4i/sun8i_mixer.c | 2 +-
> > drivers/gpu/drm/sun4i/sun8i_ui_layer.c | 2 +-
> > drivers/gpu/drm/sun4i/sun8i_vi_layer.c | 2 +-
> > drivers/gpu/drm/tegra/drm.h | 2 +-
> > drivers/gpu/drm/tegra/hdmi.c | 2 +-
> > drivers/gpu/drm/tegra/hub.c | 2 +-
> > drivers/gpu/drm/tinydrm/core/tinydrm-core.c | 2 +-
> > drivers/gpu/drm/tinydrm/core/tinydrm-pipe.c | 2 +-
> > drivers/gpu/drm/tve200/tve200_drv.c | 2 +-
> > drivers/gpu/drm/udl/udl_connector.c | 1 +
> > drivers/gpu/drm/udl/udl_drv.c | 1 +
> > drivers/gpu/drm/udl/udl_main.c | 1 +
> > drivers/gpu/drm/vc4/vc4_crtc.c | 2 +-
> > drivers/gpu/drm/vc4/vc4_dpi.c | 2 +-
> > drivers/gpu/drm/vc4/vc4_dsi.c | 2 +-
> > drivers/gpu/drm/vc4/vc4_hdmi.c | 2 +-
> > drivers/gpu/drm/vc4/vc4_kms.c | 2 +-
> > drivers/gpu/drm/vc4/vc4_txp.c | 2 +-
> > drivers/gpu/drm/vc4/vc4_vec.c | 2 +-
> > drivers/gpu/drm/virtio/virtgpu_display.c | 2 +-
> > drivers/gpu/drm/virtio/virtgpu_drv.h | 2 +-
> > drivers/gpu/drm/vkms/vkms_crtc.c | 2 +-
> > drivers/gpu/drm/vkms/vkms_drv.c | 2 +-
> > drivers/gpu/drm/vkms/vkms_output.c | 2 +-
> > drivers/gpu/drm/vmwgfx/vmwgfx_kms.h | 2 +-
> > drivers/gpu/drm/xen/xen_drm_front.c | 2 +-
> > drivers/gpu/drm/xen/xen_drm_front_conn.c | 2 +-
> > drivers/gpu/drm/xen/xen_drm_front_gem.c | 2 +-
> > drivers/gpu/drm/xen/xen_drm_front_kms.c | 2 +-
> > drivers/gpu/drm/zte/zx_drm_drv.c | 2 +-
> > drivers/gpu/drm/zte/zx_hdmi.c | 2 +-
> > drivers/gpu/drm/zte/zx_tvenc.c | 2 +-
> > drivers/gpu/drm/zte/zx_vga.c | 2 +-
> > drivers/gpu/drm/zte/zx_vou.c | 2 +-
> > drivers/staging/vboxvideo/vbox_irq.c | 2 +-
> > drivers/staging/vboxvideo/vbox_mode.c | 2 +-
> > include/drm/drm_crtc_helper.h | 16 ------
> > include/drm/drm_probe_helper.h | 50 +++++++++++++++++++
> > 208 files changed, 256 insertions(+), 200 deletions(-)
> > create mode 100644 include/drm/drm_probe_helper.h
> >
> > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c
> > index 69ad6ec0a4f3..f0d36787d8d1 100644
> > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c
> > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c
> > @@ -25,7 +25,7 @@
> > */
> > #include <drm/drmP.h>
> > #include <drm/drm_edid.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_fb_helper.h>
> > #include <drm/amdgpu_drm.h>
> > #include "amdgpu.h"
> > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
> > index e669297ffefb..04688272d3e4 100644
> > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
> > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
> > @@ -30,7 +30,7 @@
> > #include <linux/console.h>
> > #include <linux/slab.h>
> > #include <drm/drmP.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_atomic_helper.h>
> > #include <drm/amdgpu_drm.h>
> > #include <linux/vgaarb.h>
> > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
> > index 90f474f98b6e..345e076902aa 100644
> > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
> > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
> > @@ -32,7 +32,7 @@
> > #include <linux/module.h>
> > #include <linux/pm_runtime.h>
> > #include <linux/vga_switcheroo.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> >
> > #include "amdgpu.h"
> > #include "amdgpu_irq.h"
> > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_mode.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_mode.h
> > index aadd0fa42e43..2c99ef35db79 100644
> > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_mode.h
> > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_mode.h
> > @@ -36,6 +36,7 @@
> > #include <drm/drm_dp_helper.h>
> > #include <drm/drm_fixed.h>
> > #include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_fb_helper.h>
> > #include <drm/drm_plane_helper.h>
> > #include <linux/i2c.h>
> > diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c
> > index 39997d977efb..78173311f718 100644
> > --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c
> > +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c
> > @@ -29,7 +29,7 @@
> > #include <linux/i2c.h>
> >
> > #include <drm/drmP.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/amdgpu_drm.h>
> > #include <drm/drm_edid.h>
> >
> > diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_pp_smu.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_pp_smu.c
> > index 9d2d6986b983..7ef99037167a 100644
> > --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_pp_smu.c
> > +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_pp_smu.c
> > @@ -25,7 +25,7 @@
> > #include <linux/acpi.h>
> >
> > #include <drm/drmP.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/amdgpu_drm.h>
> > #include "dm_services.h"
> > #include "amdgpu.h"
> > diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_services.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_services.c
> > index 516795342dd2..d915e8c8769b 100644
> > --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_services.c
> > +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_services.c
> > @@ -27,7 +27,7 @@
> > #include <linux/acpi.h>
> >
> > #include <drm/drmP.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/amdgpu_drm.h>
> > #include "dm_services.h"
> > #include "amdgpu.h"
> > diff --git a/drivers/gpu/drm/arc/arcpgu_crtc.c b/drivers/gpu/drm/arc/arcpgu_crtc.c
> > index 62f51f70606d..6ba96415e683 100644
> > --- a/drivers/gpu/drm/arc/arcpgu_crtc.c
> > +++ b/drivers/gpu/drm/arc/arcpgu_crtc.c
> > @@ -15,7 +15,7 @@
> > */
> >
> > #include <drm/drm_atomic_helper.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_fb_cma_helper.h>
> > #include <drm/drm_gem_cma_helper.h>
> > #include <drm/drm_plane_helper.h>
> > diff --git a/drivers/gpu/drm/arc/arcpgu_drv.c b/drivers/gpu/drm/arc/arcpgu_drv.c
> > index 206a76abf771..dc72648bd783 100644
> > --- a/drivers/gpu/drm/arc/arcpgu_drv.c
> > +++ b/drivers/gpu/drm/arc/arcpgu_drv.c
> > @@ -15,7 +15,7 @@
> > */
> >
> > #include <linux/clk.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_fb_cma_helper.h>
> > #include <drm/drm_fb_helper.h>
> > #include <drm/drm_gem_cma_helper.h>
> > diff --git a/drivers/gpu/drm/arc/arcpgu_sim.c b/drivers/gpu/drm/arc/arcpgu_sim.c
> > index 68629e614990..7eae7850954b 100644
> > --- a/drivers/gpu/drm/arc/arcpgu_sim.c
> > +++ b/drivers/gpu/drm/arc/arcpgu_sim.c
> > @@ -14,7 +14,7 @@
> > *
> > */
> >
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_atomic_helper.h>
> >
> > #include "arcpgu.h"
> > diff --git a/drivers/gpu/drm/arm/hdlcd_crtc.c b/drivers/gpu/drm/arm/hdlcd_crtc.c
> > index e4d67b70244d..99c188de8651 100644
> > --- a/drivers/gpu/drm/arm/hdlcd_crtc.c
> > +++ b/drivers/gpu/drm/arm/hdlcd_crtc.c
> > @@ -13,7 +13,7 @@
> > #include <drm/drm_atomic.h>
> > #include <drm/drm_atomic_helper.h>
> > #include <drm/drm_crtc.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_fb_helper.h>
> > #include <drm/drm_fb_cma_helper.h>
> > #include <drm/drm_gem_cma_helper.h>
> > diff --git a/drivers/gpu/drm/arm/hdlcd_drv.c b/drivers/gpu/drm/arm/hdlcd_drv.c
> > index dfad8d06d108..fba307c8afa5 100644
> > --- a/drivers/gpu/drm/arm/hdlcd_drv.c
> > +++ b/drivers/gpu/drm/arm/hdlcd_drv.c
> > @@ -22,7 +22,7 @@
> > #include <drm/drmP.h>
> > #include <drm/drm_atomic_helper.h>
> > #include <drm/drm_crtc.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_fb_helper.h>
> > #include <drm/drm_fb_cma_helper.h>
> > #include <drm/drm_gem_cma_helper.h>
> > diff --git a/drivers/gpu/drm/arm/malidp_crtc.c b/drivers/gpu/drm/arm/malidp_crtc.c
> > index e1b72782848c..56aad288666e 100644
> > --- a/drivers/gpu/drm/arm/malidp_crtc.c
> > +++ b/drivers/gpu/drm/arm/malidp_crtc.c
> > @@ -14,7 +14,7 @@
> > #include <drm/drm_atomic.h>
> > #include <drm/drm_atomic_helper.h>
> > #include <drm/drm_crtc.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <linux/clk.h>
> > #include <linux/pm_runtime.h>
> > #include <video/videomode.h>
> > diff --git a/drivers/gpu/drm/arm/malidp_drv.c b/drivers/gpu/drm/arm/malidp_drv.c
> > index 505f316a192e..ab50ad06e271 100644
> > --- a/drivers/gpu/drm/arm/malidp_drv.c
> > +++ b/drivers/gpu/drm/arm/malidp_drv.c
> > @@ -23,7 +23,7 @@
> > #include <drm/drm_atomic.h>
> > #include <drm/drm_atomic_helper.h>
> > #include <drm/drm_crtc.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_fb_helper.h>
> > #include <drm/drm_fb_cma_helper.h>
> > #include <drm/drm_gem_cma_helper.h>
> > diff --git a/drivers/gpu/drm/arm/malidp_mw.c b/drivers/gpu/drm/arm/malidp_mw.c
> > index 91472e5e0c8b..041a64dc7167 100644
> > --- a/drivers/gpu/drm/arm/malidp_mw.c
> > +++ b/drivers/gpu/drm/arm/malidp_mw.c
> > @@ -8,7 +8,7 @@
> > #include <drm/drm_atomic.h>
> > #include <drm/drm_atomic_helper.h>
> > #include <drm/drm_crtc.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_fb_cma_helper.h>
> > #include <drm/drm_gem_cma_helper.h>
> > #include <drm/drmP.h>
> > diff --git a/drivers/gpu/drm/armada/armada_510.c b/drivers/gpu/drm/armada/armada_510.c
> > index 2f7c048c5361..0e91d27921bd 100644
> > --- a/drivers/gpu/drm/armada/armada_510.c
> > +++ b/drivers/gpu/drm/armada/armada_510.c
> > @@ -9,7 +9,7 @@
> > */
> > #include <linux/clk.h>
> > #include <linux/io.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include "armada_crtc.h"
> > #include "armada_drm.h"
> > #include "armada_hw.h"
> > diff --git a/drivers/gpu/drm/armada/armada_crtc.c b/drivers/gpu/drm/armada/armada_crtc.c
> > index da9360688b55..c68c3da9e17f 100644
> > --- a/drivers/gpu/drm/armada/armada_crtc.c
> > +++ b/drivers/gpu/drm/armada/armada_crtc.c
> > @@ -12,7 +12,7 @@
> > #include <linux/platform_device.h>
> > #include <drm/drmP.h>
> > #include <drm/drm_atomic.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_plane_helper.h>
> > #include <drm/drm_atomic_helper.h>
> > #include "armada_crtc.h"
> > diff --git a/drivers/gpu/drm/armada/armada_drv.c b/drivers/gpu/drm/armada/armada_drv.c
> > index fa31589b4fc0..e660c5ca52ae 100644
> > --- a/drivers/gpu/drm/armada/armada_drv.c
> > +++ b/drivers/gpu/drm/armada/armada_drv.c
> > @@ -10,7 +10,7 @@
> > #include <linux/module.h>
> > #include <linux/of_graph.h>
> > #include <drm/drm_atomic_helper.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_fb_helper.h>
> > #include <drm/drm_of.h>
> > #include "armada_crtc.h"
> > diff --git a/drivers/gpu/drm/armada/armada_fb.c b/drivers/gpu/drm/armada/armada_fb.c
> > index 6bd638a54579..9029656d634d 100644
> > --- a/drivers/gpu/drm/armada/armada_fb.c
> > +++ b/drivers/gpu/drm/armada/armada_fb.c
> > @@ -5,7 +5,7 @@
> > * it under the terms of the GNU General Public License version 2 as
> > * published by the Free Software Foundation.
> > */
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_fb_helper.h>
> > #include <drm/drm_gem_framebuffer_helper.h>
> > #include "armada_drm.h"
> > diff --git a/drivers/gpu/drm/ast/ast_drv.c b/drivers/gpu/drm/ast/ast_drv.c
> > index bf589c53b908..3871b39d4dea 100644
> > --- a/drivers/gpu/drm/ast/ast_drv.c
> > +++ b/drivers/gpu/drm/ast/ast_drv.c
> > @@ -30,6 +30,7 @@
> >
> > #include <drm/drmP.h>
> > #include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> >
> > #include "ast_drv.h"
> >
> > diff --git a/drivers/gpu/drm/ast/ast_mode.c b/drivers/gpu/drm/ast/ast_mode.c
> > index 8bb355d5d43d..97fed0627d1c 100644
> > --- a/drivers/gpu/drm/ast/ast_mode.c
> > +++ b/drivers/gpu/drm/ast/ast_mode.c
> > @@ -32,6 +32,7 @@
> > #include <drm/drm_crtc.h>
> > #include <drm/drm_crtc_helper.h>
> > #include <drm/drm_plane_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include "ast_drv.h"
> >
> > #include "ast_tables.h"
> > diff --git a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_crtc.c b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_crtc.c
> > index 96f4082671fe..8070a558d7b1 100644
> > --- a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_crtc.c
> > +++ b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_crtc.c
> > @@ -24,7 +24,7 @@
> > #include <linux/pinctrl/consumer.h>
> >
> > #include <drm/drm_crtc.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drmP.h>
> >
> > #include <video/videomode.h>
> > diff --git a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.h b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.h
> > index 4cc1e03f0aee..70bd540d644e 100644
> > --- a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.h
> > +++ b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.h
> > @@ -31,7 +31,7 @@
> > #include <drm/drm_atomic.h>
> > #include <drm/drm_atomic_helper.h>
> > #include <drm/drm_crtc.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_fb_helper.h>
> > #include <drm/drm_fb_cma_helper.h>
> > #include <drm/drm_gem_cma_helper.h>
> > diff --git a/drivers/gpu/drm/bochs/bochs_drv.c b/drivers/gpu/drm/bochs/bochs_drv.c
> > index f3dd66ae990a..e5a48e87b137 100644
> > --- a/drivers/gpu/drm/bochs/bochs_drv.c
> > +++ b/drivers/gpu/drm/bochs/bochs_drv.c
> > @@ -9,6 +9,7 @@
> > #include <linux/module.h>
> > #include <linux/slab.h>
> > #include <drm/drm_fb_helper.h>
> > +#include <drm/drm_probe_helper.h>
> >
> > #include "bochs.h"
> >
> > diff --git a/drivers/gpu/drm/bochs/bochs_kms.c b/drivers/gpu/drm/bochs/bochs_kms.c
> > index f87c284dd93d..5f1eb69dd167 100644
> > --- a/drivers/gpu/drm/bochs/bochs_kms.c
> > +++ b/drivers/gpu/drm/bochs/bochs_kms.c
> > @@ -7,6 +7,7 @@
> >
> > #include "bochs.h"
> > #include <drm/drm_plane_helper.h>
> > +#include <drm/drm_probe_helper.h>
> >
> > static int defx = 1024;
> > static int defy = 768;
> > diff --git a/drivers/gpu/drm/bridge/adv7511/adv7511.h b/drivers/gpu/drm/bridge/adv7511/adv7511.h
> > index 73d8ccb97742..b235d1633575 100644
> > --- a/drivers/gpu/drm/bridge/adv7511/adv7511.h
> > +++ b/drivers/gpu/drm/bridge/adv7511/adv7511.h
> > @@ -14,7 +14,7 @@
> > #include <linux/regmap.h>
> > #include <linux/regulator/consumer.h>
> >
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_mipi_dsi.h>
> >
> > #define ADV7511_REG_CHIP_REVISION 0x00
> > diff --git a/drivers/gpu/drm/bridge/analogix-anx78xx.c b/drivers/gpu/drm/bridge/analogix-anx78xx.c
> > index f8433c93f463..7df356b45057 100644
> > --- a/drivers/gpu/drm/bridge/analogix-anx78xx.c
> > +++ b/drivers/gpu/drm/bridge/analogix-anx78xx.c
> > @@ -31,9 +31,10 @@
> > #include <drm/drmP.h>
> > #include <drm/drm_atomic_helper.h>
> > #include <drm/drm_crtc.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_dp_helper.h>
> > #include <drm/drm_edid.h>
> > +#include <drm/drm_probe_helper.h>
> >
> > #include "analogix-anx78xx.h"
> >
> > diff --git a/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c b/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c
> > index 753e96129ab7..c1da8ae3c408 100644
> > --- a/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c
> > +++ b/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c
> > @@ -26,7 +26,7 @@
> > #include <drm/drmP.h>
> > #include <drm/drm_atomic_helper.h>
> > #include <drm/drm_crtc.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_panel.h>
> >
> > #include <drm/bridge/analogix_dp.h>
> > diff --git a/drivers/gpu/drm/bridge/cdns-dsi.c b/drivers/gpu/drm/bridge/cdns-dsi.c
> > index ce9496d13986..48ed444cad50 100644
> > --- a/drivers/gpu/drm/bridge/cdns-dsi.c
> > +++ b/drivers/gpu/drm/bridge/cdns-dsi.c
> > @@ -7,7 +7,7 @@
> >
> > #include <drm/drm_atomic_helper.h>
> > #include <drm/drm_bridge.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_mipi_dsi.h>
> > #include <drm/drm_panel.h>
> > #include <video/mipi_display.h>
> > diff --git a/drivers/gpu/drm/bridge/dumb-vga-dac.c b/drivers/gpu/drm/bridge/dumb-vga-dac.c
> > index 9b706789a341..0805801f4e94 100644
> > --- a/drivers/gpu/drm/bridge/dumb-vga-dac.c
> > +++ b/drivers/gpu/drm/bridge/dumb-vga-dac.c
> > @@ -18,7 +18,7 @@
> > #include <drm/drmP.h>
> > #include <drm/drm_atomic_helper.h>
> > #include <drm/drm_crtc.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> >
> > struct dumb_vga {
> > struct drm_bridge bridge;
> > diff --git a/drivers/gpu/drm/bridge/megachips-stdpxxxx-ge-b850v3-fw.c b/drivers/gpu/drm/bridge/megachips-stdpxxxx-ge-b850v3-fw.c
> > index 2136c97aeb8e..9687a1a0e737 100644
> > --- a/drivers/gpu/drm/bridge/megachips-stdpxxxx-ge-b850v3-fw.c
> > +++ b/drivers/gpu/drm/bridge/megachips-stdpxxxx-ge-b850v3-fw.c
> > @@ -36,7 +36,7 @@
> > #include <linux/of.h>
> > #include <drm/drm_atomic.h>
> > #include <drm/drm_atomic_helper.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_edid.h>
> > #include <drm/drmP.h>
> >
> > diff --git a/drivers/gpu/drm/bridge/nxp-ptn3460.c b/drivers/gpu/drm/bridge/nxp-ptn3460.c
> > index a3e817abace1..a56306421bc7 100644
> > --- a/drivers/gpu/drm/bridge/nxp-ptn3460.c
> > +++ b/drivers/gpu/drm/bridge/nxp-ptn3460.c
> > @@ -22,7 +22,7 @@
> > #include <linux/of_gpio.h>
> > #include <drm/drm_atomic_helper.h>
> > #include <drm/drm_crtc.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_edid.h>
> > #include <drm/drm_of.h>
> > #include <drm/drm_panel.h>
> > diff --git a/drivers/gpu/drm/bridge/panel.c b/drivers/gpu/drm/bridge/panel.c
> > index 7cbaba213ef6..caf12b8fd572 100644
> > --- a/drivers/gpu/drm/bridge/panel.c
> > +++ b/drivers/gpu/drm/bridge/panel.c
> > @@ -12,7 +12,7 @@
> > #include <drm/drm_panel.h>
> > #include <drm/drm_atomic_helper.h>
> > #include <drm/drm_connector.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_encoder.h>
> > #include <drm/drm_modeset_helper_vtables.h>
> > #include <drm/drm_panel.h>
> > diff --git a/drivers/gpu/drm/bridge/parade-ps8622.c b/drivers/gpu/drm/bridge/parade-ps8622.c
> > index 7334d1b62b71..483a7142c5ea 100644
> > --- a/drivers/gpu/drm/bridge/parade-ps8622.c
> > +++ b/drivers/gpu/drm/bridge/parade-ps8622.c
> > @@ -26,7 +26,7 @@
> > #include <linux/regulator/consumer.h>
> > #include <drm/drm_atomic_helper.h>
> > #include <drm/drm_crtc.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_of.h>
> > #include <drm/drm_panel.h>
> > #include <drm/drmP.h>
> > diff --git a/drivers/gpu/drm/bridge/sii902x.c b/drivers/gpu/drm/bridge/sii902x.c
> > index bfa902013aa4..61b1502f566c 100644
> > --- a/drivers/gpu/drm/bridge/sii902x.c
> > +++ b/drivers/gpu/drm/bridge/sii902x.c
> > @@ -30,7 +30,7 @@
> >
> > #include <drm/drmP.h>
> > #include <drm/drm_atomic_helper.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_edid.h>
> >
> > #define SII902X_TPI_VIDEO_DATA 0x0
> > diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
> > index 64c3cf027518..360a7ec39861 100644
> > --- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
> > +++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
> > @@ -25,7 +25,7 @@
> > #include <drm/drm_of.h>
> > #include <drm/drmP.h>
> > #include <drm/drm_atomic_helper.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_edid.h>
> > #include <drm/drm_encoder_slave.h>
> > #include <drm/bridge/dw_hdmi.h>
> > diff --git a/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c b/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c
> > index 2f4b145b73af..09a38ae81e52 100644
> > --- a/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c
> > +++ b/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c
> > @@ -19,7 +19,7 @@
> > #include <drm/drm_atomic_helper.h>
> > #include <drm/drm_bridge.h>
> > #include <drm/drm_crtc.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_mipi_dsi.h>
> > #include <drm/drm_of.h>
> > #include <drm/bridge/dw_mipi_dsi.h>
> > diff --git a/drivers/gpu/drm/bridge/tc358764.c b/drivers/gpu/drm/bridge/tc358764.c
> > index afd491018bfc..282092019e82 100644
> > --- a/drivers/gpu/drm/bridge/tc358764.c
> > +++ b/drivers/gpu/drm/bridge/tc358764.c
> > @@ -9,7 +9,7 @@
> >
> > #include <drm/drm_atomic_helper.h>
> > #include <drm/drm_crtc.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_fb_helper.h>
> > #include <drm/drm_mipi_dsi.h>
> > #include <drm/drm_of.h>
> > diff --git a/drivers/gpu/drm/bridge/tc358767.c b/drivers/gpu/drm/bridge/tc358767.c
> > index 8e28e738cb52..5c0ff4a16572 100644
> > --- a/drivers/gpu/drm/bridge/tc358767.c
> > +++ b/drivers/gpu/drm/bridge/tc358767.c
> > @@ -34,7 +34,7 @@
> > #include <linux/slab.h>
> >
> > #include <drm/drm_atomic_helper.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_dp_helper.h>
> > #include <drm/drm_edid.h>
> > #include <drm/drm_of.h>
> > diff --git a/drivers/gpu/drm/bridge/ti-sn65dsi86.c b/drivers/gpu/drm/bridge/ti-sn65dsi86.c
> > index 10243965ee7c..e74e2c928f51 100644
> > --- a/drivers/gpu/drm/bridge/ti-sn65dsi86.c
> > +++ b/drivers/gpu/drm/bridge/ti-sn65dsi86.c
> > @@ -6,7 +6,7 @@
> > #include <drm/drmP.h>
> > #include <drm/drm_atomic.h>
> > #include <drm/drm_atomic_helper.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_dp_helper.h>
> > #include <drm/drm_mipi_dsi.h>
> > #include <drm/drm_of.h>
> > diff --git a/drivers/gpu/drm/bridge/ti-tfp410.c b/drivers/gpu/drm/bridge/ti-tfp410.c
> > index c3e32138c6bb..7bfb4f338813 100644
> > --- a/drivers/gpu/drm/bridge/ti-tfp410.c
> > +++ b/drivers/gpu/drm/bridge/ti-tfp410.c
> > @@ -20,7 +20,7 @@
> > #include <drm/drmP.h>
> > #include <drm/drm_atomic_helper.h>
> > #include <drm/drm_crtc.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> >
> > #define HOTPLUG_DEBOUNCE_MS 1100
> >
> > diff --git a/drivers/gpu/drm/cirrus/cirrus_drv.c b/drivers/gpu/drm/cirrus/cirrus_drv.c
> > index db40b77c7f7c..8ec880f3a322 100644
> > --- a/drivers/gpu/drm/cirrus/cirrus_drv.c
> > +++ b/drivers/gpu/drm/cirrus/cirrus_drv.c
> > @@ -12,6 +12,7 @@
> > #include <linux/console.h>
> > #include <drm/drmP.h>
> > #include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> >
> > #include "cirrus_drv.h"
> >
> > diff --git a/drivers/gpu/drm/cirrus/cirrus_mode.c b/drivers/gpu/drm/cirrus/cirrus_mode.c
> > index ed7dcf212a34..a830e70fc0bb 100644
> > --- a/drivers/gpu/drm/cirrus/cirrus_mode.c
> > +++ b/drivers/gpu/drm/cirrus/cirrus_mode.c
> > @@ -17,6 +17,7 @@
> > #include <drm/drmP.h>
> > #include <drm/drm_crtc_helper.h>
> > #include <drm/drm_plane_helper.h>
> > +#include <drm/drm_probe_helper.h>
> >
> > #include <video/cirrus.h>
> >
> > diff --git a/drivers/gpu/drm/drm_atomic_helper.c b/drivers/gpu/drm/drm_atomic_helper.c
> > index 69cbafd5ebee..54417fce5e5c 100644
> > --- a/drivers/gpu/drm/drm_atomic_helper.c
> > +++ b/drivers/gpu/drm/drm_atomic_helper.c
> > @@ -29,7 +29,6 @@
> > #include <drm/drm_atomic.h>
> > #include <drm/drm_atomic_uapi.h>
> > #include <drm/drm_plane_helper.h>
> > -#include <drm/drm_crtc_helper.h>
> > #include <drm/drm_atomic_helper.h>
> > #include <drm/drm_writeback.h>
> > #include <drm/drm_damage_helper.h>
> > diff --git a/drivers/gpu/drm/drm_dp_mst_topology.c b/drivers/gpu/drm/drm_dp_mst_topology.c
> > index a9b684f14d14..5f8b80b0bad4 100644
> > --- a/drivers/gpu/drm/drm_dp_mst_topology.c
> > +++ b/drivers/gpu/drm/drm_dp_mst_topology.c
> > @@ -33,7 +33,7 @@
> > #include <drm/drm_fixed.h>
> > #include <drm/drm_atomic.h>
> > #include <drm/drm_atomic_helper.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> >
> > /**
> > * DOC: dp mst helper
> > diff --git a/drivers/gpu/drm/drm_modeset_helper.c b/drivers/gpu/drm/drm_modeset_helper.c
> > index 9150fa385bba..6f48137d7192 100644
> > --- a/drivers/gpu/drm/drm_modeset_helper.c
> > +++ b/drivers/gpu/drm/drm_modeset_helper.c
> > @@ -21,7 +21,7 @@
> > */
> >
> > #include <drm/drm_atomic_helper.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_fb_helper.h>
> > #include <drm/drm_modeset_helper.h>
> > #include <drm/drm_plane_helper.h>
> > diff --git a/drivers/gpu/drm/drm_probe_helper.c b/drivers/gpu/drm/drm_probe_helper.c
> > index a1bb157bfdfa..c83fee652502 100644
> > --- a/drivers/gpu/drm/drm_probe_helper.c
> > +++ b/drivers/gpu/drm/drm_probe_helper.c
> > @@ -32,11 +32,11 @@
> > #include <linux/export.h>
> > #include <linux/moduleparam.h>
> >
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drmP.h>
> > #include <drm/drm_client.h>
> > #include <drm/drm_crtc.h>
> > #include <drm/drm_fourcc.h>
> > -#include <drm/drm_crtc_helper.h>
> > #include <drm/drm_fb_helper.h>
> > #include <drm/drm_edid.h>
> > #include <drm/drm_modeset_helper_vtables.h>
> > diff --git a/drivers/gpu/drm/drm_simple_kms_helper.c b/drivers/gpu/drm/drm_simple_kms_helper.c
> > index 917812448d1b..9fc26a69ab79 100644
> > --- a/drivers/gpu/drm/drm_simple_kms_helper.c
> > +++ b/drivers/gpu/drm/drm_simple_kms_helper.c
> > @@ -10,7 +10,7 @@
> > #include <drm/drmP.h>
> > #include <drm/drm_atomic.h>
> > #include <drm/drm_atomic_helper.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_plane_helper.h>
> > #include <drm/drm_simple_kms_helper.h>
> > #include <linux/slab.h>
> > diff --git a/drivers/gpu/drm/etnaviv/etnaviv_drv.h b/drivers/gpu/drm/etnaviv/etnaviv_drv.h
> > index 8d02d1b7dcf5..ea743d4fa3f8 100644
> > --- a/drivers/gpu/drm/etnaviv/etnaviv_drv.h
> > +++ b/drivers/gpu/drm/etnaviv/etnaviv_drv.h
> > @@ -21,7 +21,6 @@
> > #include <linux/mm_types.h>
> >
> > #include <drm/drmP.h>
> > -#include <drm/drm_crtc_helper.h>
> > #include <drm/drm_fb_helper.h>
> > #include <drm/drm_gem.h>
> > #include <drm/etnaviv_drm.h>
> > diff --git a/drivers/gpu/drm/exynos/exynos_dp.c b/drivers/gpu/drm/exynos/exynos_dp.c
> > index c8449ae4f4fe..6b23a1caeedc 100644
> > --- a/drivers/gpu/drm/exynos/exynos_dp.c
> > +++ b/drivers/gpu/drm/exynos/exynos_dp.c
> > @@ -23,7 +23,7 @@
> >
> > #include <drm/drmP.h>
> > #include <drm/drm_crtc.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_of.h>
> > #include <drm/drm_panel.h>
> >
> > diff --git a/drivers/gpu/drm/exynos/exynos_drm_crtc.c b/drivers/gpu/drm/exynos/exynos_drm_crtc.c
> > index 2696289ecc78..12d3816356ef 100644
> > --- a/drivers/gpu/drm/exynos/exynos_drm_crtc.c
> > +++ b/drivers/gpu/drm/exynos/exynos_drm_crtc.c
> > @@ -13,7 +13,7 @@
> > */
> >
> > #include <drm/drmP.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_atomic.h>
> > #include <drm/drm_atomic_helper.h>
> > #include <drm/drm_encoder.h>
> > diff --git a/drivers/gpu/drm/exynos/exynos_drm_dpi.c b/drivers/gpu/drm/exynos/exynos_drm_dpi.c
> > index 2f0babb67c51..fa95af1dc534 100644
> > --- a/drivers/gpu/drm/exynos/exynos_drm_dpi.c
> > +++ b/drivers/gpu/drm/exynos/exynos_drm_dpi.c
> > @@ -11,7 +11,7 @@
> > */
> >
> > #include <drm/drmP.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_panel.h>
> > #include <drm/drm_atomic_helper.h>
> >
> > diff --git a/drivers/gpu/drm/exynos/exynos_drm_drv.c b/drivers/gpu/drm/exynos/exynos_drm_drv.c
> > index 2c75e789b2a7..a941d64875f6 100644
> > --- a/drivers/gpu/drm/exynos/exynos_drm_drv.c
> > +++ b/drivers/gpu/drm/exynos/exynos_drm_drv.c
> > @@ -15,7 +15,7 @@
> > #include <drm/drmP.h>
> > #include <drm/drm_atomic.h>
> > #include <drm/drm_atomic_helper.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_fb_helper.h>
> >
> > #include <linux/component.h>
> > diff --git a/drivers/gpu/drm/exynos/exynos_drm_dsi.c b/drivers/gpu/drm/exynos/exynos_drm_dsi.c
> > index d81e62ae286a..8d28cdbfcddd 100644
> > --- a/drivers/gpu/drm/exynos/exynos_drm_dsi.c
> > +++ b/drivers/gpu/drm/exynos/exynos_drm_dsi.c
> > @@ -13,7 +13,7 @@
> > #include <asm/unaligned.h>
> >
> > #include <drm/drmP.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_fb_helper.h>
> > #include <drm/drm_mipi_dsi.h>
> > #include <drm/drm_panel.h>
> > diff --git a/drivers/gpu/drm/exynos/exynos_drm_fb.c b/drivers/gpu/drm/exynos/exynos_drm_fb.c
> > index 31eb538a44ae..0dc1a688b502 100644
> > --- a/drivers/gpu/drm/exynos/exynos_drm_fb.c
> > +++ b/drivers/gpu/drm/exynos/exynos_drm_fb.c
> > @@ -14,7 +14,7 @@
> >
> > #include <drm/drmP.h>
> > #include <drm/drm_crtc.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_fb_helper.h>
> > #include <drm/drm_atomic.h>
> > #include <drm/drm_atomic_helper.h>
> > diff --git a/drivers/gpu/drm/exynos/exynos_drm_fbdev.c b/drivers/gpu/drm/exynos/exynos_drm_fbdev.c
> > index ce9604ca8041..f057082a9b30 100644
> > --- a/drivers/gpu/drm/exynos/exynos_drm_fbdev.c
> > +++ b/drivers/gpu/drm/exynos/exynos_drm_fbdev.c
> > @@ -15,7 +15,7 @@
> > #include <drm/drmP.h>
> > #include <drm/drm_crtc.h>
> > #include <drm/drm_fb_helper.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/exynos_drm.h>
> >
> > #include <linux/console.h>
> > diff --git a/drivers/gpu/drm/exynos/exynos_drm_vidi.c b/drivers/gpu/drm/exynos/exynos_drm_vidi.c
> > index 19697c1362d8..1b0e4e0f52fe 100644
> > --- a/drivers/gpu/drm/exynos/exynos_drm_vidi.c
> > +++ b/drivers/gpu/drm/exynos/exynos_drm_vidi.c
> > @@ -20,7 +20,7 @@
> > #include <drm/exynos_drm.h>
> >
> > #include <drm/drm_edid.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_atomic_helper.h>
> >
> > #include "exynos_drm_drv.h"
> > diff --git a/drivers/gpu/drm/exynos/exynos_hdmi.c b/drivers/gpu/drm/exynos/exynos_hdmi.c
> > index 2092a650df7d..231f70b13b37 100644
> > --- a/drivers/gpu/drm/exynos/exynos_hdmi.c
> > +++ b/drivers/gpu/drm/exynos/exynos_hdmi.c
> > @@ -16,7 +16,7 @@
> >
> > #include <drm/drmP.h>
> > #include <drm/drm_edid.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_atomic_helper.h>
> >
> > #include "regs-hdmi.h"
> > diff --git a/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_crtc.c b/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_crtc.c
> > index 18afc94e4dff..bf256971063d 100644
> > --- a/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_crtc.c
> > +++ b/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_crtc.c
> > @@ -16,7 +16,7 @@
> > #include <drm/drm_atomic.h>
> > #include <drm/drm_atomic_helper.h>
> > #include <drm/drm_crtc.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <video/videomode.h>
> >
> > #include "fsl_dcu_drm_crtc.h"
> > diff --git a/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c b/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c
> > index ceddc3e29258..a66fa80be8e8 100644
> > --- a/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c
> > +++ b/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c
> > @@ -24,7 +24,7 @@
> >
> > #include <drm/drmP.h>
> > #include <drm/drm_atomic_helper.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_fb_cma_helper.h>
> > #include <drm/drm_fb_helper.h>
> > #include <drm/drm_gem_cma_helper.h>
> > diff --git a/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_kms.c b/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_kms.c
> > index ddc68e476a4d..741de83955ec 100644
> > --- a/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_kms.c
> > +++ b/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_kms.c
> > @@ -11,7 +11,7 @@
> >
> > #include <drm/drmP.h>
> > #include <drm/drm_atomic_helper.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_fb_cma_helper.h>
> > #include <drm/drm_gem_framebuffer_helper.h>
> >
> > diff --git a/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_plane.c b/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_plane.c
> > index 9554b245746e..593f9291b8e2 100644
> > --- a/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_plane.c
> > +++ b/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_plane.c
> > @@ -14,7 +14,7 @@
> > #include <drm/drmP.h>
> > #include <drm/drm_atomic_helper.h>
> > #include <drm/drm_crtc.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_fb_cma_helper.h>
> > #include <drm/drm_gem_cma_helper.h>
> > #include <drm/drm_plane_helper.h>
> > diff --git a/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_rgb.c b/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_rgb.c
> > index 2298ed2a9e1c..577fb1be2d59 100644
> > --- a/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_rgb.c
> > +++ b/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_rgb.c
> > @@ -14,7 +14,7 @@
> >
> > #include <drm/drmP.h>
> > #include <drm/drm_atomic_helper.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_of.h>
> > #include <drm/drm_panel.h>
> >
> > diff --git a/drivers/gpu/drm/gma500/psb_intel_drv.h b/drivers/gpu/drm/gma500/psb_intel_drv.h
> > index e05e5399af2d..313552d2a69d 100644
> > --- a/drivers/gpu/drm/gma500/psb_intel_drv.h
> > +++ b/drivers/gpu/drm/gma500/psb_intel_drv.h
> > @@ -23,6 +23,7 @@
> > #include <linux/i2c-algo-bit.h>
> > #include <drm/drm_crtc.h>
> > #include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_encoder.h>
> > #include <linux/gpio.h>
> > #include "gma_display.h"
> > diff --git a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_de.c b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_de.c
> > index a956545774a3..2ac593956529 100644
> > --- a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_de.c
> > +++ b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_de.c
> > @@ -18,7 +18,7 @@
> >
> > #include <drm/drm_atomic.h>
> > #include <drm/drm_atomic_helper.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_plane_helper.h>
> >
> > #include "hibmc_drm_drv.h"
> > diff --git a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c
> > index 68c0c297b3a5..85a701af6530 100644
> > --- a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c
> > +++ b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c
> > @@ -20,7 +20,7 @@
> > #include <linux/module.h>
> >
> > #include <drm/drm_atomic_helper.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> >
> > #include "hibmc_drm_drv.h"
> > #include "hibmc_drm_regs.h"
> > diff --git a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_fbdev.c b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_fbdev.c
> > index edcca1761500..c442aa2dd00f 100644
> > --- a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_fbdev.c
> > +++ b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_fbdev.c
> > @@ -17,7 +17,7 @@
> > */
> >
> > #include <drm/drm_crtc.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_fb_helper.h>
> >
> > #include "hibmc_drm_drv.h"
> > diff --git a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_vdac.c b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_vdac.c
> > index 744956cea749..d2cf7317930a 100644
> > --- a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_vdac.c
> > +++ b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_vdac.c
> > @@ -17,7 +17,7 @@
> > */
> >
> > #include <drm/drm_atomic_helper.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> >
> > #include "hibmc_drm_drv.h"
> > #include "hibmc_drm_regs.h"
> > diff --git a/drivers/gpu/drm/hisilicon/kirin/dw_drm_dsi.c b/drivers/gpu/drm/hisilicon/kirin/dw_drm_dsi.c
> > index b4c7af3ab6ae..788ec1e53794 100644
> > --- a/drivers/gpu/drm/hisilicon/kirin/dw_drm_dsi.c
> > +++ b/drivers/gpu/drm/hisilicon/kirin/dw_drm_dsi.c
> > @@ -19,7 +19,7 @@
> > #include <linux/component.h>
> >
> > #include <drm/drm_of.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_mipi_dsi.h>
> > #include <drm/drm_encoder_slave.h>
> > #include <drm/drm_atomic_helper.h>
> > diff --git a/drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c b/drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c
> > index bb774202a5a1..8ad7ab7ece9f 100644
> > --- a/drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c
> > +++ b/drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c
> > @@ -24,7 +24,7 @@
> >
> > #include <drm/drmP.h>
> > #include <drm/drm_crtc.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_atomic.h>
> > #include <drm/drm_atomic_helper.h>
> > #include <drm/drm_plane_helper.h>
> > diff --git a/drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.c b/drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.c
> > index e6a62d5a00a3..e0f410ce28b2 100644
> > --- a/drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.c
> > +++ b/drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.c
> > @@ -24,7 +24,7 @@
> > #include <drm/drm_fb_cma_helper.h>
> > #include <drm/drm_gem_framebuffer_helper.h>
> > #include <drm/drm_atomic_helper.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_of.h>
> >
> > #include "kirin_drm_drv.h"
> > diff --git a/drivers/gpu/drm/i2c/ch7006_priv.h b/drivers/gpu/drm/i2c/ch7006_priv.h
> > index dc6414af5d79..591621b687de 100644
> > --- a/drivers/gpu/drm/i2c/ch7006_priv.h
> > +++ b/drivers/gpu/drm/i2c/ch7006_priv.h
> > @@ -28,7 +28,7 @@
> > #define __DRM_I2C_CH7006_PRIV_H__
> >
> > #include <drm/drmP.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_encoder_slave.h>
> > #include <drm/i2c/ch7006.h>
> >
> > diff --git a/drivers/gpu/drm/i2c/sil164_drv.c b/drivers/gpu/drm/i2c/sil164_drv.c
> > index c52d7a3af786..14c1fc96a157 100644
> > --- a/drivers/gpu/drm/i2c/sil164_drv.c
> > +++ b/drivers/gpu/drm/i2c/sil164_drv.c
> > @@ -27,7 +27,7 @@
> > #include <linux/module.h>
> >
> > #include <drm/drmP.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_encoder_slave.h>
> > #include <drm/i2c/sil164.h>
> >
> > diff --git a/drivers/gpu/drm/i2c/tda998x_drv.c b/drivers/gpu/drm/i2c/tda998x_drv.c
> > index a7c39f39793f..b98267792306 100644
> > --- a/drivers/gpu/drm/i2c/tda998x_drv.c
> > +++ b/drivers/gpu/drm/i2c/tda998x_drv.c
> > @@ -26,7 +26,7 @@
> >
> > #include <drm/drmP.h>
> > #include <drm/drm_atomic_helper.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_edid.h>
> > #include <drm/drm_of.h>
> > #include <drm/i2c/tda998x.h>
> > diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c
> > index b310a897a4ad..1e639dc886e5 100644
> > --- a/drivers/gpu/drm/i915/i915_drv.c
> > +++ b/drivers/gpu/drm/i915/i915_drv.c
> > @@ -42,7 +42,7 @@
> > #include <acpi/video.h>
> >
> > #include <drm/drmP.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_atomic_helper.h>
> > #include <drm/i915_drm.h>
> >
> > diff --git a/drivers/gpu/drm/i915/intel_crt.c b/drivers/gpu/drm/i915/intel_crt.c
> > index 68f2fb89ece3..4db30862a1cc 100644
> > --- a/drivers/gpu/drm/i915/intel_crt.c
> > +++ b/drivers/gpu/drm/i915/intel_crt.c
> > @@ -30,7 +30,7 @@
> > #include <drm/drmP.h>
> > #include <drm/drm_atomic_helper.h>
> > #include <drm/drm_crtc.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_edid.h>
> > #include "intel_drv.h"
> > #include <drm/i915_drm.h>
> > diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
> > index 8dec25a2dc5f..4eebe84dc366 100644
> > --- a/drivers/gpu/drm/i915/intel_display.c
> > +++ b/drivers/gpu/drm/i915/intel_display.c
> > @@ -42,7 +42,7 @@
> > #include <drm/drm_atomic.h>
> > #include <drm/drm_atomic_helper.h>
> > #include <drm/drm_dp_helper.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_plane_helper.h>
> > #include <drm/drm_rect.h>
> > #include <drm/drm_atomic_uapi.h>
> > diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
> > index e94faa0a42eb..77c86977bef8 100644
> > --- a/drivers/gpu/drm/i915/intel_dp.c
> > +++ b/drivers/gpu/drm/i915/intel_dp.c
> > @@ -35,7 +35,7 @@
> > #include <drm/drmP.h>
> > #include <drm/drm_atomic_helper.h>
> > #include <drm/drm_crtc.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_dp_helper.h>
> > #include <drm/drm_edid.h>
> > #include <drm/drm_hdcp.h>
> > diff --git a/drivers/gpu/drm/i915/intel_dp_mst.c b/drivers/gpu/drm/i915/intel_dp_mst.c
> > index f05427b74e34..32e3c0366876 100644
> > --- a/drivers/gpu/drm/i915/intel_dp_mst.c
> > +++ b/drivers/gpu/drm/i915/intel_dp_mst.c
> > @@ -27,7 +27,7 @@
> > #include "i915_drv.h"
> > #include "intel_drv.h"
> > #include <drm/drm_atomic_helper.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_edid.h>
> >
> > static bool intel_dp_mst_compute_config(struct intel_encoder *encoder,
> > diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
> > index f94a04b4ad87..6dba18425e82 100644
> > --- a/drivers/gpu/drm/i915/intel_drv.h
> > +++ b/drivers/gpu/drm/i915/intel_drv.h
> > @@ -32,7 +32,7 @@
> > #include <drm/i915_drm.h>
> > #include "i915_drv.h"
> > #include <drm/drm_crtc.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_encoder.h>
> > #include <drm/drm_fb_helper.h>
> > #include <drm/drm_dp_dual_mode_helper.h>
> > diff --git a/drivers/gpu/drm/imx/dw_hdmi-imx.c b/drivers/gpu/drm/imx/dw_hdmi-imx.c
> > index 77a26fd3a44a..c7273c395811 100644
> > --- a/drivers/gpu/drm/imx/dw_hdmi-imx.c
> > +++ b/drivers/gpu/drm/imx/dw_hdmi-imx.c
> > @@ -13,7 +13,7 @@
> > #include <linux/regmap.h>
> > #include <drm/drm_of.h>
> > #include <drm/drmP.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_edid.h>
> > #include <drm/drm_encoder_slave.h>
> >
> > diff --git a/drivers/gpu/drm/imx/imx-drm-core.c b/drivers/gpu/drm/imx/imx-drm-core.c
> > index 820c7e3878f0..4db26cbed08f 100644
> > --- a/drivers/gpu/drm/imx/imx-drm-core.c
> > +++ b/drivers/gpu/drm/imx/imx-drm-core.c
> > @@ -13,7 +13,7 @@
> > #include <drm/drm_atomic.h>
> > #include <drm/drm_atomic_helper.h>
> > #include <drm/drm_fb_helper.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_gem_cma_helper.h>
> > #include <drm/drm_gem_framebuffer_helper.h>
> > #include <drm/drm_fb_cma_helper.h>
> > diff --git a/drivers/gpu/drm/imx/imx-ldb.c b/drivers/gpu/drm/imx/imx-ldb.c
> > index 2c5bbe317353..ffa742f64d44 100644
> > --- a/drivers/gpu/drm/imx/imx-ldb.c
> > +++ b/drivers/gpu/drm/imx/imx-ldb.c
> > @@ -12,7 +12,7 @@
> > #include <drm/drm_atomic.h>
> > #include <drm/drm_atomic_helper.h>
> > #include <drm/drm_fb_helper.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_of.h>
> > #include <drm/drm_panel.h>
> > #include <linux/mfd/syscon.h>
> > diff --git a/drivers/gpu/drm/imx/imx-tve.c b/drivers/gpu/drm/imx/imx-tve.c
> > index 293dd5752583..e725af8a0025 100644
> > --- a/drivers/gpu/drm/imx/imx-tve.c
> > +++ b/drivers/gpu/drm/imx/imx-tve.c
> > @@ -17,7 +17,7 @@
> > #include <drm/drmP.h>
> > #include <drm/drm_atomic_helper.h>
> > #include <drm/drm_fb_helper.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <video/imx-ipu-v3.h>
> >
> > #include "imx-drm.h"
> > diff --git a/drivers/gpu/drm/imx/ipuv3-crtc.c b/drivers/gpu/drm/imx/ipuv3-crtc.c
> > index 058b53c0aa7e..95ddcbf2f6eb 100644
> > --- a/drivers/gpu/drm/imx/ipuv3-crtc.c
> > +++ b/drivers/gpu/drm/imx/ipuv3-crtc.c
> > @@ -12,7 +12,7 @@
> > #include <drm/drmP.h>
> > #include <drm/drm_atomic.h>
> > #include <drm/drm_atomic_helper.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <linux/clk.h>
> > #include <linux/errno.h>
> > #include <drm/drm_gem_cma_helper.h>
> > diff --git a/drivers/gpu/drm/imx/parallel-display.c b/drivers/gpu/drm/imx/parallel-display.c
> > index f3ce51121dd6..670919781ded 100644
> > --- a/drivers/gpu/drm/imx/parallel-display.c
> > +++ b/drivers/gpu/drm/imx/parallel-display.c
> > @@ -10,7 +10,7 @@
> > #include <drm/drmP.h>
> > #include <drm/drm_atomic_helper.h>
> > #include <drm/drm_fb_helper.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_of.h>
> > #include <drm/drm_panel.h>
> > #include <linux/videodev2.h>
> > diff --git a/drivers/gpu/drm/mediatek/mtk_dpi.c b/drivers/gpu/drm/mediatek/mtk_dpi.c
> > index 62a9d47df948..c88cc0addb62 100644
> > --- a/drivers/gpu/drm/mediatek/mtk_dpi.c
> > +++ b/drivers/gpu/drm/mediatek/mtk_dpi.c
> > @@ -13,7 +13,7 @@
> > */
> > #include <drm/drmP.h>
> > #include <drm/drm_crtc.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_of.h>
> > #include <linux/kernel.h>
> > #include <linux/component.h>
> > diff --git a/drivers/gpu/drm/mediatek/mtk_drm_crtc.c b/drivers/gpu/drm/mediatek/mtk_drm_crtc.c
> > index 92ecb9bf982c..96709318ad8c 100644
> > --- a/drivers/gpu/drm/mediatek/mtk_drm_crtc.c
> > +++ b/drivers/gpu/drm/mediatek/mtk_drm_crtc.c
> > @@ -14,7 +14,7 @@
> > #include <asm/barrier.h>
> > #include <drm/drmP.h>
> > #include <drm/drm_atomic_helper.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_plane_helper.h>
> > #include <linux/clk.h>
> > #include <linux/pm_runtime.h>
> > diff --git a/drivers/gpu/drm/mediatek/mtk_drm_drv.c b/drivers/gpu/drm/mediatek/mtk_drm_drv.c
> > index 6422e99952fe..8a48a317cbd3 100644
> > --- a/drivers/gpu/drm/mediatek/mtk_drm_drv.c
> > +++ b/drivers/gpu/drm/mediatek/mtk_drm_drv.c
> > @@ -15,7 +15,7 @@
> > #include <drm/drmP.h>
> > #include <drm/drm_atomic.h>
> > #include <drm/drm_atomic_helper.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_gem.h>
> > #include <drm/drm_gem_cma_helper.h>
> > #include <drm/drm_of.h>
> > diff --git a/drivers/gpu/drm/mediatek/mtk_drm_fb.c b/drivers/gpu/drm/mediatek/mtk_drm_fb.c
> > index be5f6f1daf55..330c17b5911f 100644
> > --- a/drivers/gpu/drm/mediatek/mtk_drm_fb.c
> > +++ b/drivers/gpu/drm/mediatek/mtk_drm_fb.c
> > @@ -12,7 +12,7 @@
> > */
> >
> > #include <drm/drmP.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_fb_helper.h>
> > #include <drm/drm_gem.h>
> > #include <drm/drm_gem_framebuffer_helper.h>
> > diff --git a/drivers/gpu/drm/mediatek/mtk_dsi.c b/drivers/gpu/drm/mediatek/mtk_dsi.c
> > index 66df1b177959..477cd145280c 100644
> > --- a/drivers/gpu/drm/mediatek/mtk_dsi.c
> > +++ b/drivers/gpu/drm/mediatek/mtk_dsi.c
> > @@ -13,7 +13,7 @@
> >
> > #include <drm/drmP.h>
> > #include <drm/drm_atomic_helper.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_mipi_dsi.h>
> > #include <drm/drm_panel.h>
> > #include <drm/drm_of.h>
> > diff --git a/drivers/gpu/drm/mediatek/mtk_hdmi.c b/drivers/gpu/drm/mediatek/mtk_hdmi.c
> > index 862f3ec22131..607287797073 100644
> > --- a/drivers/gpu/drm/mediatek/mtk_hdmi.c
> > +++ b/drivers/gpu/drm/mediatek/mtk_hdmi.c
> > @@ -14,7 +14,7 @@
> > #include <drm/drmP.h>
> > #include <drm/drm_atomic_helper.h>
> > #include <drm/drm_crtc.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_edid.h>
> > #include <linux/arm-smccc.h>
> > #include <linux/clk.h>
> > diff --git a/drivers/gpu/drm/meson/meson_crtc.c b/drivers/gpu/drm/meson/meson_crtc.c
> > index 75d97f1b2e8f..ec573c04206b 100644
> > --- a/drivers/gpu/drm/meson/meson_crtc.c
> > +++ b/drivers/gpu/drm/meson/meson_crtc.c
> > @@ -30,7 +30,7 @@
> > #include <drm/drm_atomic.h>
> > #include <drm/drm_atomic_helper.h>
> > #include <drm/drm_flip_work.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> >
> > #include "meson_crtc.h"
> > #include "meson_plane.h"
> > diff --git a/drivers/gpu/drm/meson/meson_drv.c b/drivers/gpu/drm/meson/meson_drv.c
> > index 3ee4d4a4ecba..6b29447fd09e 100644
> > --- a/drivers/gpu/drm/meson/meson_drv.c
> > +++ b/drivers/gpu/drm/meson/meson_drv.c
> > @@ -31,7 +31,7 @@
> > #include <drm/drm_atomic.h>
> > #include <drm/drm_atomic_helper.h>
> > #include <drm/drm_flip_work.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_plane_helper.h>
> > #include <drm/drm_gem_cma_helper.h>
> > #include <drm/drm_gem_framebuffer_helper.h>
> > diff --git a/drivers/gpu/drm/meson/meson_dw_hdmi.c b/drivers/gpu/drm/meson/meson_dw_hdmi.c
> > index 807111ebfdd9..b6299f3f4310 100644
> > --- a/drivers/gpu/drm/meson/meson_dw_hdmi.c
> > +++ b/drivers/gpu/drm/meson/meson_dw_hdmi.c
> > @@ -27,7 +27,7 @@
> >
> > #include <drm/drmP.h>
> > #include <drm/drm_edid.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_atomic_helper.h>
> > #include <drm/bridge/dw_hdmi.h>
> >
> > diff --git a/drivers/gpu/drm/meson/meson_venc_cvbs.c b/drivers/gpu/drm/meson/meson_venc_cvbs.c
> > index f7945bae3b4a..64de3a7026d0 100644
> > --- a/drivers/gpu/drm/meson/meson_venc_cvbs.c
> > +++ b/drivers/gpu/drm/meson/meson_venc_cvbs.c
> > @@ -27,7 +27,7 @@
> >
> > #include <drm/drmP.h>
> > #include <drm/drm_edid.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_atomic_helper.h>
> >
> > #include "meson_venc_cvbs.h"
> > diff --git a/drivers/gpu/drm/mgag200/mgag200_mode.c b/drivers/gpu/drm/mgag200/mgag200_mode.c
> > index acf7bfe68454..7481a3d556ad 100644
> > --- a/drivers/gpu/drm/mgag200/mgag200_mode.c
> > +++ b/drivers/gpu/drm/mgag200/mgag200_mode.c
> > @@ -16,6 +16,7 @@
> > #include <drm/drmP.h>
> > #include <drm/drm_crtc_helper.h>
> > #include <drm/drm_plane_helper.h>
> > +#include <drm/drm_probe_helper.h>
> >
> > #include "mgag200_drv.h"
> >
> > diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c
> > index ca169f013a14..26f21663d56f 100644
> > --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c
> > +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c
> > @@ -22,7 +22,7 @@
> > #include <linux/ktime.h>
> > #include <drm/drm_mode.h>
> > #include <drm/drm_crtc.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_flip_work.h>
> > #include <drm/drm_rect.h>
> >
> > diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c
> > index d31d8281424e..7fa60ffd4cd8 100644
> > --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c
> > +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c
> > @@ -24,7 +24,7 @@
> > #include "msm_drv.h"
> > #include "dpu_kms.h"
> > #include <drm/drm_crtc.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include "dpu_hwio.h"
> > #include "dpu_hw_catalog.h"
> > #include "dpu_hw_intf.h"
> > diff --git a/drivers/gpu/drm/msm/disp/mdp4/mdp4_crtc.c b/drivers/gpu/drm/msm/disp/mdp4/mdp4_crtc.c
> > index 457c29dba4a1..62d173cee0ab 100644
> > --- a/drivers/gpu/drm/msm/disp/mdp4/mdp4_crtc.c
> > +++ b/drivers/gpu/drm/msm/disp/mdp4/mdp4_crtc.c
> > @@ -16,7 +16,7 @@
> > */
> >
> > #include <drm/drm_crtc.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_flip_work.h>
> > #include <drm/drm_mode.h>
> >
> > diff --git a/drivers/gpu/drm/msm/disp/mdp4/mdp4_dsi_encoder.c b/drivers/gpu/drm/msm/disp/mdp4/mdp4_dsi_encoder.c
> > index 6a1ebdace391..86cbe173106e 100644
> > --- a/drivers/gpu/drm/msm/disp/mdp4/mdp4_dsi_encoder.c
> > +++ b/drivers/gpu/drm/msm/disp/mdp4/mdp4_dsi_encoder.c
> > @@ -18,7 +18,7 @@
> > */
> >
> > #include <drm/drm_crtc.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> >
> > #include "mdp4_kms.h"
> >
> > diff --git a/drivers/gpu/drm/msm/disp/mdp4/mdp4_dtv_encoder.c b/drivers/gpu/drm/msm/disp/mdp4/mdp4_dtv_encoder.c
> > index ba8e587f734b..c0ee6f465839 100644
> > --- a/drivers/gpu/drm/msm/disp/mdp4/mdp4_dtv_encoder.c
> > +++ b/drivers/gpu/drm/msm/disp/mdp4/mdp4_dtv_encoder.c
> > @@ -16,7 +16,7 @@
> > */
> >
> > #include <drm/drm_crtc.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> >
> > #include "mdp4_kms.h"
> >
> > diff --git a/drivers/gpu/drm/msm/disp/mdp4/mdp4_lcdc_encoder.c b/drivers/gpu/drm/msm/disp/mdp4/mdp4_lcdc_encoder.c
> > index 2bfb39082f54..473255f09f30 100644
> > --- a/drivers/gpu/drm/msm/disp/mdp4/mdp4_lcdc_encoder.c
> > +++ b/drivers/gpu/drm/msm/disp/mdp4/mdp4_lcdc_encoder.c
> > @@ -17,7 +17,7 @@
> > */
> >
> > #include <drm/drm_crtc.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> >
> > #include "mdp4_kms.h"
> >
> > diff --git a/drivers/gpu/drm/msm/disp/mdp5/mdp5_cmd_encoder.c b/drivers/gpu/drm/msm/disp/mdp5/mdp5_cmd_encoder.c
> > index d6f79dc755b4..b7e17651d897 100644
> > --- a/drivers/gpu/drm/msm/disp/mdp5/mdp5_cmd_encoder.c
> > +++ b/drivers/gpu/drm/msm/disp/mdp5/mdp5_cmd_encoder.c
> > @@ -12,7 +12,7 @@
> > */
> >
> > #include <drm/drm_crtc.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> >
> > #include "mdp5_kms.h"
> >
> > diff --git a/drivers/gpu/drm/msm/disp/mdp5/mdp5_crtc.c b/drivers/gpu/drm/msm/disp/mdp5/mdp5_crtc.c
> > index b1da9ce54379..6b5f09721dd4 100644
> > --- a/drivers/gpu/drm/msm/disp/mdp5/mdp5_crtc.c
> > +++ b/drivers/gpu/drm/msm/disp/mdp5/mdp5_crtc.c
> > @@ -19,7 +19,7 @@
> > #include <linux/sort.h>
> > #include <drm/drm_mode.h>
> > #include <drm/drm_crtc.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_flip_work.h>
> >
> > #include "mdp5_kms.h"
> > diff --git a/drivers/gpu/drm/msm/disp/mdp5/mdp5_encoder.c b/drivers/gpu/drm/msm/disp/mdp5/mdp5_encoder.c
> > index fcd44d1d1068..b32c662dcb60 100644
> > --- a/drivers/gpu/drm/msm/disp/mdp5/mdp5_encoder.c
> > +++ b/drivers/gpu/drm/msm/disp/mdp5/mdp5_encoder.c
> > @@ -17,7 +17,7 @@
> > */
> >
> > #include <drm/drm_crtc.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> >
> > #include "mdp5_kms.h"
> >
> > diff --git a/drivers/gpu/drm/msm/msm_drv.h b/drivers/gpu/drm/msm/msm_drv.h
> > index 9d11f321f5a9..19f4751e0436 100644
> > --- a/drivers/gpu/drm/msm/msm_drv.h
> > +++ b/drivers/gpu/drm/msm/msm_drv.h
> > @@ -39,7 +39,7 @@
> > #include <drm/drmP.h>
> > #include <drm/drm_atomic.h>
> > #include <drm/drm_atomic_helper.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_plane_helper.h>
> > #include <drm/drm_fb_helper.h>
> > #include <drm/msm_drm.h>
> > diff --git a/drivers/gpu/drm/msm/msm_fb.c b/drivers/gpu/drm/msm/msm_fb.c
> > index 2a7348aeb38d..22bb2247c52a 100644
> > --- a/drivers/gpu/drm/msm/msm_fb.c
> > +++ b/drivers/gpu/drm/msm/msm_fb.c
> > @@ -16,7 +16,7 @@
> > */
> >
> > #include <drm/drm_crtc.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_gem_framebuffer_helper.h>
> >
> > #include "msm_drv.h"
> > diff --git a/drivers/gpu/drm/mxsfb/mxsfb_crtc.c b/drivers/gpu/drm/mxsfb/mxsfb_crtc.c
> > index 24b1f0c1432e..38cdde9841e2 100644
> > --- a/drivers/gpu/drm/mxsfb/mxsfb_crtc.c
> > +++ b/drivers/gpu/drm/mxsfb/mxsfb_crtc.c
> > @@ -19,7 +19,7 @@
> > #include <drm/drmP.h>
> > #include <drm/drm_atomic_helper.h>
> > #include <drm/drm_crtc.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_fb_helper.h>
> > #include <drm/drm_fb_cma_helper.h>
> > #include <drm/drm_gem_cma_helper.h>
> > diff --git a/drivers/gpu/drm/mxsfb/mxsfb_drv.c b/drivers/gpu/drm/mxsfb/mxsfb_drv.c
> > index 88ba003979e6..9c117352fca9 100644
> > --- a/drivers/gpu/drm/mxsfb/mxsfb_drv.c
> > +++ b/drivers/gpu/drm/mxsfb/mxsfb_drv.c
> > @@ -31,7 +31,7 @@
> > #include <drm/drm_atomic.h>
> > #include <drm/drm_atomic_helper.h>
> > #include <drm/drm_crtc.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_fb_helper.h>
> > #include <drm/drm_fb_cma_helper.h>
> > #include <drm/drm_gem_cma_helper.h>
> > diff --git a/drivers/gpu/drm/mxsfb/mxsfb_out.c b/drivers/gpu/drm/mxsfb/mxsfb_out.c
> > index e5edf016a439..1bec96baf948 100644
> > --- a/drivers/gpu/drm/mxsfb/mxsfb_out.c
> > +++ b/drivers/gpu/drm/mxsfb/mxsfb_out.c
> > @@ -16,7 +16,7 @@
> > #include <drm/drm_atomic.h>
> > #include <drm/drm_atomic_helper.h>
> > #include <drm/drm_crtc.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_fb_cma_helper.h>
> > #include <drm/drm_gem_cma_helper.h>
> > #include <drm/drm_of.h>
> > diff --git a/drivers/gpu/drm/nouveau/dispnv04/tvnv17.c b/drivers/gpu/drm/nouveau/dispnv04/tvnv17.c
> > index 3e82db41f8a4..51667d13d95a 100644
> > --- a/drivers/gpu/drm/nouveau/dispnv04/tvnv17.c
> > +++ b/drivers/gpu/drm/nouveau/dispnv04/tvnv17.c
> > @@ -26,6 +26,7 @@
> >
> > #include <drm/drmP.h>
> > #include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include "nouveau_drv.h"
> > #include "nouveau_reg.h"
> > #include "nouveau_encoder.h"
> > diff --git a/drivers/gpu/drm/nouveau/dispnv50/disp.c b/drivers/gpu/drm/nouveau/dispnv50/disp.c
> > index 4a56841958c8..79225913a25c 100644
> > --- a/drivers/gpu/drm/nouveau/dispnv50/disp.c
> > +++ b/drivers/gpu/drm/nouveau/dispnv50/disp.c
> > @@ -32,7 +32,7 @@
> >
> > #include <drm/drmP.h>
> > #include <drm/drm_atomic_helper.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_dp_helper.h>
> > #include <drm/drm_fb_helper.h>
> > #include <drm/drm_plane_helper.h>
> > diff --git a/drivers/gpu/drm/nouveau/nouveau_connector.c b/drivers/gpu/drm/nouveau/nouveau_connector.c
> > index fd80661dff92..2a0ded1d732e 100644
> > --- a/drivers/gpu/drm/nouveau/nouveau_connector.c
> > +++ b/drivers/gpu/drm/nouveau/nouveau_connector.c
> > @@ -33,6 +33,7 @@
> > #include <drm/drm_atomic_helper.h>
> > #include <drm/drm_edid.h>
> > #include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_atomic.h>
> >
> > #include "nouveau_reg.h"
> > diff --git a/drivers/gpu/drm/nouveau/nouveau_display.c b/drivers/gpu/drm/nouveau/nouveau_display.c
> > index 5d273a655479..0b58709f0406 100644
> > --- a/drivers/gpu/drm/nouveau/nouveau_display.c
> > +++ b/drivers/gpu/drm/nouveau/nouveau_display.c
> > @@ -29,6 +29,7 @@
> > #include <drm/drm_atomic.h>
> > #include <drm/drm_atomic_helper.h>
> > #include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_fb_helper.h>
> >
> > #include <nvif/class.h>
> > diff --git a/drivers/gpu/drm/omapdrm/omap_connector.c b/drivers/gpu/drm/omapdrm/omap_connector.c
> > index b81302c4bf9e..4fef6293f6c0 100644
> > --- a/drivers/gpu/drm/omapdrm/omap_connector.c
> > +++ b/drivers/gpu/drm/omapdrm/omap_connector.c
> > @@ -17,7 +17,7 @@
> >
> > #include <drm/drm_atomic_helper.h>
> > #include <drm/drm_crtc.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> >
> > #include "omap_drv.h"
> >
> > diff --git a/drivers/gpu/drm/omapdrm/omap_crtc.c b/drivers/gpu/drm/omapdrm/omap_crtc.c
> > index caffc547ef97..aab1b1a49a87 100644
> > --- a/drivers/gpu/drm/omapdrm/omap_crtc.c
> > +++ b/drivers/gpu/drm/omapdrm/omap_crtc.c
> > @@ -18,7 +18,7 @@
> > #include <drm/drm_atomic.h>
> > #include <drm/drm_atomic_helper.h>
> > #include <drm/drm_crtc.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_mode.h>
> > #include <drm/drm_plane_helper.h>
> > #include <linux/math64.h>
> > diff --git a/drivers/gpu/drm/omapdrm/omap_drv.c b/drivers/gpu/drm/omapdrm/omap_drv.c
> > index 5e67d58cbc28..3a78f0cf3321 100644
> > --- a/drivers/gpu/drm/omapdrm/omap_drv.c
> > +++ b/drivers/gpu/drm/omapdrm/omap_drv.c
> > @@ -21,7 +21,7 @@
> >
> > #include <drm/drm_atomic.h>
> > #include <drm/drm_atomic_helper.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_fb_helper.h>
> >
> > #include "omap_dmm_tiler.h"
> > diff --git a/drivers/gpu/drm/omapdrm/omap_drv.h b/drivers/gpu/drm/omapdrm/omap_drv.h
> > index bd7f2c227a25..513ae8ab5e64 100644
> > --- a/drivers/gpu/drm/omapdrm/omap_drv.h
> > +++ b/drivers/gpu/drm/omapdrm/omap_drv.h
> > @@ -23,7 +23,7 @@
> > #include <linux/workqueue.h>
> >
> > #include <drm/drmP.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_gem.h>
> > #include <drm/omap_drm.h>
> >
> > diff --git a/drivers/gpu/drm/omapdrm/omap_encoder.c b/drivers/gpu/drm/omapdrm/omap_encoder.c
> > index 933ebc9f9faa..a0e0f200f677 100644
> > --- a/drivers/gpu/drm/omapdrm/omap_encoder.c
> > +++ b/drivers/gpu/drm/omapdrm/omap_encoder.c
> > @@ -18,7 +18,7 @@
> > #include <linux/list.h>
> >
> > #include <drm/drm_crtc.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_edid.h>
> >
> > #include "omap_drv.h"
> > diff --git a/drivers/gpu/drm/omapdrm/omap_fb.c b/drivers/gpu/drm/omapdrm/omap_fb.c
> > index 4d264fd554d8..314add2bbc9a 100644
> > --- a/drivers/gpu/drm/omapdrm/omap_fb.c
> > +++ b/drivers/gpu/drm/omapdrm/omap_fb.c
> > @@ -18,7 +18,7 @@
> > #include <linux/seq_file.h>
> >
> > #include <drm/drm_crtc.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_gem_framebuffer_helper.h>
> >
> > #include "omap_dmm_tiler.h"
> > diff --git a/drivers/gpu/drm/pl111/pl111_drv.c b/drivers/gpu/drm/pl111/pl111_drv.c
> > index 33e0483d62ae..9dbb11cfbb20 100644
> > --- a/drivers/gpu/drm/pl111/pl111_drv.c
> > +++ b/drivers/gpu/drm/pl111/pl111_drv.c
> > @@ -64,7 +64,7 @@
> >
> > #include <drm/drmP.h>
> > #include <drm/drm_atomic_helper.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_gem_cma_helper.h>
> > #include <drm/drm_gem_framebuffer_helper.h>
> > #include <drm/drm_fb_helper.h>
> > diff --git a/drivers/gpu/drm/qxl/qxl_display.c b/drivers/gpu/drm/qxl/qxl_display.c
> > index 72a1784dae54..1de03d60bf23 100644
> > --- a/drivers/gpu/drm/qxl/qxl_display.c
> > +++ b/drivers/gpu/drm/qxl/qxl_display.c
> > @@ -24,9 +24,9 @@
> > */
> >
> > #include <linux/crc32.h>
> > -#include <drm/drm_crtc_helper.h>
> > #include <drm/drm_plane_helper.h>
> > #include <drm/drm_atomic_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_atomic.h>
> > #include <drm/drm_gem_framebuffer_helper.h>
> >
> > diff --git a/drivers/gpu/drm/qxl/qxl_drv.c b/drivers/gpu/drm/qxl/qxl_drv.c
> > index 13c8a662f9b4..fd987d62d902 100644
> > --- a/drivers/gpu/drm/qxl/qxl_drv.c
> > +++ b/drivers/gpu/drm/qxl/qxl_drv.c
> > @@ -33,7 +33,8 @@
> >
> > #include <drm/drmP.h>
> > #include <drm/drm.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_modeset_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include "qxl_drv.h"
> > #include "qxl_object.h"
> >
> > diff --git a/drivers/gpu/drm/qxl/qxl_fb.c b/drivers/gpu/drm/qxl/qxl_fb.c
> > index a819d24225d2..996cdb8fb4fa 100644
> > --- a/drivers/gpu/drm/qxl/qxl_fb.c
> > +++ b/drivers/gpu/drm/qxl/qxl_fb.c
> > @@ -28,7 +28,7 @@
> > #include <drm/drmP.h>
> > #include <drm/drm.h>
> > #include <drm/drm_crtc.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_fb_helper.h>
> > #include <drm/drm_gem_framebuffer_helper.h>
> >
> > diff --git a/drivers/gpu/drm/qxl/qxl_kms.c b/drivers/gpu/drm/qxl/qxl_kms.c
> > index 15238a413f9d..85e13afa1808 100644
> > --- a/drivers/gpu/drm/qxl/qxl_kms.c
> > +++ b/drivers/gpu/drm/qxl/qxl_kms.c
> > @@ -26,7 +26,7 @@
> > #include "qxl_drv.h"
> > #include "qxl_object.h"
> >
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <linux/io-mapping.h>
> >
> > int qxl_log_level;
> > diff --git a/drivers/gpu/drm/radeon/radeon_acpi.c b/drivers/gpu/drm/radeon/radeon_acpi.c
> > index 8d3251a10cd4..224cc21bbe38 100644
> > --- a/drivers/gpu/drm/radeon/radeon_acpi.c
> > +++ b/drivers/gpu/drm/radeon/radeon_acpi.c
> > @@ -29,6 +29,7 @@
> > #include <acpi/video.h>
> > #include <drm/drmP.h>
> > #include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include "radeon.h"
> > #include "radeon_acpi.h"
> > #include "atom.h"
> > diff --git a/drivers/gpu/drm/radeon/radeon_connectors.c b/drivers/gpu/drm/radeon/radeon_connectors.c
> > index 414642e5b7a3..88239c1e7c5b 100644
> > --- a/drivers/gpu/drm/radeon/radeon_connectors.c
> > +++ b/drivers/gpu/drm/radeon/radeon_connectors.c
> > @@ -26,6 +26,7 @@
> > #include <drm/drmP.h>
> > #include <drm/drm_edid.h>
> > #include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_fb_helper.h>
> > #include <drm/drm_dp_mst_helper.h>
> > #include <drm/radeon_drm.h>
> > diff --git a/drivers/gpu/drm/radeon/radeon_device.c b/drivers/gpu/drm/radeon/radeon_device.c
> > index 59c8a6647ff2..53f29a115104 100644
> > --- a/drivers/gpu/drm/radeon/radeon_device.c
> > +++ b/drivers/gpu/drm/radeon/radeon_device.c
> > @@ -29,6 +29,7 @@
> > #include <linux/slab.h>
> > #include <drm/drmP.h>
> > #include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_cache.h>
> > #include <drm/radeon_drm.h>
> > #include <linux/pm_runtime.h>
> > diff --git a/drivers/gpu/drm/radeon/radeon_display.c b/drivers/gpu/drm/radeon/radeon_display.c
> > index 92332226e5cf..e252ab3832a5 100644
> > --- a/drivers/gpu/drm/radeon/radeon_display.c
> > +++ b/drivers/gpu/drm/radeon/radeon_display.c
> > @@ -32,6 +32,7 @@
> >
> > #include <linux/pm_runtime.h>
> > #include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_gem_framebuffer_helper.h>
> > #include <drm/drm_fb_helper.h>
> > #include <drm/drm_plane_helper.h>
> > diff --git a/drivers/gpu/drm/radeon/radeon_dp_mst.c b/drivers/gpu/drm/radeon/radeon_dp_mst.c
> > index a0c70e27ab65..8d85540bbb43 100644
> > --- a/drivers/gpu/drm/radeon/radeon_dp_mst.c
> > +++ b/drivers/gpu/drm/radeon/radeon_dp_mst.c
> > @@ -3,6 +3,7 @@
> > #include <drm/drmP.h>
> > #include <drm/drm_dp_mst_helper.h>
> > #include <drm/drm_fb_helper.h>
> > +#include <drm/drm_probe_helper.h>
> >
> > #include "radeon.h"
> > #include "atom.h"
> > diff --git a/drivers/gpu/drm/radeon/radeon_drv.c b/drivers/gpu/drm/radeon/radeon_drv.c
> > index 99c63eeb2866..8897c3d18fbb 100644
> > --- a/drivers/gpu/drm/radeon/radeon_drv.c
> > +++ b/drivers/gpu/drm/radeon/radeon_drv.c
> > @@ -43,6 +43,7 @@
> > #include <drm/drm_fb_helper.h>
> >
> > #include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> >
> > /*
> > * KMS wrapper.
> > diff --git a/drivers/gpu/drm/radeon/radeon_irq_kms.c b/drivers/gpu/drm/radeon/radeon_irq_kms.c
> > index afaf10db47cc..1d5e3ba7383e 100644
> > --- a/drivers/gpu/drm/radeon/radeon_irq_kms.c
> > +++ b/drivers/gpu/drm/radeon/radeon_irq_kms.c
> > @@ -27,6 +27,7 @@
> > */
> > #include <drm/drmP.h>
> > #include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/radeon_drm.h>
> > #include "radeon_reg.h"
> > #include "radeon.h"
> > diff --git a/drivers/gpu/drm/rcar-du/rcar_du_crtc.c b/drivers/gpu/drm/rcar-du/rcar_du_crtc.c
> > index 90dacab67be5..b15d2b3a07f1 100644
> > --- a/drivers/gpu/drm/rcar-du/rcar_du_crtc.c
> > +++ b/drivers/gpu/drm/rcar-du/rcar_du_crtc.c
> > @@ -15,7 +15,7 @@
> > #include <drm/drm_atomic.h>
> > #include <drm/drm_atomic_helper.h>
> > #include <drm/drm_crtc.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_fb_cma_helper.h>
> > #include <drm/drm_gem_cma_helper.h>
> > #include <drm/drm_plane_helper.h>
> > diff --git a/drivers/gpu/drm/rcar-du/rcar_du_drv.c b/drivers/gpu/drm/rcar-du/rcar_du_drv.c
> > index f50a3b1864bb..60862858d041 100644
> > --- a/drivers/gpu/drm/rcar-du/rcar_du_drv.c
> > +++ b/drivers/gpu/drm/rcar-du/rcar_du_drv.c
> > @@ -19,7 +19,7 @@
> >
> > #include <drm/drmP.h>
> > #include <drm/drm_atomic_helper.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_fb_cma_helper.h>
> > #include <drm/drm_fb_helper.h>
> > #include <drm/drm_gem_cma_helper.h>
> > diff --git a/drivers/gpu/drm/rcar-du/rcar_du_encoder.c b/drivers/gpu/drm/rcar-du/rcar_du_encoder.c
> > index 1877764bd6d9..9e751c9be9f2 100644
> > --- a/drivers/gpu/drm/rcar-du/rcar_du_encoder.c
> > +++ b/drivers/gpu/drm/rcar-du/rcar_du_encoder.c
> > @@ -11,7 +11,7 @@
> >
> > #include <drm/drmP.h>
> > #include <drm/drm_crtc.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_panel.h>
> >
> > #include "rcar_du_drv.h"
> > diff --git a/drivers/gpu/drm/rcar-du/rcar_du_kms.c b/drivers/gpu/drm/rcar-du/rcar_du_kms.c
> > index 9c7007d45408..af337c918d84 100644
> > --- a/drivers/gpu/drm/rcar-du/rcar_du_kms.c
> > +++ b/drivers/gpu/drm/rcar-du/rcar_du_kms.c
> > @@ -11,7 +11,7 @@
> > #include <drm/drm_atomic.h>
> > #include <drm/drm_atomic_helper.h>
> > #include <drm/drm_crtc.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_fb_cma_helper.h>
> > #include <drm/drm_gem_cma_helper.h>
> > #include <drm/drm_gem_framebuffer_helper.h>
> > diff --git a/drivers/gpu/drm/rcar-du/rcar_du_plane.c b/drivers/gpu/drm/rcar-du/rcar_du_plane.c
> > index 39d5ae3fdf72..b7fa278ca745 100644
> > --- a/drivers/gpu/drm/rcar-du/rcar_du_plane.c
> > +++ b/drivers/gpu/drm/rcar-du/rcar_du_plane.c
> > @@ -11,7 +11,7 @@
> > #include <drm/drm_atomic.h>
> > #include <drm/drm_atomic_helper.h>
> > #include <drm/drm_crtc.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_fb_cma_helper.h>
> > #include <drm/drm_gem_cma_helper.h>
> > #include <drm/drm_plane_helper.h>
> > diff --git a/drivers/gpu/drm/rcar-du/rcar_du_vsp.c b/drivers/gpu/drm/rcar-du/rcar_du_vsp.c
> > index 4576119e7777..35b2a4d3ae74 100644
> > --- a/drivers/gpu/drm/rcar-du/rcar_du_vsp.c
> > +++ b/drivers/gpu/drm/rcar-du/rcar_du_vsp.c
> > @@ -10,7 +10,7 @@
> > #include <drm/drmP.h>
> > #include <drm/drm_atomic_helper.h>
> > #include <drm/drm_crtc.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_fb_cma_helper.h>
> > #include <drm/drm_gem_cma_helper.h>
> > #include <drm/drm_gem_framebuffer_helper.h>
> > diff --git a/drivers/gpu/drm/rcar-du/rcar_lvds.c b/drivers/gpu/drm/rcar-du/rcar_lvds.c
> > index 534a128a869d..24cb74e30fcd 100644
> > --- a/drivers/gpu/drm/rcar-du/rcar_lvds.c
> > +++ b/drivers/gpu/drm/rcar-du/rcar_lvds.c
> > @@ -19,7 +19,7 @@
> > #include <drm/drm_atomic.h>
> > #include <drm/drm_atomic_helper.h>
> > #include <drm/drm_bridge.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_panel.h>
> >
> > #include "rcar_lvds_regs.h"
> > diff --git a/drivers/gpu/drm/rockchip/analogix_dp-rockchip.c b/drivers/gpu/drm/rockchip/analogix_dp-rockchip.c
> > index 080f05352195..2f6b4a4a9d6b 100644
> > --- a/drivers/gpu/drm/rockchip/analogix_dp-rockchip.c
> > +++ b/drivers/gpu/drm/rockchip/analogix_dp-rockchip.c
> > @@ -21,7 +21,7 @@
> > #include <linux/clk.h>
> >
> > #include <drm/drmP.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_dp_helper.h>
> > #include <drm/drm_of.h>
> > #include <drm/drm_panel.h>
> > diff --git a/drivers/gpu/drm/rockchip/cdn-dp-core.c b/drivers/gpu/drm/rockchip/cdn-dp-core.c
> > index 8ad0d773dc33..7896b3c28676 100644
> > --- a/drivers/gpu/drm/rockchip/cdn-dp-core.c
> > +++ b/drivers/gpu/drm/rockchip/cdn-dp-core.c
> > @@ -14,7 +14,7 @@
> >
> > #include <drm/drmP.h>
> > #include <drm/drm_atomic_helper.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_dp_helper.h>
> > #include <drm/drm_edid.h>
> > #include <drm/drm_of.h>
> > diff --git a/drivers/gpu/drm/rockchip/cdn-dp-core.h b/drivers/gpu/drm/rockchip/cdn-dp-core.h
> > index f57e296401b8..7000b53dddcb 100644
> > --- a/drivers/gpu/drm/rockchip/cdn-dp-core.h
> > +++ b/drivers/gpu/drm/rockchip/cdn-dp-core.h
> > @@ -16,7 +16,7 @@
> > #define _CDN_DP_CORE_H
> >
> > #include <drm/drmP.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_dp_helper.h>
> > #include <drm/drm_panel.h>
> > #include "rockchip_drm_drv.h"
> > diff --git a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
> > index 89c63cfde5c8..1e2cc2b02a31 100644
> > --- a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
> > +++ b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
> > @@ -16,7 +16,7 @@
> >
> > #include <drm/drm_of.h>
> > #include <drm/drmP.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_edid.h>
> > #include <drm/bridge/dw_hdmi.h>
> >
> > diff --git a/drivers/gpu/drm/rockchip/inno_hdmi.c b/drivers/gpu/drm/rockchip/inno_hdmi.c
> > index 1c02b3e61299..9db4a706b450 100644
> > --- a/drivers/gpu/drm/rockchip/inno_hdmi.c
> > +++ b/drivers/gpu/drm/rockchip/inno_hdmi.c
> > @@ -26,7 +26,7 @@
> > #include <drm/drm_of.h>
> > #include <drm/drmP.h>
> > #include <drm/drm_atomic_helper.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_edid.h>
> >
> > #include "rockchip_drm_drv.h"
> > diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_drv.c b/drivers/gpu/drm/rockchip/rockchip_drm_drv.c
> > index 37f9a3b651ab..c4aa2ef82e57 100644
> > --- a/drivers/gpu/drm/rockchip/rockchip_drm_drv.c
> > +++ b/drivers/gpu/drm/rockchip/rockchip_drm_drv.c
> > @@ -15,7 +15,7 @@
> > */
> >
> > #include <drm/drmP.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_fb_helper.h>
> > #include <drm/drm_gem_cma_helper.h>
> > #include <drm/drm_of.h>
> > diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_fb.c b/drivers/gpu/drm/rockchip/rockchip_drm_fb.c
> > index ea18cb2a76c0..567605fc2898 100644
> > --- a/drivers/gpu/drm/rockchip/rockchip_drm_fb.c
> > +++ b/drivers/gpu/drm/rockchip/rockchip_drm_fb.c
> > @@ -17,7 +17,7 @@
> > #include <drm/drmP.h>
> > #include <drm/drm_atomic.h>
> > #include <drm/drm_fb_helper.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_gem_framebuffer_helper.h>
> >
> > #include "rockchip_drm_drv.h"
> > diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_fbdev.c b/drivers/gpu/drm/rockchip/rockchip_drm_fbdev.c
> > index 361604e51361..7bd3b89022be 100644
> > --- a/drivers/gpu/drm/rockchip/rockchip_drm_fbdev.c
> > +++ b/drivers/gpu/drm/rockchip/rockchip_drm_fbdev.c
> > @@ -15,7 +15,7 @@
> > #include <drm/drm.h>
> > #include <drm/drmP.h>
> > #include <drm/drm_fb_helper.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> >
> > #include "rockchip_drm_drv.h"
> > #include "rockchip_drm_gem.h"
> > diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_psr.c b/drivers/gpu/drm/rockchip/rockchip_drm_psr.c
> > index 01ff3c858875..b165e248c2e6 100644
> > --- a/drivers/gpu/drm/rockchip/rockchip_drm_psr.c
> > +++ b/drivers/gpu/drm/rockchip/rockchip_drm_psr.c
> > @@ -13,7 +13,7 @@
> > */
> >
> > #include <drm/drmP.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> >
> > #include "rockchip_drm_drv.h"
> > #include "rockchip_drm_psr.h"
> > diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
> > index fb70fb486fbf..e78906bb6502 100644
> > --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
> > +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
> > @@ -16,7 +16,7 @@
> > #include <drm/drmP.h>
> > #include <drm/drm_atomic.h>
> > #include <drm/drm_crtc.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_flip_work.h>
> > #include <drm/drm_plane_helper.h>
> > #ifdef CONFIG_DRM_ANALOGIX_DP
> > diff --git a/drivers/gpu/drm/rockchip/rockchip_lvds.c b/drivers/gpu/drm/rockchip/rockchip_lvds.c
> > index 456bd9f13bae..fd21901880e6 100644
> > --- a/drivers/gpu/drm/rockchip/rockchip_lvds.c
> > +++ b/drivers/gpu/drm/rockchip/rockchip_lvds.c
> > @@ -16,7 +16,7 @@
> >
> > #include <drm/drmP.h>
> > #include <drm/drm_atomic_helper.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_dp_helper.h>
> > #include <drm/drm_panel.h>
> > #include <drm/drm_of.h>
> > diff --git a/drivers/gpu/drm/rockchip/rockchip_rgb.c b/drivers/gpu/drm/rockchip/rockchip_rgb.c
> > index 96ac1458a59c..bec197c9a3cf 100644
> > --- a/drivers/gpu/drm/rockchip/rockchip_rgb.c
> > +++ b/drivers/gpu/drm/rockchip/rockchip_rgb.c
> > @@ -16,7 +16,7 @@
> >
> > #include <drm/drmP.h>
> > #include <drm/drm_atomic_helper.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_dp_helper.h>
> > #include <drm/drm_panel.h>
> > #include <drm/drm_of.h>
> > diff --git a/drivers/gpu/drm/sti/sti_crtc.c b/drivers/gpu/drm/sti/sti_crtc.c
> > index ed76e52eb213..7aa3b1d04b78 100644
> > --- a/drivers/gpu/drm/sti/sti_crtc.c
> > +++ b/drivers/gpu/drm/sti/sti_crtc.c
> > @@ -11,7 +11,7 @@
> > #include <drm/drmP.h>
> > #include <drm/drm_atomic.h>
> > #include <drm/drm_atomic_helper.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_plane_helper.h>
> >
> > #include "sti_compositor.h"
> > diff --git a/drivers/gpu/drm/sti/sti_drv.c b/drivers/gpu/drm/sti/sti_drv.c
> > index ac54e0f9caea..dc932ac58ba9 100644
> > --- a/drivers/gpu/drm/sti/sti_drv.c
> > +++ b/drivers/gpu/drm/sti/sti_drv.c
> > @@ -14,7 +14,7 @@
> >
> > #include <drm/drm_atomic.h>
> > #include <drm/drm_atomic_helper.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_gem_cma_helper.h>
> > #include <drm/drm_gem_framebuffer_helper.h>
> > #include <drm/drm_fb_helper.h>
> > diff --git a/drivers/gpu/drm/sti/sti_dvo.c b/drivers/gpu/drm/sti/sti_dvo.c
> > index b08376b7611b..d0fcb20e9614 100644
> > --- a/drivers/gpu/drm/sti/sti_dvo.c
> > +++ b/drivers/gpu/drm/sti/sti_dvo.c
> > @@ -13,7 +13,7 @@
> >
> > #include <drm/drmP.h>
> > #include <drm/drm_atomic_helper.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_panel.h>
> >
> > #include "sti_awg_utils.h"
> > diff --git a/drivers/gpu/drm/sti/sti_hda.c b/drivers/gpu/drm/sti/sti_hda.c
> > index 19b9b5ed1297..40a0b392fa51 100644
> > --- a/drivers/gpu/drm/sti/sti_hda.c
> > +++ b/drivers/gpu/drm/sti/sti_hda.c
> > @@ -12,7 +12,7 @@
> >
> > #include <drm/drmP.h>
> > #include <drm/drm_atomic_helper.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> >
> > /* HDformatter registers */
> > #define HDA_ANA_CFG 0x0000
> > diff --git a/drivers/gpu/drm/sti/sti_hdmi.c b/drivers/gpu/drm/sti/sti_hdmi.c
> > index ccf718404a1c..989bf2cb0249 100644
> > --- a/drivers/gpu/drm/sti/sti_hdmi.c
> > +++ b/drivers/gpu/drm/sti/sti_hdmi.c
> > @@ -15,7 +15,7 @@
> >
> > #include <drm/drmP.h>
> > #include <drm/drm_atomic_helper.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_edid.h>
> >
> > #include <sound/hdmi-codec.h>
> > diff --git a/drivers/gpu/drm/sti/sti_tvout.c b/drivers/gpu/drm/sti/sti_tvout.c
> > index ea4a3b87fa55..2f9d075f0a66 100644
> > --- a/drivers/gpu/drm/sti/sti_tvout.c
> > +++ b/drivers/gpu/drm/sti/sti_tvout.c
> > @@ -15,7 +15,7 @@
> > #include <linux/seq_file.h>
> >
> > #include <drm/drmP.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> >
> > #include "sti_crtc.h"
> > #include "sti_drv.h"
> > diff --git a/drivers/gpu/drm/stm/drv.c b/drivers/gpu/drm/stm/drv.c
> > index 8dec001b9d37..c64c5f27a229 100644
> > --- a/drivers/gpu/drm/stm/drv.c
> > +++ b/drivers/gpu/drm/stm/drv.c
> > @@ -13,7 +13,7 @@
> >
> > #include <drm/drm_atomic.h>
> > #include <drm/drm_atomic_helper.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_fb_helper.h>
> > #include <drm/drm_fb_cma_helper.h>
> > #include <drm/drm_gem_cma_helper.h>
> > diff --git a/drivers/gpu/drm/stm/ltdc.c b/drivers/gpu/drm/stm/ltdc.c
> > index 61dd661aa0ac..8189b5df7ece 100644
> > --- a/drivers/gpu/drm/stm/ltdc.c
> > +++ b/drivers/gpu/drm/stm/ltdc.c
> > @@ -16,7 +16,7 @@
> >
> > #include <drm/drm_atomic.h>
> > #include <drm/drm_atomic_helper.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_fb_cma_helper.h>
> > #include <drm/drm_gem_cma_helper.h>
> > #include <drm/drm_of.h>
> > diff --git a/drivers/gpu/drm/sun4i/sun4i_backend.c b/drivers/gpu/drm/sun4i/sun4i_backend.c
> > index 9e9255ee59cd..df9d3f548568 100644
> > --- a/drivers/gpu/drm/sun4i/sun4i_backend.c
> > +++ b/drivers/gpu/drm/sun4i/sun4i_backend.c
> > @@ -14,7 +14,7 @@
> > #include <drm/drm_atomic.h>
> > #include <drm/drm_atomic_helper.h>
> > #include <drm/drm_crtc.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_fb_cma_helper.h>
> > #include <drm/drm_gem_cma_helper.h>
> > #include <drm/drm_plane_helper.h>
> > diff --git a/drivers/gpu/drm/sun4i/sun4i_crtc.c b/drivers/gpu/drm/sun4i/sun4i_crtc.c
> > index 3eedf335a935..3d58d8951474 100644
> > --- a/drivers/gpu/drm/sun4i/sun4i_crtc.c
> > +++ b/drivers/gpu/drm/sun4i/sun4i_crtc.c
> > @@ -13,7 +13,7 @@
> > #include <drm/drmP.h>
> > #include <drm/drm_atomic_helper.h>
> > #include <drm/drm_crtc.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_modes.h>
> >
> > #include <linux/clk-provider.h>
> > diff --git a/drivers/gpu/drm/sun4i/sun4i_drv.c b/drivers/gpu/drm/sun4i/sun4i_drv.c
> > index 9e4c375ccc96..45c85be54ce0 100644
> > --- a/drivers/gpu/drm/sun4i/sun4i_drv.c
> > +++ b/drivers/gpu/drm/sun4i/sun4i_drv.c
> > @@ -16,7 +16,7 @@
> > #include <linux/of_reserved_mem.h>
> >
> > #include <drm/drmP.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_fb_cma_helper.h>
> > #include <drm/drm_gem_cma_helper.h>
> > #include <drm/drm_fb_helper.h>
> > diff --git a/drivers/gpu/drm/sun4i/sun4i_hdmi_enc.c b/drivers/gpu/drm/sun4i/sun4i_hdmi_enc.c
> > index 061d2e0d9011..60b3e44e6792 100644
> > --- a/drivers/gpu/drm/sun4i/sun4i_hdmi_enc.c
> > +++ b/drivers/gpu/drm/sun4i/sun4i_hdmi_enc.c
> > @@ -11,7 +11,7 @@
> >
> > #include <drm/drmP.h>
> > #include <drm/drm_atomic_helper.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_edid.h>
> > #include <drm/drm_encoder.h>
> > #include <drm/drm_of.h>
> > diff --git a/drivers/gpu/drm/sun4i/sun4i_lvds.c b/drivers/gpu/drm/sun4i/sun4i_lvds.c
> > index e7eb0d1e17be..87ba8db71a54 100644
> > --- a/drivers/gpu/drm/sun4i/sun4i_lvds.c
> > +++ b/drivers/gpu/drm/sun4i/sun4i_lvds.c
> > @@ -8,7 +8,7 @@
> >
> > #include <drm/drmP.h>
> > #include <drm/drm_atomic_helper.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_of.h>
> > #include <drm/drm_panel.h>
> >
> > diff --git a/drivers/gpu/drm/sun4i/sun4i_rgb.c b/drivers/gpu/drm/sun4i/sun4i_rgb.c
> > index f4a22689eb54..f6f7f4de2e69 100644
> > --- a/drivers/gpu/drm/sun4i/sun4i_rgb.c
> > +++ b/drivers/gpu/drm/sun4i/sun4i_rgb.c
> > @@ -14,7 +14,7 @@
> >
> > #include <drm/drmP.h>
> > #include <drm/drm_atomic_helper.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_of.h>
> > #include <drm/drm_panel.h>
> >
> > diff --git a/drivers/gpu/drm/sun4i/sun4i_tcon.c b/drivers/gpu/drm/sun4i/sun4i_tcon.c
> > index 0420f5c978b9..3a09d8e28c25 100644
> > --- a/drivers/gpu/drm/sun4i/sun4i_tcon.c
> > +++ b/drivers/gpu/drm/sun4i/sun4i_tcon.c
> > @@ -14,7 +14,7 @@
> > #include <drm/drm_atomic_helper.h>
> > #include <drm/drm_connector.h>
> > #include <drm/drm_crtc.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_encoder.h>
> > #include <drm/drm_modes.h>
> > #include <drm/drm_of.h>
> > diff --git a/drivers/gpu/drm/sun4i/sun4i_tv.c b/drivers/gpu/drm/sun4i/sun4i_tv.c
> > index 1a838d208211..62fbdef8fffb 100644
> > --- a/drivers/gpu/drm/sun4i/sun4i_tv.c
> > +++ b/drivers/gpu/drm/sun4i/sun4i_tv.c
> > @@ -18,7 +18,7 @@
> >
> > #include <drm/drmP.h>
> > #include <drm/drm_atomic_helper.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_of.h>
> > #include <drm/drm_panel.h>
> >
> > diff --git a/drivers/gpu/drm/sun4i/sun6i_mipi_dsi.c b/drivers/gpu/drm/sun4i/sun6i_mipi_dsi.c
> > index e3b34a345546..dfa2d15d7b36 100644
> > --- a/drivers/gpu/drm/sun4i/sun6i_mipi_dsi.c
> > +++ b/drivers/gpu/drm/sun4i/sun6i_mipi_dsi.c
> > @@ -19,7 +19,7 @@
> >
> > #include <drm/drmP.h>
> > #include <drm/drm_atomic_helper.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_mipi_dsi.h>
> > #include <drm/drm_panel.h>
> >
> > diff --git a/drivers/gpu/drm/sun4i/sun8i_dw_hdmi.c b/drivers/gpu/drm/sun4i/sun8i_dw_hdmi.c
> > index dc47720c99ba..92bc1004dc36 100644
> > --- a/drivers/gpu/drm/sun4i/sun8i_dw_hdmi.c
> > +++ b/drivers/gpu/drm/sun4i/sun8i_dw_hdmi.c
> > @@ -10,7 +10,7 @@
> >
> > #include <drm/drm_of.h>
> > #include <drm/drmP.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> >
> > #include "sun8i_dw_hdmi.h"
> > #include "sun8i_tcon_top.h"
> > diff --git a/drivers/gpu/drm/sun4i/sun8i_mixer.c b/drivers/gpu/drm/sun4i/sun8i_mixer.c
> > index 44a9ba7d8433..9ef1b494e48d 100644
> > --- a/drivers/gpu/drm/sun4i/sun8i_mixer.c
> > +++ b/drivers/gpu/drm/sun4i/sun8i_mixer.c
> > @@ -14,7 +14,7 @@
> > #include <drm/drmP.h>
> > #include <drm/drm_atomic_helper.h>
> > #include <drm/drm_crtc.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_fb_cma_helper.h>
> > #include <drm/drm_gem_cma_helper.h>
> > #include <drm/drm_plane_helper.h>
> > diff --git a/drivers/gpu/drm/sun4i/sun8i_ui_layer.c b/drivers/gpu/drm/sun4i/sun8i_ui_layer.c
> > index 18534263a05d..e29cbd60a59b 100644
> > --- a/drivers/gpu/drm/sun4i/sun8i_ui_layer.c
> > +++ b/drivers/gpu/drm/sun4i/sun8i_ui_layer.c
> > @@ -16,7 +16,7 @@
> > #include <drm/drm_atomic.h>
> > #include <drm/drm_atomic_helper.h>
> > #include <drm/drm_crtc.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_fb_cma_helper.h>
> > #include <drm/drm_gem_cma_helper.h>
> > #include <drm/drm_gem_framebuffer_helper.h>
> > diff --git a/drivers/gpu/drm/sun4i/sun8i_vi_layer.c b/drivers/gpu/drm/sun4i/sun8i_vi_layer.c
> > index 87be898f9b7a..1669460106de 100644
> > --- a/drivers/gpu/drm/sun4i/sun8i_vi_layer.c
> > +++ b/drivers/gpu/drm/sun4i/sun8i_vi_layer.c
> > @@ -10,7 +10,7 @@
> > #include <drm/drm_atomic.h>
> > #include <drm/drm_atomic_helper.h>
> > #include <drm/drm_crtc.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_fb_cma_helper.h>
> > #include <drm/drm_gem_cma_helper.h>
> > #include <drm/drm_gem_framebuffer_helper.h>
> > diff --git a/drivers/gpu/drm/tegra/drm.h b/drivers/gpu/drm/tegra/drm.h
> > index 1012335bb489..40d38f3d9d9e 100644
> > --- a/drivers/gpu/drm/tegra/drm.h
> > +++ b/drivers/gpu/drm/tegra/drm.h
> > @@ -17,7 +17,7 @@
> >
> > #include <drm/drmP.h>
> > #include <drm/drm_atomic.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_edid.h>
> > #include <drm/drm_encoder.h>
> > #include <drm/drm_fb_helper.h>
> > diff --git a/drivers/gpu/drm/tegra/hdmi.c b/drivers/gpu/drm/tegra/hdmi.c
> > index 0082468f703c..11f5e5668b14 100644
> > --- a/drivers/gpu/drm/tegra/hdmi.c
> > +++ b/drivers/gpu/drm/tegra/hdmi.c
> > @@ -18,7 +18,7 @@
> >
> > #include <drm/drm_atomic_helper.h>
> > #include <drm/drm_crtc.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> >
> > #include <sound/hda_verbs.h>
> >
> > diff --git a/drivers/gpu/drm/tegra/hub.c b/drivers/gpu/drm/tegra/hub.c
> > index 6112d9042979..176d1c1ad941 100644
> > --- a/drivers/gpu/drm/tegra/hub.c
> > +++ b/drivers/gpu/drm/tegra/hub.c
> > @@ -19,7 +19,7 @@
> > #include <drm/drmP.h>
> > #include <drm/drm_atomic.h>
> > #include <drm/drm_atomic_helper.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> >
> > #include "drm.h"
> > #include "dc.h"
> > diff --git a/drivers/gpu/drm/tinydrm/core/tinydrm-core.c b/drivers/gpu/drm/tinydrm/core/tinydrm-core.c
> > index 01a6f2d42440..d4174a564336 100644
> > --- a/drivers/gpu/drm/tinydrm/core/tinydrm-core.c
> > +++ b/drivers/gpu/drm/tinydrm/core/tinydrm-core.c
> > @@ -9,7 +9,7 @@
> >
> > #include <drm/drm_atomic.h>
> > #include <drm/drm_atomic_helper.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_fb_helper.h>
> > #include <drm/drm_gem_framebuffer_helper.h>
> > #include <drm/tinydrm/tinydrm.h>
> > diff --git a/drivers/gpu/drm/tinydrm/core/tinydrm-pipe.c b/drivers/gpu/drm/tinydrm/core/tinydrm-pipe.c
> > index eacfc0ec8ff1..50ab05a65ca4 100644
> > --- a/drivers/gpu/drm/tinydrm/core/tinydrm-pipe.c
> > +++ b/drivers/gpu/drm/tinydrm/core/tinydrm-pipe.c
> > @@ -8,7 +8,7 @@
> > */
> >
> > #include <drm/drm_atomic_helper.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_gem_framebuffer_helper.h>
> > #include <drm/drm_modes.h>
> > #include <drm/tinydrm/tinydrm.h>
> > diff --git a/drivers/gpu/drm/tve200/tve200_drv.c b/drivers/gpu/drm/tve200/tve200_drv.c
> > index 28e2d03c0ccf..138a9a158254 100644
> > --- a/drivers/gpu/drm/tve200/tve200_drv.c
> > +++ b/drivers/gpu/drm/tve200/tve200_drv.c
> > @@ -43,7 +43,7 @@
> >
> > #include <drm/drmP.h>
> > #include <drm/drm_atomic_helper.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_gem_cma_helper.h>
> > #include <drm/drm_gem_framebuffer_helper.h>
> > #include <drm/drm_fb_helper.h>
> > diff --git a/drivers/gpu/drm/udl/udl_connector.c b/drivers/gpu/drm/udl/udl_connector.c
> > index 68e88bed77ca..66885c24590f 100644
> > --- a/drivers/gpu/drm/udl/udl_connector.c
> > +++ b/drivers/gpu/drm/udl/udl_connector.c
> > @@ -14,6 +14,7 @@
> > #include <drm/drm_crtc.h>
> > #include <drm/drm_edid.h>
> > #include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include "udl_connector.h"
> > #include "udl_drv.h"
> >
> > diff --git a/drivers/gpu/drm/udl/udl_drv.c b/drivers/gpu/drm/udl/udl_drv.c
> > index a63e3011e971..22cd2d13e272 100644
> > --- a/drivers/gpu/drm/udl/udl_drv.c
> > +++ b/drivers/gpu/drm/udl/udl_drv.c
> > @@ -9,6 +9,7 @@
> > #include <linux/module.h>
> > #include <drm/drmP.h>
> > #include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include "udl_drv.h"
> >
> > static int udl_usb_suspend(struct usb_interface *interface,
> > diff --git a/drivers/gpu/drm/udl/udl_main.c b/drivers/gpu/drm/udl/udl_main.c
> > index 1b014d92855b..9086d0d1b880 100644
> > --- a/drivers/gpu/drm/udl/udl_main.c
> > +++ b/drivers/gpu/drm/udl/udl_main.c
> > @@ -12,6 +12,7 @@
> > */
> > #include <drm/drmP.h>
> > #include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include "udl_drv.h"
> >
> > /* -BULK_SIZE as per usb-skeleton. Can we get full page and avoid overhead? */
> > diff --git a/drivers/gpu/drm/vc4/vc4_crtc.c b/drivers/gpu/drm/vc4/vc4_crtc.c
> > index 3ce136ba8791..11ec7c31824e 100644
> > --- a/drivers/gpu/drm/vc4/vc4_crtc.c
> > +++ b/drivers/gpu/drm/vc4/vc4_crtc.c
> > @@ -34,7 +34,7 @@
> >
> > #include <drm/drm_atomic.h>
> > #include <drm/drm_atomic_helper.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_atomic_uapi.h>
> > #include <linux/clk.h>
> > #include <drm/drm_fb_cma_helper.h>
> > diff --git a/drivers/gpu/drm/vc4/vc4_dpi.c b/drivers/gpu/drm/vc4/vc4_dpi.c
> > index f185812970da..a4d5a13598ba 100644
> > --- a/drivers/gpu/drm/vc4/vc4_dpi.c
> > +++ b/drivers/gpu/drm/vc4/vc4_dpi.c
> > @@ -24,7 +24,7 @@
> >
> > #include <drm/drm_atomic_helper.h>
> > #include <drm/drm_bridge.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_edid.h>
> > #include <drm/drm_of.h>
> > #include <drm/drm_panel.h>
> > diff --git a/drivers/gpu/drm/vc4/vc4_dsi.c b/drivers/gpu/drm/vc4/vc4_dsi.c
> > index 0c607eb33d7e..4c2f5e143d11 100644
> > --- a/drivers/gpu/drm/vc4/vc4_dsi.c
> > +++ b/drivers/gpu/drm/vc4/vc4_dsi.c
> > @@ -30,7 +30,7 @@
> > */
> >
> > #include <drm/drm_atomic_helper.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_edid.h>
> > #include <drm/drm_mipi_dsi.h>
> > #include <drm/drm_of.h>
> > diff --git a/drivers/gpu/drm/vc4/vc4_hdmi.c b/drivers/gpu/drm/vc4/vc4_hdmi.c
> > index fd5522fd179e..ce3cc2a6a169 100644
> > --- a/drivers/gpu/drm/vc4/vc4_hdmi.c
> > +++ b/drivers/gpu/drm/vc4/vc4_hdmi.c
> > @@ -43,7 +43,7 @@
> > */
> >
> > #include <drm/drm_atomic_helper.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_edid.h>
> > #include <linux/clk.h>
> > #include <linux/component.h>
> > diff --git a/drivers/gpu/drm/vc4/vc4_kms.c b/drivers/gpu/drm/vc4/vc4_kms.c
> > index 1f94b9affe4b..ae7b311893df 100644
> > --- a/drivers/gpu/drm/vc4/vc4_kms.c
> > +++ b/drivers/gpu/drm/vc4/vc4_kms.c
> > @@ -17,7 +17,7 @@
> > #include <drm/drm_crtc.h>
> > #include <drm/drm_atomic.h>
> > #include <drm/drm_atomic_helper.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_plane_helper.h>
> > #include <drm/drm_gem_framebuffer_helper.h>
> > #include "vc4_drv.h"
> > diff --git a/drivers/gpu/drm/vc4/vc4_txp.c b/drivers/gpu/drm/vc4/vc4_txp.c
> > index 6e23c50168f9..8ac1b95d01c4 100644
> > --- a/drivers/gpu/drm/vc4/vc4_txp.c
> > +++ b/drivers/gpu/drm/vc4/vc4_txp.c
> > @@ -9,7 +9,7 @@
> >
> > #include <drm/drm_atomic_helper.h>
> > #include <drm/drm_fb_cma_helper.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_edid.h>
> > #include <drm/drm_panel.h>
> > #include <drm/drm_writeback.h>
> > diff --git a/drivers/gpu/drm/vc4/vc4_vec.c b/drivers/gpu/drm/vc4/vc4_vec.c
> > index 8e7facb6514e..e8b09c670ee6 100644
> > --- a/drivers/gpu/drm/vc4/vc4_vec.c
> > +++ b/drivers/gpu/drm/vc4/vc4_vec.c
> > @@ -25,7 +25,7 @@
> > */
> >
> > #include <drm/drm_atomic_helper.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_edid.h>
> > #include <drm/drm_panel.h>
> > #include <linux/clk.h>
> > diff --git a/drivers/gpu/drm/virtio/virtgpu_display.c b/drivers/gpu/drm/virtio/virtgpu_display.c
> > index b5580b11a063..774f476dd9cd 100644
> > --- a/drivers/gpu/drm/virtio/virtgpu_display.c
> > +++ b/drivers/gpu/drm/virtio/virtgpu_display.c
> > @@ -26,7 +26,7 @@
> > */
> >
> > #include "virtgpu_drv.h"
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_atomic_helper.h>
> > #include <drm/drm_gem_framebuffer_helper.h>
> >
> > diff --git a/drivers/gpu/drm/virtio/virtgpu_drv.h b/drivers/gpu/drm/virtio/virtgpu_drv.h
> > index 1deb41d42ea4..0c793d91c62b 100644
> > --- a/drivers/gpu/drm/virtio/virtgpu_drv.h
> > +++ b/drivers/gpu/drm/virtio/virtgpu_drv.h
> > @@ -34,7 +34,7 @@
> > #include <drm/drmP.h>
> > #include <drm/drm_gem.h>
> > #include <drm/drm_atomic.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_encoder.h>
> > #include <drm/drm_fb_helper.h>
> > #include <drm/ttm/ttm_bo_api.h>
> > diff --git a/drivers/gpu/drm/vkms/vkms_crtc.c b/drivers/gpu/drm/vkms/vkms_crtc.c
> > index 177bbcb38306..2696c370fe9b 100644
> > --- a/drivers/gpu/drm/vkms/vkms_crtc.c
> > +++ b/drivers/gpu/drm/vkms/vkms_crtc.c
> > @@ -8,7 +8,7 @@
> >
> > #include "vkms_drv.h"
> > #include <drm/drm_atomic_helper.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> >
> > static void _vblank_handle(struct vkms_output *output)
> > {
> > diff --git a/drivers/gpu/drm/vkms/vkms_drv.c b/drivers/gpu/drm/vkms/vkms_drv.c
> > index 83087877565c..b446f60e7d8a 100644
> > --- a/drivers/gpu/drm/vkms/vkms_drv.c
> > +++ b/drivers/gpu/drm/vkms/vkms_drv.c
> > @@ -16,7 +16,7 @@
> >
> > #include <linux/module.h>
> > #include <drm/drm_gem.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_atomic_helper.h>
> > #include <drm/drm_gem_framebuffer_helper.h>
> > #include <drm/drm_fb_helper.h>
> > diff --git a/drivers/gpu/drm/vkms/vkms_output.c b/drivers/gpu/drm/vkms/vkms_output.c
> > index 271a0eb9042c..878ff3142473 100644
> > --- a/drivers/gpu/drm/vkms/vkms_output.c
> > +++ b/drivers/gpu/drm/vkms/vkms_output.c
> > @@ -7,7 +7,7 @@
> > */
> >
> > #include "vkms_drv.h"
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_atomic_helper.h>
> >
> > static void vkms_connector_destroy(struct drm_connector *connector)
> > diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.h b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.h
> > index 655abbcd4058..d560f6159bb1 100644
> > --- a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.h
> > +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.h
> > @@ -29,7 +29,7 @@
> > #define VMWGFX_KMS_H_
> >
> > #include <drm/drmP.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_encoder.h>
> > #include "vmwgfx_drv.h"
> >
> > diff --git a/drivers/gpu/drm/xen/xen_drm_front.c b/drivers/gpu/drm/xen/xen_drm_front.c
> > index 6b6d5ab82ec3..fd390dd64b13 100644
> > --- a/drivers/gpu/drm/xen/xen_drm_front.c
> > +++ b/drivers/gpu/drm/xen/xen_drm_front.c
> > @@ -10,7 +10,7 @@
> >
> > #include <drm/drmP.h>
> > #include <drm/drm_atomic_helper.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_gem.h>
> >
> > #include <linux/of_device.h>
> > diff --git a/drivers/gpu/drm/xen/xen_drm_front_conn.c b/drivers/gpu/drm/xen/xen_drm_front_conn.c
> > index 54af2669b1b3..9f5f31f77f1e 100644
> > --- a/drivers/gpu/drm/xen/xen_drm_front_conn.c
> > +++ b/drivers/gpu/drm/xen/xen_drm_front_conn.c
> > @@ -9,7 +9,7 @@
> > */
> >
> > #include <drm/drm_atomic_helper.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> >
> > #include <video/videomode.h>
> >
> > diff --git a/drivers/gpu/drm/xen/xen_drm_front_gem.c b/drivers/gpu/drm/xen/xen_drm_front_gem.c
> > index 47ff019d3aef..9cf847e26cf1 100644
> > --- a/drivers/gpu/drm/xen/xen_drm_front_gem.c
> > +++ b/drivers/gpu/drm/xen/xen_drm_front_gem.c
> > @@ -11,7 +11,7 @@
> > #include "xen_drm_front_gem.h"
> >
> > #include <drm/drmP.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_fb_helper.h>
> > #include <drm/drm_gem.h>
> >
> > diff --git a/drivers/gpu/drm/xen/xen_drm_front_kms.c b/drivers/gpu/drm/xen/xen_drm_front_kms.c
> > index a3479eb72d79..f536d9f5a796 100644
> > --- a/drivers/gpu/drm/xen/xen_drm_front_kms.c
> > +++ b/drivers/gpu/drm/xen/xen_drm_front_kms.c
> > @@ -13,7 +13,7 @@
> > #include <drm/drmP.h>
> > #include <drm/drm_atomic.h>
> > #include <drm/drm_atomic_helper.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_gem.h>
> > #include <drm/drm_gem_framebuffer_helper.h>
> >
> > diff --git a/drivers/gpu/drm/zte/zx_drm_drv.c b/drivers/gpu/drm/zte/zx_drm_drv.c
> > index f5ea32ae8600..91eaaa475d36 100644
> > --- a/drivers/gpu/drm/zte/zx_drm_drv.c
> > +++ b/drivers/gpu/drm/zte/zx_drm_drv.c
> > @@ -18,7 +18,7 @@
> >
> > #include <drm/drm_atomic_helper.h>
> > #include <drm/drm_crtc.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_fb_cma_helper.h>
> > #include <drm/drm_fb_helper.h>
> > #include <drm/drm_gem_cma_helper.h>
> > diff --git a/drivers/gpu/drm/zte/zx_hdmi.c b/drivers/gpu/drm/zte/zx_hdmi.c
> > index 78655269d843..8bfb011ce655 100644
> > --- a/drivers/gpu/drm/zte/zx_hdmi.c
> > +++ b/drivers/gpu/drm/zte/zx_hdmi.c
> > @@ -20,7 +20,7 @@
> > #include <linux/of_device.h>
> >
> > #include <drm/drm_atomic_helper.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_edid.h>
> > #include <drm/drm_of.h>
> > #include <drm/drmP.h>
> > diff --git a/drivers/gpu/drm/zte/zx_tvenc.c b/drivers/gpu/drm/zte/zx_tvenc.c
> > index b73afb212fb2..87b5d86413d2 100644
> > --- a/drivers/gpu/drm/zte/zx_tvenc.c
> > +++ b/drivers/gpu/drm/zte/zx_tvenc.c
> > @@ -14,7 +14,7 @@
> > #include <linux/regmap.h>
> >
> > #include <drm/drm_atomic_helper.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drmP.h>
> >
> > #include "zx_drm_drv.h"
> > diff --git a/drivers/gpu/drm/zte/zx_vga.c b/drivers/gpu/drm/zte/zx_vga.c
> > index 23d1ff4355a0..e14c1d709740 100644
> > --- a/drivers/gpu/drm/zte/zx_vga.c
> > +++ b/drivers/gpu/drm/zte/zx_vga.c
> > @@ -13,7 +13,7 @@
> > #include <linux/regmap.h>
> >
> > #include <drm/drm_atomic_helper.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drmP.h>
> >
> > #include "zx_drm_drv.h"
> > diff --git a/drivers/gpu/drm/zte/zx_vou.c b/drivers/gpu/drm/zte/zx_vou.c
> > index 442311d31110..9d97f4417698 100644
> > --- a/drivers/gpu/drm/zte/zx_vou.c
> > +++ b/drivers/gpu/drm/zte/zx_vou.c
> > @@ -15,7 +15,7 @@
> >
> > #include <drm/drm_atomic_helper.h>
> > #include <drm/drm_crtc.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_fb_cma_helper.h>
> > #include <drm/drm_fb_helper.h>
> > #include <drm/drm_gem_cma_helper.h>
> > diff --git a/drivers/staging/vboxvideo/vbox_irq.c b/drivers/staging/vboxvideo/vbox_irq.c
> > index 09f858ec1369..b9b716776b7b 100644
> > --- a/drivers/staging/vboxvideo/vbox_irq.c
> > +++ b/drivers/staging/vboxvideo/vbox_irq.c
> > @@ -27,7 +27,7 @@
> > * Hans de Goede <hdegoede@redhat.com>
> > */
> >
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> >
> > #include "vbox_drv.h"
> > #include "vboxvideo.h"
> > diff --git a/drivers/staging/vboxvideo/vbox_mode.c b/drivers/staging/vboxvideo/vbox_mode.c
> > index 6acc965247ff..c72e4f251bc0 100644
> > --- a/drivers/staging/vboxvideo/vbox_mode.c
> > +++ b/drivers/staging/vboxvideo/vbox_mode.c
> > @@ -33,7 +33,7 @@
> > */
> > #include <linux/export.h>
> > #include <drm/drm_atomic.h>
> > -#include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_probe_helper.h>
> > #include <drm/drm_plane_helper.h>
> > #include <drm/drm_atomic_helper.h>
> >
> > diff --git a/include/drm/drm_crtc_helper.h b/include/drm/drm_crtc_helper.h
> > index 0ee9a96b70da..a6d520d5b6ca 100644
> > --- a/include/drm/drm_crtc_helper.h
> > +++ b/include/drm/drm_crtc_helper.h
> > @@ -58,20 +58,4 @@ int drm_helper_connector_dpms(struct drm_connector *connector, int mode);
> > void drm_helper_resume_force_mode(struct drm_device *dev);
> > int drm_helper_force_disable_all(struct drm_device *dev);
> >
> > -/* drm_probe_helper.c */
> > -int drm_helper_probe_single_connector_modes(struct drm_connector
> > - *connector, uint32_t maxX,
> > - uint32_t maxY);
> > -int drm_helper_probe_detect(struct drm_connector *connector,
> > - struct drm_modeset_acquire_ctx *ctx,
> > - bool force);
> > -void drm_kms_helper_poll_init(struct drm_device *dev);
> > -void drm_kms_helper_poll_fini(struct drm_device *dev);
> > -bool drm_helper_hpd_irq_event(struct drm_device *dev);
> > -void drm_kms_helper_hotplug_event(struct drm_device *dev);
> > -
> > -void drm_kms_helper_poll_disable(struct drm_device *dev);
> > -void drm_kms_helper_poll_enable(struct drm_device *dev);
> > -bool drm_kms_helper_is_poll_worker(void);
> > -
> > #endif
> > diff --git a/include/drm/drm_probe_helper.h b/include/drm/drm_probe_helper.h
> > new file mode 100644
> > index 000000000000..96c060c16a1e
> > --- /dev/null
> > +++ b/include/drm/drm_probe_helper.h
> > @@ -0,0 +1,50 @@
> > +/*
> > + * Copyright © 2006 Keith Packard
> > + * Copyright © 2007-2008 Dave Airlie
> > + * Copyright © 2007-2008 Intel Corporation
> > + * Jesse Barnes <jesse.barnes@intel.com>
> > + *
> > + * Permission is hereby granted, free of charge, to any person obtaining a
> > + * copy of this software and associated documentation files (the "Software"),
> > + * to deal in the Software without restriction, including without limitation
> > + * the rights to use, copy, modify, merge, publish, distribute, sublicense,
> > + * and/or sell copies of the Software, and to permit persons to whom the
> > + * Software is furnished to do so, subject to the following conditions:
> > + *
> > + * The above copyright notice and this permission notice shall be included in
> > + * all copies or substantial portions of the Software.
> > + *
> > + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
> > + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
> > + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
> > + * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
> > + * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
> > + * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
> > + * OTHER DEALINGS IN THE SOFTWARE.
> > + */
> > +
> > +#ifndef __DRM_PROBE_HELPER_H__
> > +#define __DRM_PROBE_HELPER_H__
> > +
> > +#include <linux/types.h>
> > +
> > +struct drm_connector;
> > +struct drm_device;
> > +struct drm_modeset_acquire_ctx;
> > +
> > +int drm_helper_probe_single_connector_modes(struct drm_connector
> > + *connector, uint32_t maxX,
> > + uint32_t maxY);
> > +int drm_helper_probe_detect(struct drm_connector *connector,
> > + struct drm_modeset_acquire_ctx *ctx,
> > + bool force);
> > +void drm_kms_helper_poll_init(struct drm_device *dev);
> > +void drm_kms_helper_poll_fini(struct drm_device *dev);
> > +bool drm_helper_hpd_irq_event(struct drm_device *dev);
> > +void drm_kms_helper_hotplug_event(struct drm_device *dev);
> > +
> > +void drm_kms_helper_poll_disable(struct drm_device *dev);
> > +void drm_kms_helper_poll_enable(struct drm_device *dev);
> > +bool drm_kms_helper_is_poll_worker(void);
> > +
> > +#endif
> > --
> > 2.20.0.rc1
> >
> >
> > _______________________________________________
> > Linux-rockchip mailing list
> > Linux-rockchip@lists.infradead.org
> > http://lists.infradead.org/mailman/listinfo/linux-rockchip
>
> --
> ________________________________________________________
> ________| |_______
> \ | With enough courage, you can do without a reputation | /
> \ | -- Rhett Butler | /
> / |________________________________________________________| \
> /__________) (_________\
--
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
^ permalink raw reply
* Re: [PATCH RFC 3/4] barriers: convert a control to a data dependency
From: Peter Zijlstra @ 2019-01-07 9:46 UTC (permalink / raw)
To: Michael S. Tsirkin
Cc: Andrea Parri, linux-doc, Akira Yokosawa, Will Deacon,
virtualization, David Howells, linux-arch, Jonathan Corbet,
linux-sparse, Alan Stern, Matt Turner, Paul E. McKenney,
Boqun Feng, Arnd Bergmann, Daniel Lustig, Nicholas Piggin,
Ivan Kokshaysky, Luc Maranget, Richard Henderson, Jade Alglave,
netdev, linux-kernel, linux-alpha, Luc Van Oostenryck
In-Reply-To: <20190106231756-mutt-send-email-mst@kernel.org>
On Sun, Jan 06, 2019 at 11:23:07PM -0500, Michael S. Tsirkin wrote:
> On Mon, Jan 07, 2019 at 11:58:23AM +0800, Jason Wang wrote:
> > On 2019/1/3 上午4:57, Michael S. Tsirkin wrote:
> > > +#if defined(COMPILER_HAS_OPTIMIZER_HIDE_VAR) && \
> > > + !defined(ARCH_NEEDS_READ_BARRIER_DEPENDS)
> > > +
> > > +#define dependent_ptr_mb(ptr, val) ({ \
> > > + long dependent_ptr_mb_val = (long)(val); \
> > > + long dependent_ptr_mb_ptr = (long)(ptr) - dependent_ptr_mb_val; \
> > > + \
> > > + BUILD_BUG_ON(sizeof(val) > sizeof(long)); \
> > > + OPTIMIZER_HIDE_VAR(dependent_ptr_mb_val); \
> > > + (typeof(ptr))(dependent_ptr_mb_ptr + dependent_ptr_mb_val); \
> > > +})
> > > +
> > > +#else
> > > +
> > > +#define dependent_ptr_mb(ptr, val) ({ mb(); (ptr); })
> >
> >
> > So for the example of patch 4, we'd better fall back to rmb() or need a
> > dependent_ptr_rmb()?
> >
> > Thanks
>
> You mean for strongly ordered architectures like Intel?
> Yes, maybe it makes sense to have dependent_ptr_smp_rmb,
> dependent_ptr_dma_rmb and dependent_ptr_virt_rmb.
>
> mb variant is unused right now so I'll remove it.
How about naming the thing: dependent_ptr() ? That is without any (r)mb
implications at all. The address dependency is strictly weaker than an
rmb in that it will only order the two loads in qestion and not, like
rmb, any prior to any later load.
_______________________________________________
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/virtualization
^ permalink raw reply
* Re: [PATCH 7/7] drm: Split out drm_probe_helper.h
From: Daniel Vetter @ 2019-01-07 10:24 UTC (permalink / raw)
To: Liviu Dudau
Cc: linux-samsung-soc, nouveau, Daniel Vetter, Daniel Vetter,
Intel Graphics Development, etnaviv, amd-gfx, virtualization,
linux-renesas-soc, linux-rockchip, linux-mediatek,
DRI Development, Daniel Vetter, linux-arm-msm, linux-tegra,
spice-devel, linux-amlogic, xen-devel, freedreno, linux-stm32,
linux-arm-kernel
In-Reply-To: <20190107100841.GH20342@bart.dudau.co.uk>
On Mon, Jan 07, 2019 at 10:08:41AM +0000, Liviu Dudau wrote:
> On Mon, Jan 07, 2019 at 10:45:23AM +0100, Daniel Vetter wrote:
> > On Sat, Dec 29, 2018 at 10:56:39PM +0000, Liviu Dudau wrote:
> > > On Mon, Dec 10, 2018 at 11:11:33AM +0100, Daniel Vetter wrote:
> > > > Having the probe helper stuff (which pretty much everyone needs) in
> > > > the drm_crtc_helper.h file (which atomic drivers should never need) is
> > > > confusing. Split them out.
> > > >
> > > > To make sure I actually achieved the goal here I went through all
> > > > drivers. And indeed, all atomic drivers are now free of
> > > > drm_crtc_helper.h includes.
> > > >
> > > > Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
> > > > Cc: linux-arm-kernel@lists.infradead.org
> > > > Cc: virtualization@lists.linux-foundation.org
> > > > Cc: etnaviv@lists.freedesktop.org
> > > > Cc: linux-samsung-soc@vger.kernel.org
> > > > Cc: intel-gfx@lists.freedesktop.org
> > > > Cc: linux-mediatek@lists.infradead.org
> > > > Cc: linux-amlogic@lists.infradead.org
> > > > Cc: linux-arm-msm@vger.kernel.org
> > > > Cc: freedreno@lists.freedesktop.org
> > > > Cc: nouveau@lists.freedesktop.org
> > > > Cc: spice-devel@lists.freedesktop.org
> > > > Cc: amd-gfx@lists.freedesktop.org
> > > > Cc: linux-renesas-soc@vger.kernel.org
> > > > Cc: linux-rockchip@lists.infradead.org
> > > > Cc: linux-stm32@st-md-mailman.stormreply.com
> > > > Cc: linux-tegra@vger.kernel.org
> > > > Cc: xen-devel@lists.xen.org
> > >
> > > Daniel, please fix whatever script you're using to generate the list
> > > of people being Cc-ed. ./scripts/get_maintainer.pl generates my work
> > > email address for HDLCD and the Mali DP maintainers for malidp changes,
> > > but we were not Cc-ed and I've only found this patch in the linux-rockchip
> > > ML because there was not enough traffic there to be hidden under other patches.
> >
> > The number of Cc recipients this will generate is too much to be
> > acceptable for smtp servers. My scripts do generate the full lists, but
> > for patches like this here I need to delete a lot of them. So what I ended
> > up doing is deleting all the people and leaving the mailing lists behind.
>
> OK, but Mali DP maintainers *is* a mailing list, exactly to cut off the number of
> people you need to Cc in order to reach someone that takes care of Mali Display
> drivers.
Hm right, that went wrong.
> > Plan B would be to split this up into a massive per-driver patch series,
> > which I found overkill in this case. But for anything with functional
> > changes that's what I usually end up doing.
> >
> > Hope that explains what happened.
> >
> > btw the tool I'm using is dim add-missing-cc from the maintainer-tools
> > repos.
>
> I'll have a look to see what it does and how I can add Mali DP mailing list
> to that as a minimum :)
You need to list it as L:, not M:, then it'll be listed at the bottom of
the Cc: pile in the mailing list sections. I won't be able to find mailing
lists in the middle of 50+ maintainers :-)
-Daniel
>
> Best regards,
> Liviu
>
> >
> > Cheers, Daniel
> >
> > >
> > > Best regards,
> > > Liviu
> > >
> > > > ---
> > > > .../gpu/drm/amd/amdgpu/amdgpu_connectors.c | 2 +-
> > > > drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 2 +-
> > > > drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | 2 +-
> > > > drivers/gpu/drm/amd/amdgpu/amdgpu_mode.h | 1 +
> > > > .../amd/display/amdgpu_dm/amdgpu_dm_helpers.c | 2 +-
> > > > .../amd/display/amdgpu_dm/amdgpu_dm_pp_smu.c | 2 +-
> > > > .../display/amdgpu_dm/amdgpu_dm_services.c | 2 +-
> > > > drivers/gpu/drm/arc/arcpgu_crtc.c | 2 +-
> > > > drivers/gpu/drm/arc/arcpgu_drv.c | 2 +-
> > > > drivers/gpu/drm/arc/arcpgu_sim.c | 2 +-
> > > > drivers/gpu/drm/arm/hdlcd_crtc.c | 2 +-
> > > > drivers/gpu/drm/arm/hdlcd_drv.c | 2 +-
> > > > drivers/gpu/drm/arm/malidp_crtc.c | 2 +-
> > > > drivers/gpu/drm/arm/malidp_drv.c | 2 +-
> > > > drivers/gpu/drm/arm/malidp_mw.c | 2 +-
> > > > drivers/gpu/drm/armada/armada_510.c | 2 +-
> > > > drivers/gpu/drm/armada/armada_crtc.c | 2 +-
> > > > drivers/gpu/drm/armada/armada_drv.c | 2 +-
> > > > drivers/gpu/drm/armada/armada_fb.c | 2 +-
> > > > drivers/gpu/drm/ast/ast_drv.c | 1 +
> > > > drivers/gpu/drm/ast/ast_mode.c | 1 +
> > > > .../gpu/drm/atmel-hlcdc/atmel_hlcdc_crtc.c | 2 +-
> > > > drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.h | 2 +-
> > > > drivers/gpu/drm/bochs/bochs_drv.c | 1 +
> > > > drivers/gpu/drm/bochs/bochs_kms.c | 1 +
> > > > drivers/gpu/drm/bridge/adv7511/adv7511.h | 2 +-
> > > > drivers/gpu/drm/bridge/analogix-anx78xx.c | 3 +-
> > > > .../drm/bridge/analogix/analogix_dp_core.c | 2 +-
> > > > drivers/gpu/drm/bridge/cdns-dsi.c | 2 +-
> > > > drivers/gpu/drm/bridge/dumb-vga-dac.c | 2 +-
> > > > .../bridge/megachips-stdpxxxx-ge-b850v3-fw.c | 2 +-
> > > > drivers/gpu/drm/bridge/nxp-ptn3460.c | 2 +-
> > > > drivers/gpu/drm/bridge/panel.c | 2 +-
> > > > drivers/gpu/drm/bridge/parade-ps8622.c | 2 +-
> > > > drivers/gpu/drm/bridge/sii902x.c | 2 +-
> > > > drivers/gpu/drm/bridge/synopsys/dw-hdmi.c | 2 +-
> > > > drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c | 2 +-
> > > > drivers/gpu/drm/bridge/tc358764.c | 2 +-
> > > > drivers/gpu/drm/bridge/tc358767.c | 2 +-
> > > > drivers/gpu/drm/bridge/ti-sn65dsi86.c | 2 +-
> > > > drivers/gpu/drm/bridge/ti-tfp410.c | 2 +-
> > > > drivers/gpu/drm/cirrus/cirrus_drv.c | 1 +
> > > > drivers/gpu/drm/cirrus/cirrus_mode.c | 1 +
> > > > drivers/gpu/drm/drm_atomic_helper.c | 1 -
> > > > drivers/gpu/drm/drm_dp_mst_topology.c | 2 +-
> > > > drivers/gpu/drm/drm_modeset_helper.c | 2 +-
> > > > drivers/gpu/drm/drm_probe_helper.c | 2 +-
> > > > drivers/gpu/drm/drm_simple_kms_helper.c | 2 +-
> > > > drivers/gpu/drm/etnaviv/etnaviv_drv.h | 1 -
> > > > drivers/gpu/drm/exynos/exynos_dp.c | 2 +-
> > > > drivers/gpu/drm/exynos/exynos_drm_crtc.c | 2 +-
> > > > drivers/gpu/drm/exynos/exynos_drm_dpi.c | 2 +-
> > > > drivers/gpu/drm/exynos/exynos_drm_drv.c | 2 +-
> > > > drivers/gpu/drm/exynos/exynos_drm_dsi.c | 2 +-
> > > > drivers/gpu/drm/exynos/exynos_drm_fb.c | 2 +-
> > > > drivers/gpu/drm/exynos/exynos_drm_fbdev.c | 2 +-
> > > > drivers/gpu/drm/exynos/exynos_drm_vidi.c | 2 +-
> > > > drivers/gpu/drm/exynos/exynos_hdmi.c | 2 +-
> > > > drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_crtc.c | 2 +-
> > > > drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c | 2 +-
> > > > drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_kms.c | 2 +-
> > > > drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_plane.c | 2 +-
> > > > drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_rgb.c | 2 +-
> > > > drivers/gpu/drm/gma500/psb_intel_drv.h | 1 +
> > > > .../gpu/drm/hisilicon/hibmc/hibmc_drm_de.c | 2 +-
> > > > .../gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c | 2 +-
> > > > .../gpu/drm/hisilicon/hibmc/hibmc_drm_fbdev.c | 2 +-
> > > > .../gpu/drm/hisilicon/hibmc/hibmc_drm_vdac.c | 2 +-
> > > > drivers/gpu/drm/hisilicon/kirin/dw_drm_dsi.c | 2 +-
> > > > .../gpu/drm/hisilicon/kirin/kirin_drm_ade.c | 2 +-
> > > > .../gpu/drm/hisilicon/kirin/kirin_drm_drv.c | 2 +-
> > > > drivers/gpu/drm/i2c/ch7006_priv.h | 2 +-
> > > > drivers/gpu/drm/i2c/sil164_drv.c | 2 +-
> > > > drivers/gpu/drm/i2c/tda998x_drv.c | 2 +-
> > > > drivers/gpu/drm/i915/i915_drv.c | 2 +-
> > > > drivers/gpu/drm/i915/intel_crt.c | 2 +-
> > > > drivers/gpu/drm/i915/intel_display.c | 2 +-
> > > > drivers/gpu/drm/i915/intel_dp.c | 2 +-
> > > > drivers/gpu/drm/i915/intel_dp_mst.c | 2 +-
> > > > drivers/gpu/drm/i915/intel_drv.h | 2 +-
> > > > drivers/gpu/drm/imx/dw_hdmi-imx.c | 2 +-
> > > > drivers/gpu/drm/imx/imx-drm-core.c | 2 +-
> > > > drivers/gpu/drm/imx/imx-ldb.c | 2 +-
> > > > drivers/gpu/drm/imx/imx-tve.c | 2 +-
> > > > drivers/gpu/drm/imx/ipuv3-crtc.c | 2 +-
> > > > drivers/gpu/drm/imx/parallel-display.c | 2 +-
> > > > drivers/gpu/drm/mediatek/mtk_dpi.c | 2 +-
> > > > drivers/gpu/drm/mediatek/mtk_drm_crtc.c | 2 +-
> > > > drivers/gpu/drm/mediatek/mtk_drm_drv.c | 2 +-
> > > > drivers/gpu/drm/mediatek/mtk_drm_fb.c | 2 +-
> > > > drivers/gpu/drm/mediatek/mtk_dsi.c | 2 +-
> > > > drivers/gpu/drm/mediatek/mtk_hdmi.c | 2 +-
> > > > drivers/gpu/drm/meson/meson_crtc.c | 2 +-
> > > > drivers/gpu/drm/meson/meson_drv.c | 2 +-
> > > > drivers/gpu/drm/meson/meson_dw_hdmi.c | 2 +-
> > > > drivers/gpu/drm/meson/meson_venc_cvbs.c | 2 +-
> > > > drivers/gpu/drm/mgag200/mgag200_mode.c | 1 +
> > > > drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c | 2 +-
> > > > drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c | 2 +-
> > > > drivers/gpu/drm/msm/disp/mdp4/mdp4_crtc.c | 2 +-
> > > > .../gpu/drm/msm/disp/mdp4/mdp4_dsi_encoder.c | 2 +-
> > > > .../gpu/drm/msm/disp/mdp4/mdp4_dtv_encoder.c | 2 +-
> > > > .../gpu/drm/msm/disp/mdp4/mdp4_lcdc_encoder.c | 2 +-
> > > > .../gpu/drm/msm/disp/mdp5/mdp5_cmd_encoder.c | 2 +-
> > > > drivers/gpu/drm/msm/disp/mdp5/mdp5_crtc.c | 2 +-
> > > > drivers/gpu/drm/msm/disp/mdp5/mdp5_encoder.c | 2 +-
> > > > drivers/gpu/drm/msm/msm_drv.h | 2 +-
> > > > drivers/gpu/drm/msm/msm_fb.c | 2 +-
> > > > drivers/gpu/drm/mxsfb/mxsfb_crtc.c | 2 +-
> > > > drivers/gpu/drm/mxsfb/mxsfb_drv.c | 2 +-
> > > > drivers/gpu/drm/mxsfb/mxsfb_out.c | 2 +-
> > > > drivers/gpu/drm/nouveau/dispnv04/tvnv17.c | 1 +
> > > > drivers/gpu/drm/nouveau/dispnv50/disp.c | 2 +-
> > > > drivers/gpu/drm/nouveau/nouveau_connector.c | 1 +
> > > > drivers/gpu/drm/nouveau/nouveau_display.c | 1 +
> > > > drivers/gpu/drm/omapdrm/omap_connector.c | 2 +-
> > > > drivers/gpu/drm/omapdrm/omap_crtc.c | 2 +-
> > > > drivers/gpu/drm/omapdrm/omap_drv.c | 2 +-
> > > > drivers/gpu/drm/omapdrm/omap_drv.h | 2 +-
> > > > drivers/gpu/drm/omapdrm/omap_encoder.c | 2 +-
> > > > drivers/gpu/drm/omapdrm/omap_fb.c | 2 +-
> > > > drivers/gpu/drm/pl111/pl111_drv.c | 2 +-
> > > > drivers/gpu/drm/qxl/qxl_display.c | 2 +-
> > > > drivers/gpu/drm/qxl/qxl_drv.c | 3 +-
> > > > drivers/gpu/drm/qxl/qxl_fb.c | 2 +-
> > > > drivers/gpu/drm/qxl/qxl_kms.c | 2 +-
> > > > drivers/gpu/drm/radeon/radeon_acpi.c | 1 +
> > > > drivers/gpu/drm/radeon/radeon_connectors.c | 1 +
> > > > drivers/gpu/drm/radeon/radeon_device.c | 1 +
> > > > drivers/gpu/drm/radeon/radeon_display.c | 1 +
> > > > drivers/gpu/drm/radeon/radeon_dp_mst.c | 1 +
> > > > drivers/gpu/drm/radeon/radeon_drv.c | 1 +
> > > > drivers/gpu/drm/radeon/radeon_irq_kms.c | 1 +
> > > > drivers/gpu/drm/rcar-du/rcar_du_crtc.c | 2 +-
> > > > drivers/gpu/drm/rcar-du/rcar_du_drv.c | 2 +-
> > > > drivers/gpu/drm/rcar-du/rcar_du_encoder.c | 2 +-
> > > > drivers/gpu/drm/rcar-du/rcar_du_kms.c | 2 +-
> > > > drivers/gpu/drm/rcar-du/rcar_du_plane.c | 2 +-
> > > > drivers/gpu/drm/rcar-du/rcar_du_vsp.c | 2 +-
> > > > drivers/gpu/drm/rcar-du/rcar_lvds.c | 2 +-
> > > > .../gpu/drm/rockchip/analogix_dp-rockchip.c | 2 +-
> > > > drivers/gpu/drm/rockchip/cdn-dp-core.c | 2 +-
> > > > drivers/gpu/drm/rockchip/cdn-dp-core.h | 2 +-
> > > > drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c | 2 +-
> > > > drivers/gpu/drm/rockchip/inno_hdmi.c | 2 +-
> > > > drivers/gpu/drm/rockchip/rockchip_drm_drv.c | 2 +-
> > > > drivers/gpu/drm/rockchip/rockchip_drm_fb.c | 2 +-
> > > > drivers/gpu/drm/rockchip/rockchip_drm_fbdev.c | 2 +-
> > > > drivers/gpu/drm/rockchip/rockchip_drm_psr.c | 2 +-
> > > > drivers/gpu/drm/rockchip/rockchip_drm_vop.c | 2 +-
> > > > drivers/gpu/drm/rockchip/rockchip_lvds.c | 2 +-
> > > > drivers/gpu/drm/rockchip/rockchip_rgb.c | 2 +-
> > > > drivers/gpu/drm/sti/sti_crtc.c | 2 +-
> > > > drivers/gpu/drm/sti/sti_drv.c | 2 +-
> > > > drivers/gpu/drm/sti/sti_dvo.c | 2 +-
> > > > drivers/gpu/drm/sti/sti_hda.c | 2 +-
> > > > drivers/gpu/drm/sti/sti_hdmi.c | 2 +-
> > > > drivers/gpu/drm/sti/sti_tvout.c | 2 +-
> > > > drivers/gpu/drm/stm/drv.c | 2 +-
> > > > drivers/gpu/drm/stm/ltdc.c | 2 +-
> > > > drivers/gpu/drm/sun4i/sun4i_backend.c | 2 +-
> > > > drivers/gpu/drm/sun4i/sun4i_crtc.c | 2 +-
> > > > drivers/gpu/drm/sun4i/sun4i_drv.c | 2 +-
> > > > drivers/gpu/drm/sun4i/sun4i_hdmi_enc.c | 2 +-
> > > > drivers/gpu/drm/sun4i/sun4i_lvds.c | 2 +-
> > > > drivers/gpu/drm/sun4i/sun4i_rgb.c | 2 +-
> > > > drivers/gpu/drm/sun4i/sun4i_tcon.c | 2 +-
> > > > drivers/gpu/drm/sun4i/sun4i_tv.c | 2 +-
> > > > drivers/gpu/drm/sun4i/sun6i_mipi_dsi.c | 2 +-
> > > > drivers/gpu/drm/sun4i/sun8i_dw_hdmi.c | 2 +-
> > > > drivers/gpu/drm/sun4i/sun8i_mixer.c | 2 +-
> > > > drivers/gpu/drm/sun4i/sun8i_ui_layer.c | 2 +-
> > > > drivers/gpu/drm/sun4i/sun8i_vi_layer.c | 2 +-
> > > > drivers/gpu/drm/tegra/drm.h | 2 +-
> > > > drivers/gpu/drm/tegra/hdmi.c | 2 +-
> > > > drivers/gpu/drm/tegra/hub.c | 2 +-
> > > > drivers/gpu/drm/tinydrm/core/tinydrm-core.c | 2 +-
> > > > drivers/gpu/drm/tinydrm/core/tinydrm-pipe.c | 2 +-
> > > > drivers/gpu/drm/tve200/tve200_drv.c | 2 +-
> > > > drivers/gpu/drm/udl/udl_connector.c | 1 +
> > > > drivers/gpu/drm/udl/udl_drv.c | 1 +
> > > > drivers/gpu/drm/udl/udl_main.c | 1 +
> > > > drivers/gpu/drm/vc4/vc4_crtc.c | 2 +-
> > > > drivers/gpu/drm/vc4/vc4_dpi.c | 2 +-
> > > > drivers/gpu/drm/vc4/vc4_dsi.c | 2 +-
> > > > drivers/gpu/drm/vc4/vc4_hdmi.c | 2 +-
> > > > drivers/gpu/drm/vc4/vc4_kms.c | 2 +-
> > > > drivers/gpu/drm/vc4/vc4_txp.c | 2 +-
> > > > drivers/gpu/drm/vc4/vc4_vec.c | 2 +-
> > > > drivers/gpu/drm/virtio/virtgpu_display.c | 2 +-
> > > > drivers/gpu/drm/virtio/virtgpu_drv.h | 2 +-
> > > > drivers/gpu/drm/vkms/vkms_crtc.c | 2 +-
> > > > drivers/gpu/drm/vkms/vkms_drv.c | 2 +-
> > > > drivers/gpu/drm/vkms/vkms_output.c | 2 +-
> > > > drivers/gpu/drm/vmwgfx/vmwgfx_kms.h | 2 +-
> > > > drivers/gpu/drm/xen/xen_drm_front.c | 2 +-
> > > > drivers/gpu/drm/xen/xen_drm_front_conn.c | 2 +-
> > > > drivers/gpu/drm/xen/xen_drm_front_gem.c | 2 +-
> > > > drivers/gpu/drm/xen/xen_drm_front_kms.c | 2 +-
> > > > drivers/gpu/drm/zte/zx_drm_drv.c | 2 +-
> > > > drivers/gpu/drm/zte/zx_hdmi.c | 2 +-
> > > > drivers/gpu/drm/zte/zx_tvenc.c | 2 +-
> > > > drivers/gpu/drm/zte/zx_vga.c | 2 +-
> > > > drivers/gpu/drm/zte/zx_vou.c | 2 +-
> > > > drivers/staging/vboxvideo/vbox_irq.c | 2 +-
> > > > drivers/staging/vboxvideo/vbox_mode.c | 2 +-
> > > > include/drm/drm_crtc_helper.h | 16 ------
> > > > include/drm/drm_probe_helper.h | 50 +++++++++++++++++++
> > > > 208 files changed, 256 insertions(+), 200 deletions(-)
> > > > create mode 100644 include/drm/drm_probe_helper.h
> > > >
> > > > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c
> > > > index 69ad6ec0a4f3..f0d36787d8d1 100644
> > > > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c
> > > > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c
> > > > @@ -25,7 +25,7 @@
> > > > */
> > > > #include <drm/drmP.h>
> > > > #include <drm/drm_edid.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_fb_helper.h>
> > > > #include <drm/amdgpu_drm.h>
> > > > #include "amdgpu.h"
> > > > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
> > > > index e669297ffefb..04688272d3e4 100644
> > > > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
> > > > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
> > > > @@ -30,7 +30,7 @@
> > > > #include <linux/console.h>
> > > > #include <linux/slab.h>
> > > > #include <drm/drmP.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_atomic_helper.h>
> > > > #include <drm/amdgpu_drm.h>
> > > > #include <linux/vgaarb.h>
> > > > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
> > > > index 90f474f98b6e..345e076902aa 100644
> > > > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
> > > > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
> > > > @@ -32,7 +32,7 @@
> > > > #include <linux/module.h>
> > > > #include <linux/pm_runtime.h>
> > > > #include <linux/vga_switcheroo.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > >
> > > > #include "amdgpu.h"
> > > > #include "amdgpu_irq.h"
> > > > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_mode.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_mode.h
> > > > index aadd0fa42e43..2c99ef35db79 100644
> > > > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_mode.h
> > > > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_mode.h
> > > > @@ -36,6 +36,7 @@
> > > > #include <drm/drm_dp_helper.h>
> > > > #include <drm/drm_fixed.h>
> > > > #include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_fb_helper.h>
> > > > #include <drm/drm_plane_helper.h>
> > > > #include <linux/i2c.h>
> > > > diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c
> > > > index 39997d977efb..78173311f718 100644
> > > > --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c
> > > > +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c
> > > > @@ -29,7 +29,7 @@
> > > > #include <linux/i2c.h>
> > > >
> > > > #include <drm/drmP.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/amdgpu_drm.h>
> > > > #include <drm/drm_edid.h>
> > > >
> > > > diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_pp_smu.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_pp_smu.c
> > > > index 9d2d6986b983..7ef99037167a 100644
> > > > --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_pp_smu.c
> > > > +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_pp_smu.c
> > > > @@ -25,7 +25,7 @@
> > > > #include <linux/acpi.h>
> > > >
> > > > #include <drm/drmP.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/amdgpu_drm.h>
> > > > #include "dm_services.h"
> > > > #include "amdgpu.h"
> > > > diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_services.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_services.c
> > > > index 516795342dd2..d915e8c8769b 100644
> > > > --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_services.c
> > > > +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_services.c
> > > > @@ -27,7 +27,7 @@
> > > > #include <linux/acpi.h>
> > > >
> > > > #include <drm/drmP.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/amdgpu_drm.h>
> > > > #include "dm_services.h"
> > > > #include "amdgpu.h"
> > > > diff --git a/drivers/gpu/drm/arc/arcpgu_crtc.c b/drivers/gpu/drm/arc/arcpgu_crtc.c
> > > > index 62f51f70606d..6ba96415e683 100644
> > > > --- a/drivers/gpu/drm/arc/arcpgu_crtc.c
> > > > +++ b/drivers/gpu/drm/arc/arcpgu_crtc.c
> > > > @@ -15,7 +15,7 @@
> > > > */
> > > >
> > > > #include <drm/drm_atomic_helper.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_fb_cma_helper.h>
> > > > #include <drm/drm_gem_cma_helper.h>
> > > > #include <drm/drm_plane_helper.h>
> > > > diff --git a/drivers/gpu/drm/arc/arcpgu_drv.c b/drivers/gpu/drm/arc/arcpgu_drv.c
> > > > index 206a76abf771..dc72648bd783 100644
> > > > --- a/drivers/gpu/drm/arc/arcpgu_drv.c
> > > > +++ b/drivers/gpu/drm/arc/arcpgu_drv.c
> > > > @@ -15,7 +15,7 @@
> > > > */
> > > >
> > > > #include <linux/clk.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_fb_cma_helper.h>
> > > > #include <drm/drm_fb_helper.h>
> > > > #include <drm/drm_gem_cma_helper.h>
> > > > diff --git a/drivers/gpu/drm/arc/arcpgu_sim.c b/drivers/gpu/drm/arc/arcpgu_sim.c
> > > > index 68629e614990..7eae7850954b 100644
> > > > --- a/drivers/gpu/drm/arc/arcpgu_sim.c
> > > > +++ b/drivers/gpu/drm/arc/arcpgu_sim.c
> > > > @@ -14,7 +14,7 @@
> > > > *
> > > > */
> > > >
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_atomic_helper.h>
> > > >
> > > > #include "arcpgu.h"
> > > > diff --git a/drivers/gpu/drm/arm/hdlcd_crtc.c b/drivers/gpu/drm/arm/hdlcd_crtc.c
> > > > index e4d67b70244d..99c188de8651 100644
> > > > --- a/drivers/gpu/drm/arm/hdlcd_crtc.c
> > > > +++ b/drivers/gpu/drm/arm/hdlcd_crtc.c
> > > > @@ -13,7 +13,7 @@
> > > > #include <drm/drm_atomic.h>
> > > > #include <drm/drm_atomic_helper.h>
> > > > #include <drm/drm_crtc.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_fb_helper.h>
> > > > #include <drm/drm_fb_cma_helper.h>
> > > > #include <drm/drm_gem_cma_helper.h>
> > > > diff --git a/drivers/gpu/drm/arm/hdlcd_drv.c b/drivers/gpu/drm/arm/hdlcd_drv.c
> > > > index dfad8d06d108..fba307c8afa5 100644
> > > > --- a/drivers/gpu/drm/arm/hdlcd_drv.c
> > > > +++ b/drivers/gpu/drm/arm/hdlcd_drv.c
> > > > @@ -22,7 +22,7 @@
> > > > #include <drm/drmP.h>
> > > > #include <drm/drm_atomic_helper.h>
> > > > #include <drm/drm_crtc.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_fb_helper.h>
> > > > #include <drm/drm_fb_cma_helper.h>
> > > > #include <drm/drm_gem_cma_helper.h>
> > > > diff --git a/drivers/gpu/drm/arm/malidp_crtc.c b/drivers/gpu/drm/arm/malidp_crtc.c
> > > > index e1b72782848c..56aad288666e 100644
> > > > --- a/drivers/gpu/drm/arm/malidp_crtc.c
> > > > +++ b/drivers/gpu/drm/arm/malidp_crtc.c
> > > > @@ -14,7 +14,7 @@
> > > > #include <drm/drm_atomic.h>
> > > > #include <drm/drm_atomic_helper.h>
> > > > #include <drm/drm_crtc.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <linux/clk.h>
> > > > #include <linux/pm_runtime.h>
> > > > #include <video/videomode.h>
> > > > diff --git a/drivers/gpu/drm/arm/malidp_drv.c b/drivers/gpu/drm/arm/malidp_drv.c
> > > > index 505f316a192e..ab50ad06e271 100644
> > > > --- a/drivers/gpu/drm/arm/malidp_drv.c
> > > > +++ b/drivers/gpu/drm/arm/malidp_drv.c
> > > > @@ -23,7 +23,7 @@
> > > > #include <drm/drm_atomic.h>
> > > > #include <drm/drm_atomic_helper.h>
> > > > #include <drm/drm_crtc.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_fb_helper.h>
> > > > #include <drm/drm_fb_cma_helper.h>
> > > > #include <drm/drm_gem_cma_helper.h>
> > > > diff --git a/drivers/gpu/drm/arm/malidp_mw.c b/drivers/gpu/drm/arm/malidp_mw.c
> > > > index 91472e5e0c8b..041a64dc7167 100644
> > > > --- a/drivers/gpu/drm/arm/malidp_mw.c
> > > > +++ b/drivers/gpu/drm/arm/malidp_mw.c
> > > > @@ -8,7 +8,7 @@
> > > > #include <drm/drm_atomic.h>
> > > > #include <drm/drm_atomic_helper.h>
> > > > #include <drm/drm_crtc.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_fb_cma_helper.h>
> > > > #include <drm/drm_gem_cma_helper.h>
> > > > #include <drm/drmP.h>
> > > > diff --git a/drivers/gpu/drm/armada/armada_510.c b/drivers/gpu/drm/armada/armada_510.c
> > > > index 2f7c048c5361..0e91d27921bd 100644
> > > > --- a/drivers/gpu/drm/armada/armada_510.c
> > > > +++ b/drivers/gpu/drm/armada/armada_510.c
> > > > @@ -9,7 +9,7 @@
> > > > */
> > > > #include <linux/clk.h>
> > > > #include <linux/io.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include "armada_crtc.h"
> > > > #include "armada_drm.h"
> > > > #include "armada_hw.h"
> > > > diff --git a/drivers/gpu/drm/armada/armada_crtc.c b/drivers/gpu/drm/armada/armada_crtc.c
> > > > index da9360688b55..c68c3da9e17f 100644
> > > > --- a/drivers/gpu/drm/armada/armada_crtc.c
> > > > +++ b/drivers/gpu/drm/armada/armada_crtc.c
> > > > @@ -12,7 +12,7 @@
> > > > #include <linux/platform_device.h>
> > > > #include <drm/drmP.h>
> > > > #include <drm/drm_atomic.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_plane_helper.h>
> > > > #include <drm/drm_atomic_helper.h>
> > > > #include "armada_crtc.h"
> > > > diff --git a/drivers/gpu/drm/armada/armada_drv.c b/drivers/gpu/drm/armada/armada_drv.c
> > > > index fa31589b4fc0..e660c5ca52ae 100644
> > > > --- a/drivers/gpu/drm/armada/armada_drv.c
> > > > +++ b/drivers/gpu/drm/armada/armada_drv.c
> > > > @@ -10,7 +10,7 @@
> > > > #include <linux/module.h>
> > > > #include <linux/of_graph.h>
> > > > #include <drm/drm_atomic_helper.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_fb_helper.h>
> > > > #include <drm/drm_of.h>
> > > > #include "armada_crtc.h"
> > > > diff --git a/drivers/gpu/drm/armada/armada_fb.c b/drivers/gpu/drm/armada/armada_fb.c
> > > > index 6bd638a54579..9029656d634d 100644
> > > > --- a/drivers/gpu/drm/armada/armada_fb.c
> > > > +++ b/drivers/gpu/drm/armada/armada_fb.c
> > > > @@ -5,7 +5,7 @@
> > > > * it under the terms of the GNU General Public License version 2 as
> > > > * published by the Free Software Foundation.
> > > > */
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_fb_helper.h>
> > > > #include <drm/drm_gem_framebuffer_helper.h>
> > > > #include "armada_drm.h"
> > > > diff --git a/drivers/gpu/drm/ast/ast_drv.c b/drivers/gpu/drm/ast/ast_drv.c
> > > > index bf589c53b908..3871b39d4dea 100644
> > > > --- a/drivers/gpu/drm/ast/ast_drv.c
> > > > +++ b/drivers/gpu/drm/ast/ast_drv.c
> > > > @@ -30,6 +30,7 @@
> > > >
> > > > #include <drm/drmP.h>
> > > > #include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > >
> > > > #include "ast_drv.h"
> > > >
> > > > diff --git a/drivers/gpu/drm/ast/ast_mode.c b/drivers/gpu/drm/ast/ast_mode.c
> > > > index 8bb355d5d43d..97fed0627d1c 100644
> > > > --- a/drivers/gpu/drm/ast/ast_mode.c
> > > > +++ b/drivers/gpu/drm/ast/ast_mode.c
> > > > @@ -32,6 +32,7 @@
> > > > #include <drm/drm_crtc.h>
> > > > #include <drm/drm_crtc_helper.h>
> > > > #include <drm/drm_plane_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include "ast_drv.h"
> > > >
> > > > #include "ast_tables.h"
> > > > diff --git a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_crtc.c b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_crtc.c
> > > > index 96f4082671fe..8070a558d7b1 100644
> > > > --- a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_crtc.c
> > > > +++ b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_crtc.c
> > > > @@ -24,7 +24,7 @@
> > > > #include <linux/pinctrl/consumer.h>
> > > >
> > > > #include <drm/drm_crtc.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drmP.h>
> > > >
> > > > #include <video/videomode.h>
> > > > diff --git a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.h b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.h
> > > > index 4cc1e03f0aee..70bd540d644e 100644
> > > > --- a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.h
> > > > +++ b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.h
> > > > @@ -31,7 +31,7 @@
> > > > #include <drm/drm_atomic.h>
> > > > #include <drm/drm_atomic_helper.h>
> > > > #include <drm/drm_crtc.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_fb_helper.h>
> > > > #include <drm/drm_fb_cma_helper.h>
> > > > #include <drm/drm_gem_cma_helper.h>
> > > > diff --git a/drivers/gpu/drm/bochs/bochs_drv.c b/drivers/gpu/drm/bochs/bochs_drv.c
> > > > index f3dd66ae990a..e5a48e87b137 100644
> > > > --- a/drivers/gpu/drm/bochs/bochs_drv.c
> > > > +++ b/drivers/gpu/drm/bochs/bochs_drv.c
> > > > @@ -9,6 +9,7 @@
> > > > #include <linux/module.h>
> > > > #include <linux/slab.h>
> > > > #include <drm/drm_fb_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > >
> > > > #include "bochs.h"
> > > >
> > > > diff --git a/drivers/gpu/drm/bochs/bochs_kms.c b/drivers/gpu/drm/bochs/bochs_kms.c
> > > > index f87c284dd93d..5f1eb69dd167 100644
> > > > --- a/drivers/gpu/drm/bochs/bochs_kms.c
> > > > +++ b/drivers/gpu/drm/bochs/bochs_kms.c
> > > > @@ -7,6 +7,7 @@
> > > >
> > > > #include "bochs.h"
> > > > #include <drm/drm_plane_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > >
> > > > static int defx = 1024;
> > > > static int defy = 768;
> > > > diff --git a/drivers/gpu/drm/bridge/adv7511/adv7511.h b/drivers/gpu/drm/bridge/adv7511/adv7511.h
> > > > index 73d8ccb97742..b235d1633575 100644
> > > > --- a/drivers/gpu/drm/bridge/adv7511/adv7511.h
> > > > +++ b/drivers/gpu/drm/bridge/adv7511/adv7511.h
> > > > @@ -14,7 +14,7 @@
> > > > #include <linux/regmap.h>
> > > > #include <linux/regulator/consumer.h>
> > > >
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_mipi_dsi.h>
> > > >
> > > > #define ADV7511_REG_CHIP_REVISION 0x00
> > > > diff --git a/drivers/gpu/drm/bridge/analogix-anx78xx.c b/drivers/gpu/drm/bridge/analogix-anx78xx.c
> > > > index f8433c93f463..7df356b45057 100644
> > > > --- a/drivers/gpu/drm/bridge/analogix-anx78xx.c
> > > > +++ b/drivers/gpu/drm/bridge/analogix-anx78xx.c
> > > > @@ -31,9 +31,10 @@
> > > > #include <drm/drmP.h>
> > > > #include <drm/drm_atomic_helper.h>
> > > > #include <drm/drm_crtc.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_dp_helper.h>
> > > > #include <drm/drm_edid.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > >
> > > > #include "analogix-anx78xx.h"
> > > >
> > > > diff --git a/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c b/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c
> > > > index 753e96129ab7..c1da8ae3c408 100644
> > > > --- a/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c
> > > > +++ b/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c
> > > > @@ -26,7 +26,7 @@
> > > > #include <drm/drmP.h>
> > > > #include <drm/drm_atomic_helper.h>
> > > > #include <drm/drm_crtc.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_panel.h>
> > > >
> > > > #include <drm/bridge/analogix_dp.h>
> > > > diff --git a/drivers/gpu/drm/bridge/cdns-dsi.c b/drivers/gpu/drm/bridge/cdns-dsi.c
> > > > index ce9496d13986..48ed444cad50 100644
> > > > --- a/drivers/gpu/drm/bridge/cdns-dsi.c
> > > > +++ b/drivers/gpu/drm/bridge/cdns-dsi.c
> > > > @@ -7,7 +7,7 @@
> > > >
> > > > #include <drm/drm_atomic_helper.h>
> > > > #include <drm/drm_bridge.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_mipi_dsi.h>
> > > > #include <drm/drm_panel.h>
> > > > #include <video/mipi_display.h>
> > > > diff --git a/drivers/gpu/drm/bridge/dumb-vga-dac.c b/drivers/gpu/drm/bridge/dumb-vga-dac.c
> > > > index 9b706789a341..0805801f4e94 100644
> > > > --- a/drivers/gpu/drm/bridge/dumb-vga-dac.c
> > > > +++ b/drivers/gpu/drm/bridge/dumb-vga-dac.c
> > > > @@ -18,7 +18,7 @@
> > > > #include <drm/drmP.h>
> > > > #include <drm/drm_atomic_helper.h>
> > > > #include <drm/drm_crtc.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > >
> > > > struct dumb_vga {
> > > > struct drm_bridge bridge;
> > > > diff --git a/drivers/gpu/drm/bridge/megachips-stdpxxxx-ge-b850v3-fw.c b/drivers/gpu/drm/bridge/megachips-stdpxxxx-ge-b850v3-fw.c
> > > > index 2136c97aeb8e..9687a1a0e737 100644
> > > > --- a/drivers/gpu/drm/bridge/megachips-stdpxxxx-ge-b850v3-fw.c
> > > > +++ b/drivers/gpu/drm/bridge/megachips-stdpxxxx-ge-b850v3-fw.c
> > > > @@ -36,7 +36,7 @@
> > > > #include <linux/of.h>
> > > > #include <drm/drm_atomic.h>
> > > > #include <drm/drm_atomic_helper.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_edid.h>
> > > > #include <drm/drmP.h>
> > > >
> > > > diff --git a/drivers/gpu/drm/bridge/nxp-ptn3460.c b/drivers/gpu/drm/bridge/nxp-ptn3460.c
> > > > index a3e817abace1..a56306421bc7 100644
> > > > --- a/drivers/gpu/drm/bridge/nxp-ptn3460.c
> > > > +++ b/drivers/gpu/drm/bridge/nxp-ptn3460.c
> > > > @@ -22,7 +22,7 @@
> > > > #include <linux/of_gpio.h>
> > > > #include <drm/drm_atomic_helper.h>
> > > > #include <drm/drm_crtc.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_edid.h>
> > > > #include <drm/drm_of.h>
> > > > #include <drm/drm_panel.h>
> > > > diff --git a/drivers/gpu/drm/bridge/panel.c b/drivers/gpu/drm/bridge/panel.c
> > > > index 7cbaba213ef6..caf12b8fd572 100644
> > > > --- a/drivers/gpu/drm/bridge/panel.c
> > > > +++ b/drivers/gpu/drm/bridge/panel.c
> > > > @@ -12,7 +12,7 @@
> > > > #include <drm/drm_panel.h>
> > > > #include <drm/drm_atomic_helper.h>
> > > > #include <drm/drm_connector.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_encoder.h>
> > > > #include <drm/drm_modeset_helper_vtables.h>
> > > > #include <drm/drm_panel.h>
> > > > diff --git a/drivers/gpu/drm/bridge/parade-ps8622.c b/drivers/gpu/drm/bridge/parade-ps8622.c
> > > > index 7334d1b62b71..483a7142c5ea 100644
> > > > --- a/drivers/gpu/drm/bridge/parade-ps8622.c
> > > > +++ b/drivers/gpu/drm/bridge/parade-ps8622.c
> > > > @@ -26,7 +26,7 @@
> > > > #include <linux/regulator/consumer.h>
> > > > #include <drm/drm_atomic_helper.h>
> > > > #include <drm/drm_crtc.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_of.h>
> > > > #include <drm/drm_panel.h>
> > > > #include <drm/drmP.h>
> > > > diff --git a/drivers/gpu/drm/bridge/sii902x.c b/drivers/gpu/drm/bridge/sii902x.c
> > > > index bfa902013aa4..61b1502f566c 100644
> > > > --- a/drivers/gpu/drm/bridge/sii902x.c
> > > > +++ b/drivers/gpu/drm/bridge/sii902x.c
> > > > @@ -30,7 +30,7 @@
> > > >
> > > > #include <drm/drmP.h>
> > > > #include <drm/drm_atomic_helper.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_edid.h>
> > > >
> > > > #define SII902X_TPI_VIDEO_DATA 0x0
> > > > diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
> > > > index 64c3cf027518..360a7ec39861 100644
> > > > --- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
> > > > +++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
> > > > @@ -25,7 +25,7 @@
> > > > #include <drm/drm_of.h>
> > > > #include <drm/drmP.h>
> > > > #include <drm/drm_atomic_helper.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_edid.h>
> > > > #include <drm/drm_encoder_slave.h>
> > > > #include <drm/bridge/dw_hdmi.h>
> > > > diff --git a/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c b/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c
> > > > index 2f4b145b73af..09a38ae81e52 100644
> > > > --- a/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c
> > > > +++ b/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c
> > > > @@ -19,7 +19,7 @@
> > > > #include <drm/drm_atomic_helper.h>
> > > > #include <drm/drm_bridge.h>
> > > > #include <drm/drm_crtc.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_mipi_dsi.h>
> > > > #include <drm/drm_of.h>
> > > > #include <drm/bridge/dw_mipi_dsi.h>
> > > > diff --git a/drivers/gpu/drm/bridge/tc358764.c b/drivers/gpu/drm/bridge/tc358764.c
> > > > index afd491018bfc..282092019e82 100644
> > > > --- a/drivers/gpu/drm/bridge/tc358764.c
> > > > +++ b/drivers/gpu/drm/bridge/tc358764.c
> > > > @@ -9,7 +9,7 @@
> > > >
> > > > #include <drm/drm_atomic_helper.h>
> > > > #include <drm/drm_crtc.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_fb_helper.h>
> > > > #include <drm/drm_mipi_dsi.h>
> > > > #include <drm/drm_of.h>
> > > > diff --git a/drivers/gpu/drm/bridge/tc358767.c b/drivers/gpu/drm/bridge/tc358767.c
> > > > index 8e28e738cb52..5c0ff4a16572 100644
> > > > --- a/drivers/gpu/drm/bridge/tc358767.c
> > > > +++ b/drivers/gpu/drm/bridge/tc358767.c
> > > > @@ -34,7 +34,7 @@
> > > > #include <linux/slab.h>
> > > >
> > > > #include <drm/drm_atomic_helper.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_dp_helper.h>
> > > > #include <drm/drm_edid.h>
> > > > #include <drm/drm_of.h>
> > > > diff --git a/drivers/gpu/drm/bridge/ti-sn65dsi86.c b/drivers/gpu/drm/bridge/ti-sn65dsi86.c
> > > > index 10243965ee7c..e74e2c928f51 100644
> > > > --- a/drivers/gpu/drm/bridge/ti-sn65dsi86.c
> > > > +++ b/drivers/gpu/drm/bridge/ti-sn65dsi86.c
> > > > @@ -6,7 +6,7 @@
> > > > #include <drm/drmP.h>
> > > > #include <drm/drm_atomic.h>
> > > > #include <drm/drm_atomic_helper.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_dp_helper.h>
> > > > #include <drm/drm_mipi_dsi.h>
> > > > #include <drm/drm_of.h>
> > > > diff --git a/drivers/gpu/drm/bridge/ti-tfp410.c b/drivers/gpu/drm/bridge/ti-tfp410.c
> > > > index c3e32138c6bb..7bfb4f338813 100644
> > > > --- a/drivers/gpu/drm/bridge/ti-tfp410.c
> > > > +++ b/drivers/gpu/drm/bridge/ti-tfp410.c
> > > > @@ -20,7 +20,7 @@
> > > > #include <drm/drmP.h>
> > > > #include <drm/drm_atomic_helper.h>
> > > > #include <drm/drm_crtc.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > >
> > > > #define HOTPLUG_DEBOUNCE_MS 1100
> > > >
> > > > diff --git a/drivers/gpu/drm/cirrus/cirrus_drv.c b/drivers/gpu/drm/cirrus/cirrus_drv.c
> > > > index db40b77c7f7c..8ec880f3a322 100644
> > > > --- a/drivers/gpu/drm/cirrus/cirrus_drv.c
> > > > +++ b/drivers/gpu/drm/cirrus/cirrus_drv.c
> > > > @@ -12,6 +12,7 @@
> > > > #include <linux/console.h>
> > > > #include <drm/drmP.h>
> > > > #include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > >
> > > > #include "cirrus_drv.h"
> > > >
> > > > diff --git a/drivers/gpu/drm/cirrus/cirrus_mode.c b/drivers/gpu/drm/cirrus/cirrus_mode.c
> > > > index ed7dcf212a34..a830e70fc0bb 100644
> > > > --- a/drivers/gpu/drm/cirrus/cirrus_mode.c
> > > > +++ b/drivers/gpu/drm/cirrus/cirrus_mode.c
> > > > @@ -17,6 +17,7 @@
> > > > #include <drm/drmP.h>
> > > > #include <drm/drm_crtc_helper.h>
> > > > #include <drm/drm_plane_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > >
> > > > #include <video/cirrus.h>
> > > >
> > > > diff --git a/drivers/gpu/drm/drm_atomic_helper.c b/drivers/gpu/drm/drm_atomic_helper.c
> > > > index 69cbafd5ebee..54417fce5e5c 100644
> > > > --- a/drivers/gpu/drm/drm_atomic_helper.c
> > > > +++ b/drivers/gpu/drm/drm_atomic_helper.c
> > > > @@ -29,7 +29,6 @@
> > > > #include <drm/drm_atomic.h>
> > > > #include <drm/drm_atomic_uapi.h>
> > > > #include <drm/drm_plane_helper.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > #include <drm/drm_atomic_helper.h>
> > > > #include <drm/drm_writeback.h>
> > > > #include <drm/drm_damage_helper.h>
> > > > diff --git a/drivers/gpu/drm/drm_dp_mst_topology.c b/drivers/gpu/drm/drm_dp_mst_topology.c
> > > > index a9b684f14d14..5f8b80b0bad4 100644
> > > > --- a/drivers/gpu/drm/drm_dp_mst_topology.c
> > > > +++ b/drivers/gpu/drm/drm_dp_mst_topology.c
> > > > @@ -33,7 +33,7 @@
> > > > #include <drm/drm_fixed.h>
> > > > #include <drm/drm_atomic.h>
> > > > #include <drm/drm_atomic_helper.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > >
> > > > /**
> > > > * DOC: dp mst helper
> > > > diff --git a/drivers/gpu/drm/drm_modeset_helper.c b/drivers/gpu/drm/drm_modeset_helper.c
> > > > index 9150fa385bba..6f48137d7192 100644
> > > > --- a/drivers/gpu/drm/drm_modeset_helper.c
> > > > +++ b/drivers/gpu/drm/drm_modeset_helper.c
> > > > @@ -21,7 +21,7 @@
> > > > */
> > > >
> > > > #include <drm/drm_atomic_helper.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_fb_helper.h>
> > > > #include <drm/drm_modeset_helper.h>
> > > > #include <drm/drm_plane_helper.h>
> > > > diff --git a/drivers/gpu/drm/drm_probe_helper.c b/drivers/gpu/drm/drm_probe_helper.c
> > > > index a1bb157bfdfa..c83fee652502 100644
> > > > --- a/drivers/gpu/drm/drm_probe_helper.c
> > > > +++ b/drivers/gpu/drm/drm_probe_helper.c
> > > > @@ -32,11 +32,11 @@
> > > > #include <linux/export.h>
> > > > #include <linux/moduleparam.h>
> > > >
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drmP.h>
> > > > #include <drm/drm_client.h>
> > > > #include <drm/drm_crtc.h>
> > > > #include <drm/drm_fourcc.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > #include <drm/drm_fb_helper.h>
> > > > #include <drm/drm_edid.h>
> > > > #include <drm/drm_modeset_helper_vtables.h>
> > > > diff --git a/drivers/gpu/drm/drm_simple_kms_helper.c b/drivers/gpu/drm/drm_simple_kms_helper.c
> > > > index 917812448d1b..9fc26a69ab79 100644
> > > > --- a/drivers/gpu/drm/drm_simple_kms_helper.c
> > > > +++ b/drivers/gpu/drm/drm_simple_kms_helper.c
> > > > @@ -10,7 +10,7 @@
> > > > #include <drm/drmP.h>
> > > > #include <drm/drm_atomic.h>
> > > > #include <drm/drm_atomic_helper.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_plane_helper.h>
> > > > #include <drm/drm_simple_kms_helper.h>
> > > > #include <linux/slab.h>
> > > > diff --git a/drivers/gpu/drm/etnaviv/etnaviv_drv.h b/drivers/gpu/drm/etnaviv/etnaviv_drv.h
> > > > index 8d02d1b7dcf5..ea743d4fa3f8 100644
> > > > --- a/drivers/gpu/drm/etnaviv/etnaviv_drv.h
> > > > +++ b/drivers/gpu/drm/etnaviv/etnaviv_drv.h
> > > > @@ -21,7 +21,6 @@
> > > > #include <linux/mm_types.h>
> > > >
> > > > #include <drm/drmP.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > #include <drm/drm_fb_helper.h>
> > > > #include <drm/drm_gem.h>
> > > > #include <drm/etnaviv_drm.h>
> > > > diff --git a/drivers/gpu/drm/exynos/exynos_dp.c b/drivers/gpu/drm/exynos/exynos_dp.c
> > > > index c8449ae4f4fe..6b23a1caeedc 100644
> > > > --- a/drivers/gpu/drm/exynos/exynos_dp.c
> > > > +++ b/drivers/gpu/drm/exynos/exynos_dp.c
> > > > @@ -23,7 +23,7 @@
> > > >
> > > > #include <drm/drmP.h>
> > > > #include <drm/drm_crtc.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_of.h>
> > > > #include <drm/drm_panel.h>
> > > >
> > > > diff --git a/drivers/gpu/drm/exynos/exynos_drm_crtc.c b/drivers/gpu/drm/exynos/exynos_drm_crtc.c
> > > > index 2696289ecc78..12d3816356ef 100644
> > > > --- a/drivers/gpu/drm/exynos/exynos_drm_crtc.c
> > > > +++ b/drivers/gpu/drm/exynos/exynos_drm_crtc.c
> > > > @@ -13,7 +13,7 @@
> > > > */
> > > >
> > > > #include <drm/drmP.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_atomic.h>
> > > > #include <drm/drm_atomic_helper.h>
> > > > #include <drm/drm_encoder.h>
> > > > diff --git a/drivers/gpu/drm/exynos/exynos_drm_dpi.c b/drivers/gpu/drm/exynos/exynos_drm_dpi.c
> > > > index 2f0babb67c51..fa95af1dc534 100644
> > > > --- a/drivers/gpu/drm/exynos/exynos_drm_dpi.c
> > > > +++ b/drivers/gpu/drm/exynos/exynos_drm_dpi.c
> > > > @@ -11,7 +11,7 @@
> > > > */
> > > >
> > > > #include <drm/drmP.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_panel.h>
> > > > #include <drm/drm_atomic_helper.h>
> > > >
> > > > diff --git a/drivers/gpu/drm/exynos/exynos_drm_drv.c b/drivers/gpu/drm/exynos/exynos_drm_drv.c
> > > > index 2c75e789b2a7..a941d64875f6 100644
> > > > --- a/drivers/gpu/drm/exynos/exynos_drm_drv.c
> > > > +++ b/drivers/gpu/drm/exynos/exynos_drm_drv.c
> > > > @@ -15,7 +15,7 @@
> > > > #include <drm/drmP.h>
> > > > #include <drm/drm_atomic.h>
> > > > #include <drm/drm_atomic_helper.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_fb_helper.h>
> > > >
> > > > #include <linux/component.h>
> > > > diff --git a/drivers/gpu/drm/exynos/exynos_drm_dsi.c b/drivers/gpu/drm/exynos/exynos_drm_dsi.c
> > > > index d81e62ae286a..8d28cdbfcddd 100644
> > > > --- a/drivers/gpu/drm/exynos/exynos_drm_dsi.c
> > > > +++ b/drivers/gpu/drm/exynos/exynos_drm_dsi.c
> > > > @@ -13,7 +13,7 @@
> > > > #include <asm/unaligned.h>
> > > >
> > > > #include <drm/drmP.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_fb_helper.h>
> > > > #include <drm/drm_mipi_dsi.h>
> > > > #include <drm/drm_panel.h>
> > > > diff --git a/drivers/gpu/drm/exynos/exynos_drm_fb.c b/drivers/gpu/drm/exynos/exynos_drm_fb.c
> > > > index 31eb538a44ae..0dc1a688b502 100644
> > > > --- a/drivers/gpu/drm/exynos/exynos_drm_fb.c
> > > > +++ b/drivers/gpu/drm/exynos/exynos_drm_fb.c
> > > > @@ -14,7 +14,7 @@
> > > >
> > > > #include <drm/drmP.h>
> > > > #include <drm/drm_crtc.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_fb_helper.h>
> > > > #include <drm/drm_atomic.h>
> > > > #include <drm/drm_atomic_helper.h>
> > > > diff --git a/drivers/gpu/drm/exynos/exynos_drm_fbdev.c b/drivers/gpu/drm/exynos/exynos_drm_fbdev.c
> > > > index ce9604ca8041..f057082a9b30 100644
> > > > --- a/drivers/gpu/drm/exynos/exynos_drm_fbdev.c
> > > > +++ b/drivers/gpu/drm/exynos/exynos_drm_fbdev.c
> > > > @@ -15,7 +15,7 @@
> > > > #include <drm/drmP.h>
> > > > #include <drm/drm_crtc.h>
> > > > #include <drm/drm_fb_helper.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/exynos_drm.h>
> > > >
> > > > #include <linux/console.h>
> > > > diff --git a/drivers/gpu/drm/exynos/exynos_drm_vidi.c b/drivers/gpu/drm/exynos/exynos_drm_vidi.c
> > > > index 19697c1362d8..1b0e4e0f52fe 100644
> > > > --- a/drivers/gpu/drm/exynos/exynos_drm_vidi.c
> > > > +++ b/drivers/gpu/drm/exynos/exynos_drm_vidi.c
> > > > @@ -20,7 +20,7 @@
> > > > #include <drm/exynos_drm.h>
> > > >
> > > > #include <drm/drm_edid.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_atomic_helper.h>
> > > >
> > > > #include "exynos_drm_drv.h"
> > > > diff --git a/drivers/gpu/drm/exynos/exynos_hdmi.c b/drivers/gpu/drm/exynos/exynos_hdmi.c
> > > > index 2092a650df7d..231f70b13b37 100644
> > > > --- a/drivers/gpu/drm/exynos/exynos_hdmi.c
> > > > +++ b/drivers/gpu/drm/exynos/exynos_hdmi.c
> > > > @@ -16,7 +16,7 @@
> > > >
> > > > #include <drm/drmP.h>
> > > > #include <drm/drm_edid.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_atomic_helper.h>
> > > >
> > > > #include "regs-hdmi.h"
> > > > diff --git a/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_crtc.c b/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_crtc.c
> > > > index 18afc94e4dff..bf256971063d 100644
> > > > --- a/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_crtc.c
> > > > +++ b/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_crtc.c
> > > > @@ -16,7 +16,7 @@
> > > > #include <drm/drm_atomic.h>
> > > > #include <drm/drm_atomic_helper.h>
> > > > #include <drm/drm_crtc.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <video/videomode.h>
> > > >
> > > > #include "fsl_dcu_drm_crtc.h"
> > > > diff --git a/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c b/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c
> > > > index ceddc3e29258..a66fa80be8e8 100644
> > > > --- a/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c
> > > > +++ b/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c
> > > > @@ -24,7 +24,7 @@
> > > >
> > > > #include <drm/drmP.h>
> > > > #include <drm/drm_atomic_helper.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_fb_cma_helper.h>
> > > > #include <drm/drm_fb_helper.h>
> > > > #include <drm/drm_gem_cma_helper.h>
> > > > diff --git a/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_kms.c b/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_kms.c
> > > > index ddc68e476a4d..741de83955ec 100644
> > > > --- a/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_kms.c
> > > > +++ b/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_kms.c
> > > > @@ -11,7 +11,7 @@
> > > >
> > > > #include <drm/drmP.h>
> > > > #include <drm/drm_atomic_helper.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_fb_cma_helper.h>
> > > > #include <drm/drm_gem_framebuffer_helper.h>
> > > >
> > > > diff --git a/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_plane.c b/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_plane.c
> > > > index 9554b245746e..593f9291b8e2 100644
> > > > --- a/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_plane.c
> > > > +++ b/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_plane.c
> > > > @@ -14,7 +14,7 @@
> > > > #include <drm/drmP.h>
> > > > #include <drm/drm_atomic_helper.h>
> > > > #include <drm/drm_crtc.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_fb_cma_helper.h>
> > > > #include <drm/drm_gem_cma_helper.h>
> > > > #include <drm/drm_plane_helper.h>
> > > > diff --git a/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_rgb.c b/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_rgb.c
> > > > index 2298ed2a9e1c..577fb1be2d59 100644
> > > > --- a/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_rgb.c
> > > > +++ b/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_rgb.c
> > > > @@ -14,7 +14,7 @@
> > > >
> > > > #include <drm/drmP.h>
> > > > #include <drm/drm_atomic_helper.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_of.h>
> > > > #include <drm/drm_panel.h>
> > > >
> > > > diff --git a/drivers/gpu/drm/gma500/psb_intel_drv.h b/drivers/gpu/drm/gma500/psb_intel_drv.h
> > > > index e05e5399af2d..313552d2a69d 100644
> > > > --- a/drivers/gpu/drm/gma500/psb_intel_drv.h
> > > > +++ b/drivers/gpu/drm/gma500/psb_intel_drv.h
> > > > @@ -23,6 +23,7 @@
> > > > #include <linux/i2c-algo-bit.h>
> > > > #include <drm/drm_crtc.h>
> > > > #include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_encoder.h>
> > > > #include <linux/gpio.h>
> > > > #include "gma_display.h"
> > > > diff --git a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_de.c b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_de.c
> > > > index a956545774a3..2ac593956529 100644
> > > > --- a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_de.c
> > > > +++ b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_de.c
> > > > @@ -18,7 +18,7 @@
> > > >
> > > > #include <drm/drm_atomic.h>
> > > > #include <drm/drm_atomic_helper.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_plane_helper.h>
> > > >
> > > > #include "hibmc_drm_drv.h"
> > > > diff --git a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c
> > > > index 68c0c297b3a5..85a701af6530 100644
> > > > --- a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c
> > > > +++ b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c
> > > > @@ -20,7 +20,7 @@
> > > > #include <linux/module.h>
> > > >
> > > > #include <drm/drm_atomic_helper.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > >
> > > > #include "hibmc_drm_drv.h"
> > > > #include "hibmc_drm_regs.h"
> > > > diff --git a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_fbdev.c b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_fbdev.c
> > > > index edcca1761500..c442aa2dd00f 100644
> > > > --- a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_fbdev.c
> > > > +++ b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_fbdev.c
> > > > @@ -17,7 +17,7 @@
> > > > */
> > > >
> > > > #include <drm/drm_crtc.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_fb_helper.h>
> > > >
> > > > #include "hibmc_drm_drv.h"
> > > > diff --git a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_vdac.c b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_vdac.c
> > > > index 744956cea749..d2cf7317930a 100644
> > > > --- a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_vdac.c
> > > > +++ b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_vdac.c
> > > > @@ -17,7 +17,7 @@
> > > > */
> > > >
> > > > #include <drm/drm_atomic_helper.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > >
> > > > #include "hibmc_drm_drv.h"
> > > > #include "hibmc_drm_regs.h"
> > > > diff --git a/drivers/gpu/drm/hisilicon/kirin/dw_drm_dsi.c b/drivers/gpu/drm/hisilicon/kirin/dw_drm_dsi.c
> > > > index b4c7af3ab6ae..788ec1e53794 100644
> > > > --- a/drivers/gpu/drm/hisilicon/kirin/dw_drm_dsi.c
> > > > +++ b/drivers/gpu/drm/hisilicon/kirin/dw_drm_dsi.c
> > > > @@ -19,7 +19,7 @@
> > > > #include <linux/component.h>
> > > >
> > > > #include <drm/drm_of.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_mipi_dsi.h>
> > > > #include <drm/drm_encoder_slave.h>
> > > > #include <drm/drm_atomic_helper.h>
> > > > diff --git a/drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c b/drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c
> > > > index bb774202a5a1..8ad7ab7ece9f 100644
> > > > --- a/drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c
> > > > +++ b/drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c
> > > > @@ -24,7 +24,7 @@
> > > >
> > > > #include <drm/drmP.h>
> > > > #include <drm/drm_crtc.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_atomic.h>
> > > > #include <drm/drm_atomic_helper.h>
> > > > #include <drm/drm_plane_helper.h>
> > > > diff --git a/drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.c b/drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.c
> > > > index e6a62d5a00a3..e0f410ce28b2 100644
> > > > --- a/drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.c
> > > > +++ b/drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.c
> > > > @@ -24,7 +24,7 @@
> > > > #include <drm/drm_fb_cma_helper.h>
> > > > #include <drm/drm_gem_framebuffer_helper.h>
> > > > #include <drm/drm_atomic_helper.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_of.h>
> > > >
> > > > #include "kirin_drm_drv.h"
> > > > diff --git a/drivers/gpu/drm/i2c/ch7006_priv.h b/drivers/gpu/drm/i2c/ch7006_priv.h
> > > > index dc6414af5d79..591621b687de 100644
> > > > --- a/drivers/gpu/drm/i2c/ch7006_priv.h
> > > > +++ b/drivers/gpu/drm/i2c/ch7006_priv.h
> > > > @@ -28,7 +28,7 @@
> > > > #define __DRM_I2C_CH7006_PRIV_H__
> > > >
> > > > #include <drm/drmP.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_encoder_slave.h>
> > > > #include <drm/i2c/ch7006.h>
> > > >
> > > > diff --git a/drivers/gpu/drm/i2c/sil164_drv.c b/drivers/gpu/drm/i2c/sil164_drv.c
> > > > index c52d7a3af786..14c1fc96a157 100644
> > > > --- a/drivers/gpu/drm/i2c/sil164_drv.c
> > > > +++ b/drivers/gpu/drm/i2c/sil164_drv.c
> > > > @@ -27,7 +27,7 @@
> > > > #include <linux/module.h>
> > > >
> > > > #include <drm/drmP.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_encoder_slave.h>
> > > > #include <drm/i2c/sil164.h>
> > > >
> > > > diff --git a/drivers/gpu/drm/i2c/tda998x_drv.c b/drivers/gpu/drm/i2c/tda998x_drv.c
> > > > index a7c39f39793f..b98267792306 100644
> > > > --- a/drivers/gpu/drm/i2c/tda998x_drv.c
> > > > +++ b/drivers/gpu/drm/i2c/tda998x_drv.c
> > > > @@ -26,7 +26,7 @@
> > > >
> > > > #include <drm/drmP.h>
> > > > #include <drm/drm_atomic_helper.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_edid.h>
> > > > #include <drm/drm_of.h>
> > > > #include <drm/i2c/tda998x.h>
> > > > diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c
> > > > index b310a897a4ad..1e639dc886e5 100644
> > > > --- a/drivers/gpu/drm/i915/i915_drv.c
> > > > +++ b/drivers/gpu/drm/i915/i915_drv.c
> > > > @@ -42,7 +42,7 @@
> > > > #include <acpi/video.h>
> > > >
> > > > #include <drm/drmP.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_atomic_helper.h>
> > > > #include <drm/i915_drm.h>
> > > >
> > > > diff --git a/drivers/gpu/drm/i915/intel_crt.c b/drivers/gpu/drm/i915/intel_crt.c
> > > > index 68f2fb89ece3..4db30862a1cc 100644
> > > > --- a/drivers/gpu/drm/i915/intel_crt.c
> > > > +++ b/drivers/gpu/drm/i915/intel_crt.c
> > > > @@ -30,7 +30,7 @@
> > > > #include <drm/drmP.h>
> > > > #include <drm/drm_atomic_helper.h>
> > > > #include <drm/drm_crtc.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_edid.h>
> > > > #include "intel_drv.h"
> > > > #include <drm/i915_drm.h>
> > > > diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
> > > > index 8dec25a2dc5f..4eebe84dc366 100644
> > > > --- a/drivers/gpu/drm/i915/intel_display.c
> > > > +++ b/drivers/gpu/drm/i915/intel_display.c
> > > > @@ -42,7 +42,7 @@
> > > > #include <drm/drm_atomic.h>
> > > > #include <drm/drm_atomic_helper.h>
> > > > #include <drm/drm_dp_helper.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_plane_helper.h>
> > > > #include <drm/drm_rect.h>
> > > > #include <drm/drm_atomic_uapi.h>
> > > > diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
> > > > index e94faa0a42eb..77c86977bef8 100644
> > > > --- a/drivers/gpu/drm/i915/intel_dp.c
> > > > +++ b/drivers/gpu/drm/i915/intel_dp.c
> > > > @@ -35,7 +35,7 @@
> > > > #include <drm/drmP.h>
> > > > #include <drm/drm_atomic_helper.h>
> > > > #include <drm/drm_crtc.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_dp_helper.h>
> > > > #include <drm/drm_edid.h>
> > > > #include <drm/drm_hdcp.h>
> > > > diff --git a/drivers/gpu/drm/i915/intel_dp_mst.c b/drivers/gpu/drm/i915/intel_dp_mst.c
> > > > index f05427b74e34..32e3c0366876 100644
> > > > --- a/drivers/gpu/drm/i915/intel_dp_mst.c
> > > > +++ b/drivers/gpu/drm/i915/intel_dp_mst.c
> > > > @@ -27,7 +27,7 @@
> > > > #include "i915_drv.h"
> > > > #include "intel_drv.h"
> > > > #include <drm/drm_atomic_helper.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_edid.h>
> > > >
> > > > static bool intel_dp_mst_compute_config(struct intel_encoder *encoder,
> > > > diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
> > > > index f94a04b4ad87..6dba18425e82 100644
> > > > --- a/drivers/gpu/drm/i915/intel_drv.h
> > > > +++ b/drivers/gpu/drm/i915/intel_drv.h
> > > > @@ -32,7 +32,7 @@
> > > > #include <drm/i915_drm.h>
> > > > #include "i915_drv.h"
> > > > #include <drm/drm_crtc.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_encoder.h>
> > > > #include <drm/drm_fb_helper.h>
> > > > #include <drm/drm_dp_dual_mode_helper.h>
> > > > diff --git a/drivers/gpu/drm/imx/dw_hdmi-imx.c b/drivers/gpu/drm/imx/dw_hdmi-imx.c
> > > > index 77a26fd3a44a..c7273c395811 100644
> > > > --- a/drivers/gpu/drm/imx/dw_hdmi-imx.c
> > > > +++ b/drivers/gpu/drm/imx/dw_hdmi-imx.c
> > > > @@ -13,7 +13,7 @@
> > > > #include <linux/regmap.h>
> > > > #include <drm/drm_of.h>
> > > > #include <drm/drmP.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_edid.h>
> > > > #include <drm/drm_encoder_slave.h>
> > > >
> > > > diff --git a/drivers/gpu/drm/imx/imx-drm-core.c b/drivers/gpu/drm/imx/imx-drm-core.c
> > > > index 820c7e3878f0..4db26cbed08f 100644
> > > > --- a/drivers/gpu/drm/imx/imx-drm-core.c
> > > > +++ b/drivers/gpu/drm/imx/imx-drm-core.c
> > > > @@ -13,7 +13,7 @@
> > > > #include <drm/drm_atomic.h>
> > > > #include <drm/drm_atomic_helper.h>
> > > > #include <drm/drm_fb_helper.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_gem_cma_helper.h>
> > > > #include <drm/drm_gem_framebuffer_helper.h>
> > > > #include <drm/drm_fb_cma_helper.h>
> > > > diff --git a/drivers/gpu/drm/imx/imx-ldb.c b/drivers/gpu/drm/imx/imx-ldb.c
> > > > index 2c5bbe317353..ffa742f64d44 100644
> > > > --- a/drivers/gpu/drm/imx/imx-ldb.c
> > > > +++ b/drivers/gpu/drm/imx/imx-ldb.c
> > > > @@ -12,7 +12,7 @@
> > > > #include <drm/drm_atomic.h>
> > > > #include <drm/drm_atomic_helper.h>
> > > > #include <drm/drm_fb_helper.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_of.h>
> > > > #include <drm/drm_panel.h>
> > > > #include <linux/mfd/syscon.h>
> > > > diff --git a/drivers/gpu/drm/imx/imx-tve.c b/drivers/gpu/drm/imx/imx-tve.c
> > > > index 293dd5752583..e725af8a0025 100644
> > > > --- a/drivers/gpu/drm/imx/imx-tve.c
> > > > +++ b/drivers/gpu/drm/imx/imx-tve.c
> > > > @@ -17,7 +17,7 @@
> > > > #include <drm/drmP.h>
> > > > #include <drm/drm_atomic_helper.h>
> > > > #include <drm/drm_fb_helper.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <video/imx-ipu-v3.h>
> > > >
> > > > #include "imx-drm.h"
> > > > diff --git a/drivers/gpu/drm/imx/ipuv3-crtc.c b/drivers/gpu/drm/imx/ipuv3-crtc.c
> > > > index 058b53c0aa7e..95ddcbf2f6eb 100644
> > > > --- a/drivers/gpu/drm/imx/ipuv3-crtc.c
> > > > +++ b/drivers/gpu/drm/imx/ipuv3-crtc.c
> > > > @@ -12,7 +12,7 @@
> > > > #include <drm/drmP.h>
> > > > #include <drm/drm_atomic.h>
> > > > #include <drm/drm_atomic_helper.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <linux/clk.h>
> > > > #include <linux/errno.h>
> > > > #include <drm/drm_gem_cma_helper.h>
> > > > diff --git a/drivers/gpu/drm/imx/parallel-display.c b/drivers/gpu/drm/imx/parallel-display.c
> > > > index f3ce51121dd6..670919781ded 100644
> > > > --- a/drivers/gpu/drm/imx/parallel-display.c
> > > > +++ b/drivers/gpu/drm/imx/parallel-display.c
> > > > @@ -10,7 +10,7 @@
> > > > #include <drm/drmP.h>
> > > > #include <drm/drm_atomic_helper.h>
> > > > #include <drm/drm_fb_helper.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_of.h>
> > > > #include <drm/drm_panel.h>
> > > > #include <linux/videodev2.h>
> > > > diff --git a/drivers/gpu/drm/mediatek/mtk_dpi.c b/drivers/gpu/drm/mediatek/mtk_dpi.c
> > > > index 62a9d47df948..c88cc0addb62 100644
> > > > --- a/drivers/gpu/drm/mediatek/mtk_dpi.c
> > > > +++ b/drivers/gpu/drm/mediatek/mtk_dpi.c
> > > > @@ -13,7 +13,7 @@
> > > > */
> > > > #include <drm/drmP.h>
> > > > #include <drm/drm_crtc.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_of.h>
> > > > #include <linux/kernel.h>
> > > > #include <linux/component.h>
> > > > diff --git a/drivers/gpu/drm/mediatek/mtk_drm_crtc.c b/drivers/gpu/drm/mediatek/mtk_drm_crtc.c
> > > > index 92ecb9bf982c..96709318ad8c 100644
> > > > --- a/drivers/gpu/drm/mediatek/mtk_drm_crtc.c
> > > > +++ b/drivers/gpu/drm/mediatek/mtk_drm_crtc.c
> > > > @@ -14,7 +14,7 @@
> > > > #include <asm/barrier.h>
> > > > #include <drm/drmP.h>
> > > > #include <drm/drm_atomic_helper.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_plane_helper.h>
> > > > #include <linux/clk.h>
> > > > #include <linux/pm_runtime.h>
> > > > diff --git a/drivers/gpu/drm/mediatek/mtk_drm_drv.c b/drivers/gpu/drm/mediatek/mtk_drm_drv.c
> > > > index 6422e99952fe..8a48a317cbd3 100644
> > > > --- a/drivers/gpu/drm/mediatek/mtk_drm_drv.c
> > > > +++ b/drivers/gpu/drm/mediatek/mtk_drm_drv.c
> > > > @@ -15,7 +15,7 @@
> > > > #include <drm/drmP.h>
> > > > #include <drm/drm_atomic.h>
> > > > #include <drm/drm_atomic_helper.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_gem.h>
> > > > #include <drm/drm_gem_cma_helper.h>
> > > > #include <drm/drm_of.h>
> > > > diff --git a/drivers/gpu/drm/mediatek/mtk_drm_fb.c b/drivers/gpu/drm/mediatek/mtk_drm_fb.c
> > > > index be5f6f1daf55..330c17b5911f 100644
> > > > --- a/drivers/gpu/drm/mediatek/mtk_drm_fb.c
> > > > +++ b/drivers/gpu/drm/mediatek/mtk_drm_fb.c
> > > > @@ -12,7 +12,7 @@
> > > > */
> > > >
> > > > #include <drm/drmP.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_fb_helper.h>
> > > > #include <drm/drm_gem.h>
> > > > #include <drm/drm_gem_framebuffer_helper.h>
> > > > diff --git a/drivers/gpu/drm/mediatek/mtk_dsi.c b/drivers/gpu/drm/mediatek/mtk_dsi.c
> > > > index 66df1b177959..477cd145280c 100644
> > > > --- a/drivers/gpu/drm/mediatek/mtk_dsi.c
> > > > +++ b/drivers/gpu/drm/mediatek/mtk_dsi.c
> > > > @@ -13,7 +13,7 @@
> > > >
> > > > #include <drm/drmP.h>
> > > > #include <drm/drm_atomic_helper.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_mipi_dsi.h>
> > > > #include <drm/drm_panel.h>
> > > > #include <drm/drm_of.h>
> > > > diff --git a/drivers/gpu/drm/mediatek/mtk_hdmi.c b/drivers/gpu/drm/mediatek/mtk_hdmi.c
> > > > index 862f3ec22131..607287797073 100644
> > > > --- a/drivers/gpu/drm/mediatek/mtk_hdmi.c
> > > > +++ b/drivers/gpu/drm/mediatek/mtk_hdmi.c
> > > > @@ -14,7 +14,7 @@
> > > > #include <drm/drmP.h>
> > > > #include <drm/drm_atomic_helper.h>
> > > > #include <drm/drm_crtc.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_edid.h>
> > > > #include <linux/arm-smccc.h>
> > > > #include <linux/clk.h>
> > > > diff --git a/drivers/gpu/drm/meson/meson_crtc.c b/drivers/gpu/drm/meson/meson_crtc.c
> > > > index 75d97f1b2e8f..ec573c04206b 100644
> > > > --- a/drivers/gpu/drm/meson/meson_crtc.c
> > > > +++ b/drivers/gpu/drm/meson/meson_crtc.c
> > > > @@ -30,7 +30,7 @@
> > > > #include <drm/drm_atomic.h>
> > > > #include <drm/drm_atomic_helper.h>
> > > > #include <drm/drm_flip_work.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > >
> > > > #include "meson_crtc.h"
> > > > #include "meson_plane.h"
> > > > diff --git a/drivers/gpu/drm/meson/meson_drv.c b/drivers/gpu/drm/meson/meson_drv.c
> > > > index 3ee4d4a4ecba..6b29447fd09e 100644
> > > > --- a/drivers/gpu/drm/meson/meson_drv.c
> > > > +++ b/drivers/gpu/drm/meson/meson_drv.c
> > > > @@ -31,7 +31,7 @@
> > > > #include <drm/drm_atomic.h>
> > > > #include <drm/drm_atomic_helper.h>
> > > > #include <drm/drm_flip_work.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_plane_helper.h>
> > > > #include <drm/drm_gem_cma_helper.h>
> > > > #include <drm/drm_gem_framebuffer_helper.h>
> > > > diff --git a/drivers/gpu/drm/meson/meson_dw_hdmi.c b/drivers/gpu/drm/meson/meson_dw_hdmi.c
> > > > index 807111ebfdd9..b6299f3f4310 100644
> > > > --- a/drivers/gpu/drm/meson/meson_dw_hdmi.c
> > > > +++ b/drivers/gpu/drm/meson/meson_dw_hdmi.c
> > > > @@ -27,7 +27,7 @@
> > > >
> > > > #include <drm/drmP.h>
> > > > #include <drm/drm_edid.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_atomic_helper.h>
> > > > #include <drm/bridge/dw_hdmi.h>
> > > >
> > > > diff --git a/drivers/gpu/drm/meson/meson_venc_cvbs.c b/drivers/gpu/drm/meson/meson_venc_cvbs.c
> > > > index f7945bae3b4a..64de3a7026d0 100644
> > > > --- a/drivers/gpu/drm/meson/meson_venc_cvbs.c
> > > > +++ b/drivers/gpu/drm/meson/meson_venc_cvbs.c
> > > > @@ -27,7 +27,7 @@
> > > >
> > > > #include <drm/drmP.h>
> > > > #include <drm/drm_edid.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_atomic_helper.h>
> > > >
> > > > #include "meson_venc_cvbs.h"
> > > > diff --git a/drivers/gpu/drm/mgag200/mgag200_mode.c b/drivers/gpu/drm/mgag200/mgag200_mode.c
> > > > index acf7bfe68454..7481a3d556ad 100644
> > > > --- a/drivers/gpu/drm/mgag200/mgag200_mode.c
> > > > +++ b/drivers/gpu/drm/mgag200/mgag200_mode.c
> > > > @@ -16,6 +16,7 @@
> > > > #include <drm/drmP.h>
> > > > #include <drm/drm_crtc_helper.h>
> > > > #include <drm/drm_plane_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > >
> > > > #include "mgag200_drv.h"
> > > >
> > > > diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c
> > > > index ca169f013a14..26f21663d56f 100644
> > > > --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c
> > > > +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c
> > > > @@ -22,7 +22,7 @@
> > > > #include <linux/ktime.h>
> > > > #include <drm/drm_mode.h>
> > > > #include <drm/drm_crtc.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_flip_work.h>
> > > > #include <drm/drm_rect.h>
> > > >
> > > > diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c
> > > > index d31d8281424e..7fa60ffd4cd8 100644
> > > > --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c
> > > > +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c
> > > > @@ -24,7 +24,7 @@
> > > > #include "msm_drv.h"
> > > > #include "dpu_kms.h"
> > > > #include <drm/drm_crtc.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include "dpu_hwio.h"
> > > > #include "dpu_hw_catalog.h"
> > > > #include "dpu_hw_intf.h"
> > > > diff --git a/drivers/gpu/drm/msm/disp/mdp4/mdp4_crtc.c b/drivers/gpu/drm/msm/disp/mdp4/mdp4_crtc.c
> > > > index 457c29dba4a1..62d173cee0ab 100644
> > > > --- a/drivers/gpu/drm/msm/disp/mdp4/mdp4_crtc.c
> > > > +++ b/drivers/gpu/drm/msm/disp/mdp4/mdp4_crtc.c
> > > > @@ -16,7 +16,7 @@
> > > > */
> > > >
> > > > #include <drm/drm_crtc.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_flip_work.h>
> > > > #include <drm/drm_mode.h>
> > > >
> > > > diff --git a/drivers/gpu/drm/msm/disp/mdp4/mdp4_dsi_encoder.c b/drivers/gpu/drm/msm/disp/mdp4/mdp4_dsi_encoder.c
> > > > index 6a1ebdace391..86cbe173106e 100644
> > > > --- a/drivers/gpu/drm/msm/disp/mdp4/mdp4_dsi_encoder.c
> > > > +++ b/drivers/gpu/drm/msm/disp/mdp4/mdp4_dsi_encoder.c
> > > > @@ -18,7 +18,7 @@
> > > > */
> > > >
> > > > #include <drm/drm_crtc.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > >
> > > > #include "mdp4_kms.h"
> > > >
> > > > diff --git a/drivers/gpu/drm/msm/disp/mdp4/mdp4_dtv_encoder.c b/drivers/gpu/drm/msm/disp/mdp4/mdp4_dtv_encoder.c
> > > > index ba8e587f734b..c0ee6f465839 100644
> > > > --- a/drivers/gpu/drm/msm/disp/mdp4/mdp4_dtv_encoder.c
> > > > +++ b/drivers/gpu/drm/msm/disp/mdp4/mdp4_dtv_encoder.c
> > > > @@ -16,7 +16,7 @@
> > > > */
> > > >
> > > > #include <drm/drm_crtc.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > >
> > > > #include "mdp4_kms.h"
> > > >
> > > > diff --git a/drivers/gpu/drm/msm/disp/mdp4/mdp4_lcdc_encoder.c b/drivers/gpu/drm/msm/disp/mdp4/mdp4_lcdc_encoder.c
> > > > index 2bfb39082f54..473255f09f30 100644
> > > > --- a/drivers/gpu/drm/msm/disp/mdp4/mdp4_lcdc_encoder.c
> > > > +++ b/drivers/gpu/drm/msm/disp/mdp4/mdp4_lcdc_encoder.c
> > > > @@ -17,7 +17,7 @@
> > > > */
> > > >
> > > > #include <drm/drm_crtc.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > >
> > > > #include "mdp4_kms.h"
> > > >
> > > > diff --git a/drivers/gpu/drm/msm/disp/mdp5/mdp5_cmd_encoder.c b/drivers/gpu/drm/msm/disp/mdp5/mdp5_cmd_encoder.c
> > > > index d6f79dc755b4..b7e17651d897 100644
> > > > --- a/drivers/gpu/drm/msm/disp/mdp5/mdp5_cmd_encoder.c
> > > > +++ b/drivers/gpu/drm/msm/disp/mdp5/mdp5_cmd_encoder.c
> > > > @@ -12,7 +12,7 @@
> > > > */
> > > >
> > > > #include <drm/drm_crtc.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > >
> > > > #include "mdp5_kms.h"
> > > >
> > > > diff --git a/drivers/gpu/drm/msm/disp/mdp5/mdp5_crtc.c b/drivers/gpu/drm/msm/disp/mdp5/mdp5_crtc.c
> > > > index b1da9ce54379..6b5f09721dd4 100644
> > > > --- a/drivers/gpu/drm/msm/disp/mdp5/mdp5_crtc.c
> > > > +++ b/drivers/gpu/drm/msm/disp/mdp5/mdp5_crtc.c
> > > > @@ -19,7 +19,7 @@
> > > > #include <linux/sort.h>
> > > > #include <drm/drm_mode.h>
> > > > #include <drm/drm_crtc.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_flip_work.h>
> > > >
> > > > #include "mdp5_kms.h"
> > > > diff --git a/drivers/gpu/drm/msm/disp/mdp5/mdp5_encoder.c b/drivers/gpu/drm/msm/disp/mdp5/mdp5_encoder.c
> > > > index fcd44d1d1068..b32c662dcb60 100644
> > > > --- a/drivers/gpu/drm/msm/disp/mdp5/mdp5_encoder.c
> > > > +++ b/drivers/gpu/drm/msm/disp/mdp5/mdp5_encoder.c
> > > > @@ -17,7 +17,7 @@
> > > > */
> > > >
> > > > #include <drm/drm_crtc.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > >
> > > > #include "mdp5_kms.h"
> > > >
> > > > diff --git a/drivers/gpu/drm/msm/msm_drv.h b/drivers/gpu/drm/msm/msm_drv.h
> > > > index 9d11f321f5a9..19f4751e0436 100644
> > > > --- a/drivers/gpu/drm/msm/msm_drv.h
> > > > +++ b/drivers/gpu/drm/msm/msm_drv.h
> > > > @@ -39,7 +39,7 @@
> > > > #include <drm/drmP.h>
> > > > #include <drm/drm_atomic.h>
> > > > #include <drm/drm_atomic_helper.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_plane_helper.h>
> > > > #include <drm/drm_fb_helper.h>
> > > > #include <drm/msm_drm.h>
> > > > diff --git a/drivers/gpu/drm/msm/msm_fb.c b/drivers/gpu/drm/msm/msm_fb.c
> > > > index 2a7348aeb38d..22bb2247c52a 100644
> > > > --- a/drivers/gpu/drm/msm/msm_fb.c
> > > > +++ b/drivers/gpu/drm/msm/msm_fb.c
> > > > @@ -16,7 +16,7 @@
> > > > */
> > > >
> > > > #include <drm/drm_crtc.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_gem_framebuffer_helper.h>
> > > >
> > > > #include "msm_drv.h"
> > > > diff --git a/drivers/gpu/drm/mxsfb/mxsfb_crtc.c b/drivers/gpu/drm/mxsfb/mxsfb_crtc.c
> > > > index 24b1f0c1432e..38cdde9841e2 100644
> > > > --- a/drivers/gpu/drm/mxsfb/mxsfb_crtc.c
> > > > +++ b/drivers/gpu/drm/mxsfb/mxsfb_crtc.c
> > > > @@ -19,7 +19,7 @@
> > > > #include <drm/drmP.h>
> > > > #include <drm/drm_atomic_helper.h>
> > > > #include <drm/drm_crtc.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_fb_helper.h>
> > > > #include <drm/drm_fb_cma_helper.h>
> > > > #include <drm/drm_gem_cma_helper.h>
> > > > diff --git a/drivers/gpu/drm/mxsfb/mxsfb_drv.c b/drivers/gpu/drm/mxsfb/mxsfb_drv.c
> > > > index 88ba003979e6..9c117352fca9 100644
> > > > --- a/drivers/gpu/drm/mxsfb/mxsfb_drv.c
> > > > +++ b/drivers/gpu/drm/mxsfb/mxsfb_drv.c
> > > > @@ -31,7 +31,7 @@
> > > > #include <drm/drm_atomic.h>
> > > > #include <drm/drm_atomic_helper.h>
> > > > #include <drm/drm_crtc.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_fb_helper.h>
> > > > #include <drm/drm_fb_cma_helper.h>
> > > > #include <drm/drm_gem_cma_helper.h>
> > > > diff --git a/drivers/gpu/drm/mxsfb/mxsfb_out.c b/drivers/gpu/drm/mxsfb/mxsfb_out.c
> > > > index e5edf016a439..1bec96baf948 100644
> > > > --- a/drivers/gpu/drm/mxsfb/mxsfb_out.c
> > > > +++ b/drivers/gpu/drm/mxsfb/mxsfb_out.c
> > > > @@ -16,7 +16,7 @@
> > > > #include <drm/drm_atomic.h>
> > > > #include <drm/drm_atomic_helper.h>
> > > > #include <drm/drm_crtc.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_fb_cma_helper.h>
> > > > #include <drm/drm_gem_cma_helper.h>
> > > > #include <drm/drm_of.h>
> > > > diff --git a/drivers/gpu/drm/nouveau/dispnv04/tvnv17.c b/drivers/gpu/drm/nouveau/dispnv04/tvnv17.c
> > > > index 3e82db41f8a4..51667d13d95a 100644
> > > > --- a/drivers/gpu/drm/nouveau/dispnv04/tvnv17.c
> > > > +++ b/drivers/gpu/drm/nouveau/dispnv04/tvnv17.c
> > > > @@ -26,6 +26,7 @@
> > > >
> > > > #include <drm/drmP.h>
> > > > #include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include "nouveau_drv.h"
> > > > #include "nouveau_reg.h"
> > > > #include "nouveau_encoder.h"
> > > > diff --git a/drivers/gpu/drm/nouveau/dispnv50/disp.c b/drivers/gpu/drm/nouveau/dispnv50/disp.c
> > > > index 4a56841958c8..79225913a25c 100644
> > > > --- a/drivers/gpu/drm/nouveau/dispnv50/disp.c
> > > > +++ b/drivers/gpu/drm/nouveau/dispnv50/disp.c
> > > > @@ -32,7 +32,7 @@
> > > >
> > > > #include <drm/drmP.h>
> > > > #include <drm/drm_atomic_helper.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_dp_helper.h>
> > > > #include <drm/drm_fb_helper.h>
> > > > #include <drm/drm_plane_helper.h>
> > > > diff --git a/drivers/gpu/drm/nouveau/nouveau_connector.c b/drivers/gpu/drm/nouveau/nouveau_connector.c
> > > > index fd80661dff92..2a0ded1d732e 100644
> > > > --- a/drivers/gpu/drm/nouveau/nouveau_connector.c
> > > > +++ b/drivers/gpu/drm/nouveau/nouveau_connector.c
> > > > @@ -33,6 +33,7 @@
> > > > #include <drm/drm_atomic_helper.h>
> > > > #include <drm/drm_edid.h>
> > > > #include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_atomic.h>
> > > >
> > > > #include "nouveau_reg.h"
> > > > diff --git a/drivers/gpu/drm/nouveau/nouveau_display.c b/drivers/gpu/drm/nouveau/nouveau_display.c
> > > > index 5d273a655479..0b58709f0406 100644
> > > > --- a/drivers/gpu/drm/nouveau/nouveau_display.c
> > > > +++ b/drivers/gpu/drm/nouveau/nouveau_display.c
> > > > @@ -29,6 +29,7 @@
> > > > #include <drm/drm_atomic.h>
> > > > #include <drm/drm_atomic_helper.h>
> > > > #include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_fb_helper.h>
> > > >
> > > > #include <nvif/class.h>
> > > > diff --git a/drivers/gpu/drm/omapdrm/omap_connector.c b/drivers/gpu/drm/omapdrm/omap_connector.c
> > > > index b81302c4bf9e..4fef6293f6c0 100644
> > > > --- a/drivers/gpu/drm/omapdrm/omap_connector.c
> > > > +++ b/drivers/gpu/drm/omapdrm/omap_connector.c
> > > > @@ -17,7 +17,7 @@
> > > >
> > > > #include <drm/drm_atomic_helper.h>
> > > > #include <drm/drm_crtc.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > >
> > > > #include "omap_drv.h"
> > > >
> > > > diff --git a/drivers/gpu/drm/omapdrm/omap_crtc.c b/drivers/gpu/drm/omapdrm/omap_crtc.c
> > > > index caffc547ef97..aab1b1a49a87 100644
> > > > --- a/drivers/gpu/drm/omapdrm/omap_crtc.c
> > > > +++ b/drivers/gpu/drm/omapdrm/omap_crtc.c
> > > > @@ -18,7 +18,7 @@
> > > > #include <drm/drm_atomic.h>
> > > > #include <drm/drm_atomic_helper.h>
> > > > #include <drm/drm_crtc.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_mode.h>
> > > > #include <drm/drm_plane_helper.h>
> > > > #include <linux/math64.h>
> > > > diff --git a/drivers/gpu/drm/omapdrm/omap_drv.c b/drivers/gpu/drm/omapdrm/omap_drv.c
> > > > index 5e67d58cbc28..3a78f0cf3321 100644
> > > > --- a/drivers/gpu/drm/omapdrm/omap_drv.c
> > > > +++ b/drivers/gpu/drm/omapdrm/omap_drv.c
> > > > @@ -21,7 +21,7 @@
> > > >
> > > > #include <drm/drm_atomic.h>
> > > > #include <drm/drm_atomic_helper.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_fb_helper.h>
> > > >
> > > > #include "omap_dmm_tiler.h"
> > > > diff --git a/drivers/gpu/drm/omapdrm/omap_drv.h b/drivers/gpu/drm/omapdrm/omap_drv.h
> > > > index bd7f2c227a25..513ae8ab5e64 100644
> > > > --- a/drivers/gpu/drm/omapdrm/omap_drv.h
> > > > +++ b/drivers/gpu/drm/omapdrm/omap_drv.h
> > > > @@ -23,7 +23,7 @@
> > > > #include <linux/workqueue.h>
> > > >
> > > > #include <drm/drmP.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_gem.h>
> > > > #include <drm/omap_drm.h>
> > > >
> > > > diff --git a/drivers/gpu/drm/omapdrm/omap_encoder.c b/drivers/gpu/drm/omapdrm/omap_encoder.c
> > > > index 933ebc9f9faa..a0e0f200f677 100644
> > > > --- a/drivers/gpu/drm/omapdrm/omap_encoder.c
> > > > +++ b/drivers/gpu/drm/omapdrm/omap_encoder.c
> > > > @@ -18,7 +18,7 @@
> > > > #include <linux/list.h>
> > > >
> > > > #include <drm/drm_crtc.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_edid.h>
> > > >
> > > > #include "omap_drv.h"
> > > > diff --git a/drivers/gpu/drm/omapdrm/omap_fb.c b/drivers/gpu/drm/omapdrm/omap_fb.c
> > > > index 4d264fd554d8..314add2bbc9a 100644
> > > > --- a/drivers/gpu/drm/omapdrm/omap_fb.c
> > > > +++ b/drivers/gpu/drm/omapdrm/omap_fb.c
> > > > @@ -18,7 +18,7 @@
> > > > #include <linux/seq_file.h>
> > > >
> > > > #include <drm/drm_crtc.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_gem_framebuffer_helper.h>
> > > >
> > > > #include "omap_dmm_tiler.h"
> > > > diff --git a/drivers/gpu/drm/pl111/pl111_drv.c b/drivers/gpu/drm/pl111/pl111_drv.c
> > > > index 33e0483d62ae..9dbb11cfbb20 100644
> > > > --- a/drivers/gpu/drm/pl111/pl111_drv.c
> > > > +++ b/drivers/gpu/drm/pl111/pl111_drv.c
> > > > @@ -64,7 +64,7 @@
> > > >
> > > > #include <drm/drmP.h>
> > > > #include <drm/drm_atomic_helper.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_gem_cma_helper.h>
> > > > #include <drm/drm_gem_framebuffer_helper.h>
> > > > #include <drm/drm_fb_helper.h>
> > > > diff --git a/drivers/gpu/drm/qxl/qxl_display.c b/drivers/gpu/drm/qxl/qxl_display.c
> > > > index 72a1784dae54..1de03d60bf23 100644
> > > > --- a/drivers/gpu/drm/qxl/qxl_display.c
> > > > +++ b/drivers/gpu/drm/qxl/qxl_display.c
> > > > @@ -24,9 +24,9 @@
> > > > */
> > > >
> > > > #include <linux/crc32.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > #include <drm/drm_plane_helper.h>
> > > > #include <drm/drm_atomic_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_atomic.h>
> > > > #include <drm/drm_gem_framebuffer_helper.h>
> > > >
> > > > diff --git a/drivers/gpu/drm/qxl/qxl_drv.c b/drivers/gpu/drm/qxl/qxl_drv.c
> > > > index 13c8a662f9b4..fd987d62d902 100644
> > > > --- a/drivers/gpu/drm/qxl/qxl_drv.c
> > > > +++ b/drivers/gpu/drm/qxl/qxl_drv.c
> > > > @@ -33,7 +33,8 @@
> > > >
> > > > #include <drm/drmP.h>
> > > > #include <drm/drm.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_modeset_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include "qxl_drv.h"
> > > > #include "qxl_object.h"
> > > >
> > > > diff --git a/drivers/gpu/drm/qxl/qxl_fb.c b/drivers/gpu/drm/qxl/qxl_fb.c
> > > > index a819d24225d2..996cdb8fb4fa 100644
> > > > --- a/drivers/gpu/drm/qxl/qxl_fb.c
> > > > +++ b/drivers/gpu/drm/qxl/qxl_fb.c
> > > > @@ -28,7 +28,7 @@
> > > > #include <drm/drmP.h>
> > > > #include <drm/drm.h>
> > > > #include <drm/drm_crtc.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_fb_helper.h>
> > > > #include <drm/drm_gem_framebuffer_helper.h>
> > > >
> > > > diff --git a/drivers/gpu/drm/qxl/qxl_kms.c b/drivers/gpu/drm/qxl/qxl_kms.c
> > > > index 15238a413f9d..85e13afa1808 100644
> > > > --- a/drivers/gpu/drm/qxl/qxl_kms.c
> > > > +++ b/drivers/gpu/drm/qxl/qxl_kms.c
> > > > @@ -26,7 +26,7 @@
> > > > #include "qxl_drv.h"
> > > > #include "qxl_object.h"
> > > >
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <linux/io-mapping.h>
> > > >
> > > > int qxl_log_level;
> > > > diff --git a/drivers/gpu/drm/radeon/radeon_acpi.c b/drivers/gpu/drm/radeon/radeon_acpi.c
> > > > index 8d3251a10cd4..224cc21bbe38 100644
> > > > --- a/drivers/gpu/drm/radeon/radeon_acpi.c
> > > > +++ b/drivers/gpu/drm/radeon/radeon_acpi.c
> > > > @@ -29,6 +29,7 @@
> > > > #include <acpi/video.h>
> > > > #include <drm/drmP.h>
> > > > #include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include "radeon.h"
> > > > #include "radeon_acpi.h"
> > > > #include "atom.h"
> > > > diff --git a/drivers/gpu/drm/radeon/radeon_connectors.c b/drivers/gpu/drm/radeon/radeon_connectors.c
> > > > index 414642e5b7a3..88239c1e7c5b 100644
> > > > --- a/drivers/gpu/drm/radeon/radeon_connectors.c
> > > > +++ b/drivers/gpu/drm/radeon/radeon_connectors.c
> > > > @@ -26,6 +26,7 @@
> > > > #include <drm/drmP.h>
> > > > #include <drm/drm_edid.h>
> > > > #include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_fb_helper.h>
> > > > #include <drm/drm_dp_mst_helper.h>
> > > > #include <drm/radeon_drm.h>
> > > > diff --git a/drivers/gpu/drm/radeon/radeon_device.c b/drivers/gpu/drm/radeon/radeon_device.c
> > > > index 59c8a6647ff2..53f29a115104 100644
> > > > --- a/drivers/gpu/drm/radeon/radeon_device.c
> > > > +++ b/drivers/gpu/drm/radeon/radeon_device.c
> > > > @@ -29,6 +29,7 @@
> > > > #include <linux/slab.h>
> > > > #include <drm/drmP.h>
> > > > #include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_cache.h>
> > > > #include <drm/radeon_drm.h>
> > > > #include <linux/pm_runtime.h>
> > > > diff --git a/drivers/gpu/drm/radeon/radeon_display.c b/drivers/gpu/drm/radeon/radeon_display.c
> > > > index 92332226e5cf..e252ab3832a5 100644
> > > > --- a/drivers/gpu/drm/radeon/radeon_display.c
> > > > +++ b/drivers/gpu/drm/radeon/radeon_display.c
> > > > @@ -32,6 +32,7 @@
> > > >
> > > > #include <linux/pm_runtime.h>
> > > > #include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_gem_framebuffer_helper.h>
> > > > #include <drm/drm_fb_helper.h>
> > > > #include <drm/drm_plane_helper.h>
> > > > diff --git a/drivers/gpu/drm/radeon/radeon_dp_mst.c b/drivers/gpu/drm/radeon/radeon_dp_mst.c
> > > > index a0c70e27ab65..8d85540bbb43 100644
> > > > --- a/drivers/gpu/drm/radeon/radeon_dp_mst.c
> > > > +++ b/drivers/gpu/drm/radeon/radeon_dp_mst.c
> > > > @@ -3,6 +3,7 @@
> > > > #include <drm/drmP.h>
> > > > #include <drm/drm_dp_mst_helper.h>
> > > > #include <drm/drm_fb_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > >
> > > > #include "radeon.h"
> > > > #include "atom.h"
> > > > diff --git a/drivers/gpu/drm/radeon/radeon_drv.c b/drivers/gpu/drm/radeon/radeon_drv.c
> > > > index 99c63eeb2866..8897c3d18fbb 100644
> > > > --- a/drivers/gpu/drm/radeon/radeon_drv.c
> > > > +++ b/drivers/gpu/drm/radeon/radeon_drv.c
> > > > @@ -43,6 +43,7 @@
> > > > #include <drm/drm_fb_helper.h>
> > > >
> > > > #include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > >
> > > > /*
> > > > * KMS wrapper.
> > > > diff --git a/drivers/gpu/drm/radeon/radeon_irq_kms.c b/drivers/gpu/drm/radeon/radeon_irq_kms.c
> > > > index afaf10db47cc..1d5e3ba7383e 100644
> > > > --- a/drivers/gpu/drm/radeon/radeon_irq_kms.c
> > > > +++ b/drivers/gpu/drm/radeon/radeon_irq_kms.c
> > > > @@ -27,6 +27,7 @@
> > > > */
> > > > #include <drm/drmP.h>
> > > > #include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/radeon_drm.h>
> > > > #include "radeon_reg.h"
> > > > #include "radeon.h"
> > > > diff --git a/drivers/gpu/drm/rcar-du/rcar_du_crtc.c b/drivers/gpu/drm/rcar-du/rcar_du_crtc.c
> > > > index 90dacab67be5..b15d2b3a07f1 100644
> > > > --- a/drivers/gpu/drm/rcar-du/rcar_du_crtc.c
> > > > +++ b/drivers/gpu/drm/rcar-du/rcar_du_crtc.c
> > > > @@ -15,7 +15,7 @@
> > > > #include <drm/drm_atomic.h>
> > > > #include <drm/drm_atomic_helper.h>
> > > > #include <drm/drm_crtc.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_fb_cma_helper.h>
> > > > #include <drm/drm_gem_cma_helper.h>
> > > > #include <drm/drm_plane_helper.h>
> > > > diff --git a/drivers/gpu/drm/rcar-du/rcar_du_drv.c b/drivers/gpu/drm/rcar-du/rcar_du_drv.c
> > > > index f50a3b1864bb..60862858d041 100644
> > > > --- a/drivers/gpu/drm/rcar-du/rcar_du_drv.c
> > > > +++ b/drivers/gpu/drm/rcar-du/rcar_du_drv.c
> > > > @@ -19,7 +19,7 @@
> > > >
> > > > #include <drm/drmP.h>
> > > > #include <drm/drm_atomic_helper.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_fb_cma_helper.h>
> > > > #include <drm/drm_fb_helper.h>
> > > > #include <drm/drm_gem_cma_helper.h>
> > > > diff --git a/drivers/gpu/drm/rcar-du/rcar_du_encoder.c b/drivers/gpu/drm/rcar-du/rcar_du_encoder.c
> > > > index 1877764bd6d9..9e751c9be9f2 100644
> > > > --- a/drivers/gpu/drm/rcar-du/rcar_du_encoder.c
> > > > +++ b/drivers/gpu/drm/rcar-du/rcar_du_encoder.c
> > > > @@ -11,7 +11,7 @@
> > > >
> > > > #include <drm/drmP.h>
> > > > #include <drm/drm_crtc.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_panel.h>
> > > >
> > > > #include "rcar_du_drv.h"
> > > > diff --git a/drivers/gpu/drm/rcar-du/rcar_du_kms.c b/drivers/gpu/drm/rcar-du/rcar_du_kms.c
> > > > index 9c7007d45408..af337c918d84 100644
> > > > --- a/drivers/gpu/drm/rcar-du/rcar_du_kms.c
> > > > +++ b/drivers/gpu/drm/rcar-du/rcar_du_kms.c
> > > > @@ -11,7 +11,7 @@
> > > > #include <drm/drm_atomic.h>
> > > > #include <drm/drm_atomic_helper.h>
> > > > #include <drm/drm_crtc.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_fb_cma_helper.h>
> > > > #include <drm/drm_gem_cma_helper.h>
> > > > #include <drm/drm_gem_framebuffer_helper.h>
> > > > diff --git a/drivers/gpu/drm/rcar-du/rcar_du_plane.c b/drivers/gpu/drm/rcar-du/rcar_du_plane.c
> > > > index 39d5ae3fdf72..b7fa278ca745 100644
> > > > --- a/drivers/gpu/drm/rcar-du/rcar_du_plane.c
> > > > +++ b/drivers/gpu/drm/rcar-du/rcar_du_plane.c
> > > > @@ -11,7 +11,7 @@
> > > > #include <drm/drm_atomic.h>
> > > > #include <drm/drm_atomic_helper.h>
> > > > #include <drm/drm_crtc.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_fb_cma_helper.h>
> > > > #include <drm/drm_gem_cma_helper.h>
> > > > #include <drm/drm_plane_helper.h>
> > > > diff --git a/drivers/gpu/drm/rcar-du/rcar_du_vsp.c b/drivers/gpu/drm/rcar-du/rcar_du_vsp.c
> > > > index 4576119e7777..35b2a4d3ae74 100644
> > > > --- a/drivers/gpu/drm/rcar-du/rcar_du_vsp.c
> > > > +++ b/drivers/gpu/drm/rcar-du/rcar_du_vsp.c
> > > > @@ -10,7 +10,7 @@
> > > > #include <drm/drmP.h>
> > > > #include <drm/drm_atomic_helper.h>
> > > > #include <drm/drm_crtc.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_fb_cma_helper.h>
> > > > #include <drm/drm_gem_cma_helper.h>
> > > > #include <drm/drm_gem_framebuffer_helper.h>
> > > > diff --git a/drivers/gpu/drm/rcar-du/rcar_lvds.c b/drivers/gpu/drm/rcar-du/rcar_lvds.c
> > > > index 534a128a869d..24cb74e30fcd 100644
> > > > --- a/drivers/gpu/drm/rcar-du/rcar_lvds.c
> > > > +++ b/drivers/gpu/drm/rcar-du/rcar_lvds.c
> > > > @@ -19,7 +19,7 @@
> > > > #include <drm/drm_atomic.h>
> > > > #include <drm/drm_atomic_helper.h>
> > > > #include <drm/drm_bridge.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_panel.h>
> > > >
> > > > #include "rcar_lvds_regs.h"
> > > > diff --git a/drivers/gpu/drm/rockchip/analogix_dp-rockchip.c b/drivers/gpu/drm/rockchip/analogix_dp-rockchip.c
> > > > index 080f05352195..2f6b4a4a9d6b 100644
> > > > --- a/drivers/gpu/drm/rockchip/analogix_dp-rockchip.c
> > > > +++ b/drivers/gpu/drm/rockchip/analogix_dp-rockchip.c
> > > > @@ -21,7 +21,7 @@
> > > > #include <linux/clk.h>
> > > >
> > > > #include <drm/drmP.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_dp_helper.h>
> > > > #include <drm/drm_of.h>
> > > > #include <drm/drm_panel.h>
> > > > diff --git a/drivers/gpu/drm/rockchip/cdn-dp-core.c b/drivers/gpu/drm/rockchip/cdn-dp-core.c
> > > > index 8ad0d773dc33..7896b3c28676 100644
> > > > --- a/drivers/gpu/drm/rockchip/cdn-dp-core.c
> > > > +++ b/drivers/gpu/drm/rockchip/cdn-dp-core.c
> > > > @@ -14,7 +14,7 @@
> > > >
> > > > #include <drm/drmP.h>
> > > > #include <drm/drm_atomic_helper.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_dp_helper.h>
> > > > #include <drm/drm_edid.h>
> > > > #include <drm/drm_of.h>
> > > > diff --git a/drivers/gpu/drm/rockchip/cdn-dp-core.h b/drivers/gpu/drm/rockchip/cdn-dp-core.h
> > > > index f57e296401b8..7000b53dddcb 100644
> > > > --- a/drivers/gpu/drm/rockchip/cdn-dp-core.h
> > > > +++ b/drivers/gpu/drm/rockchip/cdn-dp-core.h
> > > > @@ -16,7 +16,7 @@
> > > > #define _CDN_DP_CORE_H
> > > >
> > > > #include <drm/drmP.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_dp_helper.h>
> > > > #include <drm/drm_panel.h>
> > > > #include "rockchip_drm_drv.h"
> > > > diff --git a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
> > > > index 89c63cfde5c8..1e2cc2b02a31 100644
> > > > --- a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
> > > > +++ b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
> > > > @@ -16,7 +16,7 @@
> > > >
> > > > #include <drm/drm_of.h>
> > > > #include <drm/drmP.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_edid.h>
> > > > #include <drm/bridge/dw_hdmi.h>
> > > >
> > > > diff --git a/drivers/gpu/drm/rockchip/inno_hdmi.c b/drivers/gpu/drm/rockchip/inno_hdmi.c
> > > > index 1c02b3e61299..9db4a706b450 100644
> > > > --- a/drivers/gpu/drm/rockchip/inno_hdmi.c
> > > > +++ b/drivers/gpu/drm/rockchip/inno_hdmi.c
> > > > @@ -26,7 +26,7 @@
> > > > #include <drm/drm_of.h>
> > > > #include <drm/drmP.h>
> > > > #include <drm/drm_atomic_helper.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_edid.h>
> > > >
> > > > #include "rockchip_drm_drv.h"
> > > > diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_drv.c b/drivers/gpu/drm/rockchip/rockchip_drm_drv.c
> > > > index 37f9a3b651ab..c4aa2ef82e57 100644
> > > > --- a/drivers/gpu/drm/rockchip/rockchip_drm_drv.c
> > > > +++ b/drivers/gpu/drm/rockchip/rockchip_drm_drv.c
> > > > @@ -15,7 +15,7 @@
> > > > */
> > > >
> > > > #include <drm/drmP.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_fb_helper.h>
> > > > #include <drm/drm_gem_cma_helper.h>
> > > > #include <drm/drm_of.h>
> > > > diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_fb.c b/drivers/gpu/drm/rockchip/rockchip_drm_fb.c
> > > > index ea18cb2a76c0..567605fc2898 100644
> > > > --- a/drivers/gpu/drm/rockchip/rockchip_drm_fb.c
> > > > +++ b/drivers/gpu/drm/rockchip/rockchip_drm_fb.c
> > > > @@ -17,7 +17,7 @@
> > > > #include <drm/drmP.h>
> > > > #include <drm/drm_atomic.h>
> > > > #include <drm/drm_fb_helper.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_gem_framebuffer_helper.h>
> > > >
> > > > #include "rockchip_drm_drv.h"
> > > > diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_fbdev.c b/drivers/gpu/drm/rockchip/rockchip_drm_fbdev.c
> > > > index 361604e51361..7bd3b89022be 100644
> > > > --- a/drivers/gpu/drm/rockchip/rockchip_drm_fbdev.c
> > > > +++ b/drivers/gpu/drm/rockchip/rockchip_drm_fbdev.c
> > > > @@ -15,7 +15,7 @@
> > > > #include <drm/drm.h>
> > > > #include <drm/drmP.h>
> > > > #include <drm/drm_fb_helper.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > >
> > > > #include "rockchip_drm_drv.h"
> > > > #include "rockchip_drm_gem.h"
> > > > diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_psr.c b/drivers/gpu/drm/rockchip/rockchip_drm_psr.c
> > > > index 01ff3c858875..b165e248c2e6 100644
> > > > --- a/drivers/gpu/drm/rockchip/rockchip_drm_psr.c
> > > > +++ b/drivers/gpu/drm/rockchip/rockchip_drm_psr.c
> > > > @@ -13,7 +13,7 @@
> > > > */
> > > >
> > > > #include <drm/drmP.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > >
> > > > #include "rockchip_drm_drv.h"
> > > > #include "rockchip_drm_psr.h"
> > > > diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
> > > > index fb70fb486fbf..e78906bb6502 100644
> > > > --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
> > > > +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
> > > > @@ -16,7 +16,7 @@
> > > > #include <drm/drmP.h>
> > > > #include <drm/drm_atomic.h>
> > > > #include <drm/drm_crtc.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_flip_work.h>
> > > > #include <drm/drm_plane_helper.h>
> > > > #ifdef CONFIG_DRM_ANALOGIX_DP
> > > > diff --git a/drivers/gpu/drm/rockchip/rockchip_lvds.c b/drivers/gpu/drm/rockchip/rockchip_lvds.c
> > > > index 456bd9f13bae..fd21901880e6 100644
> > > > --- a/drivers/gpu/drm/rockchip/rockchip_lvds.c
> > > > +++ b/drivers/gpu/drm/rockchip/rockchip_lvds.c
> > > > @@ -16,7 +16,7 @@
> > > >
> > > > #include <drm/drmP.h>
> > > > #include <drm/drm_atomic_helper.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_dp_helper.h>
> > > > #include <drm/drm_panel.h>
> > > > #include <drm/drm_of.h>
> > > > diff --git a/drivers/gpu/drm/rockchip/rockchip_rgb.c b/drivers/gpu/drm/rockchip/rockchip_rgb.c
> > > > index 96ac1458a59c..bec197c9a3cf 100644
> > > > --- a/drivers/gpu/drm/rockchip/rockchip_rgb.c
> > > > +++ b/drivers/gpu/drm/rockchip/rockchip_rgb.c
> > > > @@ -16,7 +16,7 @@
> > > >
> > > > #include <drm/drmP.h>
> > > > #include <drm/drm_atomic_helper.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_dp_helper.h>
> > > > #include <drm/drm_panel.h>
> > > > #include <drm/drm_of.h>
> > > > diff --git a/drivers/gpu/drm/sti/sti_crtc.c b/drivers/gpu/drm/sti/sti_crtc.c
> > > > index ed76e52eb213..7aa3b1d04b78 100644
> > > > --- a/drivers/gpu/drm/sti/sti_crtc.c
> > > > +++ b/drivers/gpu/drm/sti/sti_crtc.c
> > > > @@ -11,7 +11,7 @@
> > > > #include <drm/drmP.h>
> > > > #include <drm/drm_atomic.h>
> > > > #include <drm/drm_atomic_helper.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_plane_helper.h>
> > > >
> > > > #include "sti_compositor.h"
> > > > diff --git a/drivers/gpu/drm/sti/sti_drv.c b/drivers/gpu/drm/sti/sti_drv.c
> > > > index ac54e0f9caea..dc932ac58ba9 100644
> > > > --- a/drivers/gpu/drm/sti/sti_drv.c
> > > > +++ b/drivers/gpu/drm/sti/sti_drv.c
> > > > @@ -14,7 +14,7 @@
> > > >
> > > > #include <drm/drm_atomic.h>
> > > > #include <drm/drm_atomic_helper.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_gem_cma_helper.h>
> > > > #include <drm/drm_gem_framebuffer_helper.h>
> > > > #include <drm/drm_fb_helper.h>
> > > > diff --git a/drivers/gpu/drm/sti/sti_dvo.c b/drivers/gpu/drm/sti/sti_dvo.c
> > > > index b08376b7611b..d0fcb20e9614 100644
> > > > --- a/drivers/gpu/drm/sti/sti_dvo.c
> > > > +++ b/drivers/gpu/drm/sti/sti_dvo.c
> > > > @@ -13,7 +13,7 @@
> > > >
> > > > #include <drm/drmP.h>
> > > > #include <drm/drm_atomic_helper.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_panel.h>
> > > >
> > > > #include "sti_awg_utils.h"
> > > > diff --git a/drivers/gpu/drm/sti/sti_hda.c b/drivers/gpu/drm/sti/sti_hda.c
> > > > index 19b9b5ed1297..40a0b392fa51 100644
> > > > --- a/drivers/gpu/drm/sti/sti_hda.c
> > > > +++ b/drivers/gpu/drm/sti/sti_hda.c
> > > > @@ -12,7 +12,7 @@
> > > >
> > > > #include <drm/drmP.h>
> > > > #include <drm/drm_atomic_helper.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > >
> > > > /* HDformatter registers */
> > > > #define HDA_ANA_CFG 0x0000
> > > > diff --git a/drivers/gpu/drm/sti/sti_hdmi.c b/drivers/gpu/drm/sti/sti_hdmi.c
> > > > index ccf718404a1c..989bf2cb0249 100644
> > > > --- a/drivers/gpu/drm/sti/sti_hdmi.c
> > > > +++ b/drivers/gpu/drm/sti/sti_hdmi.c
> > > > @@ -15,7 +15,7 @@
> > > >
> > > > #include <drm/drmP.h>
> > > > #include <drm/drm_atomic_helper.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_edid.h>
> > > >
> > > > #include <sound/hdmi-codec.h>
> > > > diff --git a/drivers/gpu/drm/sti/sti_tvout.c b/drivers/gpu/drm/sti/sti_tvout.c
> > > > index ea4a3b87fa55..2f9d075f0a66 100644
> > > > --- a/drivers/gpu/drm/sti/sti_tvout.c
> > > > +++ b/drivers/gpu/drm/sti/sti_tvout.c
> > > > @@ -15,7 +15,7 @@
> > > > #include <linux/seq_file.h>
> > > >
> > > > #include <drm/drmP.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > >
> > > > #include "sti_crtc.h"
> > > > #include "sti_drv.h"
> > > > diff --git a/drivers/gpu/drm/stm/drv.c b/drivers/gpu/drm/stm/drv.c
> > > > index 8dec001b9d37..c64c5f27a229 100644
> > > > --- a/drivers/gpu/drm/stm/drv.c
> > > > +++ b/drivers/gpu/drm/stm/drv.c
> > > > @@ -13,7 +13,7 @@
> > > >
> > > > #include <drm/drm_atomic.h>
> > > > #include <drm/drm_atomic_helper.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_fb_helper.h>
> > > > #include <drm/drm_fb_cma_helper.h>
> > > > #include <drm/drm_gem_cma_helper.h>
> > > > diff --git a/drivers/gpu/drm/stm/ltdc.c b/drivers/gpu/drm/stm/ltdc.c
> > > > index 61dd661aa0ac..8189b5df7ece 100644
> > > > --- a/drivers/gpu/drm/stm/ltdc.c
> > > > +++ b/drivers/gpu/drm/stm/ltdc.c
> > > > @@ -16,7 +16,7 @@
> > > >
> > > > #include <drm/drm_atomic.h>
> > > > #include <drm/drm_atomic_helper.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_fb_cma_helper.h>
> > > > #include <drm/drm_gem_cma_helper.h>
> > > > #include <drm/drm_of.h>
> > > > diff --git a/drivers/gpu/drm/sun4i/sun4i_backend.c b/drivers/gpu/drm/sun4i/sun4i_backend.c
> > > > index 9e9255ee59cd..df9d3f548568 100644
> > > > --- a/drivers/gpu/drm/sun4i/sun4i_backend.c
> > > > +++ b/drivers/gpu/drm/sun4i/sun4i_backend.c
> > > > @@ -14,7 +14,7 @@
> > > > #include <drm/drm_atomic.h>
> > > > #include <drm/drm_atomic_helper.h>
> > > > #include <drm/drm_crtc.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_fb_cma_helper.h>
> > > > #include <drm/drm_gem_cma_helper.h>
> > > > #include <drm/drm_plane_helper.h>
> > > > diff --git a/drivers/gpu/drm/sun4i/sun4i_crtc.c b/drivers/gpu/drm/sun4i/sun4i_crtc.c
> > > > index 3eedf335a935..3d58d8951474 100644
> > > > --- a/drivers/gpu/drm/sun4i/sun4i_crtc.c
> > > > +++ b/drivers/gpu/drm/sun4i/sun4i_crtc.c
> > > > @@ -13,7 +13,7 @@
> > > > #include <drm/drmP.h>
> > > > #include <drm/drm_atomic_helper.h>
> > > > #include <drm/drm_crtc.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_modes.h>
> > > >
> > > > #include <linux/clk-provider.h>
> > > > diff --git a/drivers/gpu/drm/sun4i/sun4i_drv.c b/drivers/gpu/drm/sun4i/sun4i_drv.c
> > > > index 9e4c375ccc96..45c85be54ce0 100644
> > > > --- a/drivers/gpu/drm/sun4i/sun4i_drv.c
> > > > +++ b/drivers/gpu/drm/sun4i/sun4i_drv.c
> > > > @@ -16,7 +16,7 @@
> > > > #include <linux/of_reserved_mem.h>
> > > >
> > > > #include <drm/drmP.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_fb_cma_helper.h>
> > > > #include <drm/drm_gem_cma_helper.h>
> > > > #include <drm/drm_fb_helper.h>
> > > > diff --git a/drivers/gpu/drm/sun4i/sun4i_hdmi_enc.c b/drivers/gpu/drm/sun4i/sun4i_hdmi_enc.c
> > > > index 061d2e0d9011..60b3e44e6792 100644
> > > > --- a/drivers/gpu/drm/sun4i/sun4i_hdmi_enc.c
> > > > +++ b/drivers/gpu/drm/sun4i/sun4i_hdmi_enc.c
> > > > @@ -11,7 +11,7 @@
> > > >
> > > > #include <drm/drmP.h>
> > > > #include <drm/drm_atomic_helper.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_edid.h>
> > > > #include <drm/drm_encoder.h>
> > > > #include <drm/drm_of.h>
> > > > diff --git a/drivers/gpu/drm/sun4i/sun4i_lvds.c b/drivers/gpu/drm/sun4i/sun4i_lvds.c
> > > > index e7eb0d1e17be..87ba8db71a54 100644
> > > > --- a/drivers/gpu/drm/sun4i/sun4i_lvds.c
> > > > +++ b/drivers/gpu/drm/sun4i/sun4i_lvds.c
> > > > @@ -8,7 +8,7 @@
> > > >
> > > > #include <drm/drmP.h>
> > > > #include <drm/drm_atomic_helper.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_of.h>
> > > > #include <drm/drm_panel.h>
> > > >
> > > > diff --git a/drivers/gpu/drm/sun4i/sun4i_rgb.c b/drivers/gpu/drm/sun4i/sun4i_rgb.c
> > > > index f4a22689eb54..f6f7f4de2e69 100644
> > > > --- a/drivers/gpu/drm/sun4i/sun4i_rgb.c
> > > > +++ b/drivers/gpu/drm/sun4i/sun4i_rgb.c
> > > > @@ -14,7 +14,7 @@
> > > >
> > > > #include <drm/drmP.h>
> > > > #include <drm/drm_atomic_helper.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_of.h>
> > > > #include <drm/drm_panel.h>
> > > >
> > > > diff --git a/drivers/gpu/drm/sun4i/sun4i_tcon.c b/drivers/gpu/drm/sun4i/sun4i_tcon.c
> > > > index 0420f5c978b9..3a09d8e28c25 100644
> > > > --- a/drivers/gpu/drm/sun4i/sun4i_tcon.c
> > > > +++ b/drivers/gpu/drm/sun4i/sun4i_tcon.c
> > > > @@ -14,7 +14,7 @@
> > > > #include <drm/drm_atomic_helper.h>
> > > > #include <drm/drm_connector.h>
> > > > #include <drm/drm_crtc.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_encoder.h>
> > > > #include <drm/drm_modes.h>
> > > > #include <drm/drm_of.h>
> > > > diff --git a/drivers/gpu/drm/sun4i/sun4i_tv.c b/drivers/gpu/drm/sun4i/sun4i_tv.c
> > > > index 1a838d208211..62fbdef8fffb 100644
> > > > --- a/drivers/gpu/drm/sun4i/sun4i_tv.c
> > > > +++ b/drivers/gpu/drm/sun4i/sun4i_tv.c
> > > > @@ -18,7 +18,7 @@
> > > >
> > > > #include <drm/drmP.h>
> > > > #include <drm/drm_atomic_helper.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_of.h>
> > > > #include <drm/drm_panel.h>
> > > >
> > > > diff --git a/drivers/gpu/drm/sun4i/sun6i_mipi_dsi.c b/drivers/gpu/drm/sun4i/sun6i_mipi_dsi.c
> > > > index e3b34a345546..dfa2d15d7b36 100644
> > > > --- a/drivers/gpu/drm/sun4i/sun6i_mipi_dsi.c
> > > > +++ b/drivers/gpu/drm/sun4i/sun6i_mipi_dsi.c
> > > > @@ -19,7 +19,7 @@
> > > >
> > > > #include <drm/drmP.h>
> > > > #include <drm/drm_atomic_helper.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_mipi_dsi.h>
> > > > #include <drm/drm_panel.h>
> > > >
> > > > diff --git a/drivers/gpu/drm/sun4i/sun8i_dw_hdmi.c b/drivers/gpu/drm/sun4i/sun8i_dw_hdmi.c
> > > > index dc47720c99ba..92bc1004dc36 100644
> > > > --- a/drivers/gpu/drm/sun4i/sun8i_dw_hdmi.c
> > > > +++ b/drivers/gpu/drm/sun4i/sun8i_dw_hdmi.c
> > > > @@ -10,7 +10,7 @@
> > > >
> > > > #include <drm/drm_of.h>
> > > > #include <drm/drmP.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > >
> > > > #include "sun8i_dw_hdmi.h"
> > > > #include "sun8i_tcon_top.h"
> > > > diff --git a/drivers/gpu/drm/sun4i/sun8i_mixer.c b/drivers/gpu/drm/sun4i/sun8i_mixer.c
> > > > index 44a9ba7d8433..9ef1b494e48d 100644
> > > > --- a/drivers/gpu/drm/sun4i/sun8i_mixer.c
> > > > +++ b/drivers/gpu/drm/sun4i/sun8i_mixer.c
> > > > @@ -14,7 +14,7 @@
> > > > #include <drm/drmP.h>
> > > > #include <drm/drm_atomic_helper.h>
> > > > #include <drm/drm_crtc.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_fb_cma_helper.h>
> > > > #include <drm/drm_gem_cma_helper.h>
> > > > #include <drm/drm_plane_helper.h>
> > > > diff --git a/drivers/gpu/drm/sun4i/sun8i_ui_layer.c b/drivers/gpu/drm/sun4i/sun8i_ui_layer.c
> > > > index 18534263a05d..e29cbd60a59b 100644
> > > > --- a/drivers/gpu/drm/sun4i/sun8i_ui_layer.c
> > > > +++ b/drivers/gpu/drm/sun4i/sun8i_ui_layer.c
> > > > @@ -16,7 +16,7 @@
> > > > #include <drm/drm_atomic.h>
> > > > #include <drm/drm_atomic_helper.h>
> > > > #include <drm/drm_crtc.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_fb_cma_helper.h>
> > > > #include <drm/drm_gem_cma_helper.h>
> > > > #include <drm/drm_gem_framebuffer_helper.h>
> > > > diff --git a/drivers/gpu/drm/sun4i/sun8i_vi_layer.c b/drivers/gpu/drm/sun4i/sun8i_vi_layer.c
> > > > index 87be898f9b7a..1669460106de 100644
> > > > --- a/drivers/gpu/drm/sun4i/sun8i_vi_layer.c
> > > > +++ b/drivers/gpu/drm/sun4i/sun8i_vi_layer.c
> > > > @@ -10,7 +10,7 @@
> > > > #include <drm/drm_atomic.h>
> > > > #include <drm/drm_atomic_helper.h>
> > > > #include <drm/drm_crtc.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_fb_cma_helper.h>
> > > > #include <drm/drm_gem_cma_helper.h>
> > > > #include <drm/drm_gem_framebuffer_helper.h>
> > > > diff --git a/drivers/gpu/drm/tegra/drm.h b/drivers/gpu/drm/tegra/drm.h
> > > > index 1012335bb489..40d38f3d9d9e 100644
> > > > --- a/drivers/gpu/drm/tegra/drm.h
> > > > +++ b/drivers/gpu/drm/tegra/drm.h
> > > > @@ -17,7 +17,7 @@
> > > >
> > > > #include <drm/drmP.h>
> > > > #include <drm/drm_atomic.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_edid.h>
> > > > #include <drm/drm_encoder.h>
> > > > #include <drm/drm_fb_helper.h>
> > > > diff --git a/drivers/gpu/drm/tegra/hdmi.c b/drivers/gpu/drm/tegra/hdmi.c
> > > > index 0082468f703c..11f5e5668b14 100644
> > > > --- a/drivers/gpu/drm/tegra/hdmi.c
> > > > +++ b/drivers/gpu/drm/tegra/hdmi.c
> > > > @@ -18,7 +18,7 @@
> > > >
> > > > #include <drm/drm_atomic_helper.h>
> > > > #include <drm/drm_crtc.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > >
> > > > #include <sound/hda_verbs.h>
> > > >
> > > > diff --git a/drivers/gpu/drm/tegra/hub.c b/drivers/gpu/drm/tegra/hub.c
> > > > index 6112d9042979..176d1c1ad941 100644
> > > > --- a/drivers/gpu/drm/tegra/hub.c
> > > > +++ b/drivers/gpu/drm/tegra/hub.c
> > > > @@ -19,7 +19,7 @@
> > > > #include <drm/drmP.h>
> > > > #include <drm/drm_atomic.h>
> > > > #include <drm/drm_atomic_helper.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > >
> > > > #include "drm.h"
> > > > #include "dc.h"
> > > > diff --git a/drivers/gpu/drm/tinydrm/core/tinydrm-core.c b/drivers/gpu/drm/tinydrm/core/tinydrm-core.c
> > > > index 01a6f2d42440..d4174a564336 100644
> > > > --- a/drivers/gpu/drm/tinydrm/core/tinydrm-core.c
> > > > +++ b/drivers/gpu/drm/tinydrm/core/tinydrm-core.c
> > > > @@ -9,7 +9,7 @@
> > > >
> > > > #include <drm/drm_atomic.h>
> > > > #include <drm/drm_atomic_helper.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_fb_helper.h>
> > > > #include <drm/drm_gem_framebuffer_helper.h>
> > > > #include <drm/tinydrm/tinydrm.h>
> > > > diff --git a/drivers/gpu/drm/tinydrm/core/tinydrm-pipe.c b/drivers/gpu/drm/tinydrm/core/tinydrm-pipe.c
> > > > index eacfc0ec8ff1..50ab05a65ca4 100644
> > > > --- a/drivers/gpu/drm/tinydrm/core/tinydrm-pipe.c
> > > > +++ b/drivers/gpu/drm/tinydrm/core/tinydrm-pipe.c
> > > > @@ -8,7 +8,7 @@
> > > > */
> > > >
> > > > #include <drm/drm_atomic_helper.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_gem_framebuffer_helper.h>
> > > > #include <drm/drm_modes.h>
> > > > #include <drm/tinydrm/tinydrm.h>
> > > > diff --git a/drivers/gpu/drm/tve200/tve200_drv.c b/drivers/gpu/drm/tve200/tve200_drv.c
> > > > index 28e2d03c0ccf..138a9a158254 100644
> > > > --- a/drivers/gpu/drm/tve200/tve200_drv.c
> > > > +++ b/drivers/gpu/drm/tve200/tve200_drv.c
> > > > @@ -43,7 +43,7 @@
> > > >
> > > > #include <drm/drmP.h>
> > > > #include <drm/drm_atomic_helper.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_gem_cma_helper.h>
> > > > #include <drm/drm_gem_framebuffer_helper.h>
> > > > #include <drm/drm_fb_helper.h>
> > > > diff --git a/drivers/gpu/drm/udl/udl_connector.c b/drivers/gpu/drm/udl/udl_connector.c
> > > > index 68e88bed77ca..66885c24590f 100644
> > > > --- a/drivers/gpu/drm/udl/udl_connector.c
> > > > +++ b/drivers/gpu/drm/udl/udl_connector.c
> > > > @@ -14,6 +14,7 @@
> > > > #include <drm/drm_crtc.h>
> > > > #include <drm/drm_edid.h>
> > > > #include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include "udl_connector.h"
> > > > #include "udl_drv.h"
> > > >
> > > > diff --git a/drivers/gpu/drm/udl/udl_drv.c b/drivers/gpu/drm/udl/udl_drv.c
> > > > index a63e3011e971..22cd2d13e272 100644
> > > > --- a/drivers/gpu/drm/udl/udl_drv.c
> > > > +++ b/drivers/gpu/drm/udl/udl_drv.c
> > > > @@ -9,6 +9,7 @@
> > > > #include <linux/module.h>
> > > > #include <drm/drmP.h>
> > > > #include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include "udl_drv.h"
> > > >
> > > > static int udl_usb_suspend(struct usb_interface *interface,
> > > > diff --git a/drivers/gpu/drm/udl/udl_main.c b/drivers/gpu/drm/udl/udl_main.c
> > > > index 1b014d92855b..9086d0d1b880 100644
> > > > --- a/drivers/gpu/drm/udl/udl_main.c
> > > > +++ b/drivers/gpu/drm/udl/udl_main.c
> > > > @@ -12,6 +12,7 @@
> > > > */
> > > > #include <drm/drmP.h>
> > > > #include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include "udl_drv.h"
> > > >
> > > > /* -BULK_SIZE as per usb-skeleton. Can we get full page and avoid overhead? */
> > > > diff --git a/drivers/gpu/drm/vc4/vc4_crtc.c b/drivers/gpu/drm/vc4/vc4_crtc.c
> > > > index 3ce136ba8791..11ec7c31824e 100644
> > > > --- a/drivers/gpu/drm/vc4/vc4_crtc.c
> > > > +++ b/drivers/gpu/drm/vc4/vc4_crtc.c
> > > > @@ -34,7 +34,7 @@
> > > >
> > > > #include <drm/drm_atomic.h>
> > > > #include <drm/drm_atomic_helper.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_atomic_uapi.h>
> > > > #include <linux/clk.h>
> > > > #include <drm/drm_fb_cma_helper.h>
> > > > diff --git a/drivers/gpu/drm/vc4/vc4_dpi.c b/drivers/gpu/drm/vc4/vc4_dpi.c
> > > > index f185812970da..a4d5a13598ba 100644
> > > > --- a/drivers/gpu/drm/vc4/vc4_dpi.c
> > > > +++ b/drivers/gpu/drm/vc4/vc4_dpi.c
> > > > @@ -24,7 +24,7 @@
> > > >
> > > > #include <drm/drm_atomic_helper.h>
> > > > #include <drm/drm_bridge.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_edid.h>
> > > > #include <drm/drm_of.h>
> > > > #include <drm/drm_panel.h>
> > > > diff --git a/drivers/gpu/drm/vc4/vc4_dsi.c b/drivers/gpu/drm/vc4/vc4_dsi.c
> > > > index 0c607eb33d7e..4c2f5e143d11 100644
> > > > --- a/drivers/gpu/drm/vc4/vc4_dsi.c
> > > > +++ b/drivers/gpu/drm/vc4/vc4_dsi.c
> > > > @@ -30,7 +30,7 @@
> > > > */
> > > >
> > > > #include <drm/drm_atomic_helper.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_edid.h>
> > > > #include <drm/drm_mipi_dsi.h>
> > > > #include <drm/drm_of.h>
> > > > diff --git a/drivers/gpu/drm/vc4/vc4_hdmi.c b/drivers/gpu/drm/vc4/vc4_hdmi.c
> > > > index fd5522fd179e..ce3cc2a6a169 100644
> > > > --- a/drivers/gpu/drm/vc4/vc4_hdmi.c
> > > > +++ b/drivers/gpu/drm/vc4/vc4_hdmi.c
> > > > @@ -43,7 +43,7 @@
> > > > */
> > > >
> > > > #include <drm/drm_atomic_helper.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_edid.h>
> > > > #include <linux/clk.h>
> > > > #include <linux/component.h>
> > > > diff --git a/drivers/gpu/drm/vc4/vc4_kms.c b/drivers/gpu/drm/vc4/vc4_kms.c
> > > > index 1f94b9affe4b..ae7b311893df 100644
> > > > --- a/drivers/gpu/drm/vc4/vc4_kms.c
> > > > +++ b/drivers/gpu/drm/vc4/vc4_kms.c
> > > > @@ -17,7 +17,7 @@
> > > > #include <drm/drm_crtc.h>
> > > > #include <drm/drm_atomic.h>
> > > > #include <drm/drm_atomic_helper.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_plane_helper.h>
> > > > #include <drm/drm_gem_framebuffer_helper.h>
> > > > #include "vc4_drv.h"
> > > > diff --git a/drivers/gpu/drm/vc4/vc4_txp.c b/drivers/gpu/drm/vc4/vc4_txp.c
> > > > index 6e23c50168f9..8ac1b95d01c4 100644
> > > > --- a/drivers/gpu/drm/vc4/vc4_txp.c
> > > > +++ b/drivers/gpu/drm/vc4/vc4_txp.c
> > > > @@ -9,7 +9,7 @@
> > > >
> > > > #include <drm/drm_atomic_helper.h>
> > > > #include <drm/drm_fb_cma_helper.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_edid.h>
> > > > #include <drm/drm_panel.h>
> > > > #include <drm/drm_writeback.h>
> > > > diff --git a/drivers/gpu/drm/vc4/vc4_vec.c b/drivers/gpu/drm/vc4/vc4_vec.c
> > > > index 8e7facb6514e..e8b09c670ee6 100644
> > > > --- a/drivers/gpu/drm/vc4/vc4_vec.c
> > > > +++ b/drivers/gpu/drm/vc4/vc4_vec.c
> > > > @@ -25,7 +25,7 @@
> > > > */
> > > >
> > > > #include <drm/drm_atomic_helper.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_edid.h>
> > > > #include <drm/drm_panel.h>
> > > > #include <linux/clk.h>
> > > > diff --git a/drivers/gpu/drm/virtio/virtgpu_display.c b/drivers/gpu/drm/virtio/virtgpu_display.c
> > > > index b5580b11a063..774f476dd9cd 100644
> > > > --- a/drivers/gpu/drm/virtio/virtgpu_display.c
> > > > +++ b/drivers/gpu/drm/virtio/virtgpu_display.c
> > > > @@ -26,7 +26,7 @@
> > > > */
> > > >
> > > > #include "virtgpu_drv.h"
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_atomic_helper.h>
> > > > #include <drm/drm_gem_framebuffer_helper.h>
> > > >
> > > > diff --git a/drivers/gpu/drm/virtio/virtgpu_drv.h b/drivers/gpu/drm/virtio/virtgpu_drv.h
> > > > index 1deb41d42ea4..0c793d91c62b 100644
> > > > --- a/drivers/gpu/drm/virtio/virtgpu_drv.h
> > > > +++ b/drivers/gpu/drm/virtio/virtgpu_drv.h
> > > > @@ -34,7 +34,7 @@
> > > > #include <drm/drmP.h>
> > > > #include <drm/drm_gem.h>
> > > > #include <drm/drm_atomic.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_encoder.h>
> > > > #include <drm/drm_fb_helper.h>
> > > > #include <drm/ttm/ttm_bo_api.h>
> > > > diff --git a/drivers/gpu/drm/vkms/vkms_crtc.c b/drivers/gpu/drm/vkms/vkms_crtc.c
> > > > index 177bbcb38306..2696c370fe9b 100644
> > > > --- a/drivers/gpu/drm/vkms/vkms_crtc.c
> > > > +++ b/drivers/gpu/drm/vkms/vkms_crtc.c
> > > > @@ -8,7 +8,7 @@
> > > >
> > > > #include "vkms_drv.h"
> > > > #include <drm/drm_atomic_helper.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > >
> > > > static void _vblank_handle(struct vkms_output *output)
> > > > {
> > > > diff --git a/drivers/gpu/drm/vkms/vkms_drv.c b/drivers/gpu/drm/vkms/vkms_drv.c
> > > > index 83087877565c..b446f60e7d8a 100644
> > > > --- a/drivers/gpu/drm/vkms/vkms_drv.c
> > > > +++ b/drivers/gpu/drm/vkms/vkms_drv.c
> > > > @@ -16,7 +16,7 @@
> > > >
> > > > #include <linux/module.h>
> > > > #include <drm/drm_gem.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_atomic_helper.h>
> > > > #include <drm/drm_gem_framebuffer_helper.h>
> > > > #include <drm/drm_fb_helper.h>
> > > > diff --git a/drivers/gpu/drm/vkms/vkms_output.c b/drivers/gpu/drm/vkms/vkms_output.c
> > > > index 271a0eb9042c..878ff3142473 100644
> > > > --- a/drivers/gpu/drm/vkms/vkms_output.c
> > > > +++ b/drivers/gpu/drm/vkms/vkms_output.c
> > > > @@ -7,7 +7,7 @@
> > > > */
> > > >
> > > > #include "vkms_drv.h"
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_atomic_helper.h>
> > > >
> > > > static void vkms_connector_destroy(struct drm_connector *connector)
> > > > diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.h b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.h
> > > > index 655abbcd4058..d560f6159bb1 100644
> > > > --- a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.h
> > > > +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.h
> > > > @@ -29,7 +29,7 @@
> > > > #define VMWGFX_KMS_H_
> > > >
> > > > #include <drm/drmP.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_encoder.h>
> > > > #include "vmwgfx_drv.h"
> > > >
> > > > diff --git a/drivers/gpu/drm/xen/xen_drm_front.c b/drivers/gpu/drm/xen/xen_drm_front.c
> > > > index 6b6d5ab82ec3..fd390dd64b13 100644
> > > > --- a/drivers/gpu/drm/xen/xen_drm_front.c
> > > > +++ b/drivers/gpu/drm/xen/xen_drm_front.c
> > > > @@ -10,7 +10,7 @@
> > > >
> > > > #include <drm/drmP.h>
> > > > #include <drm/drm_atomic_helper.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_gem.h>
> > > >
> > > > #include <linux/of_device.h>
> > > > diff --git a/drivers/gpu/drm/xen/xen_drm_front_conn.c b/drivers/gpu/drm/xen/xen_drm_front_conn.c
> > > > index 54af2669b1b3..9f5f31f77f1e 100644
> > > > --- a/drivers/gpu/drm/xen/xen_drm_front_conn.c
> > > > +++ b/drivers/gpu/drm/xen/xen_drm_front_conn.c
> > > > @@ -9,7 +9,7 @@
> > > > */
> > > >
> > > > #include <drm/drm_atomic_helper.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > >
> > > > #include <video/videomode.h>
> > > >
> > > > diff --git a/drivers/gpu/drm/xen/xen_drm_front_gem.c b/drivers/gpu/drm/xen/xen_drm_front_gem.c
> > > > index 47ff019d3aef..9cf847e26cf1 100644
> > > > --- a/drivers/gpu/drm/xen/xen_drm_front_gem.c
> > > > +++ b/drivers/gpu/drm/xen/xen_drm_front_gem.c
> > > > @@ -11,7 +11,7 @@
> > > > #include "xen_drm_front_gem.h"
> > > >
> > > > #include <drm/drmP.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_fb_helper.h>
> > > > #include <drm/drm_gem.h>
> > > >
> > > > diff --git a/drivers/gpu/drm/xen/xen_drm_front_kms.c b/drivers/gpu/drm/xen/xen_drm_front_kms.c
> > > > index a3479eb72d79..f536d9f5a796 100644
> > > > --- a/drivers/gpu/drm/xen/xen_drm_front_kms.c
> > > > +++ b/drivers/gpu/drm/xen/xen_drm_front_kms.c
> > > > @@ -13,7 +13,7 @@
> > > > #include <drm/drmP.h>
> > > > #include <drm/drm_atomic.h>
> > > > #include <drm/drm_atomic_helper.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_gem.h>
> > > > #include <drm/drm_gem_framebuffer_helper.h>
> > > >
> > > > diff --git a/drivers/gpu/drm/zte/zx_drm_drv.c b/drivers/gpu/drm/zte/zx_drm_drv.c
> > > > index f5ea32ae8600..91eaaa475d36 100644
> > > > --- a/drivers/gpu/drm/zte/zx_drm_drv.c
> > > > +++ b/drivers/gpu/drm/zte/zx_drm_drv.c
> > > > @@ -18,7 +18,7 @@
> > > >
> > > > #include <drm/drm_atomic_helper.h>
> > > > #include <drm/drm_crtc.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_fb_cma_helper.h>
> > > > #include <drm/drm_fb_helper.h>
> > > > #include <drm/drm_gem_cma_helper.h>
> > > > diff --git a/drivers/gpu/drm/zte/zx_hdmi.c b/drivers/gpu/drm/zte/zx_hdmi.c
> > > > index 78655269d843..8bfb011ce655 100644
> > > > --- a/drivers/gpu/drm/zte/zx_hdmi.c
> > > > +++ b/drivers/gpu/drm/zte/zx_hdmi.c
> > > > @@ -20,7 +20,7 @@
> > > > #include <linux/of_device.h>
> > > >
> > > > #include <drm/drm_atomic_helper.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_edid.h>
> > > > #include <drm/drm_of.h>
> > > > #include <drm/drmP.h>
> > > > diff --git a/drivers/gpu/drm/zte/zx_tvenc.c b/drivers/gpu/drm/zte/zx_tvenc.c
> > > > index b73afb212fb2..87b5d86413d2 100644
> > > > --- a/drivers/gpu/drm/zte/zx_tvenc.c
> > > > +++ b/drivers/gpu/drm/zte/zx_tvenc.c
> > > > @@ -14,7 +14,7 @@
> > > > #include <linux/regmap.h>
> > > >
> > > > #include <drm/drm_atomic_helper.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drmP.h>
> > > >
> > > > #include "zx_drm_drv.h"
> > > > diff --git a/drivers/gpu/drm/zte/zx_vga.c b/drivers/gpu/drm/zte/zx_vga.c
> > > > index 23d1ff4355a0..e14c1d709740 100644
> > > > --- a/drivers/gpu/drm/zte/zx_vga.c
> > > > +++ b/drivers/gpu/drm/zte/zx_vga.c
> > > > @@ -13,7 +13,7 @@
> > > > #include <linux/regmap.h>
> > > >
> > > > #include <drm/drm_atomic_helper.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drmP.h>
> > > >
> > > > #include "zx_drm_drv.h"
> > > > diff --git a/drivers/gpu/drm/zte/zx_vou.c b/drivers/gpu/drm/zte/zx_vou.c
> > > > index 442311d31110..9d97f4417698 100644
> > > > --- a/drivers/gpu/drm/zte/zx_vou.c
> > > > +++ b/drivers/gpu/drm/zte/zx_vou.c
> > > > @@ -15,7 +15,7 @@
> > > >
> > > > #include <drm/drm_atomic_helper.h>
> > > > #include <drm/drm_crtc.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_fb_cma_helper.h>
> > > > #include <drm/drm_fb_helper.h>
> > > > #include <drm/drm_gem_cma_helper.h>
> > > > diff --git a/drivers/staging/vboxvideo/vbox_irq.c b/drivers/staging/vboxvideo/vbox_irq.c
> > > > index 09f858ec1369..b9b716776b7b 100644
> > > > --- a/drivers/staging/vboxvideo/vbox_irq.c
> > > > +++ b/drivers/staging/vboxvideo/vbox_irq.c
> > > > @@ -27,7 +27,7 @@
> > > > * Hans de Goede <hdegoede@redhat.com>
> > > > */
> > > >
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > >
> > > > #include "vbox_drv.h"
> > > > #include "vboxvideo.h"
> > > > diff --git a/drivers/staging/vboxvideo/vbox_mode.c b/drivers/staging/vboxvideo/vbox_mode.c
> > > > index 6acc965247ff..c72e4f251bc0 100644
> > > > --- a/drivers/staging/vboxvideo/vbox_mode.c
> > > > +++ b/drivers/staging/vboxvideo/vbox_mode.c
> > > > @@ -33,7 +33,7 @@
> > > > */
> > > > #include <linux/export.h>
> > > > #include <drm/drm_atomic.h>
> > > > -#include <drm/drm_crtc_helper.h>
> > > > +#include <drm/drm_probe_helper.h>
> > > > #include <drm/drm_plane_helper.h>
> > > > #include <drm/drm_atomic_helper.h>
> > > >
> > > > diff --git a/include/drm/drm_crtc_helper.h b/include/drm/drm_crtc_helper.h
> > > > index 0ee9a96b70da..a6d520d5b6ca 100644
> > > > --- a/include/drm/drm_crtc_helper.h
> > > > +++ b/include/drm/drm_crtc_helper.h
> > > > @@ -58,20 +58,4 @@ int drm_helper_connector_dpms(struct drm_connector *connector, int mode);
> > > > void drm_helper_resume_force_mode(struct drm_device *dev);
> > > > int drm_helper_force_disable_all(struct drm_device *dev);
> > > >
> > > > -/* drm_probe_helper.c */
> > > > -int drm_helper_probe_single_connector_modes(struct drm_connector
> > > > - *connector, uint32_t maxX,
> > > > - uint32_t maxY);
> > > > -int drm_helper_probe_detect(struct drm_connector *connector,
> > > > - struct drm_modeset_acquire_ctx *ctx,
> > > > - bool force);
> > > > -void drm_kms_helper_poll_init(struct drm_device *dev);
> > > > -void drm_kms_helper_poll_fini(struct drm_device *dev);
> > > > -bool drm_helper_hpd_irq_event(struct drm_device *dev);
> > > > -void drm_kms_helper_hotplug_event(struct drm_device *dev);
> > > > -
> > > > -void drm_kms_helper_poll_disable(struct drm_device *dev);
> > > > -void drm_kms_helper_poll_enable(struct drm_device *dev);
> > > > -bool drm_kms_helper_is_poll_worker(void);
> > > > -
> > > > #endif
> > > > diff --git a/include/drm/drm_probe_helper.h b/include/drm/drm_probe_helper.h
> > > > new file mode 100644
> > > > index 000000000000..96c060c16a1e
> > > > --- /dev/null
> > > > +++ b/include/drm/drm_probe_helper.h
> > > > @@ -0,0 +1,50 @@
> > > > +/*
> > > > + * Copyright © 2006 Keith Packard
> > > > + * Copyright © 2007-2008 Dave Airlie
> > > > + * Copyright © 2007-2008 Intel Corporation
> > > > + * Jesse Barnes <jesse.barnes@intel.com>
> > > > + *
> > > > + * Permission is hereby granted, free of charge, to any person obtaining a
> > > > + * copy of this software and associated documentation files (the "Software"),
> > > > + * to deal in the Software without restriction, including without limitation
> > > > + * the rights to use, copy, modify, merge, publish, distribute, sublicense,
> > > > + * and/or sell copies of the Software, and to permit persons to whom the
> > > > + * Software is furnished to do so, subject to the following conditions:
> > > > + *
> > > > + * The above copyright notice and this permission notice shall be included in
> > > > + * all copies or substantial portions of the Software.
> > > > + *
> > > > + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
> > > > + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
> > > > + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
> > > > + * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
> > > > + * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
> > > > + * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
> > > > + * OTHER DEALINGS IN THE SOFTWARE.
> > > > + */
> > > > +
> > > > +#ifndef __DRM_PROBE_HELPER_H__
> > > > +#define __DRM_PROBE_HELPER_H__
> > > > +
> > > > +#include <linux/types.h>
> > > > +
> > > > +struct drm_connector;
> > > > +struct drm_device;
> > > > +struct drm_modeset_acquire_ctx;
> > > > +
> > > > +int drm_helper_probe_single_connector_modes(struct drm_connector
> > > > + *connector, uint32_t maxX,
> > > > + uint32_t maxY);
> > > > +int drm_helper_probe_detect(struct drm_connector *connector,
> > > > + struct drm_modeset_acquire_ctx *ctx,
> > > > + bool force);
> > > > +void drm_kms_helper_poll_init(struct drm_device *dev);
> > > > +void drm_kms_helper_poll_fini(struct drm_device *dev);
> > > > +bool drm_helper_hpd_irq_event(struct drm_device *dev);
> > > > +void drm_kms_helper_hotplug_event(struct drm_device *dev);
> > > > +
> > > > +void drm_kms_helper_poll_disable(struct drm_device *dev);
> > > > +void drm_kms_helper_poll_enable(struct drm_device *dev);
> > > > +bool drm_kms_helper_is_poll_worker(void);
> > > > +
> > > > +#endif
> > > > --
> > > > 2.20.0.rc1
> > > >
> > > >
> > > > _______________________________________________
> > > > Linux-rockchip mailing list
> > > > Linux-rockchip@lists.infradead.org
> > > > http://lists.infradead.org/mailman/listinfo/linux-rockchip
> > >
> > > --
> > > ________________________________________________________
> > > ________| |_______
> > > \ | With enough courage, you can do without a reputation | /
> > > \ | -- Rhett Butler | /
> > > / |________________________________________________________| \
> > > /__________) (_________\
> >
> > --
> > Daniel Vetter
> > Software Engineer, Intel Corporation
> > http://blog.ffwll.ch
>
> --
> ________________________________________________________
> ________| |_______
> \ | With enough courage, you can do without a reputation | /
> \ | -- Rhett Butler | /
> / |________________________________________________________| \
> /__________) (_________\
--
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
^ permalink raw reply
* Re: [PATCH RFC 3/4] barriers: convert a control to a data dependency
From: Michael S. Tsirkin @ 2019-01-07 13:36 UTC (permalink / raw)
To: Peter Zijlstra
Cc: Andrea Parri, linux-doc, Akira Yokosawa, Will Deacon,
virtualization, David Howells, linux-arch, Jonathan Corbet,
linux-sparse, Alan Stern, Matt Turner, Paul E. McKenney,
Boqun Feng, Arnd Bergmann, Daniel Lustig, Nicholas Piggin,
Ivan Kokshaysky, Luc Maranget, Richard Henderson, Jade Alglave,
netdev, linux-kernel, linux-alpha, Luc Van Oostenryck
In-Reply-To: <20190107094610.GA2861@worktop.programming.kicks-ass.net>
On Mon, Jan 07, 2019 at 10:46:10AM +0100, Peter Zijlstra wrote:
> On Sun, Jan 06, 2019 at 11:23:07PM -0500, Michael S. Tsirkin wrote:
> > On Mon, Jan 07, 2019 at 11:58:23AM +0800, Jason Wang wrote:
> > > On 2019/1/3 上午4:57, Michael S. Tsirkin wrote:
>
> > > > +#if defined(COMPILER_HAS_OPTIMIZER_HIDE_VAR) && \
> > > > + !defined(ARCH_NEEDS_READ_BARRIER_DEPENDS)
> > > > +
> > > > +#define dependent_ptr_mb(ptr, val) ({ \
> > > > + long dependent_ptr_mb_val = (long)(val); \
> > > > + long dependent_ptr_mb_ptr = (long)(ptr) - dependent_ptr_mb_val; \
> > > > + \
> > > > + BUILD_BUG_ON(sizeof(val) > sizeof(long)); \
> > > > + OPTIMIZER_HIDE_VAR(dependent_ptr_mb_val); \
> > > > + (typeof(ptr))(dependent_ptr_mb_ptr + dependent_ptr_mb_val); \
> > > > +})
> > > > +
> > > > +#else
> > > > +
> > > > +#define dependent_ptr_mb(ptr, val) ({ mb(); (ptr); })
> > >
> > >
> > > So for the example of patch 4, we'd better fall back to rmb() or need a
> > > dependent_ptr_rmb()?
> > >
> > > Thanks
> >
> > You mean for strongly ordered architectures like Intel?
> > Yes, maybe it makes sense to have dependent_ptr_smp_rmb,
> > dependent_ptr_dma_rmb and dependent_ptr_virt_rmb.
> >
> > mb variant is unused right now so I'll remove it.
>
> How about naming the thing: dependent_ptr() ? That is without any (r)mb
> implications at all. The address dependency is strictly weaker than an
> rmb in that it will only order the two loads in qestion and not, like
> rmb, any prior to any later load.
So I'm fine with this as it's enough for virtio, but I would like to point out two things:
1. E.g. on x86 both SMP and DMA variants can be NOPs but
the madatory one can't, so assuming we do not want
it to be stronger than rmp then either we want
smp_dependent_ptr(), dma_dependent_ptr(), dependent_ptr()
or we just will specify that dependent_ptr() works for
both DMA and SMP.
2. Down the road, someone might want to order a store after a load.
Address dependency does that for us too. Assuming we make
dependent_ptr a NOP on x86, we will want an mb variant
which isn't a NOP on x86. Will we want to rename
dependent_ptr to dependent_ptr_rmb at that point?
Thanks,
--
MST
_______________________________________________
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/virtualization
^ permalink raw reply
* Re: [PATCH v3 0/3] virtio-balloon: tweak config_changed
From: Christian Borntraeger @ 2019-01-07 13:40 UTC (permalink / raw)
To: Wei Wang, virtio-dev, linux-kernel, virtualization, kvm, mst,
cohuck
Cc: pasic, pbonzini, dgilbert
In-Reply-To: <1546844466-38079-1-git-send-email-wei.w.wang@intel.com>
Can you please cc stable? Right now 4.20 does not work under KVM.
On 07.01.2019 08:01, Wei Wang wrote:
> Since virtio-ccw doesn't work with accessing to the config space
> inside an interrupt context, this patch series avoids that issue by
> moving the config register accesses to the related workqueue contexts.
>
> v2->v3 ChangeLog:
> - rename cmd_id_received to cmd_id_received_cache, and have call sites
> read the latest value via virtio_balloon_cmd_id_received. (Still
> kept Cornelia and Halil's reviewed-by as it's a minor change)
> - remove zeroing vb->num_free_page_blocks in probe since vb is
> allocated via kzalloc.
> v1->v2 ChangeLog:
> - add config_read_bitmap to indicate to the workqueue callbacks about
> the necessity of reading the related config fields.
>
> Wei Wang (3):
> virtio-balloon: tweak config_changed implementation
> virtio-balloon: improve update_balloon_size_func
> virtio_balloon: remove the unnecessary 0-initialization
>
> drivers/virtio/virtio_balloon.c | 104 ++++++++++++++++++++++++++--------------
> 1 file changed, 69 insertions(+), 35 deletions(-)
>
^ permalink raw reply
* Re: [PATCH v3 1/3] virtio-balloon: tweak config_changed implementation
From: Michael S. Tsirkin @ 2019-01-07 13:44 UTC (permalink / raw)
To: Wei Wang
Cc: virtio-dev, kvm, cohuck, linux-kernel, virtualization, pasic,
pbonzini, dgilbert
In-Reply-To: <1546844466-38079-2-git-send-email-wei.w.wang@intel.com>
On Mon, Jan 07, 2019 at 03:01:04PM +0800, Wei Wang wrote:
> virtio-ccw has deadlock issues with reading the config space inside the
> interrupt context, so we tweak the virtballoon_changed implementation
> by moving the config read operations into the related workqueue contexts.
> The config_read_bitmap is used as a flag to the workqueue callbacks
> about the related config fields that need to be read.
>
> The cmd_id_received is also renamed to cmd_id_received_cache, and
> the value should be obtained via virtio_balloon_cmd_id_received.
>
> Reported-by: Christian Borntraeger <borntraeger@de.ibm.com>
> Signed-off-by: Wei Wang <wei.w.wang@intel.com>
> Reviewed-by: Cornelia Huck <cohuck@redhat.com>
> Reviewed-by: Halil Pasic <pasic@linux.ibm.com>
> ---
> drivers/virtio/virtio_balloon.c | 98 +++++++++++++++++++++++++++--------------
> 1 file changed, 65 insertions(+), 33 deletions(-)
>
> diff --git a/drivers/virtio/virtio_balloon.c b/drivers/virtio/virtio_balloon.c
> index 728ecd1..fb12fe2 100644
> --- a/drivers/virtio/virtio_balloon.c
> +++ b/drivers/virtio/virtio_balloon.c
> @@ -61,6 +61,10 @@ enum virtio_balloon_vq {
> VIRTIO_BALLOON_VQ_MAX
> };
>
> +enum virtio_balloon_config_read {
> + VIRTIO_BALLOON_CONFIG_READ_CMD_ID = 0,
> +};
> +
> struct virtio_balloon {
> struct virtio_device *vdev;
> struct virtqueue *inflate_vq, *deflate_vq, *stats_vq, *free_page_vq;
> @@ -77,14 +81,20 @@ struct virtio_balloon {
> /* Prevent updating balloon when it is being canceled. */
> spinlock_t stop_update_lock;
> bool stop_update;
> + /* Bitmap to indicate if reading the related config fields are needed */
> + unsigned long config_read_bitmap;
>
> /* The list of allocated free pages, waiting to be given back to mm */
> struct list_head free_page_list;
> spinlock_t free_page_list_lock;
> /* The number of free page blocks on the above list */
> unsigned long num_free_page_blocks;
> - /* The cmd id received from host */
> - u32 cmd_id_received;
> + /*
> + * The cmd id received from host.
> + * Read it via virtio_balloon_cmd_id_received to get the latest value
> + * sent from host.
> + */
> + u32 cmd_id_received_cache;
> /* The cmd id that is actively in use */
> __virtio32 cmd_id_active;
> /* Buffer to store the stop sign */
> @@ -390,37 +400,31 @@ static unsigned long return_free_pages_to_mm(struct virtio_balloon *vb,
> return num_returned;
> }
>
> +static void virtio_balloon_queue_free_page_work(struct virtio_balloon *vb)
> +{
> + if (!virtio_has_feature(vb->vdev, VIRTIO_BALLOON_F_FREE_PAGE_HINT))
> + return;
> +
> + /* No need to queue the work if the bit was already set. */
> + if (test_and_set_bit(VIRTIO_BALLOON_CONFIG_READ_CMD_ID,
> + &vb->config_read_bitmap))
> + return;
> +
> + queue_work(vb->balloon_wq, &vb->report_free_page_work);
> +}
> +
> static void virtballoon_changed(struct virtio_device *vdev)
> {
> struct virtio_balloon *vb = vdev->priv;
> unsigned long flags;
> - s64 diff = towards_target(vb);
> -
> - if (diff) {
> - spin_lock_irqsave(&vb->stop_update_lock, flags);
> - if (!vb->stop_update)
> - queue_work(system_freezable_wq,
> - &vb->update_balloon_size_work);
> - spin_unlock_irqrestore(&vb->stop_update_lock, flags);
> - }
>
> - if (virtio_has_feature(vdev, VIRTIO_BALLOON_F_FREE_PAGE_HINT)) {
> - virtio_cread(vdev, struct virtio_balloon_config,
> - free_page_report_cmd_id, &vb->cmd_id_received);
> - if (vb->cmd_id_received == VIRTIO_BALLOON_CMD_ID_DONE) {
> - /* Pass ULONG_MAX to give back all the free pages */
> - return_free_pages_to_mm(vb, ULONG_MAX);
> - } else if (vb->cmd_id_received != VIRTIO_BALLOON_CMD_ID_STOP &&
> - vb->cmd_id_received !=
> - virtio32_to_cpu(vdev, vb->cmd_id_active)) {
> - spin_lock_irqsave(&vb->stop_update_lock, flags);
> - if (!vb->stop_update) {
> - queue_work(vb->balloon_wq,
> - &vb->report_free_page_work);
> - }
> - spin_unlock_irqrestore(&vb->stop_update_lock, flags);
> - }
> + spin_lock_irqsave(&vb->stop_update_lock, flags);
> + if (!vb->stop_update) {
> + queue_work(system_freezable_wq,
> + &vb->update_balloon_size_work);
> + virtio_balloon_queue_free_page_work(vb);
> }
> + spin_unlock_irqrestore(&vb->stop_update_lock, flags);
> }
>
> static void update_balloon_size(struct virtio_balloon *vb)
> @@ -527,6 +531,17 @@ static int init_vqs(struct virtio_balloon *vb)
> return 0;
> }
>
> +static u32 virtio_balloon_cmd_id_received(struct virtio_balloon *vb)
> +{
> + if (test_and_clear_bit(VIRTIO_BALLOON_CONFIG_READ_CMD_ID,
> + &vb->config_read_bitmap))
> + virtio_cread(vb->vdev, struct virtio_balloon_config,
> + free_page_report_cmd_id,
> + &vb->cmd_id_received_cache);
> +
> + return vb->cmd_id_received_cache;
> +}
> +
> static int send_cmd_id_start(struct virtio_balloon *vb)
> {
> struct scatterlist sg;
> @@ -537,7 +552,8 @@ static int send_cmd_id_start(struct virtio_balloon *vb)
> while (virtqueue_get_buf(vq, &unused))
> ;
>
> - vb->cmd_id_active = cpu_to_virtio32(vb->vdev, vb->cmd_id_received);
> + vb->cmd_id_active = virtio32_to_cpu(vb->vdev,
> + virtio_balloon_cmd_id_received(vb));
You switches cpu_to_virtio32 to over to virtio32_to_cpu.
That will produce a sparse warning I think.
Pls always run the static checker when you submit patches.
> sg_init_one(&sg, &vb->cmd_id_active, sizeof(vb->cmd_id_active));
> err = virtqueue_add_outbuf(vq, &sg, 1, &vb->cmd_id_active, GFP_KERNEL);
> if (!err)
> @@ -620,7 +636,8 @@ static int send_free_pages(struct virtio_balloon *vb)
> * stop the reporting.
> */
> cmd_id_active = virtio32_to_cpu(vb->vdev, vb->cmd_id_active);
> - if (cmd_id_active != vb->cmd_id_received)
> + if (unlikely(cmd_id_active !=
> + virtio_balloon_cmd_id_received(vb)))
> break;
>
> /*
> @@ -637,11 +654,9 @@ static int send_free_pages(struct virtio_balloon *vb)
> return 0;
> }
>
> -static void report_free_page_func(struct work_struct *work)
> +static void virtio_balloon_report_free_page(struct virtio_balloon *vb)
> {
> int err;
> - struct virtio_balloon *vb = container_of(work, struct virtio_balloon,
> - report_free_page_work);
> struct device *dev = &vb->vdev->dev;
>
> /* Start by sending the received cmd id to host with an outbuf. */
> @@ -659,6 +674,23 @@ static void report_free_page_func(struct work_struct *work)
> dev_err(dev, "Failed to send a stop id, err = %d\n", err);
> }
>
> +static void report_free_page_func(struct work_struct *work)
> +{
> + struct virtio_balloon *vb = container_of(work, struct virtio_balloon,
> + report_free_page_work);
> + u32 cmd_id_received;
> +
> + cmd_id_received = virtio_balloon_cmd_id_received(vb);
> + if (cmd_id_received == VIRTIO_BALLOON_CMD_ID_DONE) {
> + /* Pass ULONG_MAX to give back all the free pages */
> + return_free_pages_to_mm(vb, ULONG_MAX);
> + } else if (cmd_id_received != VIRTIO_BALLOON_CMD_ID_STOP &&
> + cmd_id_received !=
> + virtio32_to_cpu(vb->vdev, vb->cmd_id_active)) {
> + virtio_balloon_report_free_page(vb);
> + }
> +}
> +
> #ifdef CONFIG_BALLOON_COMPACTION
> /*
> * virtballoon_migratepage - perform the balloon page migration on behalf of
> @@ -885,7 +917,7 @@ static int virtballoon_probe(struct virtio_device *vdev)
> goto out_del_vqs;
> }
> INIT_WORK(&vb->report_free_page_work, report_free_page_func);
> - vb->cmd_id_received = VIRTIO_BALLOON_CMD_ID_STOP;
> + vb->cmd_id_received_cache = VIRTIO_BALLOON_CMD_ID_STOP;
> vb->cmd_id_active = cpu_to_virtio32(vb->vdev,
> VIRTIO_BALLOON_CMD_ID_STOP);
> vb->cmd_id_stop = cpu_to_virtio32(vb->vdev,
> --
> 2.7.4
^ permalink raw reply
* Re: [PATCH v3 0/3] virtio-balloon: tweak config_changed
From: Michael S. Tsirkin @ 2019-01-07 13:45 UTC (permalink / raw)
To: Wei Wang
Cc: virtio-dev, kvm, cohuck, linux-kernel, virtualization, pasic,
pbonzini, dgilbert
In-Reply-To: <1546844466-38079-1-git-send-email-wei.w.wang@intel.com>
On Mon, Jan 07, 2019 at 03:01:03PM +0800, Wei Wang wrote:
> Since virtio-ccw doesn't work with accessing to the config space
> inside an interrupt context, this patch series avoids that issue by
> moving the config register accesses to the related workqueue contexts.
So is this enough to get ccw going again or do we also need
the patches that deal with NULL VQ names?
> v2->v3 ChangeLog:
> - rename cmd_id_received to cmd_id_received_cache, and have call sites
> read the latest value via virtio_balloon_cmd_id_received. (Still
> kept Cornelia and Halil's reviewed-by as it's a minor change)
> - remove zeroing vb->num_free_page_blocks in probe since vb is
> allocated via kzalloc.
> v1->v2 ChangeLog:
> - add config_read_bitmap to indicate to the workqueue callbacks about
> the necessity of reading the related config fields.
>
> Wei Wang (3):
> virtio-balloon: tweak config_changed implementation
> virtio-balloon: improve update_balloon_size_func
> virtio_balloon: remove the unnecessary 0-initialization
>
> drivers/virtio/virtio_balloon.c | 104 ++++++++++++++++++++++++++--------------
> 1 file changed, 69 insertions(+), 35 deletions(-)
>
> --
> 2.7.4
^ permalink raw reply
* Re: [PATCH v3 1/3] virtio-balloon: tweak config_changed implementation
From: Michael S. Tsirkin @ 2019-01-07 13:47 UTC (permalink / raw)
To: Wei Wang
Cc: virtio-dev, kvm, cohuck, linux-kernel, virtualization, pasic,
pbonzini, dgilbert
In-Reply-To: <1546844466-38079-2-git-send-email-wei.w.wang@intel.com>
On Mon, Jan 07, 2019 at 03:01:04PM +0800, Wei Wang wrote:
> virtio-ccw has deadlock issues with reading the config space inside the
> interrupt context, so we tweak the virtballoon_changed implementation
> by moving the config read operations into the related workqueue contexts.
> The config_read_bitmap is used as a flag to the workqueue callbacks
> about the related config fields that need to be read.
>
> The cmd_id_received is also renamed to cmd_id_received_cache, and
> the value should be obtained via virtio_balloon_cmd_id_received.
>
> Reported-by: Christian Borntraeger <borntraeger@de.ibm.com>
> Signed-off-by: Wei Wang <wei.w.wang@intel.com>
> Reviewed-by: Cornelia Huck <cohuck@redhat.com>
> Reviewed-by: Halil Pasic <pasic@linux.ibm.com>
Please include a Fixes tag to list the problematic commit.
See Documentation/process/submitting-patches.rst for the appropriate format.
> ---
> drivers/virtio/virtio_balloon.c | 98 +++++++++++++++++++++++++++--------------
> 1 file changed, 65 insertions(+), 33 deletions(-)
>
> diff --git a/drivers/virtio/virtio_balloon.c b/drivers/virtio/virtio_balloon.c
> index 728ecd1..fb12fe2 100644
> --- a/drivers/virtio/virtio_balloon.c
> +++ b/drivers/virtio/virtio_balloon.c
> @@ -61,6 +61,10 @@ enum virtio_balloon_vq {
> VIRTIO_BALLOON_VQ_MAX
> };
>
> +enum virtio_balloon_config_read {
> + VIRTIO_BALLOON_CONFIG_READ_CMD_ID = 0,
> +};
> +
> struct virtio_balloon {
> struct virtio_device *vdev;
> struct virtqueue *inflate_vq, *deflate_vq, *stats_vq, *free_page_vq;
> @@ -77,14 +81,20 @@ struct virtio_balloon {
> /* Prevent updating balloon when it is being canceled. */
> spinlock_t stop_update_lock;
> bool stop_update;
> + /* Bitmap to indicate if reading the related config fields are needed */
> + unsigned long config_read_bitmap;
>
> /* The list of allocated free pages, waiting to be given back to mm */
> struct list_head free_page_list;
> spinlock_t free_page_list_lock;
> /* The number of free page blocks on the above list */
> unsigned long num_free_page_blocks;
> - /* The cmd id received from host */
> - u32 cmd_id_received;
> + /*
> + * The cmd id received from host.
> + * Read it via virtio_balloon_cmd_id_received to get the latest value
> + * sent from host.
> + */
> + u32 cmd_id_received_cache;
> /* The cmd id that is actively in use */
> __virtio32 cmd_id_active;
> /* Buffer to store the stop sign */
> @@ -390,37 +400,31 @@ static unsigned long return_free_pages_to_mm(struct virtio_balloon *vb,
> return num_returned;
> }
>
> +static void virtio_balloon_queue_free_page_work(struct virtio_balloon *vb)
> +{
> + if (!virtio_has_feature(vb->vdev, VIRTIO_BALLOON_F_FREE_PAGE_HINT))
> + return;
> +
> + /* No need to queue the work if the bit was already set. */
> + if (test_and_set_bit(VIRTIO_BALLOON_CONFIG_READ_CMD_ID,
> + &vb->config_read_bitmap))
> + return;
> +
> + queue_work(vb->balloon_wq, &vb->report_free_page_work);
> +}
> +
> static void virtballoon_changed(struct virtio_device *vdev)
> {
> struct virtio_balloon *vb = vdev->priv;
> unsigned long flags;
> - s64 diff = towards_target(vb);
> -
> - if (diff) {
> - spin_lock_irqsave(&vb->stop_update_lock, flags);
> - if (!vb->stop_update)
> - queue_work(system_freezable_wq,
> - &vb->update_balloon_size_work);
> - spin_unlock_irqrestore(&vb->stop_update_lock, flags);
> - }
>
> - if (virtio_has_feature(vdev, VIRTIO_BALLOON_F_FREE_PAGE_HINT)) {
> - virtio_cread(vdev, struct virtio_balloon_config,
> - free_page_report_cmd_id, &vb->cmd_id_received);
> - if (vb->cmd_id_received == VIRTIO_BALLOON_CMD_ID_DONE) {
> - /* Pass ULONG_MAX to give back all the free pages */
> - return_free_pages_to_mm(vb, ULONG_MAX);
> - } else if (vb->cmd_id_received != VIRTIO_BALLOON_CMD_ID_STOP &&
> - vb->cmd_id_received !=
> - virtio32_to_cpu(vdev, vb->cmd_id_active)) {
> - spin_lock_irqsave(&vb->stop_update_lock, flags);
> - if (!vb->stop_update) {
> - queue_work(vb->balloon_wq,
> - &vb->report_free_page_work);
> - }
> - spin_unlock_irqrestore(&vb->stop_update_lock, flags);
> - }
> + spin_lock_irqsave(&vb->stop_update_lock, flags);
> + if (!vb->stop_update) {
> + queue_work(system_freezable_wq,
> + &vb->update_balloon_size_work);
> + virtio_balloon_queue_free_page_work(vb);
> }
> + spin_unlock_irqrestore(&vb->stop_update_lock, flags);
> }
>
> static void update_balloon_size(struct virtio_balloon *vb)
> @@ -527,6 +531,17 @@ static int init_vqs(struct virtio_balloon *vb)
> return 0;
> }
>
> +static u32 virtio_balloon_cmd_id_received(struct virtio_balloon *vb)
> +{
> + if (test_and_clear_bit(VIRTIO_BALLOON_CONFIG_READ_CMD_ID,
> + &vb->config_read_bitmap))
> + virtio_cread(vb->vdev, struct virtio_balloon_config,
> + free_page_report_cmd_id,
> + &vb->cmd_id_received_cache);
> +
> + return vb->cmd_id_received_cache;
> +}
> +
> static int send_cmd_id_start(struct virtio_balloon *vb)
> {
> struct scatterlist sg;
> @@ -537,7 +552,8 @@ static int send_cmd_id_start(struct virtio_balloon *vb)
> while (virtqueue_get_buf(vq, &unused))
> ;
>
> - vb->cmd_id_active = cpu_to_virtio32(vb->vdev, vb->cmd_id_received);
> + vb->cmd_id_active = virtio32_to_cpu(vb->vdev,
> + virtio_balloon_cmd_id_received(vb));
> sg_init_one(&sg, &vb->cmd_id_active, sizeof(vb->cmd_id_active));
> err = virtqueue_add_outbuf(vq, &sg, 1, &vb->cmd_id_active, GFP_KERNEL);
> if (!err)
> @@ -620,7 +636,8 @@ static int send_free_pages(struct virtio_balloon *vb)
> * stop the reporting.
> */
> cmd_id_active = virtio32_to_cpu(vb->vdev, vb->cmd_id_active);
> - if (cmd_id_active != vb->cmd_id_received)
> + if (unlikely(cmd_id_active !=
> + virtio_balloon_cmd_id_received(vb)))
> break;
>
> /*
> @@ -637,11 +654,9 @@ static int send_free_pages(struct virtio_balloon *vb)
> return 0;
> }
>
> -static void report_free_page_func(struct work_struct *work)
> +static void virtio_balloon_report_free_page(struct virtio_balloon *vb)
> {
> int err;
> - struct virtio_balloon *vb = container_of(work, struct virtio_balloon,
> - report_free_page_work);
> struct device *dev = &vb->vdev->dev;
>
> /* Start by sending the received cmd id to host with an outbuf. */
> @@ -659,6 +674,23 @@ static void report_free_page_func(struct work_struct *work)
> dev_err(dev, "Failed to send a stop id, err = %d\n", err);
> }
>
> +static void report_free_page_func(struct work_struct *work)
> +{
> + struct virtio_balloon *vb = container_of(work, struct virtio_balloon,
> + report_free_page_work);
> + u32 cmd_id_received;
> +
> + cmd_id_received = virtio_balloon_cmd_id_received(vb);
> + if (cmd_id_received == VIRTIO_BALLOON_CMD_ID_DONE) {
> + /* Pass ULONG_MAX to give back all the free pages */
> + return_free_pages_to_mm(vb, ULONG_MAX);
> + } else if (cmd_id_received != VIRTIO_BALLOON_CMD_ID_STOP &&
> + cmd_id_received !=
> + virtio32_to_cpu(vb->vdev, vb->cmd_id_active)) {
> + virtio_balloon_report_free_page(vb);
> + }
> +}
> +
> #ifdef CONFIG_BALLOON_COMPACTION
> /*
> * virtballoon_migratepage - perform the balloon page migration on behalf of
> @@ -885,7 +917,7 @@ static int virtballoon_probe(struct virtio_device *vdev)
> goto out_del_vqs;
> }
> INIT_WORK(&vb->report_free_page_work, report_free_page_func);
> - vb->cmd_id_received = VIRTIO_BALLOON_CMD_ID_STOP;
> + vb->cmd_id_received_cache = VIRTIO_BALLOON_CMD_ID_STOP;
> vb->cmd_id_active = cpu_to_virtio32(vb->vdev,
> VIRTIO_BALLOON_CMD_ID_STOP);
> vb->cmd_id_stop = cpu_to_virtio32(vb->vdev,
> --
> 2.7.4
^ permalink raw reply
* Re: [PATCH v3 1/3] virtio-balloon: tweak config_changed implementation
From: Christian Borntraeger @ 2019-01-07 13:49 UTC (permalink / raw)
To: Wei Wang, virtio-dev, linux-kernel, virtualization, kvm, mst,
cohuck
Cc: pasic, pbonzini, dgilbert
In-Reply-To: <1546844466-38079-2-git-send-email-wei.w.wang@intel.com>
On 07.01.2019 08:01, Wei Wang wrote:
> virtio-ccw has deadlock issues with reading the config space inside the
> interrupt context, so we tweak the virtballoon_changed implementation
> by moving the config read operations into the related workqueue contexts.
> The config_read_bitmap is used as a flag to the workqueue callbacks
> about the related config fields that need to be read.
>
> The cmd_id_received is also renamed to cmd_id_received_cache, and
> the value should be obtained via virtio_balloon_cmd_id_received.
>
> Reported-by: Christian Borntraeger <borntraeger@de.ibm.com>
> Signed-off-by: Wei Wang <wei.w.wang@intel.com>
> Reviewed-by: Cornelia Huck <cohuck@redhat.com>
> Reviewed-by: Halil Pasic <pasic@linux.ibm.com>
Together with
virtio_pci: use queue idx instead of array idx to set up the vq
virtio: don't allocate vqs when names[i] = NULL
Tested-by: Christian Borntraeger <borntraeger@de.ibm.com>
as already said, would be good to add cc stable (and a Fixes: tag)
> ---
> drivers/virtio/virtio_balloon.c | 98 +++++++++++++++++++++++++++--------------
> 1 file changed, 65 insertions(+), 33 deletions(-)
>
> diff --git a/drivers/virtio/virtio_balloon.c b/drivers/virtio/virtio_balloon.c
> index 728ecd1..fb12fe2 100644
> --- a/drivers/virtio/virtio_balloon.c
> +++ b/drivers/virtio/virtio_balloon.c
> @@ -61,6 +61,10 @@ enum virtio_balloon_vq {
> VIRTIO_BALLOON_VQ_MAX
> };
>
> +enum virtio_balloon_config_read {
> + VIRTIO_BALLOON_CONFIG_READ_CMD_ID = 0,
> +};
> +
> struct virtio_balloon {
> struct virtio_device *vdev;
> struct virtqueue *inflate_vq, *deflate_vq, *stats_vq, *free_page_vq;
> @@ -77,14 +81,20 @@ struct virtio_balloon {
> /* Prevent updating balloon when it is being canceled. */
> spinlock_t stop_update_lock;
> bool stop_update;
> + /* Bitmap to indicate if reading the related config fields are needed */
> + unsigned long config_read_bitmap;
>
> /* The list of allocated free pages, waiting to be given back to mm */
> struct list_head free_page_list;
> spinlock_t free_page_list_lock;
> /* The number of free page blocks on the above list */
> unsigned long num_free_page_blocks;
> - /* The cmd id received from host */
> - u32 cmd_id_received;
> + /*
> + * The cmd id received from host.
> + * Read it via virtio_balloon_cmd_id_received to get the latest value
> + * sent from host.
> + */
> + u32 cmd_id_received_cache;
> /* The cmd id that is actively in use */
> __virtio32 cmd_id_active;
> /* Buffer to store the stop sign */
> @@ -390,37 +400,31 @@ static unsigned long return_free_pages_to_mm(struct virtio_balloon *vb,
> return num_returned;
> }
>
> +static void virtio_balloon_queue_free_page_work(struct virtio_balloon *vb)
> +{
> + if (!virtio_has_feature(vb->vdev, VIRTIO_BALLOON_F_FREE_PAGE_HINT))
> + return;
> +
> + /* No need to queue the work if the bit was already set. */
> + if (test_and_set_bit(VIRTIO_BALLOON_CONFIG_READ_CMD_ID,
> + &vb->config_read_bitmap))
> + return;
> +
> + queue_work(vb->balloon_wq, &vb->report_free_page_work);
> +}
> +
> static void virtballoon_changed(struct virtio_device *vdev)
> {
> struct virtio_balloon *vb = vdev->priv;
> unsigned long flags;
> - s64 diff = towards_target(vb);
> -
> - if (diff) {
> - spin_lock_irqsave(&vb->stop_update_lock, flags);
> - if (!vb->stop_update)
> - queue_work(system_freezable_wq,
> - &vb->update_balloon_size_work);
> - spin_unlock_irqrestore(&vb->stop_update_lock, flags);
> - }
>
> - if (virtio_has_feature(vdev, VIRTIO_BALLOON_F_FREE_PAGE_HINT)) {
> - virtio_cread(vdev, struct virtio_balloon_config,
> - free_page_report_cmd_id, &vb->cmd_id_received);
> - if (vb->cmd_id_received == VIRTIO_BALLOON_CMD_ID_DONE) {
> - /* Pass ULONG_MAX to give back all the free pages */
> - return_free_pages_to_mm(vb, ULONG_MAX);
> - } else if (vb->cmd_id_received != VIRTIO_BALLOON_CMD_ID_STOP &&
> - vb->cmd_id_received !=
> - virtio32_to_cpu(vdev, vb->cmd_id_active)) {
> - spin_lock_irqsave(&vb->stop_update_lock, flags);
> - if (!vb->stop_update) {
> - queue_work(vb->balloon_wq,
> - &vb->report_free_page_work);
> - }
> - spin_unlock_irqrestore(&vb->stop_update_lock, flags);
> - }
> + spin_lock_irqsave(&vb->stop_update_lock, flags);
> + if (!vb->stop_update) {
> + queue_work(system_freezable_wq,
> + &vb->update_balloon_size_work);
> + virtio_balloon_queue_free_page_work(vb);
> }
> + spin_unlock_irqrestore(&vb->stop_update_lock, flags);
> }
>
> static void update_balloon_size(struct virtio_balloon *vb)
> @@ -527,6 +531,17 @@ static int init_vqs(struct virtio_balloon *vb)
> return 0;
> }
>
> +static u32 virtio_balloon_cmd_id_received(struct virtio_balloon *vb)
> +{
> + if (test_and_clear_bit(VIRTIO_BALLOON_CONFIG_READ_CMD_ID,
> + &vb->config_read_bitmap))
> + virtio_cread(vb->vdev, struct virtio_balloon_config,
> + free_page_report_cmd_id,
> + &vb->cmd_id_received_cache);
> +
> + return vb->cmd_id_received_cache;
> +}
> +
> static int send_cmd_id_start(struct virtio_balloon *vb)
> {
> struct scatterlist sg;
> @@ -537,7 +552,8 @@ static int send_cmd_id_start(struct virtio_balloon *vb)
> while (virtqueue_get_buf(vq, &unused))
> ;
>
> - vb->cmd_id_active = cpu_to_virtio32(vb->vdev, vb->cmd_id_received);
> + vb->cmd_id_active = virtio32_to_cpu(vb->vdev,
> + virtio_balloon_cmd_id_received(vb));
> sg_init_one(&sg, &vb->cmd_id_active, sizeof(vb->cmd_id_active));
> err = virtqueue_add_outbuf(vq, &sg, 1, &vb->cmd_id_active, GFP_KERNEL);
> if (!err)
> @@ -620,7 +636,8 @@ static int send_free_pages(struct virtio_balloon *vb)
> * stop the reporting.
> */
> cmd_id_active = virtio32_to_cpu(vb->vdev, vb->cmd_id_active);
> - if (cmd_id_active != vb->cmd_id_received)
> + if (unlikely(cmd_id_active !=
> + virtio_balloon_cmd_id_received(vb)))
> break;
>
> /*
> @@ -637,11 +654,9 @@ static int send_free_pages(struct virtio_balloon *vb)
> return 0;
> }
>
> -static void report_free_page_func(struct work_struct *work)
> +static void virtio_balloon_report_free_page(struct virtio_balloon *vb)
> {
> int err;
> - struct virtio_balloon *vb = container_of(work, struct virtio_balloon,
> - report_free_page_work);
> struct device *dev = &vb->vdev->dev;
>
> /* Start by sending the received cmd id to host with an outbuf. */
> @@ -659,6 +674,23 @@ static void report_free_page_func(struct work_struct *work)
> dev_err(dev, "Failed to send a stop id, err = %d\n", err);
> }
>
> +static void report_free_page_func(struct work_struct *work)
> +{
> + struct virtio_balloon *vb = container_of(work, struct virtio_balloon,
> + report_free_page_work);
> + u32 cmd_id_received;
> +
> + cmd_id_received = virtio_balloon_cmd_id_received(vb);
> + if (cmd_id_received == VIRTIO_BALLOON_CMD_ID_DONE) {
> + /* Pass ULONG_MAX to give back all the free pages */
> + return_free_pages_to_mm(vb, ULONG_MAX);
> + } else if (cmd_id_received != VIRTIO_BALLOON_CMD_ID_STOP &&
> + cmd_id_received !=
> + virtio32_to_cpu(vb->vdev, vb->cmd_id_active)) {
> + virtio_balloon_report_free_page(vb);
> + }
> +}
> +
> #ifdef CONFIG_BALLOON_COMPACTION
> /*
> * virtballoon_migratepage - perform the balloon page migration on behalf of
> @@ -885,7 +917,7 @@ static int virtballoon_probe(struct virtio_device *vdev)
> goto out_del_vqs;
> }
> INIT_WORK(&vb->report_free_page_work, report_free_page_func);
> - vb->cmd_id_received = VIRTIO_BALLOON_CMD_ID_STOP;
> + vb->cmd_id_received_cache = VIRTIO_BALLOON_CMD_ID_STOP;
> vb->cmd_id_active = cpu_to_virtio32(vb->vdev,
> VIRTIO_BALLOON_CMD_ID_STOP);
> vb->cmd_id_stop = cpu_to_virtio32(vb->vdev,
>
^ permalink raw reply
* Re: [PATCH v3 0/3] virtio-balloon: tweak config_changed
From: Christian Borntraeger @ 2019-01-07 13:50 UTC (permalink / raw)
To: Michael S. Tsirkin, Wei Wang
Cc: virtio-dev, kvm, cohuck, linux-kernel, virtualization, pasic,
pbonzini, dgilbert
In-Reply-To: <20190107084502-mutt-send-email-mst@kernel.org>
On 07.01.2019 14:45, Michael S. Tsirkin wrote:
> On Mon, Jan 07, 2019 at 03:01:03PM +0800, Wei Wang wrote:
>> Since virtio-ccw doesn't work with accessing to the config space
>> inside an interrupt context, this patch series avoids that issue by
>> moving the config register accesses to the related workqueue contexts.
>
> So is this enough to get ccw going again or do we also need
> the patches that deal with NULL VQ names?
This alone does not fix 4.20. You need the other ones as well.(The other patches
fix the memory corruption during boot, this patch fixes the deadlock when actually
changing the balloon size)
>
>> v2->v3 ChangeLog:
>> - rename cmd_id_received to cmd_id_received_cache, and have call sites
>> read the latest value via virtio_balloon_cmd_id_received. (Still
>> kept Cornelia and Halil's reviewed-by as it's a minor change)
>> - remove zeroing vb->num_free_page_blocks in probe since vb is
>> allocated via kzalloc.
>> v1->v2 ChangeLog:
>> - add config_read_bitmap to indicate to the workqueue callbacks about
>> the necessity of reading the related config fields.
>>
>> Wei Wang (3):
>> virtio-balloon: tweak config_changed implementation
>> virtio-balloon: improve update_balloon_size_func
>> virtio_balloon: remove the unnecessary 0-initialization
>>
>> drivers/virtio/virtio_balloon.c | 104 ++++++++++++++++++++++++++--------------
>> 1 file changed, 69 insertions(+), 35 deletions(-)
>>
>> --
>> 2.7.4
>
^ permalink raw reply
* Re: [PATCH v3 3/3] virtio_balloon: remove the unnecessary 0-initialization
From: Cornelia Huck @ 2019-01-07 14:07 UTC (permalink / raw)
To: Wei Wang
Cc: virtio-dev, kvm, mst, linux-kernel, virtualization, pasic,
pbonzini, dgilbert
In-Reply-To: <1546844466-38079-4-git-send-email-wei.w.wang@intel.com>
On Mon, 7 Jan 2019 15:01:06 +0800
Wei Wang <wei.w.wang@intel.com> wrote:
> We've changed to kzalloc the vb struct, so no need to 0-initialize
> this field one more time.
>
> Signed-off-by: Wei Wang <wei.w.wang@intel.com>
> ---
> drivers/virtio/virtio_balloon.c | 1 -
> 1 file changed, 1 deletion(-)
>
> diff --git a/drivers/virtio/virtio_balloon.c b/drivers/virtio/virtio_balloon.c
> index e33dc8e..f19061b 100644
> --- a/drivers/virtio/virtio_balloon.c
> +++ b/drivers/virtio/virtio_balloon.c
> @@ -925,7 +925,6 @@ static int virtballoon_probe(struct virtio_device *vdev)
> VIRTIO_BALLOON_CMD_ID_STOP);
> vb->cmd_id_stop = cpu_to_virtio32(vb->vdev,
> VIRTIO_BALLOON_CMD_ID_STOP);
> - vb->num_free_page_blocks = 0;
> spin_lock_init(&vb->free_page_list_lock);
> INIT_LIST_HEAD(&vb->free_page_list);
> if (virtio_has_feature(vdev, VIRTIO_BALLOON_F_PAGE_POISON)) {
Reviewed-by: Cornelia Huck <cohuck@redhat.com>
^ permalink raw reply
* Re: [RFC PATCH V3 0/5] Hi:
From: Michael S. Tsirkin @ 2019-01-07 14:11 UTC (permalink / raw)
To: Dan Williams
Cc: KVM list, Netdev, Linux Kernel Mailing List, virtualization,
David Miller
In-Reply-To: <CAPcyv4iXFy0jfoQ_jQYq2yA7cqu4_Jcap4mvQesRRrV-hahGvQ@mail.gmail.com>
On Sun, Jan 06, 2019 at 11:15:20PM -0800, Dan Williams wrote:
> On Sun, Jan 6, 2019 at 8:17 PM Michael S. Tsirkin <mst@redhat.com> wrote:
> >
> > On Mon, Jan 07, 2019 at 11:53:41AM +0800, Jason Wang wrote:
> > >
> > > On 2019/1/7 上午11:28, Michael S. Tsirkin wrote:
> > > > On Mon, Jan 07, 2019 at 10:19:03AM +0800, Jason Wang wrote:
> > > > > On 2019/1/3 上午4:47, Michael S. Tsirkin wrote:
> > > > > > On Sat, Dec 29, 2018 at 08:46:51PM +0800, Jason Wang wrote:
> > > > > > > This series tries to access virtqueue metadata through kernel virtual
> > > > > > > address instead of copy_user() friends since they had too much
> > > > > > > overheads like checks, spec barriers or even hardware feature
> > > > > > > toggling.
> > > > > > Will review, thanks!
> > > > > > One questions that comes to mind is whether it's all about bypassing
> > > > > > stac/clac. Could you please include a performance comparison with
> > > > > > nosmap?
> > > > > >
> > > > > On machine without SMAP (Sandy Bridge):
> > > > >
> > > > > Before: 4.8Mpps
> > > > >
> > > > > After: 5.2Mpps
> > > > OK so would you say it's really unsafe versus safe accesses?
> > > > Or would you say it's just a better written code?
> > >
> > >
> > > It's the effect of removing speculation barrier.
> >
> >
> > You mean __uaccess_begin_nospec introduced by
> > commit 304ec1b050310548db33063e567123fae8fd0301
> > ?
> >
> > So fundamentally we do access_ok checks when supplying
> > the memory table to the kernel thread, and we should
> > do the spec barrier there.
> >
> > Then we can just create and use a variant of uaccess macros that does
> > not include the barrier?
> >
> > Or, how about moving the barrier into access_ok?
> > This way repeated accesses with a single access_ok get a bit faster.
> > CC Dan Williams on this idea.
>
> It would be interesting to see how expensive re-doing the address
> limit check is compared to the speculation barrier. I.e. just switch
> vhost_get_user() to use get_user() rather than __get_user(). That will
> sanitize the pointer in the speculative path without a barrier.
Hmm it's way cheaper even though IIRC it's measureable.
Jason, would you like to try?
Although frankly __get_user being slower than get_user feels very wrong.
Not yet sure what to do exactly but would you agree?
> I recall we had a convert access_ok() discussion with this result here:
>
> https://lkml.org/lkml/2018/1/17/929
Sorry let me try to clarify. IIUC speculating access_ok once
is harmless. As Linus said the problem is with "_subsequent_
accesses that can then be used to perturb the cache".
Thus:
1. if (!access_ok)
2. return
3. get_user
4. if (!access_ok)
5. return
6. get_user
Your proposal that Linus nacked was to effectively add a barrier after
lines 2 and 5 (also using the array_index_nospec trick for speed),
right? Unfortunately that needs a big API change.
I am asking about adding barrier_nospec within access_ok.
Thus effectively before lines 1 and 4.
access_ok will be slower but after all the point of access_ok is
to then access the same memory multiple times.
So we should be making __get_user faster and access_ok slower ...
> ...but it sounds like you are proposing a smaller scope fixup for the
> vhost use case? Something like barrier_nospec() in the success path
> for all vhost access_ok() checks and then a get_user() variant that
> disables the barrier.
Maybe we'll have to. Except I hope vhost won't end up being the
only user otherwise it will be hard to maintain.
--
MST
_______________________________________________
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/virtualization
^ permalink raw reply
* Re: [PATCH RFC 1/2] virtio-net: bql support
From: Michael S. Tsirkin @ 2019-01-07 14:19 UTC (permalink / raw)
To: Jason Wang
Cc: netdev, linux-kernel, virtualization, maxime.coquelin, wexu,
David S. Miller
In-Reply-To: <88db987e-b519-5c1f-f64f-6f65f8415799@redhat.com>
On Mon, Jan 07, 2019 at 02:31:47PM +0800, Jason Wang wrote:
>
> On 2019/1/7 下午12:01, Michael S. Tsirkin wrote:
> > On Mon, Jan 07, 2019 at 11:51:55AM +0800, Jason Wang wrote:
> > > On 2019/1/7 上午11:17, Michael S. Tsirkin wrote:
> > > > On Mon, Jan 07, 2019 at 10:14:37AM +0800, Jason Wang wrote:
> > > > > On 2019/1/2 下午9:59, Michael S. Tsirkin wrote:
> > > > > > On Wed, Jan 02, 2019 at 11:28:43AM +0800, Jason Wang wrote:
> > > > > > > On 2018/12/31 上午2:45, Michael S. Tsirkin wrote:
> > > > > > > > On Thu, Dec 27, 2018 at 06:00:36PM +0800, Jason Wang wrote:
> > > > > > > > > On 2018/12/26 下午11:19, Michael S. Tsirkin wrote:
> > > > > > > > > > On Thu, Dec 06, 2018 at 04:17:36PM +0800, Jason Wang wrote:
> > > > > > > > > > > On 2018/12/6 上午6:54, Michael S. Tsirkin wrote:
> > > > > > > > > > > > When use_napi is set, let's enable BQLs. Note: some of the issues are
> > > > > > > > > > > > similar to wifi. It's worth considering whether something similar to
> > > > > > > > > > > > commit 36148c2bbfbe ("mac80211: Adjust TSQ pacing shift") might be
> > > > > > > > > > > > benefitial.
> > > > > > > > > > > I've played a similar patch several days before. The tricky part is the mode
> > > > > > > > > > > switching between napi and no napi. We should make sure when the packet is
> > > > > > > > > > > sent and trakced by BQL, it should be consumed by BQL as well. I did it by
> > > > > > > > > > > tracking it through skb->cb. And deal with the freeze by reset the BQL
> > > > > > > > > > > status. Patch attached.
> > > > > > > > > > >
> > > > > > > > > > > But when testing with vhost-net, I don't very a stable performance,
> > > > > > > > > > So how about increasing TSQ pacing shift then?
> > > > > > > > > I can test this. But changing default TCP value is much more than a
> > > > > > > > > virtio-net specific thing.
> > > > > > > > Well same logic as wifi applies. Unpredictable latencies related
> > > > > > > > to radio in one case, to host scheduler in the other.
> > > > > > > >
> > > > > > > > > > > it was
> > > > > > > > > > > probably because we batch the used ring updating so tx interrupt may come
> > > > > > > > > > > randomly. We probably need to implement time bounded coalescing mechanism
> > > > > > > > > > > which could be configured from userspace.
> > > > > > > > > > I don't think it's reasonable to expect userspace to be that smart ...
> > > > > > > > > > Why do we need time bounded? used ring is always updated when ring
> > > > > > > > > > becomes empty.
> > > > > > > > > We don't add used when means BQL may not see the consumed packet in time.
> > > > > > > > > And the delay varies based on the workload since we count packets not bytes
> > > > > > > > > or time before doing the batched updating.
> > > > > > > > >
> > > > > > > > > Thanks
> > > > > > > > Sorry I still don't get it.
> > > > > > > > When nothing is outstanding then we do update the used.
> > > > > > > > So if BQL stops userspace from sending packets then
> > > > > > > > we get an interrupt and packets start flowing again.
> > > > > > > Yes, but how about the cases of multiple flows. That's where I see unstable
> > > > > > > results.
> > > > > > >
> > > > > > >
> > > > > > > > It might be suboptimal, we might need to tune it but I doubt running
> > > > > > > > timers is a solution, timer interrupts cause VM exits.
> > > > > > > Probably not a timer but a time counter (or event byte counter) in vhost to
> > > > > > > add used and signal guest if it exceeds a value instead of waiting the
> > > > > > > number of packets.
> > > > > > >
> > > > > > >
> > > > > > > Thanks
> > > > > > Well we already have VHOST_NET_WEIGHT - is it too big then?
> > > > > I'm not sure, it might be too big.
> > > > >
> > > > >
> > > > > > And maybe we should expose the "MORE" flag in the descriptor -
> > > > > > do you think that will help?
> > > > > >
> > > > > I don't know. But how a "more" flag can help here?
> > > > >
> > > > > Thanks
> > > > It sounds like we should be a bit more aggressive in updating used ring.
> > > > But if we just do it naively we will harm performance for sure as that
> > > > is how we are doing batching right now.
> > >
> > > I agree but the problem is to balance the PPS and throughput. More batching
> > > helps for PPS but may damage TCP throughput.
> > That is what more flag is supposed to be I think - it is only set if
> > there's a socket that actually needs the skb freed in order to go on.
>
>
> I'm not quite sure I get, but is this something similar to what you want?
>
> https://lists.linuxfoundation.org/pipermail/virtualization/2014-October/027667.html
>
> Which enables tx interrupt for TCP packets, and you want to add used more
> aggressively for those sockets?
>
>
> Thanks
That's the idea.
But then you said we can just play with event index
instead. I think the answer to why not do that is that it's tricky to do
without races.
We need to think about the exact semantics: e.g. I think it is better to
keep interrupts on and then saying "I promise sending more buffers even
if you do not use any buffers so using this one is not urgent" rather
than as your patches do keeping them off and then saying "this one is
urgent".
The reason being is that "I promise to send more" is
more informative and can allow better batching for the
host.
>
> > > > Instead we could make guest
> > > > control batching using the more flag - if that's not set we write out
> > > > the used ring.
> > >
> > > It's under the control of guest, so I'm afraid we still need some more guard
> > > (e.g time/bytes counters) on host.
> > >
> > > Thanks
> > Point is if guest does not care about the skb being freed, then there is no
> > rush host side to mark buffer used.
> >
> >
_______________________________________________
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/virtualization
^ permalink raw reply
* Re: [RFC PATCH V3 0/5] Hi:
From: Michael S. Tsirkin @ 2019-01-07 14:37 UTC (permalink / raw)
To: Jason Wang; +Cc: kvm, netdev, linux-kernel, virtualization, Dan Williams, davem
In-Reply-To: <62f0fda8-92a4-b160-1b3b-4acdfef49d44@redhat.com>
On Mon, Jan 07, 2019 at 02:50:17PM +0800, Jason Wang wrote:
>
> On 2019/1/7 下午12:17, Michael S. Tsirkin wrote:
> > On Mon, Jan 07, 2019 at 11:53:41AM +0800, Jason Wang wrote:
> > > On 2019/1/7 上午11:28, Michael S. Tsirkin wrote:
> > > > On Mon, Jan 07, 2019 at 10:19:03AM +0800, Jason Wang wrote:
> > > > > On 2019/1/3 上午4:47, Michael S. Tsirkin wrote:
> > > > > > On Sat, Dec 29, 2018 at 08:46:51PM +0800, Jason Wang wrote:
> > > > > > > This series tries to access virtqueue metadata through kernel virtual
> > > > > > > address instead of copy_user() friends since they had too much
> > > > > > > overheads like checks, spec barriers or even hardware feature
> > > > > > > toggling.
> > > > > > Will review, thanks!
> > > > > > One questions that comes to mind is whether it's all about bypassing
> > > > > > stac/clac. Could you please include a performance comparison with
> > > > > > nosmap?
> > > > > >
> > > > > On machine without SMAP (Sandy Bridge):
> > > > >
> > > > > Before: 4.8Mpps
> > > > >
> > > > > After: 5.2Mpps
> > > > OK so would you say it's really unsafe versus safe accesses?
> > > > Or would you say it's just a better written code?
> > >
> > > It's the effect of removing speculation barrier.
> >
> > You mean __uaccess_begin_nospec introduced by
> > commit 304ec1b050310548db33063e567123fae8fd0301
> > ?
>
> Yes.
>
>
> >
> > So fundamentally we do access_ok checks when supplying
> > the memory table to the kernel thread, and we should
> > do the spec barrier there.
> >
> > Then we can just create and use a variant of uaccess macros that does
> > not include the barrier?
>
>
> The unsafe ones?
Fundamentally yes.
>
> >
> > Or, how about moving the barrier into access_ok?
> > This way repeated accesses with a single access_ok get a bit faster.
> > CC Dan Williams on this idea.
>
>
> The problem is, e.g for vhost control path. During mem table validation, we
> don't even want to access them there. So the spec barrier is not needed.
Again spec barrier is not needed as such at all. It's defence in depth.
And mem table init is slow path. So we can stick a barrier there and it
won't be a problem for anyone.
>
> >
> >
> > > > > On machine with SMAP (Broadwell):
> > > > >
> > > > > Before: 5.0Mpps
> > > > >
> > > > > After: 6.1Mpps
> > > > >
> > > > > No smap: 7.5Mpps
> > > > >
> > > > >
> > > > > Thanks
> > > > no smap being before or after?
> > > >
> > > Let me clarify:
> > >
> > >
> > > Before (SMAP on): 5.0Mpps
> > >
> > > Before (SMAP off): 7.5Mpps
> > >
> > > After (SMAP on): 6.1Mpps
> > >
> > >
> > > Thanks
> > How about after + smap off?
>
>
> After (SMAP off): 8.0Mpps
>
> >
> > And maybe we want a module option just for the vhost thread to keep smap
> > off generally since almost all it does is copy stuff from userspace into
> > kernel anyway. Because what above numbers should is that we really
> > really want a solution that isn't limited to just meta-data access,
> > and I really do not see how any such solution can not also be
> > used to make meta-data access fast.
>
>
> As we've discussed in another thread of previous version. This requires lots
> of changes, the main issues is SMAP state was not saved/restored on explicit
> schedule().
I wonder how expensive can reading eflags be?
If it's cheap we can just check EFLAGS.AC and rerun stac if needed.
> Even if it did, since vhost will call lots of net/block codes,
> any kind of uaccess in those codes needs understand this special request
> from vhost e.g you provably need to invent a new kinds of iov iterator that
> does not touch SMAP at all. And I'm not sure this is the only thing we need
> to deal with.
Well we wanted to move packet processing from tun into vhost anyway right?
>
> So I still prefer to:
>
> 1) speedup the metadata access through vmap + MMU notifier
>
> 2) speedup the datacopy with batched copy (unsafe ones or other new
> interfaces)
>
> Thanks
I just guess once you do (2) you will want to rework (1) to use
the new interfaces. So all the effort you are now investing in (1)
will be wasted. Just my $.02.
--
MST
_______________________________________________
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/virtualization
^ permalink raw reply
* Re: [RFC PATCH V3 0/5] Hi:
From: Michael S. Tsirkin @ 2019-01-07 14:47 UTC (permalink / raw)
To: Jason Wang; +Cc: netdev, davem, linux-kernel, kvm, virtualization
In-Reply-To: <68727e1b-1d51-0596-29c3-931475dd5dab@redhat.com>
On Mon, Jan 07, 2019 at 02:58:08PM +0800, Jason Wang wrote:
>
> On 2019/1/5 上午5:41, Michael S. Tsirkin wrote:
> > On Sat, Dec 29, 2018 at 08:46:51PM +0800, Jason Wang wrote:
> > > This series tries to access virtqueue metadata through kernel virtual
> > > address instead of copy_user() friends since they had too much
> > > overheads like checks, spec barriers or even hardware feature
> > > toggling.
> >
> > I think it's a reasonable approach.
> > However I need to look at whether and which mmu notifiers are invoked before
> > writeback. Do you know?
>
>
> I don't know but just looking at the MMU notifier ops definition, there's no
> such callback if my understanding is correct.
>
> Thanks
In that case how are you making sure used ring updates are written back?
If they aren't guest will crash ...
>
> >
> > > Test shows about 24% improvement on TX PPS. It should benefit other
> > > cases as well.
> > >
> > > Changes from V2:
> > > - fix buggy range overlapping check
> > > - tear down MMU notifier during vhost ioctl to make sure invalidation
> > > request can read metadata userspace address and vq size without
> > > holding vq mutex.
> > > Changes from V1:
> > > - instead of pinning pages, use MMU notifier to invalidate vmaps and
> > > remap duing metadata prefetch
> > > - fix build warning on MIPS
> > >
> > > Jason Wang (5):
> > > vhost: generalize adding used elem
> > > vhost: fine grain userspace memory accessors
> > > vhost: rename vq_iotlb_prefetch() to vq_meta_prefetch()
> > > vhost: introduce helpers to get the size of metadata area
> > > vhost: access vq metadata through kernel virtual address
> > >
> > > drivers/vhost/net.c | 4 +-
> > > drivers/vhost/vhost.c | 416 +++++++++++++++++++++++++++++++++++++-----
> > > drivers/vhost/vhost.h | 15 +-
> > > 3 files changed, 384 insertions(+), 51 deletions(-)
> > >
> > > --
> > > 2.17.1
_______________________________________________
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/virtualization
^ permalink raw reply
* Re: [RFC PATCH V3 1/5] vhost: generalize adding used elem
From: Michael S. Tsirkin @ 2019-01-07 14:50 UTC (permalink / raw)
To: Jason Wang
Cc: kvm, netdev, linux-kernel, Sean Christopherson, virtualization,
davem
In-Reply-To: <9111a7a2-8396-d866-449e-11ee4008f988@redhat.com>
On Mon, Jan 07, 2019 at 03:00:17PM +0800, Jason Wang wrote:
>
> On 2019/1/5 上午8:33, Sean Christopherson wrote:
> > On Fri, Jan 04, 2019 at 04:29:34PM -0500, Michael S. Tsirkin wrote:
> > > On Sat, Dec 29, 2018 at 08:46:52PM +0800, Jason Wang wrote:
> > > > Use one generic vhost_copy_to_user() instead of two dedicated
> > > > accessor. This will simplify the conversion to fine grain
> > > > accessors. About 2% improvement of PPS were seen during vitio-user
> > > > txonly test.
> > > >
> > > > Signed-off-by: Jason Wang <jasowang@redhat.com>
> > > I don't hve a problem with this patch but do you have
> > > any idea how come removing what's supposed to be
> > > an optimization speeds things up?
> > With SMAP, the 2x vhost_put_user() will also mean an extra STAC/CLAC pair,
> > which is probably slower than the overhead of CALL+RET to whatever flavor
> > of copy_user_generic() gets used. CALL+RET is really the only overhead
> > since all variants of copy_user_generic() unroll accesses smaller than
> > 64 bytes, e.g. on a 64-bit system, __copy_to_user() will write all 8
> > bytes in a single MOV.
> >
> > Removing the special casing also eliminates a few hundred bytes of code
> > as well as the need for hardware to predict count==1 vs. count>1.
> >
>
> Yes, I don't measure, but STAC/CALC is pretty expensive when we are do very
> small copies based on the result of nosmap PPS.
>
> Thanks
Yes all this really looks like a poster child for uaccess_begin/end
plus unsafe accesses. And if these APIs don't do the job for us
then maybe better ones are needed ...
--
MST
_______________________________________________
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/virtualization
^ permalink raw reply
page: next (older) | prev (newer) | latest
- recent:[subjects (threaded)|topics (new)|topics (active)]
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox