drm-misc-next for v5.16:
UAPI Changes: - Allow empty drm leases for creating separate GEM namespaces. Cross-subsystem Changes: - Slightly rework dma_buf_poll. - Add dma_resv_for_each_fence_unlocked to iterate, and use it inside the lockless dma-resv functions. Core Changes: - Allow devm_drm_of_get_bridge to build without CONFIG_OF for compile testing. - Add more DP2 headers. - fix CONFIG_FB dependency in fb_helper. - Add DRM_FORMAT_R8 to drm_format_info, and helpers for RGB332 and RGB888. - Fix crash on a 0 or invalid EDID. Driver Changes: - Apply and revert DRM_MODESET_LOCK_ALL_BEGIN. - Add mode_valid to ti-sn65dsi86 bridge. - Support multiple syncobjs in v3d. - Add R8, RGB332 and RGB888 pixel formats to GUD. - Use devm_add_action_or_reset in dw-hdmi-cec. -----BEGIN PGP SIGNATURE----- iQIzBAABCgAdFiEEuXvWqAysSYEJGuVH/lWMcqZwE8MFAmFdfuwACgkQ/lWMcqZw E8OTgg/+Nmsqhj1tsbSCWF1yx81CXHVSOhExPaMl+GPs6+y+sZ+U2rN99dnbULvA U56eOmjc8FvgmK89BwhSYNt++QYIRRpzjBGlCYm4bwpgqFOmYsK+en35PYMwHdxM Ke8newhzqa6/detvjX52igddZzrBv1Cs8aXuV5rw7Dg0ivlSlQUV0MO8JYwCliWI arRT8bg7wzUzhyRZqwqOqKXjvRirqBlFjJmvfL0WgHevZbzYuXbn4eWCUgCVthMH pU9QgK6FMW912pBxVppDO2aTDmNvqwj1BsB3RFfRuqS/JJ4s/gf39JxsipnI+/qn kPxZVFzzonR8Nl6h9sPi1jZrcVDCBebFgyG8hSgIVb/09U7AVYomtP18VKeh8yCy Pp4iQINqOcyMPmXKF491LIL92dcXZAIRaRQFKc/ZSHcfIDA7ZB1+7zf1ixBjlxjP GqtjLbmPspI2DzBRlTFEdf58jvX70E5nFYdQyYcy3VprJHuqEgL5PKz2Xcnve6R0 dEkGA2vMrGtb23YyjbFTNfkdvg9WYXze9HbQLt7kc8mI77TugkG0/rCcwv5pEEu3 WSwqMeb+5H+7va4AI715MoXbxgnCba2zPTUm1s8kSqTK0Oighc/vWcnnJ4iVuEGE 8Xt8AIIYUtccufR6ujucVUh7nju2ZOnFE7S92LybnGnByAIADfM= =qxpr -----END PGP SIGNATURE----- Merge tag 'drm-misc-next-2021-10-06' of git://anongit.freedesktop.org/drm/drm-misc into drm-next drm-misc-next for v5.16: UAPI Changes: - Allow empty drm leases for creating separate GEM namespaces. Cross-subsystem Changes: - Slightly rework dma_buf_poll. - Add dma_resv_for_each_fence_unlocked to iterate, and use it inside the lockless dma-resv functions. Core Changes: - Allow devm_drm_of_get_bridge to build without CONFIG_OF for compile testing. - Add more DP2 headers. - fix CONFIG_FB dependency in fb_helper. - Add DRM_FORMAT_R8 to drm_format_info, and helpers for RGB332 and RGB888. - Fix crash on a 0 or invalid EDID. Driver Changes: - Apply and revert DRM_MODESET_LOCK_ALL_BEGIN. - Add mode_valid to ti-sn65dsi86 bridge. - Support multiple syncobjs in v3d. - Add R8, RGB332 and RGB888 pixel formats to GUD. - Use devm_add_action_or_reset in dw-hdmi-cec. Signed-off-by: Dave Airlie <airlied@redhat.com> # gpg: Signature made Wed 06 Oct 2021 20:48:12 AEST # gpg: using RSA key B97BD6A80CAC4981091AE547FE558C72A67013C3 # gpg: Good signature from "Maarten Lankhorst <maarten.lankhorst@linux.intel.com>" [expired] # gpg: aka "Maarten Lankhorst <maarten@debian.org>" [expired] # gpg: aka "Maarten Lankhorst <maarten.lankhorst@canonical.com>" [expired] # gpg: Note: This key has expired! # Primary key fingerprint: B97B D6A8 0CAC 4981 091A E547 FE55 8C72 A670 13C3 From: Maarten Lankhorst <maarten.lankhorst@linux.intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/2602f4e9-a8ac-83f8-6c2a-39fd9ca2e1ba@linux.intel.com
This commit is contained in:
commit
797d72ce8e
99 changed files with 3158 additions and 1141 deletions
|
|
@ -440,7 +440,7 @@ struct dma_buf {
|
|||
wait_queue_head_t *poll;
|
||||
|
||||
__poll_t active;
|
||||
} cb_excl, cb_shared;
|
||||
} cb_in, cb_out;
|
||||
#ifdef CONFIG_DMABUF_SYSFS_STATS
|
||||
/**
|
||||
* @sysfs_entry:
|
||||
|
|
|
|||
|
|
@ -149,6 +149,101 @@ struct dma_resv {
|
|||
struct dma_resv_list __rcu *fence;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct dma_resv_iter - current position into the dma_resv fences
|
||||
*
|
||||
* Don't touch this directly in the driver, use the accessor function instead.
|
||||
*/
|
||||
struct dma_resv_iter {
|
||||
/** @obj: The dma_resv object we iterate over */
|
||||
struct dma_resv *obj;
|
||||
|
||||
/** @all_fences: If all fences should be returned */
|
||||
bool all_fences;
|
||||
|
||||
/** @fence: the currently handled fence */
|
||||
struct dma_fence *fence;
|
||||
|
||||
/** @seq: sequence number to check for modifications */
|
||||
unsigned int seq;
|
||||
|
||||
/** @index: index into the shared fences */
|
||||
unsigned int index;
|
||||
|
||||
/** @fences: the shared fences */
|
||||
struct dma_resv_list *fences;
|
||||
|
||||
/** @is_restarted: true if this is the first returned fence */
|
||||
bool is_restarted;
|
||||
};
|
||||
|
||||
struct dma_fence *dma_resv_iter_first_unlocked(struct dma_resv_iter *cursor);
|
||||
struct dma_fence *dma_resv_iter_next_unlocked(struct dma_resv_iter *cursor);
|
||||
|
||||
/**
|
||||
* dma_resv_iter_begin - initialize a dma_resv_iter object
|
||||
* @cursor: The dma_resv_iter object to initialize
|
||||
* @obj: The dma_resv object which we want to iterate over
|
||||
* @all_fences: If all fences should be returned or just the exclusive one
|
||||
*/
|
||||
static inline void dma_resv_iter_begin(struct dma_resv_iter *cursor,
|
||||
struct dma_resv *obj,
|
||||
bool all_fences)
|
||||
{
|
||||
cursor->obj = obj;
|
||||
cursor->all_fences = all_fences;
|
||||
cursor->fence = NULL;
|
||||
}
|
||||
|
||||
/**
|
||||
* dma_resv_iter_end - cleanup a dma_resv_iter object
|
||||
* @cursor: the dma_resv_iter object which should be cleaned up
|
||||
*
|
||||
* Make sure that the reference to the fence in the cursor is properly
|
||||
* dropped.
|
||||
*/
|
||||
static inline void dma_resv_iter_end(struct dma_resv_iter *cursor)
|
||||
{
|
||||
dma_fence_put(cursor->fence);
|
||||
}
|
||||
|
||||
/**
|
||||
* dma_resv_iter_is_exclusive - test if the current fence is the exclusive one
|
||||
* @cursor: the cursor of the current position
|
||||
*
|
||||
* Returns true if the currently returned fence is the exclusive one.
|
||||
*/
|
||||
static inline bool dma_resv_iter_is_exclusive(struct dma_resv_iter *cursor)
|
||||
{
|
||||
return cursor->index == 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* dma_resv_iter_is_restarted - test if this is the first fence after a restart
|
||||
* @cursor: the cursor with the current position
|
||||
*
|
||||
* Return true if this is the first fence in an iteration after a restart.
|
||||
*/
|
||||
static inline bool dma_resv_iter_is_restarted(struct dma_resv_iter *cursor)
|
||||
{
|
||||
return cursor->is_restarted;
|
||||
}
|
||||
|
||||
/**
|
||||
* dma_resv_for_each_fence_unlocked - unlocked fence iterator
|
||||
* @cursor: a struct dma_resv_iter pointer
|
||||
* @fence: the current fence
|
||||
*
|
||||
* Iterate over the fences in a struct dma_resv object without holding the
|
||||
* &dma_resv.lock and using RCU instead. The cursor needs to be initialized
|
||||
* with dma_resv_iter_begin() and cleaned up with dma_resv_iter_end(). Inside
|
||||
* the iterator a reference to the dma_fence is held and the RCU lock dropped.
|
||||
* When the dma_resv is modified the iteration starts over again.
|
||||
*/
|
||||
#define dma_resv_for_each_fence_unlocked(cursor, fence) \
|
||||
for (fence = dma_resv_iter_first_unlocked(cursor); \
|
||||
fence; fence = dma_resv_iter_next_unlocked(cursor))
|
||||
|
||||
#define dma_resv_held(obj) lockdep_is_held(&(obj)->lock.base)
|
||||
#define dma_resv_assert_held(obj) lockdep_assert_held(&(obj)->lock.base)
|
||||
|
||||
|
|
|
|||
|
|
@ -132,6 +132,8 @@ static inline int arch_phys_wc_index(int handle)
|
|||
#endif
|
||||
#endif
|
||||
|
||||
int devm_arch_phys_wc_add(struct device *dev, unsigned long base, unsigned long size);
|
||||
|
||||
enum {
|
||||
/* See memremap() kernel-doc for usage description... */
|
||||
MEMREMAP_WB = 1 << 0,
|
||||
|
|
@ -166,4 +168,7 @@ static inline void arch_io_free_memtype_wc(resource_size_t base,
|
|||
}
|
||||
#endif
|
||||
|
||||
int devm_arch_io_reserve_memtype_wc(struct device *dev, resource_size_t start,
|
||||
resource_size_t size);
|
||||
|
||||
#endif /* _LINUX_IO_H */
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue