mvp_locking.c 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. // SPDX-License-Identifier: GPL-2.0-only
  2. /*
  3. * Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
  4. */
  5. #include <trace/hooks/dtask.h>
  6. #include "../../locking/mutex.h"
  7. #include "walt.h"
  8. static void android_vh_alter_mutex_list_add(void *unused, struct mutex *lock,
  9. struct mutex_waiter *waiter, struct list_head *list,
  10. bool *already_on_list)
  11. {
  12. struct walt_task_struct *wts_waiter =
  13. (struct walt_task_struct *)current->android_vendor_data1;
  14. struct mutex_waiter *pos = NULL;
  15. struct mutex_waiter *n = NULL;
  16. struct list_head *head = list;
  17. struct walt_task_struct *wts;
  18. if (unlikely(walt_disabled))
  19. return;
  20. if (!lock || !waiter || !list)
  21. return;
  22. if (!is_mvp(wts_waiter))
  23. return;
  24. list_for_each_entry_safe(pos, n, head, list) {
  25. wts = (struct walt_task_struct *)
  26. ((struct task_struct *)(pos->task)->android_vendor_data1);
  27. if (!is_mvp(wts)) {
  28. list_add(&waiter->list, pos->list.prev);
  29. *already_on_list = true;
  30. break;
  31. }
  32. }
  33. }
  34. void walt_mvp_lock_ordering_init(void)
  35. {
  36. register_trace_android_vh_alter_mutex_list_add(android_vh_alter_mutex_list_add, NULL);
  37. }