aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/Kconfig.debug24
-rw-r--r--lib/lru_cache.c23
-rw-r--r--lib/rhashtable.c10
3 files changed, 39 insertions, 18 deletions
diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug
index cb45f59685e6..07c28323f88f 100644
--- a/lib/Kconfig.debug
+++ b/lib/Kconfig.debug
@@ -143,6 +143,30 @@ config DEBUG_INFO_REDUCED
143 DEBUG_INFO build and compile times are reduced too. 143 DEBUG_INFO build and compile times are reduced too.
144 Only works with newer gcc versions. 144 Only works with newer gcc versions.
145 145
146config DEBUG_INFO_SPLIT
147 bool "Produce split debuginfo in .dwo files"
148 depends on DEBUG_INFO
149 help
150 Generate debug info into separate .dwo files. This significantly
151 reduces the build directory size for builds with DEBUG_INFO,
152 because it stores the information only once on disk in .dwo
153 files instead of multiple times in object files and executables.
154 In addition the debug information is also compressed.
155
156 Requires recent gcc (4.7+) and recent gdb/binutils.
157 Any tool that packages or reads debug information would need
158 to know about the .dwo files and include them.
159 Incompatible with older versions of ccache.
160
161config DEBUG_INFO_DWARF4
162 bool "Generate dwarf4 debuginfo"
163 depends on DEBUG_INFO
164 help
165 Generate dwarf4 debug info. This requires recent versions
166 of gcc and gdb. It makes the debug information larger.
167 But it significantly improves the success of resolving
168 variables in gdb on optimized code.
169
146config ENABLE_WARN_DEPRECATED 170config ENABLE_WARN_DEPRECATED
147 bool "Enable __deprecated logic" 171 bool "Enable __deprecated logic"
148 default y 172 default y
diff --git a/lib/lru_cache.c b/lib/lru_cache.c
index 4a83ecd03650..852c81e3ba9a 100644
--- a/lib/lru_cache.c
+++ b/lib/lru_cache.c
@@ -169,7 +169,7 @@ out_fail:
169 return NULL; 169 return NULL;
170} 170}
171 171
172void lc_free_by_index(struct lru_cache *lc, unsigned i) 172static void lc_free_by_index(struct lru_cache *lc, unsigned i)
173{ 173{
174 void *p = lc->lc_element[i]; 174 void *p = lc->lc_element[i];
175 WARN_ON(!p); 175 WARN_ON(!p);
@@ -643,9 +643,10 @@ void lc_set(struct lru_cache *lc, unsigned int enr, int index)
643 * lc_dump - Dump a complete LRU cache to seq in textual form. 643 * lc_dump - Dump a complete LRU cache to seq in textual form.
644 * @lc: the lru cache to operate on 644 * @lc: the lru cache to operate on
645 * @seq: the &struct seq_file pointer to seq_printf into 645 * @seq: the &struct seq_file pointer to seq_printf into
646 * @utext: user supplied "heading" or other info 646 * @utext: user supplied additional "heading" or other info
647 * @detail: function pointer the user may provide to dump further details 647 * @detail: function pointer the user may provide to dump further details
648 * of the object the lc_element is embedded in. 648 * of the object the lc_element is embedded in. May be NULL.
649 * Note: a leading space ' ' and trailing newline '\n' is implied.
649 */ 650 */
650void lc_seq_dump_details(struct seq_file *seq, struct lru_cache *lc, char *utext, 651void lc_seq_dump_details(struct seq_file *seq, struct lru_cache *lc, char *utext,
651 void (*detail) (struct seq_file *, struct lc_element *)) 652 void (*detail) (struct seq_file *, struct lc_element *))
@@ -654,16 +655,18 @@ void lc_seq_dump_details(struct seq_file *seq, struct lru_cache *lc, char *utext
654 struct lc_element *e; 655 struct lc_element *e;
655 int i; 656 int i;
656 657
657 seq_printf(seq, "\tnn: lc_number refcnt %s\n ", utext); 658 seq_printf(seq, "\tnn: lc_number (new nr) refcnt %s\n ", utext);
658 for (i = 0; i < nr_elements; i++) { 659 for (i = 0; i < nr_elements; i++) {
659 e = lc_element_by_index(lc, i); 660 e = lc_element_by_index(lc, i);
660 if (e->lc_number == LC_FREE) { 661 if (e->lc_number != e->lc_new_number)
661 seq_printf(seq, "\t%2d: FREE\n", i); 662 seq_printf(seq, "\t%5d: %6d %8d %6d ",
662 } else { 663 i, e->lc_number, e->lc_new_number, e->refcnt);
663 seq_printf(seq, "\t%2d: %4u %4u ", i, 664 else
664 e->lc_number, e->refcnt); 665 seq_printf(seq, "\t%5d: %6d %-8s %6d ",
666 i, e->lc_number, "-\"-", e->refcnt);
667 if (detail)
665 detail(seq, e); 668 detail(seq, e);
666 } 669 seq_putc(seq, '\n');
667 } 670 }
668} 671}
669 672
diff --git a/lib/rhashtable.c b/lib/rhashtable.c
index e6940cf16628..a2c78810ebc1 100644
--- a/lib/rhashtable.c
+++ b/lib/rhashtable.c
@@ -38,16 +38,10 @@ int lockdep_rht_mutex_is_held(const struct rhashtable *ht)
38EXPORT_SYMBOL_GPL(lockdep_rht_mutex_is_held); 38EXPORT_SYMBOL_GPL(lockdep_rht_mutex_is_held);
39#endif 39#endif
40 40
41/** 41static void *rht_obj(const struct rhashtable *ht, const struct rhash_head *he)
42 * rht_obj - cast hash head to outer object
43 * @ht: hash table
44 * @he: hashed node
45 */
46void *rht_obj(const struct rhashtable *ht, const struct rhash_head *he)
47{ 42{
48 return (void *) he - ht->p.head_offset; 43 return (void *) he - ht->p.head_offset;
49} 44}
50EXPORT_SYMBOL_GPL(rht_obj);
51 45
52static u32 __hashfn(const struct rhashtable *ht, const void *key, 46static u32 __hashfn(const struct rhashtable *ht, const void *key,
53 u32 len, u32 hsize) 47 u32 len, u32 hsize)
@@ -386,7 +380,7 @@ EXPORT_SYMBOL_GPL(rhashtable_insert);
386 * deletion when combined with walking or lookup. 380 * deletion when combined with walking or lookup.
387 */ 381 */
388void rhashtable_remove_pprev(struct rhashtable *ht, struct rhash_head *obj, 382void rhashtable_remove_pprev(struct rhashtable *ht, struct rhash_head *obj,
389 struct rhash_head **pprev, gfp_t flags) 383 struct rhash_head __rcu **pprev, gfp_t flags)
390{ 384{
391 struct bucket_table *tbl = rht_dereference(ht->tbl, ht); 385 struct bucket_table *tbl = rht_dereference(ht->tbl, ht);
392 386