0002-lockdep-fix-init-map-confusion.patch 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. diff --git a/include/linux/lockdep.h b/include/linux/lockdep.h
  2. index 20b6797..2c25863 100644
  3. --- a/include/linux/lockdep.h
  4. +++ b/include/linux/lockdep.h
  5. @@ -192,7 +192,7 @@ static inline void
  6. lockdep_init_map_waits(struct lockdep_map *lock, const char *name,
  7. struct lock_class_key *key, int subclass, u8 inner, u8 outer)
  8. {
  9. - lockdep_init_map_type(lock, name, key, subclass, inner, LD_WAIT_INV, LD_LOCK_NORMAL);
  10. + lockdep_init_map_type(lock, name, key, subclass, inner, outer, LD_LOCK_NORMAL);
  11. }
  12. static inline void
  13. @@ -215,24 +215,28 @@ static inline void lockdep_init_map(struct lockdep_map *lock, const char *name,
  14. * or they are too narrow (they suffer from a false class-split):
  15. */
  16. #define lockdep_set_class(lock, key) \
  17. - lockdep_init_map_waits(&(lock)->dep_map, #key, key, 0, \
  18. - (lock)->dep_map.wait_type_inner, \
  19. - (lock)->dep_map.wait_type_outer)
  20. + lockdep_init_map_type(&(lock)->dep_map, #key, key, 0, \
  21. + (lock)->dep_map.wait_type_inner, \
  22. + (lock)->dep_map.wait_type_outer, \
  23. + (lock)->dep_map.lock_type)
  24. #define lockdep_set_class_and_name(lock, key, name) \
  25. - lockdep_init_map_waits(&(lock)->dep_map, name, key, 0, \
  26. - (lock)->dep_map.wait_type_inner, \
  27. - (lock)->dep_map.wait_type_outer)
  28. + lockdep_init_map_type(&(lock)->dep_map, name, key, 0, \
  29. + (lock)->dep_map.wait_type_inner, \
  30. + (lock)->dep_map.wait_type_outer, \
  31. + (lock)->dep_map.lock_type)
  32. #define lockdep_set_class_and_subclass(lock, key, sub) \
  33. - lockdep_init_map_waits(&(lock)->dep_map, #key, key, sub,\
  34. - (lock)->dep_map.wait_type_inner, \
  35. - (lock)->dep_map.wait_type_outer)
  36. + lockdep_init_map_type(&(lock)->dep_map, #key, key, sub, \
  37. + (lock)->dep_map.wait_type_inner, \
  38. + (lock)->dep_map.wait_type_outer, \
  39. + (lock)->dep_map.lock_type)
  40. #define lockdep_set_subclass(lock, sub) \
  41. - lockdep_init_map_waits(&(lock)->dep_map, #lock, (lock)->dep_map.key, sub,\
  42. - (lock)->dep_map.wait_type_inner, \
  43. - (lock)->dep_map.wait_type_outer)
  44. + lockdep_init_map_type(&(lock)->dep_map, #lock, (lock)->dep_map.key, sub,\
  45. + (lock)->dep_map.wait_type_inner, \
  46. + (lock)->dep_map.wait_type_outer, \
  47. + (lock)->dep_map.lock_type)
  48. #define lockdep_set_novalidate_class(lock) \
  49. lockdep_set_class_and_name(lock, &__lockdep_no_validate__, #lock)
  50. diff --git a/kernel/locking/lockdep.c b/kernel/locking/lockdep.c
  51. index c3387cdc..6cbd2b4 100644
  52. --- a/kernel/locking/lockdep.c
  53. +++ b/kernel/locking/lockdep.c
  54. @@ -5139,9 +5139,10 @@ __lock_set_class(struct lockdep_map *lock, const char *name,
  55. return 0;
  56. }
  57. - lockdep_init_map_waits(lock, name, key, 0,
  58. - lock->wait_type_inner,
  59. - lock->wait_type_outer);
  60. + lockdep_init_map_type(lock, name, key, 0,
  61. + lock->wait_type_inner,
  62. + lock->wait_type_outer,
  63. + lock->lock_type);
  64. class = register_lock_class(lock, subclass, 0);
  65. hlock->class_idx = class - lock_classes;