diff options
| author | Trond Myklebust <Trond.Myklebust@netapp.com> | 2007-05-17 11:36:59 -0400 |
|---|---|---|
| committer | Trond Myklebust <Trond.Myklebust@netapp.com> | 2007-05-17 11:36:59 -0400 |
| commit | dd504ea16f34a29da4aa933ae7ab917fcfd25fd7 (patch) | |
| tree | 0502645dc159be29c33c992e9e56dc3156074279 /Documentation | |
| parent | 5cf4cf65a8ccca44ec9b357ebdb2b517269d7e8a (diff) | |
| parent | 0479ea0eab197b3e5d4c731f526c02e5e3fbfbd0 (diff) | |
Merge branch 'master' of /home/trondmy/repositories/git/linux-2.6/
Diffstat (limited to 'Documentation')
| -rw-r--r-- | Documentation/DocBook/kernel-locking.tmpl | 123 | ||||
| -rw-r--r-- | Documentation/gpio.txt | 8 | ||||
| -rw-r--r-- | Documentation/vm/slabinfo.c | 17 |
3 files changed, 96 insertions, 52 deletions
diff --git a/Documentation/DocBook/kernel-locking.tmpl b/Documentation/DocBook/kernel-locking.tmpl index 644c3884fab9..0a441f73261a 100644 --- a/Documentation/DocBook/kernel-locking.tmpl +++ b/Documentation/DocBook/kernel-locking.tmpl | |||
| @@ -551,10 +551,12 @@ | |||
| 551 | <function>spin_lock_irqsave()</function>, which is a superset | 551 | <function>spin_lock_irqsave()</function>, which is a superset |
| 552 | of all other spinlock primitives. | 552 | of all other spinlock primitives. |
| 553 | </para> | 553 | </para> |
| 554 | |||
| 554 | <table> | 555 | <table> |
| 555 | <title>Table of Locking Requirements</title> | 556 | <title>Table of Locking Requirements</title> |
| 556 | <tgroup cols="11"> | 557 | <tgroup cols="11"> |
| 557 | <tbody> | 558 | <tbody> |
| 559 | |||
| 558 | <row> | 560 | <row> |
| 559 | <entry></entry> | 561 | <entry></entry> |
| 560 | <entry>IRQ Handler A</entry> | 562 | <entry>IRQ Handler A</entry> |
| @@ -576,97 +578,128 @@ | |||
| 576 | 578 | ||
| 577 | <row> | 579 | <row> |
| 578 | <entry>IRQ Handler B</entry> | 580 | <entry>IRQ Handler B</entry> |
| 579 | <entry>spin_lock_irqsave</entry> | 581 | <entry>SLIS</entry> |
| 580 | <entry>None</entry> | 582 | <entry>None</entry> |
| 581 | </row> | 583 | </row> |
| 582 | 584 | ||
| 583 | <row> | 585 | <row> |
| 584 | <entry>Softirq A</entry> | 586 | <entry>Softirq A</entry> |
| 585 | <entry>spin_lock_irq</entry> | 587 | <entry>SLI</entry> |
| 586 | <entry>spin_lock_irq</entry> | 588 | <entry>SLI</entry> |
| 587 | <entry>spin_lock</entry> | 589 | <entry>SL</entry> |
| 588 | </row> | 590 | </row> |
| 589 | 591 | ||
| 590 | <row> | 592 | <row> |
| 591 | <entry>Softirq B</entry> | 593 | <entry>Softirq B</entry> |
| 592 | <entry>spin_lock_irq</entry> | 594 | <entry>SLI</entry> |
| 593 | <entry>spin_lock_irq</entry> | 595 | <entry>SLI</entry> |
| 594 | <entry>spin_lock</entry> | 596 | <entry>SL</entry> |
| 595 | <entry>spin_lock</entry> | 597 | <entry>SL</entry> |
| 596 | </row> | 598 | </row> |
| 597 | 599 | ||
| 598 | <row> | 600 | <row> |
| 599 | <entry>Tasklet A</entry> | 601 | <entry>Tasklet A</entry> |
| 600 | <entry>spin_lock_irq</entry> | 602 | <entry>SLI</entry> |
| 601 | <entry>spin_lock_irq</entry> | 603 | <entry>SLI</entry> |
| 602 | <entry>spin_lock</entry> | 604 | <entry>SL</entry> |
| 603 | <entry>spin_lock</entry> | 605 | <entry>SL</entry> |
| 604 | <entry>None</entry> | 606 | <entry>None</entry> |
| 605 | </row> | 607 | </row> |
| 606 | 608 | ||
| 607 | <row> | 609 | <row> |
| 608 | <entry>Tasklet B</entry> | 610 | <entry>Tasklet B</entry> |
| 609 | <entry>spin_lock_irq</entry> | 611 | <entry>SLI</entry> |
| 610 | <entry>spin_lock_irq</entry> | 612 | <entry>SLI</entry> |
| 611 | <entry>spin_lock</entry> | 613 | <entry>SL</entry> |
| 612 | <entry>spin_lock</entry> | 614 | <entry>SL</entry> |
| 613 | <entry>spin_lock</entry> | 615 | <entry>SL</entry> |
| 614 | <entry>None</entry> | 616 | <entry>None</entry> |
| 615 | </row> | 617 | </row> |
| 616 | 618 | ||
| 617 | <row> | 619 | <row> |
| 618 | <entry>Timer A</entry> | 620 | <entry>Timer A</entry> |
| 619 | <entry>spin_lock_irq</entry> | 621 | <entry>SLI</entry> |
| 620 | <entry>spin_lock_irq</entry> | 622 | <entry>SLI</entry> |
| 621 | <entry>spin_lock</entry> | 623 | <entry>SL</entry> |
| 622 | <entry>spin_lock</entry> | 624 | <entry>SL</entry> |
| 623 | <entry>spin_lock</entry> | 625 | <entry>SL</entry> |
| 624 | <entry>spin_lock</entry> | 626 | <entry>SL</entry> |
| 625 | <entry>None</entry> | 627 | <entry>None</entry> |
| 626 | </row> | 628 | </row> |
| 627 | 629 | ||
| 628 | <row> | 630 | <row> |
| 629 | <entry>Timer B</entry> | 631 | <entry>Timer B</entry> |
| 630 | <entry>spin_lock_irq</entry> | 632 | <entry>SLI</entry> |
| 631 | <entry>spin_lock_irq</entry> | 633 | <entry>SLI</entry> |
| 632 | <entry>spin_lock</entry> | 634 | <entry>SL</entry> |
| 633 | <entry>spin_lock</entry> | 635 | <entry>SL</entry> |
| 634 | <entry>spin_lock</entry> | 636 | <entry>SL</entry> |
| 635 | <entry>spin_lock</entry> | 637 | <entry>SL</entry> |
| 636 | <entry>spin_lock</entry> | 638 | <entry>SL</entry> |
| 637 | <entry>None</entry> | 639 | <entry>None</entry> |
| 638 | </row> | 640 | </row> |
| 639 | 641 | ||
| 640 | <row> | 642 | <row> |
| 641 | <entry>User Context A</entry> | 643 | <entry>User Context A</entry> |
| 642 | <entry>spin_lock_irq</entry> | 644 | <entry>SLI</entry> |
| 643 | <entry>spin_lock_irq</entry> | 645 | <entry>SLI</entry> |
| 644 | <entry>spin_lock_bh</entry> | 646 | <entry>SLBH</entry> |
| 645 | <entry>spin_lock_bh</entry> | 647 | <entry>SLBH</entry> |
| 646 | <entry>spin_lock_bh</entry> | 648 | <entry>SLBH</entry> |
| 647 | <entry>spin_lock_bh</entry> | 649 | <entry>SLBH</entry> |
| 648 | <entry>spin_lock_bh</entry> | 650 | <entry>SLBH</entry> |
| 649 | <entry>spin_lock_bh</entry> | 651 | <entry>SLBH</entry> |
| 650 | <entry>None</entry> | 652 | <entry>None</entry> |
| 651 | </row> | 653 | </row> |
| 652 | 654 | ||
| 653 | <row> | 655 | <row> |
| 654 | <entry>User Context B</entry> | 656 | <entry>User Context B</entry> |
| 657 | <entry>SLI</entry> | ||
| 658 | <entry>SLI</entry> | ||
| 659 | <entry>SLBH</entry> | ||
| 660 | <entry>SLBH</entry> | ||
| 661 | <entry>SLBH</entry> | ||
| 662 | <entry>SLBH</entry> | ||
| 663 | <entry>SLBH</entry> | ||
| 664 | <entry>SLBH</entry> | ||
| 665 | <entry>DI</entry> | ||
| 666 | <entry>None</entry> | ||
| 667 | </row> | ||
| 668 | |||
| 669 | </tbody> | ||
| 670 | </tgroup> | ||
| 671 | </table> | ||
| 672 | |||
| 673 | <table> | ||
| 674 | <title>Legend for Locking Requirements Table</title> | ||
| 675 | <tgroup cols="2"> | ||
| 676 | <tbody> | ||
| 677 | |||
| 678 | <row> | ||
| 679 | <entry>SLIS</entry> | ||
| 680 | <entry>spin_lock_irqsave</entry> | ||
| 681 | </row> | ||
| 682 | <row> | ||
| 683 | <entry>SLI</entry> | ||
| 655 | <entry>spin_lock_irq</entry> | 684 | <entry>spin_lock_irq</entry> |
| 656 | <entry>spin_lock_irq</entry> | 685 | </row> |
| 657 | <entry>spin_lock_bh</entry> | 686 | <row> |
| 658 | <entry>spin_lock_bh</entry> | 687 | <entry>SL</entry> |
| 659 | <entry>spin_lock_bh</entry> | 688 | <entry>spin_lock</entry> |
| 660 | <entry>spin_lock_bh</entry> | 689 | </row> |
| 661 | <entry>spin_lock_bh</entry> | 690 | <row> |
| 691 | <entry>SLBH</entry> | ||
| 662 | <entry>spin_lock_bh</entry> | 692 | <entry>spin_lock_bh</entry> |
| 693 | </row> | ||
| 694 | <row> | ||
| 695 | <entry>DI</entry> | ||
| 663 | <entry>down_interruptible</entry> | 696 | <entry>down_interruptible</entry> |
| 664 | <entry>None</entry> | ||
| 665 | </row> | 697 | </row> |
| 666 | 698 | ||
| 667 | </tbody> | 699 | </tbody> |
| 668 | </tgroup> | 700 | </tgroup> |
| 669 | </table> | 701 | </table> |
| 702 | |||
| 670 | </sect1> | 703 | </sect1> |
| 671 | </chapter> | 704 | </chapter> |
| 672 | 705 | ||
diff --git a/Documentation/gpio.txt b/Documentation/gpio.txt index e8be0abb346c..36af58eba136 100644 --- a/Documentation/gpio.txt +++ b/Documentation/gpio.txt | |||
| @@ -111,7 +111,9 @@ setting up a platform_device using the GPIO, is mark its direction: | |||
| 111 | 111 | ||
| 112 | The return value is zero for success, else a negative errno. It should | 112 | The return value is zero for success, else a negative errno. It should |
| 113 | be checked, since the get/set calls don't have error returns and since | 113 | be checked, since the get/set calls don't have error returns and since |
| 114 | misconfiguration is possible. (These calls could sleep.) | 114 | misconfiguration is possible. You should normally issue these calls from |
| 115 | a task context. However, for spinlock-safe GPIOs it's OK to use them | ||
| 116 | before tasking is enabled, as part of early board setup. | ||
| 115 | 117 | ||
| 116 | For output GPIOs, the value provided becomes the initial output value. | 118 | For output GPIOs, the value provided becomes the initial output value. |
| 117 | This helps avoid signal glitching during system startup. | 119 | This helps avoid signal glitching during system startup. |
| @@ -197,7 +199,9 @@ However, many platforms don't currently support this mechanism. | |||
| 197 | 199 | ||
| 198 | Passing invalid GPIO numbers to gpio_request() will fail, as will requesting | 200 | Passing invalid GPIO numbers to gpio_request() will fail, as will requesting |
| 199 | GPIOs that have already been claimed with that call. The return value of | 201 | GPIOs that have already been claimed with that call. The return value of |
| 200 | gpio_request() must be checked. (These calls could sleep.) | 202 | gpio_request() must be checked. You should normally issue these calls from |
| 203 | a task context. However, for spinlock-safe GPIOs it's OK to request GPIOs | ||
| 204 | before tasking is enabled, as part of early board setup. | ||
| 201 | 205 | ||
| 202 | These calls serve two basic purposes. One is marking the signals which | 206 | These calls serve two basic purposes. One is marking the signals which |
| 203 | are actually in use as GPIOs, for better diagnostics; systems may have | 207 | are actually in use as GPIOs, for better diagnostics; systems may have |
diff --git a/Documentation/vm/slabinfo.c b/Documentation/vm/slabinfo.c index 686a8e04a4f3..434af27a32ac 100644 --- a/Documentation/vm/slabinfo.c +++ b/Documentation/vm/slabinfo.c | |||
| @@ -242,6 +242,9 @@ void decode_numa_list(int *numa, char *t) | |||
| 242 | 242 | ||
| 243 | memset(numa, 0, MAX_NODES * sizeof(int)); | 243 | memset(numa, 0, MAX_NODES * sizeof(int)); |
| 244 | 244 | ||
| 245 | if (!t) | ||
| 246 | return; | ||
| 247 | |||
| 245 | while (*t == 'N') { | 248 | while (*t == 'N') { |
| 246 | t++; | 249 | t++; |
| 247 | node = strtoul(t, &t, 10); | 250 | node = strtoul(t, &t, 10); |
| @@ -386,7 +389,9 @@ void report(struct slabinfo *s) | |||
| 386 | { | 389 | { |
| 387 | if (strcmp(s->name, "*") == 0) | 390 | if (strcmp(s->name, "*") == 0) |
| 388 | return; | 391 | return; |
| 389 | printf("\nSlabcache: %-20s Aliases: %2d Order : %2d\n", s->name, s->aliases, s->order); | 392 | |
| 393 | printf("\nSlabcache: %-20s Aliases: %2d Order : %2d Objects: %d\n", | ||
| 394 | s->name, s->aliases, s->order, s->objects); | ||
| 390 | if (s->hwcache_align) | 395 | if (s->hwcache_align) |
| 391 | printf("** Hardware cacheline aligned\n"); | 396 | printf("** Hardware cacheline aligned\n"); |
| 392 | if (s->cache_dma) | 397 | if (s->cache_dma) |
| @@ -791,11 +796,11 @@ void totals(void) | |||
| 791 | 796 | ||
| 792 | store_size(b1, total_size);store_size(b2, total_waste); | 797 | store_size(b1, total_size);store_size(b2, total_waste); |
| 793 | store_size(b3, total_waste * 100 / total_used); | 798 | store_size(b3, total_waste * 100 / total_used); |
| 794 | printf("Memory used: %6s # Loss : %6s MRatio: %6s%%\n", b1, b2, b3); | 799 | printf("Memory used: %6s # Loss : %6s MRatio:%6s%%\n", b1, b2, b3); |
| 795 | 800 | ||
| 796 | store_size(b1, total_objects);store_size(b2, total_partobj); | 801 | store_size(b1, total_objects);store_size(b2, total_partobj); |
| 797 | store_size(b3, total_partobj * 100 / total_objects); | 802 | store_size(b3, total_partobj * 100 / total_objects); |
| 798 | printf("# Objects : %6s # PartObj: %6s ORatio: %6s%%\n", b1, b2, b3); | 803 | printf("# Objects : %6s # PartObj: %6s ORatio:%6s%%\n", b1, b2, b3); |
| 799 | 804 | ||
| 800 | printf("\n"); | 805 | printf("\n"); |
| 801 | printf("Per Cache Average Min Max Total\n"); | 806 | printf("Per Cache Average Min Max Total\n"); |
| @@ -818,7 +823,7 @@ void totals(void) | |||
| 818 | store_size(b1, avg_ppart);store_size(b2, min_ppart); | 823 | store_size(b1, avg_ppart);store_size(b2, min_ppart); |
| 819 | store_size(b3, max_ppart); | 824 | store_size(b3, max_ppart); |
| 820 | store_size(b4, total_partial * 100 / total_slabs); | 825 | store_size(b4, total_partial * 100 / total_slabs); |
| 821 | printf("%%PartSlab %10s%% %10s%% %10s%% %10s%%\n", | 826 | printf("%%PartSlab%10s%% %10s%% %10s%% %10s%%\n", |
| 822 | b1, b2, b3, b4); | 827 | b1, b2, b3, b4); |
| 823 | 828 | ||
| 824 | store_size(b1, avg_partobj);store_size(b2, min_partobj); | 829 | store_size(b1, avg_partobj);store_size(b2, min_partobj); |
| @@ -830,7 +835,7 @@ void totals(void) | |||
| 830 | store_size(b1, avg_ppartobj);store_size(b2, min_ppartobj); | 835 | store_size(b1, avg_ppartobj);store_size(b2, min_ppartobj); |
| 831 | store_size(b3, max_ppartobj); | 836 | store_size(b3, max_ppartobj); |
| 832 | store_size(b4, total_partobj * 100 / total_objects); | 837 | store_size(b4, total_partobj * 100 / total_objects); |
| 833 | printf("%% PartObj %10s%% %10s%% %10s%% %10s%%\n", | 838 | printf("%% PartObj%10s%% %10s%% %10s%% %10s%%\n", |
| 834 | b1, b2, b3, b4); | 839 | b1, b2, b3, b4); |
| 835 | 840 | ||
| 836 | store_size(b1, avg_size);store_size(b2, min_size); | 841 | store_size(b1, avg_size);store_size(b2, min_size); |
| @@ -1100,6 +1105,8 @@ void output_slabs(void) | |||
| 1100 | ops(slab); | 1105 | ops(slab); |
| 1101 | else if (show_slab) | 1106 | else if (show_slab) |
| 1102 | slabcache(slab); | 1107 | slabcache(slab); |
| 1108 | else if (show_report) | ||
| 1109 | report(slab); | ||
| 1103 | } | 1110 | } |
| 1104 | } | 1111 | } |
| 1105 | 1112 | ||
