mirror of
https://github.com/torvalds/linux.git
synced 2026-05-25 15:41:52 +02:00
Driver Changes:
- Fix macro for checking minimum GuC version (Michal Wajdeczko) - Fix CCS offset calculation for some BMG SKUs (Matthew Auld) - Fix locking on memory usage reporting via fdinfo and BO destroy (Matthew Auld) - Fix GPU page fault handler on a closed VM (Matthew Brost) - Fix overflow in oa batch buffer (José) -----BEGIN PGP SIGNATURE----- iQJNBAABCAA3FiEE6rM8lpABPHM5FqyDm6KlpjDL6lMFAmbstzMZHGx1Y2FzLmRl bWFyY2hpQGludGVsLmNvbQAKCRCboqWmMMvqUxfHEACbvKQ1EhJb+HkzVSCM0+tN mbPM2uRhs7Jr8F0XGN49t2KBwBqu/DyDtZxhirlh2F+u7/0gkAj55vAJdSQ92OaL +5ZVzsDUZgfPSa9VrmUYkVCu95XG5YWfwN/QlpAIXEpBJwPL24csygeWqltFUfOd YrWVJO/pAoC3ywPbaAYVMyqL8N5TgqJj3Ji2Woj56WH0gdQFuEr1nlVhIaJKmJa4 nnJY4WkbRWGnyo1ZM0zIRlBm5KH24Lu8+Wqxjp2YTyQmJKDhf83LeRafFDbTny7r wWyjRVF6+BGAbznTF42Cb6XWgXIFpRVXd7wIT78w6Lej1HUiPB3HiMb5e7upfms1 m2HJSH4Q8BADaWKUTLM5RBUchL5vQja8GFACpb/906dLzyy7u/w7nKXi5Zr5USUO 4ea6YH10fEySMfHWnGrVgpH+jVN7s+dxah6IxnmCRQ9EDt0GCo9YOO1AQxCrRS5R UdwPjFfICvfnmlpBE5oD0T6Unw/AFN1x39feyJ/jpHHWbrdgNnx05hNXmWiSC+4y E9GsSv1rK9ja035kCdYG6zNz5oT2U0IdSEjEze2dFo8r6BdsB3ZwvGZU4kf/swAt 5U37fx2sQscTwyOvQHTgV1pdNsRW7Yy20k0ZeBNJ02xuNe4NSaSKQkrvwLYes2o6 Ha2SP7Cc4wURZavsdml5Cw== =1hr1 -----END PGP SIGNATURE----- Merge tag 'drm-xe-next-fixes-2024-09-19' of https://gitlab.freedesktop.org/drm/xe/kernel into drm-next Driver Changes: - Fix macro for checking minimum GuC version (Michal Wajdeczko) - Fix CCS offset calculation for some BMG SKUs (Matthew Auld) - Fix locking on memory usage reporting via fdinfo and BO destroy (Matthew Auld) - Fix GPU page fault handler on a closed VM (Matthew Brost) - Fix overflow in oa batch buffer (José) Signed-off-by: Dave Airlie <airlied@redhat.com> From: Lucas De Marchi <lucas.demarchi@intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/lr6vhd7x5eb7gubd7utfmnwzvfqfslji4kssxyqisynzlvqjni@svgm6jot7r66
This commit is contained in:
commit
d7126c0cfc
|
|
@ -65,7 +65,8 @@ __xe_bb_create_job(struct xe_exec_queue *q, struct xe_bb *bb, u64 *addr)
|
|||
{
|
||||
u32 size = drm_suballoc_size(bb->bo);
|
||||
|
||||
bb->cs[bb->len++] = MI_BATCH_BUFFER_END;
|
||||
if (bb->len == 0 || bb->cs[bb->len - 1] != MI_BATCH_BUFFER_END)
|
||||
bb->cs[bb->len++] = MI_BATCH_BUFFER_END;
|
||||
|
||||
xe_gt_assert(q->gt, bb->len * 4 + bb_prefetch(q->gt) <= size);
|
||||
|
||||
|
|
|
|||
|
|
@ -2320,6 +2320,20 @@ void xe_bo_put_commit(struct llist_head *deferred)
|
|||
drm_gem_object_free(&bo->ttm.base.refcount);
|
||||
}
|
||||
|
||||
void xe_bo_put(struct xe_bo *bo)
|
||||
{
|
||||
might_sleep();
|
||||
if (bo) {
|
||||
#ifdef CONFIG_PROC_FS
|
||||
if (bo->client)
|
||||
might_lock(&bo->client->bos_lock);
|
||||
#endif
|
||||
if (bo->ggtt_node && bo->ggtt_node->ggtt)
|
||||
might_lock(&bo->ggtt_node->ggtt->lock);
|
||||
drm_gem_object_put(&bo->ttm.base);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* xe_bo_dumb_create - Create a dumb bo as backing for a fb
|
||||
* @file_priv: ...
|
||||
|
|
|
|||
|
|
@ -126,11 +126,7 @@ static inline struct xe_bo *xe_bo_get(struct xe_bo *bo)
|
|||
return bo;
|
||||
}
|
||||
|
||||
static inline void xe_bo_put(struct xe_bo *bo)
|
||||
{
|
||||
if (bo)
|
||||
drm_gem_object_put(&bo->ttm.base);
|
||||
}
|
||||
void xe_bo_put(struct xe_bo *bo);
|
||||
|
||||
static inline void __xe_bo_unset_bulk_move(struct xe_bo *bo)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -10,6 +10,7 @@
|
|||
#include <linux/slab.h>
|
||||
#include <linux/types.h>
|
||||
|
||||
#include "xe_assert.h"
|
||||
#include "xe_bo.h"
|
||||
#include "xe_bo_types.h"
|
||||
#include "xe_device_types.h"
|
||||
|
|
@ -151,10 +152,13 @@ void xe_drm_client_add_bo(struct xe_drm_client *client,
|
|||
*/
|
||||
void xe_drm_client_remove_bo(struct xe_bo *bo)
|
||||
{
|
||||
struct xe_device *xe = ttm_to_xe_device(bo->ttm.bdev);
|
||||
struct xe_drm_client *client = bo->client;
|
||||
|
||||
xe_assert(xe, !kref_read(&bo->ttm.base.refcount));
|
||||
|
||||
spin_lock(&client->bos_lock);
|
||||
list_del(&bo->client_link);
|
||||
list_del_init(&bo->client_link);
|
||||
spin_unlock(&client->bos_lock);
|
||||
|
||||
xe_drm_client_put(client);
|
||||
|
|
@ -164,12 +168,9 @@ static void bo_meminfo(struct xe_bo *bo,
|
|||
struct drm_memory_stats stats[TTM_NUM_MEM_TYPES])
|
||||
{
|
||||
u64 sz = bo->size;
|
||||
u32 mem_type;
|
||||
u32 mem_type = bo->ttm.resource->mem_type;
|
||||
|
||||
if (bo->placement.placement)
|
||||
mem_type = bo->placement.placement->mem_type;
|
||||
else
|
||||
mem_type = XE_PL_TT;
|
||||
xe_bo_assert_held(bo);
|
||||
|
||||
if (drm_gem_object_is_shared_for_memory_stats(&bo->ttm.base))
|
||||
stats[mem_type].shared += sz;
|
||||
|
|
@ -196,6 +197,7 @@ static void show_meminfo(struct drm_printer *p, struct drm_file *file)
|
|||
struct xe_drm_client *client;
|
||||
struct drm_gem_object *obj;
|
||||
struct xe_bo *bo;
|
||||
LLIST_HEAD(deferred);
|
||||
unsigned int id;
|
||||
u32 mem_type;
|
||||
|
||||
|
|
@ -206,7 +208,20 @@ static void show_meminfo(struct drm_printer *p, struct drm_file *file)
|
|||
idr_for_each_entry(&file->object_idr, obj, id) {
|
||||
struct xe_bo *bo = gem_to_xe_bo(obj);
|
||||
|
||||
bo_meminfo(bo, stats);
|
||||
if (dma_resv_trylock(bo->ttm.base.resv)) {
|
||||
bo_meminfo(bo, stats);
|
||||
xe_bo_unlock(bo);
|
||||
} else {
|
||||
xe_bo_get(bo);
|
||||
spin_unlock(&file->table_lock);
|
||||
|
||||
xe_bo_lock(bo, false);
|
||||
bo_meminfo(bo, stats);
|
||||
xe_bo_unlock(bo);
|
||||
|
||||
xe_bo_put(bo);
|
||||
spin_lock(&file->table_lock);
|
||||
}
|
||||
}
|
||||
spin_unlock(&file->table_lock);
|
||||
|
||||
|
|
@ -215,11 +230,28 @@ static void show_meminfo(struct drm_printer *p, struct drm_file *file)
|
|||
list_for_each_entry(bo, &client->bos_list, client_link) {
|
||||
if (!kref_get_unless_zero(&bo->ttm.base.refcount))
|
||||
continue;
|
||||
bo_meminfo(bo, stats);
|
||||
xe_bo_put(bo);
|
||||
|
||||
if (dma_resv_trylock(bo->ttm.base.resv)) {
|
||||
bo_meminfo(bo, stats);
|
||||
xe_bo_unlock(bo);
|
||||
} else {
|
||||
spin_unlock(&client->bos_lock);
|
||||
|
||||
xe_bo_lock(bo, false);
|
||||
bo_meminfo(bo, stats);
|
||||
xe_bo_unlock(bo);
|
||||
|
||||
spin_lock(&client->bos_lock);
|
||||
/* The bo ref will prevent this bo from being removed from the list */
|
||||
xe_assert(xef->xe, !list_empty(&bo->client_link));
|
||||
}
|
||||
|
||||
xe_bo_put_deferred(bo, &deferred);
|
||||
}
|
||||
spin_unlock(&client->bos_lock);
|
||||
|
||||
xe_bo_put_commit(&deferred);
|
||||
|
||||
for (mem_type = XE_PL_SYSTEM; mem_type < TTM_NUM_MEM_TYPES; ++mem_type) {
|
||||
if (!xe_mem_type_to_name[mem_type])
|
||||
continue;
|
||||
|
|
|
|||
|
|
@ -212,6 +212,12 @@ static int handle_pagefault(struct xe_gt *gt, struct pagefault *pf)
|
|||
* TODO: Change to read lock? Using write lock for simplicity.
|
||||
*/
|
||||
down_write(&vm->lock);
|
||||
|
||||
if (xe_vm_is_closed(vm)) {
|
||||
err = -ENOENT;
|
||||
goto unlock_vm;
|
||||
}
|
||||
|
||||
vma = lookup_vma(vm, pf->page_addr);
|
||||
if (!vma) {
|
||||
err = -EINVAL;
|
||||
|
|
|
|||
|
|
@ -18,8 +18,10 @@
|
|||
*/
|
||||
#define MAKE_GUC_VER(maj, min, pat) (((maj) << 16) | ((min) << 8) | (pat))
|
||||
#define MAKE_GUC_VER_STRUCT(ver) MAKE_GUC_VER((ver).major, (ver).minor, (ver).patch)
|
||||
#define GUC_SUBMIT_VER(guc) MAKE_VER_STRUCT((guc)->fw.versions.found[XE_UC_FW_VER_COMPATIBILITY])
|
||||
#define GUC_FIRMWARE_VER(guc) MAKE_VER_STRUCT((guc)->fw.versions.found[XE_UC_FW_VER_RELEASE])
|
||||
#define GUC_SUBMIT_VER(guc) \
|
||||
MAKE_GUC_VER_STRUCT((guc)->fw.versions.found[XE_UC_FW_VER_COMPATIBILITY])
|
||||
#define GUC_FIRMWARE_VER(guc) \
|
||||
MAKE_GUC_VER_STRUCT((guc)->fw.versions.found[XE_UC_FW_VER_RELEASE])
|
||||
|
||||
struct drm_printer;
|
||||
|
||||
|
|
|
|||
|
|
@ -182,6 +182,7 @@ static inline u64 get_flat_ccs_offset(struct xe_gt *gt, u64 tile_size)
|
|||
offset = offset_hi << 32; /* HW view bits 39:32 */
|
||||
offset |= offset_lo << 6; /* HW view bits 31:6 */
|
||||
offset *= num_enabled; /* convert to SW view */
|
||||
offset = round_up(offset, SZ_128K); /* SW must round up to nearest 128K */
|
||||
|
||||
/* We don't expect any holes */
|
||||
xe_assert_msg(xe, offset == (xe_mmio_read64_2x32(gt, GSMBASE) - ccs_size),
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user