diff options
-rw-r--r-- | kernel/lockdep.c | 38 |
1 files changed, 15 insertions, 23 deletions
diff --git a/kernel/lockdep.c b/kernel/lockdep.c index dc4ea4c2b4c8..1a5ff2211d88 100644 --- a/kernel/lockdep.c +++ b/kernel/lockdep.c | |||
@@ -1574,7 +1574,7 @@ valid_state(struct task_struct *curr, struct held_lock *this, | |||
1574 | * Mark a lock with a usage bit, and validate the state transition: | 1574 | * Mark a lock with a usage bit, and validate the state transition: |
1575 | */ | 1575 | */ |
1576 | static int mark_lock(struct task_struct *curr, struct held_lock *this, | 1576 | static int mark_lock(struct task_struct *curr, struct held_lock *this, |
1577 | enum lock_usage_bit new_bit, unsigned long ip) | 1577 | enum lock_usage_bit new_bit) |
1578 | { | 1578 | { |
1579 | unsigned int new_mask = 1 << new_bit, ret = 1; | 1579 | unsigned int new_mask = 1 << new_bit, ret = 1; |
1580 | 1580 | ||
@@ -1597,14 +1597,6 @@ static int mark_lock(struct task_struct *curr, struct held_lock *this, | |||
1597 | 1597 | ||
1598 | this->class->usage_mask |= new_mask; | 1598 | this->class->usage_mask |= new_mask; |
1599 | 1599 | ||
1600 | #ifdef CONFIG_TRACE_IRQFLAGS | ||
1601 | if (new_bit == LOCK_ENABLED_HARDIRQS || | ||
1602 | new_bit == LOCK_ENABLED_HARDIRQS_READ) | ||
1603 | ip = curr->hardirq_enable_ip; | ||
1604 | else if (new_bit == LOCK_ENABLED_SOFTIRQS || | ||
1605 | new_bit == LOCK_ENABLED_SOFTIRQS_READ) | ||
1606 | ip = curr->softirq_enable_ip; | ||
1607 | #endif | ||
1608 | if (!save_trace(this->class->usage_traces + new_bit)) | 1600 | if (!save_trace(this->class->usage_traces + new_bit)) |
1609 | return 0; | 1601 | return 0; |
1610 | 1602 | ||
@@ -1803,7 +1795,7 @@ static int mark_lock(struct task_struct *curr, struct held_lock *this, | |||
1803 | * Mark all held locks with a usage bit: | 1795 | * Mark all held locks with a usage bit: |
1804 | */ | 1796 | */ |
1805 | static int | 1797 | static int |
1806 | mark_held_locks(struct task_struct *curr, int hardirq, unsigned long ip) | 1798 | mark_held_locks(struct task_struct *curr, int hardirq) |
1807 | { | 1799 | { |
1808 | enum lock_usage_bit usage_bit; | 1800 | enum lock_usage_bit usage_bit; |
1809 | struct held_lock *hlock; | 1801 | struct held_lock *hlock; |
@@ -1823,7 +1815,7 @@ mark_held_locks(struct task_struct *curr, int hardirq, unsigned long ip) | |||
1823 | else | 1815 | else |
1824 | usage_bit = LOCK_ENABLED_SOFTIRQS; | 1816 | usage_bit = LOCK_ENABLED_SOFTIRQS; |
1825 | } | 1817 | } |
1826 | if (!mark_lock(curr, hlock, usage_bit, ip)) | 1818 | if (!mark_lock(curr, hlock, usage_bit)) |
1827 | return 0; | 1819 | return 0; |
1828 | } | 1820 | } |
1829 | 1821 | ||
@@ -1876,7 +1868,7 @@ void trace_hardirqs_on(void) | |||
1876 | * We are going to turn hardirqs on, so set the | 1868 | * We are going to turn hardirqs on, so set the |
1877 | * usage bit for all held locks: | 1869 | * usage bit for all held locks: |
1878 | */ | 1870 | */ |
1879 | if (!mark_held_locks(curr, 1, ip)) | 1871 | if (!mark_held_locks(curr, 1)) |
1880 | return; | 1872 | return; |
1881 | /* | 1873 | /* |
1882 | * If we have softirqs enabled, then set the usage | 1874 | * If we have softirqs enabled, then set the usage |
@@ -1884,7 +1876,7 @@ void trace_hardirqs_on(void) | |||
1884 | * this bit from being set before) | 1876 | * this bit from being set before) |
1885 | */ | 1877 | */ |
1886 | if (curr->softirqs_enabled) | 1878 | if (curr->softirqs_enabled) |
1887 | if (!mark_held_locks(curr, 0, ip)) | 1879 | if (!mark_held_locks(curr, 0)) |
1888 | return; | 1880 | return; |
1889 | 1881 | ||
1890 | curr->hardirq_enable_ip = ip; | 1882 | curr->hardirq_enable_ip = ip; |
@@ -1952,7 +1944,7 @@ void trace_softirqs_on(unsigned long ip) | |||
1952 | * enabled too: | 1944 | * enabled too: |
1953 | */ | 1945 | */ |
1954 | if (curr->hardirqs_enabled) | 1946 | if (curr->hardirqs_enabled) |
1955 | mark_held_locks(curr, 0, ip); | 1947 | mark_held_locks(curr, 0); |
1956 | } | 1948 | } |
1957 | 1949 | ||
1958 | /* | 1950 | /* |
@@ -2090,43 +2082,43 @@ static int __lock_acquire(struct lockdep_map *lock, unsigned int subclass, | |||
2090 | if (read) { | 2082 | if (read) { |
2091 | if (curr->hardirq_context) | 2083 | if (curr->hardirq_context) |
2092 | if (!mark_lock(curr, hlock, | 2084 | if (!mark_lock(curr, hlock, |
2093 | LOCK_USED_IN_HARDIRQ_READ, ip)) | 2085 | LOCK_USED_IN_HARDIRQ_READ)) |
2094 | return 0; | 2086 | return 0; |
2095 | if (curr->softirq_context) | 2087 | if (curr->softirq_context) |
2096 | if (!mark_lock(curr, hlock, | 2088 | if (!mark_lock(curr, hlock, |
2097 | LOCK_USED_IN_SOFTIRQ_READ, ip)) | 2089 | LOCK_USED_IN_SOFTIRQ_READ)) |
2098 | return 0; | 2090 | return 0; |
2099 | } else { | 2091 | } else { |
2100 | if (curr->hardirq_context) | 2092 | if (curr->hardirq_context) |
2101 | if (!mark_lock(curr, hlock, LOCK_USED_IN_HARDIRQ, ip)) | 2093 | if (!mark_lock(curr, hlock, LOCK_USED_IN_HARDIRQ)) |
2102 | return 0; | 2094 | return 0; |
2103 | if (curr->softirq_context) | 2095 | if (curr->softirq_context) |
2104 | if (!mark_lock(curr, hlock, LOCK_USED_IN_SOFTIRQ, ip)) | 2096 | if (!mark_lock(curr, hlock, LOCK_USED_IN_SOFTIRQ)) |
2105 | return 0; | 2097 | return 0; |
2106 | } | 2098 | } |
2107 | } | 2099 | } |
2108 | if (!hardirqs_off) { | 2100 | if (!hardirqs_off) { |
2109 | if (read) { | 2101 | if (read) { |
2110 | if (!mark_lock(curr, hlock, | 2102 | if (!mark_lock(curr, hlock, |
2111 | LOCK_ENABLED_HARDIRQS_READ, ip)) | 2103 | LOCK_ENABLED_HARDIRQS_READ)) |
2112 | return 0; | 2104 | return 0; |
2113 | if (curr->softirqs_enabled) | 2105 | if (curr->softirqs_enabled) |
2114 | if (!mark_lock(curr, hlock, | 2106 | if (!mark_lock(curr, hlock, |
2115 | LOCK_ENABLED_SOFTIRQS_READ, ip)) | 2107 | LOCK_ENABLED_SOFTIRQS_READ)) |
2116 | return 0; | 2108 | return 0; |
2117 | } else { | 2109 | } else { |
2118 | if (!mark_lock(curr, hlock, | 2110 | if (!mark_lock(curr, hlock, |
2119 | LOCK_ENABLED_HARDIRQS, ip)) | 2111 | LOCK_ENABLED_HARDIRQS)) |
2120 | return 0; | 2112 | return 0; |
2121 | if (curr->softirqs_enabled) | 2113 | if (curr->softirqs_enabled) |
2122 | if (!mark_lock(curr, hlock, | 2114 | if (!mark_lock(curr, hlock, |
2123 | LOCK_ENABLED_SOFTIRQS, ip)) | 2115 | LOCK_ENABLED_SOFTIRQS)) |
2124 | return 0; | 2116 | return 0; |
2125 | } | 2117 | } |
2126 | } | 2118 | } |
2127 | #endif | 2119 | #endif |
2128 | /* mark it as used: */ | 2120 | /* mark it as used: */ |
2129 | if (!mark_lock(curr, hlock, LOCK_USED, ip)) | 2121 | if (!mark_lock(curr, hlock, LOCK_USED)) |
2130 | return 0; | 2122 | return 0; |
2131 | out_calc_hash: | 2123 | out_calc_hash: |
2132 | /* | 2124 | /* |