diff options
author | Jeff Garzik <jgarzik@pobox.com> | 2005-10-28 12:17:52 -0400 |
---|---|---|
committer | Jeff Garzik <jgarzik@pobox.com> | 2005-10-28 12:17:52 -0400 |
commit | 90890687859ea658759e653c4e70ed7e9e1a6217 (patch) | |
tree | 9065b30bb189e16ef99b8b5a0d444558f8dc579f /Documentation | |
parent | 2995bfb7855aabd493f840af361f3dd7d221caea (diff) | |
parent | 5fadd053d9bb4345ec6f405d24db4e7eb49cf81e (diff) |
Merge branch 'master'
Diffstat (limited to 'Documentation')
-rw-r--r-- | Documentation/Changes | 10 | ||||
-rw-r--r-- | Documentation/DocBook/libata.tmpl | 1072 | ||||
-rw-r--r-- | Documentation/SubmittingPatches | 86 | ||||
-rw-r--r-- | Documentation/block/biodoc.txt | 113 | ||||
-rw-r--r-- | Documentation/connector/connector.txt | 44 | ||||
-rw-r--r-- | Documentation/dell_rbu.txt | 38 | ||||
-rw-r--r-- | Documentation/device-mapper/snapshot.txt | 73 | ||||
-rw-r--r-- | Documentation/kernel-parameters.txt | 496 | ||||
-rw-r--r-- | Documentation/keys-request-key.txt | 161 | ||||
-rw-r--r-- | Documentation/keys.txt | 92 | ||||
-rw-r--r-- | Documentation/networking/bonding.txt | 5 | ||||
-rw-r--r-- | Documentation/networking/ip-sysctl.txt | 10 | ||||
-rw-r--r-- | Documentation/sparse.txt | 4 | ||||
-rw-r--r-- | Documentation/usb/URB.txt | 74 |
14 files changed, 1894 insertions, 384 deletions
diff --git a/Documentation/Changes b/Documentation/Changes index 5eaab0441d76..27232be26e1a 100644 --- a/Documentation/Changes +++ b/Documentation/Changes | |||
@@ -237,6 +237,12 @@ udev | |||
237 | udev is a userspace application for populating /dev dynamically with | 237 | udev is a userspace application for populating /dev dynamically with |
238 | only entries for devices actually present. udev replaces devfs. | 238 | only entries for devices actually present. udev replaces devfs. |
239 | 239 | ||
240 | FUSE | ||
241 | ---- | ||
242 | |||
243 | Needs libfuse 2.4.0 or later. Absolute minimum is 2.3.0 but mount | ||
244 | options 'direct_io' and 'kernel_cache' won't work. | ||
245 | |||
240 | Networking | 246 | Networking |
241 | ========== | 247 | ========== |
242 | 248 | ||
@@ -390,6 +396,10 @@ udev | |||
390 | ---- | 396 | ---- |
391 | o <http://www.kernel.org/pub/linux/utils/kernel/hotplug/udev.html> | 397 | o <http://www.kernel.org/pub/linux/utils/kernel/hotplug/udev.html> |
392 | 398 | ||
399 | FUSE | ||
400 | ---- | ||
401 | o <http://sourceforge.net/projects/fuse> | ||
402 | |||
393 | Networking | 403 | Networking |
394 | ********** | 404 | ********** |
395 | 405 | ||
diff --git a/Documentation/DocBook/libata.tmpl b/Documentation/DocBook/libata.tmpl index 375ae760dc1e..d260d92089ad 100644 --- a/Documentation/DocBook/libata.tmpl +++ b/Documentation/DocBook/libata.tmpl | |||
@@ -415,6 +415,362 @@ and other resources, etc. | |||
415 | </sect1> | 415 | </sect1> |
416 | </chapter> | 416 | </chapter> |
417 | 417 | ||
418 | <chapter id="libataEH"> | ||
419 | <title>Error handling</title> | ||
420 | |||
421 | <para> | ||
422 | This chapter describes how errors are handled under libata. | ||
423 | Readers are advised to read SCSI EH | ||
424 | (Documentation/scsi/scsi_eh.txt) and ATA exceptions doc first. | ||
425 | </para> | ||
426 | |||
427 | <sect1><title>Origins of commands</title> | ||
428 | <para> | ||
429 | In libata, a command is represented with struct ata_queued_cmd | ||
430 | or qc. qc's are preallocated during port initialization and | ||
431 | repetitively used for command executions. Currently only one | ||
432 | qc is allocated per port but yet-to-be-merged NCQ branch | ||
433 | allocates one for each tag and maps each qc to NCQ tag 1-to-1. | ||
434 | </para> | ||
435 | <para> | ||
436 | libata commands can originate from two sources - libata itself | ||
437 | and SCSI midlayer. libata internal commands are used for | ||
438 | initialization and error handling. All normal blk requests | ||
439 | and commands for SCSI emulation are passed as SCSI commands | ||
440 | through queuecommand callback of SCSI host template. | ||
441 | </para> | ||
442 | </sect1> | ||
443 | |||
444 | <sect1><title>How commands are issued</title> | ||
445 | |||
446 | <variablelist> | ||
447 | |||
448 | <varlistentry><term>Internal commands</term> | ||
449 | <listitem> | ||
450 | <para> | ||
451 | First, qc is allocated and initialized using | ||
452 | ata_qc_new_init(). Although ata_qc_new_init() doesn't | ||
453 | implement any wait or retry mechanism when qc is not | ||
454 | available, internal commands are currently issued only during | ||
455 | initialization and error recovery, so no other command is | ||
456 | active and allocation is guaranteed to succeed. | ||
457 | </para> | ||
458 | <para> | ||
459 | Once allocated qc's taskfile is initialized for the command to | ||
460 | be executed. qc currently has two mechanisms to notify | ||
461 | completion. One is via qc->complete_fn() callback and the | ||
462 | other is completion qc->waiting. qc->complete_fn() callback | ||
463 | is the asynchronous path used by normal SCSI translated | ||
464 | commands and qc->waiting is the synchronous (issuer sleeps in | ||
465 | process context) path used by internal commands. | ||
466 | </para> | ||
467 | <para> | ||
468 | Once initialization is complete, host_set lock is acquired | ||
469 | and the qc is issued. | ||
470 | </para> | ||
471 | </listitem> | ||
472 | </varlistentry> | ||
473 | |||
474 | <varlistentry><term>SCSI commands</term> | ||
475 | <listitem> | ||
476 | <para> | ||
477 | All libata drivers use ata_scsi_queuecmd() as | ||
478 | hostt->queuecommand callback. scmds can either be simulated | ||
479 | or translated. No qc is involved in processing a simulated | ||
480 | scmd. The result is computed right away and the scmd is | ||
481 | completed. | ||
482 | </para> | ||
483 | <para> | ||
484 | For a translated scmd, ata_qc_new_init() is invoked to | ||
485 | allocate a qc and the scmd is translated into the qc. SCSI | ||
486 | midlayer's completion notification function pointer is stored | ||
487 | into qc->scsidone. | ||
488 | </para> | ||
489 | <para> | ||
490 | qc->complete_fn() callback is used for completion | ||
491 | notification. ATA commands use ata_scsi_qc_complete() while | ||
492 | ATAPI commands use atapi_qc_complete(). Both functions end up | ||
493 | calling qc->scsidone to notify upper layer when the qc is | ||
494 | finished. After translation is completed, the qc is issued | ||
495 | with ata_qc_issue(). | ||
496 | </para> | ||
497 | <para> | ||
498 | Note that SCSI midlayer invokes hostt->queuecommand while | ||
499 | holding host_set lock, so all above occur while holding | ||
500 | host_set lock. | ||
501 | </para> | ||
502 | </listitem> | ||
503 | </varlistentry> | ||
504 | |||
505 | </variablelist> | ||
506 | </sect1> | ||
507 | |||
508 | <sect1><title>How commands are processed</title> | ||
509 | <para> | ||
510 | Depending on which protocol and which controller are used, | ||
511 | commands are processed differently. For the purpose of | ||
512 | discussion, a controller which uses taskfile interface and all | ||
513 | standard callbacks is assumed. | ||
514 | </para> | ||
515 | <para> | ||
516 | Currently 6 ATA command protocols are used. They can be | ||
517 | sorted into the following four categories according to how | ||
518 | they are processed. | ||
519 | </para> | ||
520 | |||
521 | <variablelist> | ||
522 | <varlistentry><term>ATA NO DATA or DMA</term> | ||
523 | <listitem> | ||
524 | <para> | ||
525 | ATA_PROT_NODATA and ATA_PROT_DMA fall into this category. | ||
526 | These types of commands don't require any software | ||
527 | intervention once issued. Device will raise interrupt on | ||
528 | completion. | ||
529 | </para> | ||
530 | </listitem> | ||
531 | </varlistentry> | ||
532 | |||
533 | <varlistentry><term>ATA PIO</term> | ||
534 | <listitem> | ||
535 | <para> | ||
536 | ATA_PROT_PIO is in this category. libata currently | ||
537 | implements PIO with polling. ATA_NIEN bit is set to turn | ||
538 | off interrupt and pio_task on ata_wq performs polling and | ||
539 | IO. | ||
540 | </para> | ||
541 | </listitem> | ||
542 | </varlistentry> | ||
543 | |||
544 | <varlistentry><term>ATAPI NODATA or DMA</term> | ||
545 | <listitem> | ||
546 | <para> | ||
547 | ATA_PROT_ATAPI_NODATA and ATA_PROT_ATAPI_DMA are in this | ||
548 | category. packet_task is used to poll BSY bit after | ||
549 | issuing PACKET command. Once BSY is turned off by the | ||
550 | device, packet_task transfers CDB and hands off processing | ||
551 | to interrupt handler. | ||
552 | </para> | ||
553 | </listitem> | ||
554 | </varlistentry> | ||
555 | |||
556 | <varlistentry><term>ATAPI PIO</term> | ||
557 | <listitem> | ||
558 | <para> | ||
559 | ATA_PROT_ATAPI is in this category. ATA_NIEN bit is set | ||
560 | and, as in ATAPI NODATA or DMA, packet_task submits cdb. | ||
561 | However, after submitting cdb, further processing (data | ||
562 | transfer) is handed off to pio_task. | ||
563 | </para> | ||
564 | </listitem> | ||
565 | </varlistentry> | ||
566 | </variablelist> | ||
567 | </sect1> | ||
568 | |||
569 | <sect1><title>How commands are completed</title> | ||
570 | <para> | ||
571 | Once issued, all qc's are either completed with | ||
572 | ata_qc_complete() or time out. For commands which are handled | ||
573 | by interrupts, ata_host_intr() invokes ata_qc_complete(), and, | ||
574 | for PIO tasks, pio_task invokes ata_qc_complete(). In error | ||
575 | cases, packet_task may also complete commands. | ||
576 | </para> | ||
577 | <para> | ||
578 | ata_qc_complete() does the following. | ||
579 | </para> | ||
580 | |||
581 | <orderedlist> | ||
582 | |||
583 | <listitem> | ||
584 | <para> | ||
585 | DMA memory is unmapped. | ||
586 | </para> | ||
587 | </listitem> | ||
588 | |||
589 | <listitem> | ||
590 | <para> | ||
591 | ATA_QCFLAG_ACTIVE is clared from qc->flags. | ||
592 | </para> | ||
593 | </listitem> | ||
594 | |||
595 | <listitem> | ||
596 | <para> | ||
597 | qc->complete_fn() callback is invoked. If the return value of | ||
598 | the callback is not zero. Completion is short circuited and | ||
599 | ata_qc_complete() returns. | ||
600 | </para> | ||
601 | </listitem> | ||
602 | |||
603 | <listitem> | ||
604 | <para> | ||
605 | __ata_qc_complete() is called, which does | ||
606 | <orderedlist> | ||
607 | |||
608 | <listitem> | ||
609 | <para> | ||
610 | qc->flags is cleared to zero. | ||
611 | </para> | ||
612 | </listitem> | ||
613 | |||
614 | <listitem> | ||
615 | <para> | ||
616 | ap->active_tag and qc->tag are poisoned. | ||
617 | </para> | ||
618 | </listitem> | ||
619 | |||
620 | <listitem> | ||
621 | <para> | ||
622 | qc->waiting is claread & completed (in that order). | ||
623 | </para> | ||
624 | </listitem> | ||
625 | |||
626 | <listitem> | ||
627 | <para> | ||
628 | qc is deallocated by clearing appropriate bit in ap->qactive. | ||
629 | </para> | ||
630 | </listitem> | ||
631 | |||
632 | </orderedlist> | ||
633 | </para> | ||
634 | </listitem> | ||
635 | |||
636 | </orderedlist> | ||
637 | |||
638 | <para> | ||
639 | So, it basically notifies upper layer and deallocates qc. One | ||
640 | exception is short-circuit path in #3 which is used by | ||
641 | atapi_qc_complete(). | ||
642 | </para> | ||
643 | <para> | ||
644 | For all non-ATAPI commands, whether it fails or not, almost | ||
645 | the same code path is taken and very little error handling | ||
646 | takes place. A qc is completed with success status if it | ||
647 | succeeded, with failed status otherwise. | ||
648 | </para> | ||
649 | <para> | ||
650 | However, failed ATAPI commands require more handling as | ||
651 | REQUEST SENSE is needed to acquire sense data. If an ATAPI | ||
652 | command fails, ata_qc_complete() is invoked with error status, | ||
653 | which in turn invokes atapi_qc_complete() via | ||
654 | qc->complete_fn() callback. | ||
655 | </para> | ||
656 | <para> | ||
657 | This makes atapi_qc_complete() set scmd->result to | ||
658 | SAM_STAT_CHECK_CONDITION, complete the scmd and return 1. As | ||
659 | the sense data is empty but scmd->result is CHECK CONDITION, | ||
660 | SCSI midlayer will invoke EH for the scmd, and returning 1 | ||
661 | makes ata_qc_complete() to return without deallocating the qc. | ||
662 | This leads us to ata_scsi_error() with partially completed qc. | ||
663 | </para> | ||
664 | |||
665 | </sect1> | ||
666 | |||
667 | <sect1><title>ata_scsi_error()</title> | ||
668 | <para> | ||
669 | ata_scsi_error() is the current hostt->eh_strategy_handler() | ||
670 | for libata. As discussed above, this will be entered in two | ||
671 | cases - timeout and ATAPI error completion. This function | ||
672 | calls low level libata driver's eng_timeout() callback, the | ||
673 | standard callback for which is ata_eng_timeout(). It checks | ||
674 | if a qc is active and calls ata_qc_timeout() on the qc if so. | ||
675 | Actual error handling occurs in ata_qc_timeout(). | ||
676 | </para> | ||
677 | <para> | ||
678 | If EH is invoked for timeout, ata_qc_timeout() stops BMDMA and | ||
679 | completes the qc. Note that as we're currently in EH, we | ||
680 | cannot call scsi_done. As described in SCSI EH doc, a | ||
681 | recovered scmd should be either retried with | ||
682 | scsi_queue_insert() or finished with scsi_finish_command(). | ||
683 | Here, we override qc->scsidone with scsi_finish_command() and | ||
684 | calls ata_qc_complete(). | ||
685 | </para> | ||
686 | <para> | ||
687 | If EH is invoked due to a failed ATAPI qc, the qc here is | ||
688 | completed but not deallocated. The purpose of this | ||
689 | half-completion is to use the qc as place holder to make EH | ||
690 | code reach this place. This is a bit hackish, but it works. | ||
691 | </para> | ||
692 | <para> | ||
693 | Once control reaches here, the qc is deallocated by invoking | ||
694 | __ata_qc_complete() explicitly. Then, internal qc for REQUEST | ||
695 | SENSE is issued. Once sense data is acquired, scmd is | ||
696 | finished by directly invoking scsi_finish_command() on the | ||
697 | scmd. Note that as we already have completed and deallocated | ||
698 | the qc which was associated with the scmd, we don't need | ||
699 | to/cannot call ata_qc_complete() again. | ||
700 | </para> | ||
701 | |||
702 | </sect1> | ||
703 | |||
704 | <sect1><title>Problems with the current EH</title> | ||
705 | |||
706 | <itemizedlist> | ||
707 | |||
708 | <listitem> | ||
709 | <para> | ||
710 | Error representation is too crude. Currently any and all | ||
711 | error conditions are represented with ATA STATUS and ERROR | ||
712 | registers. Errors which aren't ATA device errors are treated | ||
713 | as ATA device errors by setting ATA_ERR bit. Better error | ||
714 | descriptor which can properly represent ATA and other | ||
715 | errors/exceptions is needed. | ||
716 | </para> | ||
717 | </listitem> | ||
718 | |||
719 | <listitem> | ||
720 | <para> | ||
721 | When handling timeouts, no action is taken to make device | ||
722 | forget about the timed out command and ready for new commands. | ||
723 | </para> | ||
724 | </listitem> | ||
725 | |||
726 | <listitem> | ||
727 | <para> | ||
728 | EH handling via ata_scsi_error() is not properly protected | ||
729 | from usual command processing. On EH entrance, the device is | ||
730 | not in quiescent state. Timed out commands may succeed or | ||
731 | fail any time. pio_task and atapi_task may still be running. | ||
732 | </para> | ||
733 | </listitem> | ||
734 | |||
735 | <listitem> | ||
736 | <para> | ||
737 | Too weak error recovery. Devices / controllers causing HSM | ||
738 | mismatch errors and other errors quite often require reset to | ||
739 | return to known state. Also, advanced error handling is | ||
740 | necessary to support features like NCQ and hotplug. | ||
741 | </para> | ||
742 | </listitem> | ||
743 | |||
744 | <listitem> | ||
745 | <para> | ||
746 | ATA errors are directly handled in the interrupt handler and | ||
747 | PIO errors in pio_task. This is problematic for advanced | ||
748 | error handling for the following reasons. | ||
749 | </para> | ||
750 | <para> | ||
751 | First, advanced error handling often requires context and | ||
752 | internal qc execution. | ||
753 | </para> | ||
754 | <para> | ||
755 | Second, even a simple failure (say, CRC error) needs | ||
756 | information gathering and could trigger complex error handling | ||
757 | (say, resetting & reconfiguring). Having multiple code | ||
758 | paths to gather information, enter EH and trigger actions | ||
759 | makes life painful. | ||
760 | </para> | ||
761 | <para> | ||
762 | Third, scattered EH code makes implementing low level drivers | ||
763 | difficult. Low level drivers override libata callbacks. If | ||
764 | EH is scattered over several places, each affected callbacks | ||
765 | should perform its part of error handling. This can be error | ||
766 | prone and painful. | ||
767 | </para> | ||
768 | </listitem> | ||
769 | |||
770 | </itemizedlist> | ||
771 | </sect1> | ||
772 | </chapter> | ||
773 | |||
418 | <chapter id="libataExt"> | 774 | <chapter id="libataExt"> |
419 | <title>libata Library</title> | 775 | <title>libata Library</title> |
420 | !Edrivers/scsi/libata-core.c | 776 | !Edrivers/scsi/libata-core.c |
@@ -431,6 +787,722 @@ and other resources, etc. | |||
431 | !Idrivers/scsi/libata-scsi.c | 787 | !Idrivers/scsi/libata-scsi.c |
432 | </chapter> | 788 | </chapter> |
433 | 789 | ||
790 | <chapter id="ataExceptions"> | ||
791 | <title>ATA errors & exceptions</title> | ||
792 | |||
793 | <para> | ||
794 | This chapter tries to identify what error/exception conditions exist | ||
795 | for ATA/ATAPI devices and describe how they should be handled in | ||
796 | implementation-neutral way. | ||
797 | </para> | ||
798 | |||
799 | <para> | ||
800 | The term 'error' is used to describe conditions where either an | ||
801 | explicit error condition is reported from device or a command has | ||
802 | timed out. | ||
803 | </para> | ||
804 | |||
805 | <para> | ||
806 | The term 'exception' is either used to describe exceptional | ||
807 | conditions which are not errors (say, power or hotplug events), or | ||
808 | to describe both errors and non-error exceptional conditions. Where | ||
809 | explicit distinction between error and exception is necessary, the | ||
810 | term 'non-error exception' is used. | ||
811 | </para> | ||
812 | |||
813 | <sect1 id="excat"> | ||
814 | <title>Exception categories</title> | ||
815 | <para> | ||
816 | Exceptions are described primarily with respect to legacy | ||
817 | taskfile + bus master IDE interface. If a controller provides | ||
818 | other better mechanism for error reporting, mapping those into | ||
819 | categories described below shouldn't be difficult. | ||
820 | </para> | ||
821 | |||
822 | <para> | ||
823 | In the following sections, two recovery actions - reset and | ||
824 | reconfiguring transport - are mentioned. These are described | ||
825 | further in <xref linkend="exrec"/>. | ||
826 | </para> | ||
827 | |||
828 | <sect2 id="excatHSMviolation"> | ||
829 | <title>HSM violation</title> | ||
830 | <para> | ||
831 | This error is indicated when STATUS value doesn't match HSM | ||
832 | requirement during issuing or excution any ATA/ATAPI command. | ||
833 | </para> | ||
834 | |||
835 | <itemizedlist> | ||
836 | <title>Examples</title> | ||
837 | |||
838 | <listitem> | ||
839 | <para> | ||
840 | ATA_STATUS doesn't contain !BSY && DRDY && !DRQ while trying | ||
841 | to issue a command. | ||
842 | </para> | ||
843 | </listitem> | ||
844 | |||
845 | <listitem> | ||
846 | <para> | ||
847 | !BSY && !DRQ during PIO data transfer. | ||
848 | </para> | ||
849 | </listitem> | ||
850 | |||
851 | <listitem> | ||
852 | <para> | ||
853 | DRQ on command completion. | ||
854 | </para> | ||
855 | </listitem> | ||
856 | |||
857 | <listitem> | ||
858 | <para> | ||
859 | !BSY && ERR after CDB tranfer starts but before the | ||
860 | last byte of CDB is transferred. ATA/ATAPI standard states | ||
861 | that "The device shall not terminate the PACKET command | ||
862 | with an error before the last byte of the command packet has | ||
863 | been written" in the error outputs description of PACKET | ||
864 | command and the state diagram doesn't include such | ||
865 | transitions. | ||
866 | </para> | ||
867 | </listitem> | ||
868 | |||
869 | </itemizedlist> | ||
870 | |||
871 | <para> | ||
872 | In these cases, HSM is violated and not much information | ||
873 | regarding the error can be acquired from STATUS or ERROR | ||
874 | register. IOW, this error can be anything - driver bug, | ||
875 | faulty device, controller and/or cable. | ||
876 | </para> | ||
877 | |||
878 | <para> | ||
879 | As HSM is violated, reset is necessary to restore known state. | ||
880 | Reconfiguring transport for lower speed might be helpful too | ||
881 | as transmission errors sometimes cause this kind of errors. | ||
882 | </para> | ||
883 | </sect2> | ||
884 | |||
885 | <sect2 id="excatDevErr"> | ||
886 | <title>ATA/ATAPI device error (non-NCQ / non-CHECK CONDITION)</title> | ||
887 | |||
888 | <para> | ||
889 | These are errors detected and reported by ATA/ATAPI devices | ||
890 | indicating device problems. For this type of errors, STATUS | ||
891 | and ERROR register values are valid and describe error | ||
892 | condition. Note that some of ATA bus errors are detected by | ||
893 | ATA/ATAPI devices and reported using the same mechanism as | ||
894 | device errors. Those cases are described later in this | ||
895 | section. | ||
896 | </para> | ||
897 | |||
898 | <para> | ||
899 | For ATA commands, this type of errors are indicated by !BSY | ||
900 | && ERR during command execution and on completion. | ||
901 | </para> | ||
902 | |||
903 | <para>For ATAPI commands,</para> | ||
904 | |||
905 | <itemizedlist> | ||
906 | |||
907 | <listitem> | ||
908 | <para> | ||
909 | !BSY && ERR && ABRT right after issuing PACKET | ||
910 | indicates that PACKET command is not supported and falls in | ||
911 | this category. | ||
912 | </para> | ||
913 | </listitem> | ||
914 | |||
915 | <listitem> | ||
916 | <para> | ||
917 | !BSY && ERR(==CHK) && !ABRT after the last | ||
918 | byte of CDB is transferred indicates CHECK CONDITION and | ||
919 | doesn't fall in this category. | ||
920 | </para> | ||
921 | </listitem> | ||
922 | |||
923 | <listitem> | ||
924 | <para> | ||
925 | !BSY && ERR(==CHK) && ABRT after the last byte | ||
926 | of CDB is transferred *probably* indicates CHECK CONDITION and | ||
927 | doesn't fall in this category. | ||
928 | </para> | ||
929 | </listitem> | ||
930 | |||
931 | </itemizedlist> | ||
932 | |||
933 | <para> | ||
934 | Of errors detected as above, the followings are not ATA/ATAPI | ||
935 | device errors but ATA bus errors and should be handled | ||
936 | according to <xref linkend="excatATAbusErr"/>. | ||
937 | </para> | ||
938 | |||
939 | <variablelist> | ||
940 | |||
941 | <varlistentry> | ||
942 | <term>CRC error during data transfer</term> | ||
943 | <listitem> | ||
944 | <para> | ||
945 | This is indicated by ICRC bit in the ERROR register and | ||
946 | means that corruption occurred during data transfer. Upto | ||
947 | ATA/ATAPI-7, the standard specifies that this bit is only | ||
948 | applicable to UDMA transfers but ATA/ATAPI-8 draft revision | ||
949 | 1f says that the bit may be applicable to multiword DMA and | ||
950 | PIO. | ||
951 | </para> | ||
952 | </listitem> | ||
953 | </varlistentry> | ||
954 | |||
955 | <varlistentry> | ||
956 | <term>ABRT error during data transfer or on completion</term> | ||
957 | <listitem> | ||
958 | <para> | ||
959 | Upto ATA/ATAPI-7, the standard specifies that ABRT could be | ||
960 | set on ICRC errors and on cases where a device is not able | ||
961 | to complete a command. Combined with the fact that MWDMA | ||
962 | and PIO transfer errors aren't allowed to use ICRC bit upto | ||
963 | ATA/ATAPI-7, it seems to imply that ABRT bit alone could | ||
964 | indicate tranfer errors. | ||
965 | </para> | ||
966 | <para> | ||
967 | However, ATA/ATAPI-8 draft revision 1f removes the part | ||
968 | that ICRC errors can turn on ABRT. So, this is kind of | ||
969 | gray area. Some heuristics are needed here. | ||
970 | </para> | ||
971 | </listitem> | ||
972 | </varlistentry> | ||
973 | |||
974 | </variablelist> | ||
975 | |||
976 | <para> | ||
977 | ATA/ATAPI device errors can be further categorized as follows. | ||
978 | </para> | ||
979 | |||
980 | <variablelist> | ||
981 | |||
982 | <varlistentry> | ||
983 | <term>Media errors</term> | ||
984 | <listitem> | ||
985 | <para> | ||
986 | This is indicated by UNC bit in the ERROR register. ATA | ||
987 | devices reports UNC error only after certain number of | ||
988 | retries cannot recover the data, so there's nothing much | ||
989 | else to do other than notifying upper layer. | ||
990 | </para> | ||
991 | <para> | ||
992 | READ and WRITE commands report CHS or LBA of the first | ||
993 | failed sector but ATA/ATAPI standard specifies that the | ||
994 | amount of transferred data on error completion is | ||
995 | indeterminate, so we cannot assume that sectors preceding | ||
996 | the failed sector have been transferred and thus cannot | ||
997 | complete those sectors successfully as SCSI does. | ||
998 | </para> | ||
999 | </listitem> | ||
1000 | </varlistentry> | ||
1001 | |||
1002 | <varlistentry> | ||
1003 | <term>Media changed / media change requested error</term> | ||
1004 | <listitem> | ||
1005 | <para> | ||
1006 | <<TODO: fill here>> | ||
1007 | </para> | ||
1008 | </listitem> | ||
1009 | </varlistentry> | ||
1010 | |||
1011 | <varlistentry><term>Address error</term> | ||
1012 | <listitem> | ||
1013 | <para> | ||
1014 | This is indicated by IDNF bit in the ERROR register. | ||
1015 | Report to upper layer. | ||
1016 | </para> | ||
1017 | </listitem> | ||
1018 | </varlistentry> | ||
1019 | |||
1020 | <varlistentry><term>Other errors</term> | ||
1021 | <listitem> | ||
1022 | <para> | ||
1023 | This can be invalid command or parameter indicated by ABRT | ||
1024 | ERROR bit or some other error condition. Note that ABRT | ||
1025 | bit can indicate a lot of things including ICRC and Address | ||
1026 | errors. Heuristics needed. | ||
1027 | </para> | ||
1028 | </listitem> | ||
1029 | </varlistentry> | ||
1030 | |||
1031 | </variablelist> | ||
1032 | |||
1033 | <para> | ||
1034 | Depending on commands, not all STATUS/ERROR bits are | ||
1035 | applicable. These non-applicable bits are marked with | ||
1036 | "na" in the output descriptions but upto ATA/ATAPI-7 | ||
1037 | no definition of "na" can be found. However, | ||
1038 | ATA/ATAPI-8 draft revision 1f describes "N/A" as | ||
1039 | follows. | ||
1040 | </para> | ||
1041 | |||
1042 | <blockquote> | ||
1043 | <variablelist> | ||
1044 | <varlistentry><term>3.2.3.3a N/A</term> | ||
1045 | <listitem> | ||
1046 | <para> | ||
1047 | A keyword the indicates a field has no defined value in | ||
1048 | this standard and should not be checked by the host or | ||
1049 | device. N/A fields should be cleared to zero. | ||
1050 | </para> | ||
1051 | </listitem> | ||
1052 | </varlistentry> | ||
1053 | </variablelist> | ||
1054 | </blockquote> | ||
1055 | |||
1056 | <para> | ||
1057 | So, it seems reasonable to assume that "na" bits are | ||
1058 | cleared to zero by devices and thus need no explicit masking. | ||
1059 | </para> | ||
1060 | |||
1061 | </sect2> | ||
1062 | |||
1063 | <sect2 id="excatATAPIcc"> | ||
1064 | <title>ATAPI device CHECK CONDITION</title> | ||
1065 | |||
1066 | <para> | ||
1067 | ATAPI device CHECK CONDITION error is indicated by set CHK bit | ||
1068 | (ERR bit) in the STATUS register after the last byte of CDB is | ||
1069 | transferred for a PACKET command. For this kind of errors, | ||
1070 | sense data should be acquired to gather information regarding | ||
1071 | the errors. REQUEST SENSE packet command should be used to | ||
1072 | acquire sense data. | ||
1073 | </para> | ||
1074 | |||
1075 | <para> | ||
1076 | Once sense data is acquired, this type of errors can be | ||
1077 | handled similary to other SCSI errors. Note that sense data | ||
1078 | may indicate ATA bus error (e.g. Sense Key 04h HARDWARE ERROR | ||
1079 | && ASC/ASCQ 47h/00h SCSI PARITY ERROR). In such | ||
1080 | cases, the error should be considered as an ATA bus error and | ||
1081 | handled according to <xref linkend="excatATAbusErr"/>. | ||
1082 | </para> | ||
1083 | |||
1084 | </sect2> | ||
1085 | |||
1086 | <sect2 id="excatNCQerr"> | ||
1087 | <title>ATA device error (NCQ)</title> | ||
1088 | |||
1089 | <para> | ||
1090 | NCQ command error is indicated by cleared BSY and set ERR bit | ||
1091 | during NCQ command phase (one or more NCQ commands | ||
1092 | outstanding). Although STATUS and ERROR registers will | ||
1093 | contain valid values describing the error, READ LOG EXT is | ||
1094 | required to clear the error condition, determine which command | ||
1095 | has failed and acquire more information. | ||
1096 | </para> | ||
1097 | |||
1098 | <para> | ||
1099 | READ LOG EXT Log Page 10h reports which tag has failed and | ||
1100 | taskfile register values describing the error. With this | ||
1101 | information the failed command can be handled as a normal ATA | ||
1102 | command error as in <xref linkend="excatDevErr"/> and all | ||
1103 | other in-flight commands must be retried. Note that this | ||
1104 | retry should not be counted - it's likely that commands | ||
1105 | retried this way would have completed normally if it were not | ||
1106 | for the failed command. | ||
1107 | </para> | ||
1108 | |||
1109 | <para> | ||
1110 | Note that ATA bus errors can be reported as ATA device NCQ | ||
1111 | errors. This should be handled as described in <xref | ||
1112 | linkend="excatATAbusErr"/>. | ||
1113 | </para> | ||
1114 | |||
1115 | <para> | ||
1116 | If READ LOG EXT Log Page 10h fails or reports NQ, we're | ||
1117 | thoroughly screwed. This condition should be treated | ||
1118 | according to <xref linkend="excatHSMviolation"/>. | ||
1119 | </para> | ||
1120 | |||
1121 | </sect2> | ||
1122 | |||
1123 | <sect2 id="excatATAbusErr"> | ||
1124 | <title>ATA bus error</title> | ||
1125 | |||
1126 | <para> | ||
1127 | ATA bus error means that data corruption occurred during | ||
1128 | transmission over ATA bus (SATA or PATA). This type of errors | ||
1129 | can be indicated by | ||
1130 | </para> | ||
1131 | |||
1132 | <itemizedlist> | ||
1133 | |||
1134 | <listitem> | ||
1135 | <para> | ||
1136 | ICRC or ABRT error as described in <xref linkend="excatDevErr"/>. | ||
1137 | </para> | ||
1138 | </listitem> | ||
1139 | |||
1140 | <listitem> | ||
1141 | <para> | ||
1142 | Controller-specific error completion with error information | ||
1143 | indicating transmission error. | ||
1144 | </para> | ||
1145 | </listitem> | ||
1146 | |||
1147 | <listitem> | ||
1148 | <para> | ||
1149 | On some controllers, command timeout. In this case, there may | ||
1150 | be a mechanism to determine that the timeout is due to | ||
1151 | transmission error. | ||
1152 | </para> | ||
1153 | </listitem> | ||
1154 | |||
1155 | <listitem> | ||
1156 | <para> | ||
1157 | Unknown/random errors, timeouts and all sorts of weirdities. | ||
1158 | </para> | ||
1159 | </listitem> | ||
1160 | |||
1161 | </itemizedlist> | ||
1162 | |||
1163 | <para> | ||
1164 | As described above, transmission errors can cause wide variety | ||
1165 | of symptoms ranging from device ICRC error to random device | ||
1166 | lockup, and, for many cases, there is no way to tell if an | ||
1167 | error condition is due to transmission error or not; | ||
1168 | therefore, it's necessary to employ some kind of heuristic | ||
1169 | when dealing with errors and timeouts. For example, | ||
1170 | encountering repetitive ABRT errors for known supported | ||
1171 | command is likely to indicate ATA bus error. | ||
1172 | </para> | ||
1173 | |||
1174 | <para> | ||
1175 | Once it's determined that ATA bus errors have possibly | ||
1176 | occurred, lowering ATA bus transmission speed is one of | ||
1177 | actions which may alleviate the problem. See <xref | ||
1178 | linkend="exrecReconf"/> for more information. | ||
1179 | </para> | ||
1180 | |||
1181 | </sect2> | ||
1182 | |||
1183 | <sect2 id="excatPCIbusErr"> | ||
1184 | <title>PCI bus error</title> | ||
1185 | |||
1186 | <para> | ||
1187 | Data corruption or other failures during transmission over PCI | ||
1188 | (or other system bus). For standard BMDMA, this is indicated | ||
1189 | by Error bit in the BMDMA Status register. This type of | ||
1190 | errors must be logged as it indicates something is very wrong | ||
1191 | with the system. Resetting host controller is recommended. | ||
1192 | </para> | ||
1193 | |||
1194 | </sect2> | ||
1195 | |||
1196 | <sect2 id="excatLateCompletion"> | ||
1197 | <title>Late completion</title> | ||
1198 | |||
1199 | <para> | ||
1200 | This occurs when timeout occurs and the timeout handler finds | ||
1201 | out that the timed out command has completed successfully or | ||
1202 | with error. This is usually caused by lost interrupts. This | ||
1203 | type of errors must be logged. Resetting host controller is | ||
1204 | recommended. | ||
1205 | </para> | ||
1206 | |||
1207 | </sect2> | ||
1208 | |||
1209 | <sect2 id="excatUnknown"> | ||
1210 | <title>Unknown error (timeout)</title> | ||
1211 | |||
1212 | <para> | ||
1213 | This is when timeout occurs and the command is still | ||
1214 | processing or the host and device are in unknown state. When | ||
1215 | this occurs, HSM could be in any valid or invalid state. To | ||
1216 | bring the device to known state and make it forget about the | ||
1217 | timed out command, resetting is necessary. The timed out | ||
1218 | command may be retried. | ||
1219 | </para> | ||
1220 | |||
1221 | <para> | ||
1222 | Timeouts can also be caused by transmission errors. Refer to | ||
1223 | <xref linkend="excatATAbusErr"/> for more details. | ||
1224 | </para> | ||
1225 | |||
1226 | </sect2> | ||
1227 | |||
1228 | <sect2 id="excatHoplugPM"> | ||
1229 | <title>Hotplug and power management exceptions</title> | ||
1230 | |||
1231 | <para> | ||
1232 | <<TODO: fill here>> | ||
1233 | </para> | ||
1234 | |||
1235 | </sect2> | ||
1236 | |||
1237 | </sect1> | ||
1238 | |||
1239 | <sect1 id="exrec"> | ||
1240 | <title>EH recovery actions</title> | ||
1241 | |||
1242 | <para> | ||
1243 | This section discusses several important recovery actions. | ||
1244 | </para> | ||
1245 | |||
1246 | <sect2 id="exrecClr"> | ||
1247 | <title>Clearing error condition</title> | ||
1248 | |||
1249 | <para> | ||
1250 | Many controllers require its error registers to be cleared by | ||
1251 | error handler. Different controllers may have different | ||
1252 | requirements. | ||
1253 | </para> | ||
1254 | |||
1255 | <para> | ||
1256 | For SATA, it's strongly recommended to clear at least SError | ||
1257 | register during error handling. | ||
1258 | </para> | ||
1259 | </sect2> | ||
1260 | |||
1261 | <sect2 id="exrecRst"> | ||
1262 | <title>Reset</title> | ||
1263 | |||
1264 | <para> | ||
1265 | During EH, resetting is necessary in the following cases. | ||
1266 | </para> | ||
1267 | |||
1268 | <itemizedlist> | ||
1269 | |||
1270 | <listitem> | ||
1271 | <para> | ||
1272 | HSM is in unknown or invalid state | ||
1273 | </para> | ||
1274 | </listitem> | ||
1275 | |||
1276 | <listitem> | ||
1277 | <para> | ||
1278 | HBA is in unknown or invalid state | ||
1279 | </para> | ||
1280 | </listitem> | ||
1281 | |||
1282 | <listitem> | ||
1283 | <para> | ||
1284 | EH needs to make HBA/device forget about in-flight commands | ||
1285 | </para> | ||
1286 | </listitem> | ||
1287 | |||
1288 | <listitem> | ||
1289 | <para> | ||
1290 | HBA/device behaves weirdly | ||
1291 | </para> | ||
1292 | </listitem> | ||
1293 | |||
1294 | </itemizedlist> | ||
1295 | |||
1296 | <para> | ||
1297 | Resetting during EH might be a good idea regardless of error | ||
1298 | condition to improve EH robustness. Whether to reset both or | ||
1299 | either one of HBA and device depends on situation but the | ||
1300 | following scheme is recommended. | ||
1301 | </para> | ||
1302 | |||
1303 | <itemizedlist> | ||
1304 | |||
1305 | <listitem> | ||
1306 | <para> | ||
1307 | When it's known that HBA is in ready state but ATA/ATAPI | ||
1308 | device in in unknown state, reset only device. | ||
1309 | </para> | ||
1310 | </listitem> | ||
1311 | |||
1312 | <listitem> | ||
1313 | <para> | ||
1314 | If HBA is in unknown state, reset both HBA and device. | ||
1315 | </para> | ||
1316 | </listitem> | ||
1317 | |||
1318 | </itemizedlist> | ||
1319 | |||
1320 | <para> | ||
1321 | HBA resetting is implementation specific. For a controller | ||
1322 | complying to taskfile/BMDMA PCI IDE, stopping active DMA | ||
1323 | transaction may be sufficient iff BMDMA state is the only HBA | ||
1324 | context. But even mostly taskfile/BMDMA PCI IDE complying | ||
1325 | controllers may have implementation specific requirements and | ||
1326 | mechanism to reset themselves. This must be addressed by | ||
1327 | specific drivers. | ||
1328 | </para> | ||
1329 | |||
1330 | <para> | ||
1331 | OTOH, ATA/ATAPI standard describes in detail ways to reset | ||
1332 | ATA/ATAPI devices. | ||
1333 | </para> | ||
1334 | |||
1335 | <variablelist> | ||
1336 | |||
1337 | <varlistentry><term>PATA hardware reset</term> | ||
1338 | <listitem> | ||
1339 | <para> | ||
1340 | This is hardware initiated device reset signalled with | ||
1341 | asserted PATA RESET- signal. There is no standard way to | ||
1342 | initiate hardware reset from software although some | ||
1343 | hardware provides registers that allow driver to directly | ||
1344 | tweak the RESET- signal. | ||
1345 | </para> | ||
1346 | </listitem> | ||
1347 | </varlistentry> | ||
1348 | |||
1349 | <varlistentry><term>Software reset</term> | ||
1350 | <listitem> | ||
1351 | <para> | ||
1352 | This is achieved by turning CONTROL SRST bit on for at | ||
1353 | least 5us. Both PATA and SATA support it but, in case of | ||
1354 | SATA, this may require controller-specific support as the | ||
1355 | second Register FIS to clear SRST should be transmitted | ||
1356 | while BSY bit is still set. Note that on PATA, this resets | ||
1357 | both master and slave devices on a channel. | ||
1358 | </para> | ||
1359 | </listitem> | ||
1360 | </varlistentry> | ||
1361 | |||
1362 | <varlistentry><term>EXECUTE DEVICE DIAGNOSTIC command</term> | ||
1363 | <listitem> | ||
1364 | <para> | ||
1365 | Although ATA/ATAPI standard doesn't describe exactly, EDD | ||
1366 | implies some level of resetting, possibly similar level | ||
1367 | with software reset. Host-side EDD protocol can be handled | ||
1368 | with normal command processing and most SATA controllers | ||
1369 | should be able to handle EDD's just like other commands. | ||
1370 | As in software reset, EDD affects both devices on a PATA | ||
1371 | bus. | ||
1372 | </para> | ||
1373 | <para> | ||
1374 | Although EDD does reset devices, this doesn't suit error | ||
1375 | handling as EDD cannot be issued while BSY is set and it's | ||
1376 | unclear how it will act when device is in unknown/weird | ||
1377 | state. | ||
1378 | </para> | ||
1379 | </listitem> | ||
1380 | </varlistentry> | ||
1381 | |||
1382 | <varlistentry><term>ATAPI DEVICE RESET command</term> | ||
1383 | <listitem> | ||
1384 | <para> | ||
1385 | This is very similar to software reset except that reset | ||
1386 | can be restricted to the selected device without affecting | ||
1387 | the other device sharing the cable. | ||
1388 | </para> | ||
1389 | </listitem> | ||
1390 | </varlistentry> | ||
1391 | |||
1392 | <varlistentry><term>SATA phy reset</term> | ||
1393 | <listitem> | ||
1394 | <para> | ||
1395 | This is the preferred way of resetting a SATA device. In | ||
1396 | effect, it's identical to PATA hardware reset. Note that | ||
1397 | this can be done with the standard SCR Control register. | ||
1398 | As such, it's usually easier to implement than software | ||
1399 | reset. | ||
1400 | </para> | ||
1401 | </listitem> | ||
1402 | </varlistentry> | ||
1403 | |||
1404 | </variablelist> | ||
1405 | |||
1406 | <para> | ||
1407 | One more thing to consider when resetting devices is that | ||
1408 | resetting clears certain configuration parameters and they | ||
1409 | need to be set to their previous or newly adjusted values | ||
1410 | after reset. | ||
1411 | </para> | ||
1412 | |||
1413 | <para> | ||
1414 | Parameters affected are. | ||
1415 | </para> | ||
1416 | |||
1417 | <itemizedlist> | ||
1418 | |||
1419 | <listitem> | ||
1420 | <para> | ||
1421 | CHS set up with INITIALIZE DEVICE PARAMETERS (seldomly used) | ||
1422 | </para> | ||
1423 | </listitem> | ||
1424 | |||
1425 | <listitem> | ||
1426 | <para> | ||
1427 | Parameters set with SET FEATURES including transfer mode setting | ||
1428 | </para> | ||
1429 | </listitem> | ||
1430 | |||
1431 | <listitem> | ||
1432 | <para> | ||
1433 | Block count set with SET MULTIPLE MODE | ||
1434 | </para> | ||
1435 | </listitem> | ||
1436 | |||
1437 | <listitem> | ||
1438 | <para> | ||
1439 | Other parameters (SET MAX, MEDIA LOCK...) | ||
1440 | </para> | ||
1441 | </listitem> | ||
1442 | |||
1443 | </itemizedlist> | ||
1444 | |||
1445 | <para> | ||
1446 | ATA/ATAPI standard specifies that some parameters must be | ||
1447 | maintained across hardware or software reset, but doesn't | ||
1448 | strictly specify all of them. Always reconfiguring needed | ||
1449 | parameters after reset is required for robustness. Note that | ||
1450 | this also applies when resuming from deep sleep (power-off). | ||
1451 | </para> | ||
1452 | |||
1453 | <para> | ||
1454 | Also, ATA/ATAPI standard requires that IDENTIFY DEVICE / | ||
1455 | IDENTIFY PACKET DEVICE is issued after any configuration | ||
1456 | parameter is updated or a hardware reset and the result used | ||
1457 | for further operation. OS driver is required to implement | ||
1458 | revalidation mechanism to support this. | ||
1459 | </para> | ||
1460 | |||
1461 | </sect2> | ||
1462 | |||
1463 | <sect2 id="exrecReconf"> | ||
1464 | <title>Reconfigure transport</title> | ||
1465 | |||
1466 | <para> | ||
1467 | For both PATA and SATA, a lot of corners are cut for cheap | ||
1468 | connectors, cables or controllers and it's quite common to see | ||
1469 | high transmission error rate. This can be mitigated by | ||
1470 | lowering transmission speed. | ||
1471 | </para> | ||
1472 | |||
1473 | <para> | ||
1474 | The following is a possible scheme Jeff Garzik suggested. | ||
1475 | </para> | ||
1476 | |||
1477 | <blockquote> | ||
1478 | <para> | ||
1479 | If more than $N (3?) transmission errors happen in 15 minutes, | ||
1480 | </para> | ||
1481 | <itemizedlist> | ||
1482 | <listitem> | ||
1483 | <para> | ||
1484 | if SATA, decrease SATA PHY speed. if speed cannot be decreased, | ||
1485 | </para> | ||
1486 | </listitem> | ||
1487 | <listitem> | ||
1488 | <para> | ||
1489 | decrease UDMA xfer speed. if at UDMA0, switch to PIO4, | ||
1490 | </para> | ||
1491 | </listitem> | ||
1492 | <listitem> | ||
1493 | <para> | ||
1494 | decrease PIO xfer speed. if at PIO3, complain, but continue | ||
1495 | </para> | ||
1496 | </listitem> | ||
1497 | </itemizedlist> | ||
1498 | </blockquote> | ||
1499 | |||
1500 | </sect2> | ||
1501 | |||
1502 | </sect1> | ||
1503 | |||
1504 | </chapter> | ||
1505 | |||
434 | <chapter id="PiixInt"> | 1506 | <chapter id="PiixInt"> |
435 | <title>ata_piix Internals</title> | 1507 | <title>ata_piix Internals</title> |
436 | !Idrivers/scsi/ata_piix.c | 1508 | !Idrivers/scsi/ata_piix.c |
diff --git a/Documentation/SubmittingPatches b/Documentation/SubmittingPatches index 7f43b040311e..237d54c44bc5 100644 --- a/Documentation/SubmittingPatches +++ b/Documentation/SubmittingPatches | |||
@@ -301,8 +301,84 @@ now, but you can do this to mark internal company procedures or just | |||
301 | point out some special detail about the sign-off. | 301 | point out some special detail about the sign-off. |
302 | 302 | ||
303 | 303 | ||
304 | 12) The canonical patch format | ||
304 | 305 | ||
305 | 12) More references for submitting patches | 306 | The canonical patch subject line is: |
307 | |||
308 | Subject: [PATCH 001/123] subsystem: summary phrase | ||
309 | |||
310 | The canonical patch message body contains the following: | ||
311 | |||
312 | - A "from" line specifying the patch author. | ||
313 | |||
314 | - An empty line. | ||
315 | |||
316 | - The body of the explanation, which will be copied to the | ||
317 | permanent changelog to describe this patch. | ||
318 | |||
319 | - The "Signed-off-by:" lines, described above, which will | ||
320 | also go in the changelog. | ||
321 | |||
322 | - A marker line containing simply "---". | ||
323 | |||
324 | - Any additional comments not suitable for the changelog. | ||
325 | |||
326 | - The actual patch (diff output). | ||
327 | |||
328 | The Subject line format makes it very easy to sort the emails | ||
329 | alphabetically by subject line - pretty much any email reader will | ||
330 | support that - since because the sequence number is zero-padded, | ||
331 | the numerical and alphabetic sort is the same. | ||
332 | |||
333 | The "subsystem" in the email's Subject should identify which | ||
334 | area or subsystem of the kernel is being patched. | ||
335 | |||
336 | The "summary phrase" in the email's Subject should concisely | ||
337 | describe the patch which that email contains. The "summary | ||
338 | phrase" should not be a filename. Do not use the same "summary | ||
339 | phrase" for every patch in a whole patch series. | ||
340 | |||
341 | Bear in mind that the "summary phrase" of your email becomes | ||
342 | a globally-unique identifier for that patch. It propagates | ||
343 | all the way into the git changelog. The "summary phrase" may | ||
344 | later be used in developer discussions which refer to the patch. | ||
345 | People will want to google for the "summary phrase" to read | ||
346 | discussion regarding that patch. | ||
347 | |||
348 | A couple of example Subjects: | ||
349 | |||
350 | Subject: [patch 2/5] ext2: improve scalability of bitmap searching | ||
351 | Subject: [PATCHv2 001/207] x86: fix eflags tracking | ||
352 | |||
353 | The "from" line must be the very first line in the message body, | ||
354 | and has the form: | ||
355 | |||
356 | From: Original Author <author@example.com> | ||
357 | |||
358 | The "from" line specifies who will be credited as the author of the | ||
359 | patch in the permanent changelog. If the "from" line is missing, | ||
360 | then the "From:" line from the email header will be used to determine | ||
361 | the patch author in the changelog. | ||
362 | |||
363 | The explanation body will be committed to the permanent source | ||
364 | changelog, so should make sense to a competent reader who has long | ||
365 | since forgotten the immediate details of the discussion that might | ||
366 | have led to this patch. | ||
367 | |||
368 | The "---" marker line serves the essential purpose of marking for patch | ||
369 | handling tools where the changelog message ends. | ||
370 | |||
371 | One good use for the additional comments after the "---" marker is for | ||
372 | a diffstat, to show what files have changed, and the number of inserted | ||
373 | and deleted lines per file. A diffstat is especially useful on bigger | ||
374 | patches. Other comments relevant only to the moment or the maintainer, | ||
375 | not suitable for the permanent changelog, should also go here. | ||
376 | |||
377 | See more details on the proper patch format in the following | ||
378 | references. | ||
379 | |||
380 | |||
381 | 13) More references for submitting patches | ||
306 | 382 | ||
307 | Andrew Morton, "The perfect patch" (tpp). | 383 | Andrew Morton, "The perfect patch" (tpp). |
308 | <http://www.zip.com.au/~akpm/linux/patches/stuff/tpp.txt> | 384 | <http://www.zip.com.au/~akpm/linux/patches/stuff/tpp.txt> |
@@ -310,6 +386,14 @@ Andrew Morton, "The perfect patch" (tpp). | |||
310 | Jeff Garzik, "Linux kernel patch submission format." | 386 | Jeff Garzik, "Linux kernel patch submission format." |
311 | <http://linux.yyz.us/patch-format.html> | 387 | <http://linux.yyz.us/patch-format.html> |
312 | 388 | ||
389 | Greg KH, "How to piss off a kernel subsystem maintainer" | ||
390 | <http://www.kroah.com/log/2005/03/31/> | ||
391 | |||
392 | Kernel Documentation/CodingStyle | ||
393 | <http://sosdg.org/~coywolf/lxr/source/Documentation/CodingStyle> | ||
394 | |||
395 | Linus Torvald's mail on the canonical patch format: | ||
396 | <http://lkml.org/lkml/2005/4/7/183> | ||
313 | 397 | ||
314 | 398 | ||
315 | ----------------------------------- | 399 | ----------------------------------- |
diff --git a/Documentation/block/biodoc.txt b/Documentation/block/biodoc.txt index 6dd274d7e1cf..2d65c2182161 100644 --- a/Documentation/block/biodoc.txt +++ b/Documentation/block/biodoc.txt | |||
@@ -906,9 +906,20 @@ Aside: | |||
906 | 906 | ||
907 | 907 | ||
908 | 4. The I/O scheduler | 908 | 4. The I/O scheduler |
909 | I/O schedulers are now per queue. They should be runtime switchable and modular | 909 | I/O scheduler, a.k.a. elevator, is implemented in two layers. Generic dispatch |
910 | but aren't yet. Jens has most bits to do this, but the sysfs implementation is | 910 | queue and specific I/O schedulers. Unless stated otherwise, elevator is used |
911 | missing. | 911 | to refer to both parts and I/O scheduler to specific I/O schedulers. |
912 | |||
913 | Block layer implements generic dispatch queue in ll_rw_blk.c and elevator.c. | ||
914 | The generic dispatch queue is responsible for properly ordering barrier | ||
915 | requests, requeueing, handling non-fs requests and all other subtleties. | ||
916 | |||
917 | Specific I/O schedulers are responsible for ordering normal filesystem | ||
918 | requests. They can also choose to delay certain requests to improve | ||
919 | throughput or whatever purpose. As the plural form indicates, there are | ||
920 | multiple I/O schedulers. They can be built as modules but at least one should | ||
921 | be built inside the kernel. Each queue can choose different one and can also | ||
922 | change to another one dynamically. | ||
912 | 923 | ||
913 | A block layer call to the i/o scheduler follows the convention elv_xxx(). This | 924 | A block layer call to the i/o scheduler follows the convention elv_xxx(). This |
914 | calls elevator_xxx_fn in the elevator switch (drivers/block/elevator.c). Oh, | 925 | calls elevator_xxx_fn in the elevator switch (drivers/block/elevator.c). Oh, |
@@ -921,44 +932,36 @@ keeping work. | |||
921 | The functions an elevator may implement are: (* are mandatory) | 932 | The functions an elevator may implement are: (* are mandatory) |
922 | elevator_merge_fn called to query requests for merge with a bio | 933 | elevator_merge_fn called to query requests for merge with a bio |
923 | 934 | ||
924 | elevator_merge_req_fn " " " with another request | 935 | elevator_merge_req_fn called when two requests get merged. the one |
936 | which gets merged into the other one will be | ||
937 | never seen by I/O scheduler again. IOW, after | ||
938 | being merged, the request is gone. | ||
925 | 939 | ||
926 | elevator_merged_fn called when a request in the scheduler has been | 940 | elevator_merged_fn called when a request in the scheduler has been |
927 | involved in a merge. It is used in the deadline | 941 | involved in a merge. It is used in the deadline |
928 | scheduler for example, to reposition the request | 942 | scheduler for example, to reposition the request |
929 | if its sorting order has changed. | 943 | if its sorting order has changed. |
930 | 944 | ||
931 | *elevator_next_req_fn returns the next scheduled request, or NULL | 945 | elevator_dispatch_fn fills the dispatch queue with ready requests. |
932 | if there are none (or none are ready). | 946 | I/O schedulers are free to postpone requests by |
947 | not filling the dispatch queue unless @force | ||
948 | is non-zero. Once dispatched, I/O schedulers | ||
949 | are not allowed to manipulate the requests - | ||
950 | they belong to generic dispatch queue. | ||
933 | 951 | ||
934 | *elevator_add_req_fn called to add a new request into the scheduler | 952 | elevator_add_req_fn called to add a new request into the scheduler |
935 | 953 | ||
936 | elevator_queue_empty_fn returns true if the merge queue is empty. | 954 | elevator_queue_empty_fn returns true if the merge queue is empty. |
937 | Drivers shouldn't use this, but rather check | 955 | Drivers shouldn't use this, but rather check |
938 | if elv_next_request is NULL (without losing the | 956 | if elv_next_request is NULL (without losing the |
939 | request if one exists!) | 957 | request if one exists!) |
940 | 958 | ||
941 | elevator_remove_req_fn This is called when a driver claims ownership of | ||
942 | the target request - it now belongs to the | ||
943 | driver. It must not be modified or merged. | ||
944 | Drivers must not lose the request! A subsequent | ||
945 | call of elevator_next_req_fn must return the | ||
946 | _next_ request. | ||
947 | |||
948 | elevator_requeue_req_fn called to add a request to the scheduler. This | ||
949 | is used when the request has alrnadebeen | ||
950 | returned by elv_next_request, but hasn't | ||
951 | completed. If this is not implemented then | ||
952 | elevator_add_req_fn is called instead. | ||
953 | |||
954 | elevator_former_req_fn | 959 | elevator_former_req_fn |
955 | elevator_latter_req_fn These return the request before or after the | 960 | elevator_latter_req_fn These return the request before or after the |
956 | one specified in disk sort order. Used by the | 961 | one specified in disk sort order. Used by the |
957 | block layer to find merge possibilities. | 962 | block layer to find merge possibilities. |
958 | 963 | ||
959 | elevator_completed_req_fn called when a request is completed. This might | 964 | elevator_completed_req_fn called when a request is completed. |
960 | come about due to being merged with another or | ||
961 | when the device completes the request. | ||
962 | 965 | ||
963 | elevator_may_queue_fn returns true if the scheduler wants to allow the | 966 | elevator_may_queue_fn returns true if the scheduler wants to allow the |
964 | current context to queue a new request even if | 967 | current context to queue a new request even if |
@@ -967,13 +970,33 @@ elevator_may_queue_fn returns true if the scheduler wants to allow the | |||
967 | 970 | ||
968 | elevator_set_req_fn | 971 | elevator_set_req_fn |
969 | elevator_put_req_fn Must be used to allocate and free any elevator | 972 | elevator_put_req_fn Must be used to allocate and free any elevator |
970 | specific storate for a request. | 973 | specific storage for a request. |
974 | |||
975 | elevator_activate_req_fn Called when device driver first sees a request. | ||
976 | I/O schedulers can use this callback to | ||
977 | determine when actual execution of a request | ||
978 | starts. | ||
979 | elevator_deactivate_req_fn Called when device driver decides to delay | ||
980 | a request by requeueing it. | ||
971 | 981 | ||
972 | elevator_init_fn | 982 | elevator_init_fn |
973 | elevator_exit_fn Allocate and free any elevator specific storage | 983 | elevator_exit_fn Allocate and free any elevator specific storage |
974 | for a queue. | 984 | for a queue. |
975 | 985 | ||
976 | 4.2 I/O scheduler implementation | 986 | 4.2 Request flows seen by I/O schedulers |
987 | All requests seens by I/O schedulers strictly follow one of the following three | ||
988 | flows. | ||
989 | |||
990 | set_req_fn -> | ||
991 | |||
992 | i. add_req_fn -> (merged_fn ->)* -> dispatch_fn -> activate_req_fn -> | ||
993 | (deactivate_req_fn -> activate_req_fn ->)* -> completed_req_fn | ||
994 | ii. add_req_fn -> (merged_fn ->)* -> merge_req_fn | ||
995 | iii. [none] | ||
996 | |||
997 | -> put_req_fn | ||
998 | |||
999 | 4.3 I/O scheduler implementation | ||
977 | The generic i/o scheduler algorithm attempts to sort/merge/batch requests for | 1000 | The generic i/o scheduler algorithm attempts to sort/merge/batch requests for |
978 | optimal disk scan and request servicing performance (based on generic | 1001 | optimal disk scan and request servicing performance (based on generic |
979 | principles and device capabilities), optimized for: | 1002 | principles and device capabilities), optimized for: |
@@ -993,18 +1016,7 @@ request in sort order to prevent binary tree lookups. | |||
993 | This arrangement is not a generic block layer characteristic however, so | 1016 | This arrangement is not a generic block layer characteristic however, so |
994 | elevators may implement queues as they please. | 1017 | elevators may implement queues as they please. |
995 | 1018 | ||
996 | ii. Last merge hint | 1019 | ii. Merge hash |
997 | The last merge hint is part of the generic queue layer. I/O schedulers must do | ||
998 | some management on it. For the most part, the most important thing is to make | ||
999 | sure q->last_merge is cleared (set to NULL) when the request on it is no longer | ||
1000 | a candidate for merging (for example if it has been sent to the driver). | ||
1001 | |||
1002 | The last merge performed is cached as a hint for the subsequent request. If | ||
1003 | sequential data is being submitted, the hint is used to perform merges without | ||
1004 | any scanning. This is not sufficient when there are multiple processes doing | ||
1005 | I/O though, so a "merge hash" is used by some schedulers. | ||
1006 | |||
1007 | iii. Merge hash | ||
1008 | AS and deadline use a hash table indexed by the last sector of a request. This | 1020 | AS and deadline use a hash table indexed by the last sector of a request. This |
1009 | enables merging code to quickly look up "back merge" candidates, even when | 1021 | enables merging code to quickly look up "back merge" candidates, even when |
1010 | multiple I/O streams are being performed at once on one disk. | 1022 | multiple I/O streams are being performed at once on one disk. |
@@ -1013,29 +1025,8 @@ multiple I/O streams are being performed at once on one disk. | |||
1013 | are far less common than "back merges" due to the nature of most I/O patterns. | 1025 | are far less common than "back merges" due to the nature of most I/O patterns. |
1014 | Front merges are handled by the binary trees in AS and deadline schedulers. | 1026 | Front merges are handled by the binary trees in AS and deadline schedulers. |
1015 | 1027 | ||
1016 | iv. Handling barrier cases | 1028 | iii. Plugging the queue to batch requests in anticipation of opportunities for |
1017 | A request with flags REQ_HARDBARRIER or REQ_SOFTBARRIER must not be ordered | 1029 | merge/sort optimizations |
1018 | around. That is, they must be processed after all older requests, and before | ||
1019 | any newer ones. This includes merges! | ||
1020 | |||
1021 | In AS and deadline schedulers, barriers have the effect of flushing the reorder | ||
1022 | queue. The performance cost of this will vary from nothing to a lot depending | ||
1023 | on i/o patterns and device characteristics. Obviously they won't improve | ||
1024 | performance, so their use should be kept to a minimum. | ||
1025 | |||
1026 | v. Handling insertion position directives | ||
1027 | A request may be inserted with a position directive. The directives are one of | ||
1028 | ELEVATOR_INSERT_BACK, ELEVATOR_INSERT_FRONT, ELEVATOR_INSERT_SORT. | ||
1029 | |||
1030 | ELEVATOR_INSERT_SORT is a general directive for non-barrier requests. | ||
1031 | ELEVATOR_INSERT_BACK is used to insert a barrier to the back of the queue. | ||
1032 | ELEVATOR_INSERT_FRONT is used to insert a barrier to the front of the queue, and | ||
1033 | overrides the ordering requested by any previous barriers. In practice this is | ||
1034 | harmless and required, because it is used for SCSI requeueing. This does not | ||
1035 | require flushing the reorder queue, so does not impose a performance penalty. | ||
1036 | |||
1037 | vi. Plugging the queue to batch requests in anticipation of opportunities for | ||
1038 | merge/sort optimizations | ||
1039 | 1030 | ||
1040 | This is just the same as in 2.4 so far, though per-device unplugging | 1031 | This is just the same as in 2.4 so far, though per-device unplugging |
1041 | support is anticipated for 2.5. Also with a priority-based i/o scheduler, | 1032 | support is anticipated for 2.5. Also with a priority-based i/o scheduler, |
@@ -1069,7 +1060,7 @@ Aside: | |||
1069 | blk_kick_queue() to unplug a specific queue (right away ?) | 1060 | blk_kick_queue() to unplug a specific queue (right away ?) |
1070 | or optionally, all queues, is in the plan. | 1061 | or optionally, all queues, is in the plan. |
1071 | 1062 | ||
1072 | 4.3 I/O contexts | 1063 | 4.4 I/O contexts |
1073 | I/O contexts provide a dynamically allocated per process data area. They may | 1064 | I/O contexts provide a dynamically allocated per process data area. They may |
1074 | be used in I/O schedulers, and in the block layer (could be used for IO statis, | 1065 | be used in I/O schedulers, and in the block layer (could be used for IO statis, |
1075 | priorities for example). See *io_context in drivers/block/ll_rw_blk.c, and | 1066 | priorities for example). See *io_context in drivers/block/ll_rw_blk.c, and |
diff --git a/Documentation/connector/connector.txt b/Documentation/connector/connector.txt index 54a0a14bfbe3..57a314b14cf8 100644 --- a/Documentation/connector/connector.txt +++ b/Documentation/connector/connector.txt | |||
@@ -131,3 +131,47 @@ Netlink itself is not reliable protocol, that means that messages can | |||
131 | be lost due to memory pressure or process' receiving queue overflowed, | 131 | be lost due to memory pressure or process' receiving queue overflowed, |
132 | so caller is warned must be prepared. That is why struct cn_msg [main | 132 | so caller is warned must be prepared. That is why struct cn_msg [main |
133 | connector's message header] contains u32 seq and u32 ack fields. | 133 | connector's message header] contains u32 seq and u32 ack fields. |
134 | |||
135 | /*****************************************/ | ||
136 | Userspace usage. | ||
137 | /*****************************************/ | ||
138 | 2.6.14 has a new netlink socket implementation, which by default does not | ||
139 | allow to send data to netlink groups other than 1. | ||
140 | So, if to use netlink socket (for example using connector) | ||
141 | with different group number userspace application must subscribe to | ||
142 | that group. It can be achieved by following pseudocode: | ||
143 | |||
144 | s = socket(PF_NETLINK, SOCK_DGRAM, NETLINK_CONNECTOR); | ||
145 | |||
146 | l_local.nl_family = AF_NETLINK; | ||
147 | l_local.nl_groups = 12345; | ||
148 | l_local.nl_pid = 0; | ||
149 | |||
150 | if (bind(s, (struct sockaddr *)&l_local, sizeof(struct sockaddr_nl)) == -1) { | ||
151 | perror("bind"); | ||
152 | close(s); | ||
153 | return -1; | ||
154 | } | ||
155 | |||
156 | { | ||
157 | int on = l_local.nl_groups; | ||
158 | setsockopt(s, 270, 1, &on, sizeof(on)); | ||
159 | } | ||
160 | |||
161 | Where 270 above is SOL_NETLINK, and 1 is a NETLINK_ADD_MEMBERSHIP socket | ||
162 | option. To drop multicast subscription one should call above socket option | ||
163 | with NETLINK_DROP_MEMBERSHIP parameter which is defined as 0. | ||
164 | |||
165 | 2.6.14 netlink code only allows to select a group which is less or equal to | ||
166 | the maximum group number, which is used at netlink_kernel_create() time. | ||
167 | In case of connector it is CN_NETLINK_USERS + 0xf, so if you want to use | ||
168 | group number 12345, you must increment CN_NETLINK_USERS to that number. | ||
169 | Additional 0xf numbers are allocated to be used by non-in-kernel users. | ||
170 | |||
171 | Due to this limitation, group 0xffffffff does not work now, so one can | ||
172 | not use add/remove connector's group notifications, but as far as I know, | ||
173 | only cn_test.c test module used it. | ||
174 | |||
175 | Some work in netlink area is still being done, so things can be changed in | ||
176 | 2.6.15 timeframe, if it will happen, documentation will be updated for that | ||
177 | kernel. | ||
diff --git a/Documentation/dell_rbu.txt b/Documentation/dell_rbu.txt index 95d7f62e4dbc..941343a7a265 100644 --- a/Documentation/dell_rbu.txt +++ b/Documentation/dell_rbu.txt | |||
@@ -35,6 +35,7 @@ The driver load creates the following directories under the /sys file system. | |||
35 | /sys/class/firmware/dell_rbu/data | 35 | /sys/class/firmware/dell_rbu/data |
36 | /sys/devices/platform/dell_rbu/image_type | 36 | /sys/devices/platform/dell_rbu/image_type |
37 | /sys/devices/platform/dell_rbu/data | 37 | /sys/devices/platform/dell_rbu/data |
38 | /sys/devices/platform/dell_rbu/packet_size | ||
38 | 39 | ||
39 | The driver supports two types of update mechanism; monolithic and packetized. | 40 | The driver supports two types of update mechanism; monolithic and packetized. |
40 | These update mechanism depends upon the BIOS currently running on the system. | 41 | These update mechanism depends upon the BIOS currently running on the system. |
@@ -47,8 +48,26 @@ By default the driver uses monolithic memory for the update type. This can be | |||
47 | changed to packets during the driver load time by specifying the load | 48 | changed to packets during the driver load time by specifying the load |
48 | parameter image_type=packet. This can also be changed later as below | 49 | parameter image_type=packet. This can also be changed later as below |
49 | echo packet > /sys/devices/platform/dell_rbu/image_type | 50 | echo packet > /sys/devices/platform/dell_rbu/image_type |
50 | Also echoing either mono ,packet or init in to image_type will free up the | 51 | |
51 | memory allocated by the driver. | 52 | In packet update mode the packet size has to be given before any packets can |
53 | be downloaded. It is done as below | ||
54 | echo XXXX > /sys/devices/platform/dell_rbu/packet_size | ||
55 | In the packet update mechanism, the user neesd to create a new file having | ||
56 | packets of data arranged back to back. It can be done as follows | ||
57 | The user creates packets header, gets the chunk of the BIOS image and | ||
58 | placs it next to the packetheader; now, the packetheader + BIOS image chunk | ||
59 | added to geather should match the specified packet_size. This makes one | ||
60 | packet, the user needs to create more such packets out of the entire BIOS | ||
61 | image file and then arrange all these packets back to back in to one single | ||
62 | file. | ||
63 | This file is then copied to /sys/class/firmware/dell_rbu/data. | ||
64 | Once this file gets to the driver, the driver extracts packet_size data from | ||
65 | the file and spreads it accross the physical memory in contiguous packet_sized | ||
66 | space. | ||
67 | This method makes sure that all the packets get to the driver in a single operation. | ||
68 | |||
69 | In monolithic update the user simply get the BIOS image (.hdr file) and copies | ||
70 | to the data file as is without any change to the BIOS image itself. | ||
52 | 71 | ||
53 | Do the steps below to download the BIOS image. | 72 | Do the steps below to download the BIOS image. |
54 | 1) echo 1 > /sys/class/firmware/dell_rbu/loading | 73 | 1) echo 1 > /sys/class/firmware/dell_rbu/loading |
@@ -58,7 +77,10 @@ Do the steps below to download the BIOS image. | |||
58 | The /sys/class/firmware/dell_rbu/ entries will remain till the following is | 77 | The /sys/class/firmware/dell_rbu/ entries will remain till the following is |
59 | done. | 78 | done. |
60 | echo -1 > /sys/class/firmware/dell_rbu/loading. | 79 | echo -1 > /sys/class/firmware/dell_rbu/loading. |
61 | Until this step is completed the drivr cannot be unloaded. | 80 | Until this step is completed the driver cannot be unloaded. |
81 | Also echoing either mono ,packet or init in to image_type will free up the | ||
82 | memory allocated by the driver. | ||
83 | |||
62 | If an user by accident executes steps 1 and 3 above without executing step 2; | 84 | If an user by accident executes steps 1 and 3 above without executing step 2; |
63 | it will make the /sys/class/firmware/dell_rbu/ entries to disappear. | 85 | it will make the /sys/class/firmware/dell_rbu/ entries to disappear. |
64 | The entries can be recreated by doing the following | 86 | The entries can be recreated by doing the following |
@@ -66,15 +88,11 @@ echo init > /sys/devices/platform/dell_rbu/image_type | |||
66 | NOTE: echoing init in image_type does not change it original value. | 88 | NOTE: echoing init in image_type does not change it original value. |
67 | 89 | ||
68 | Also the driver provides /sys/devices/platform/dell_rbu/data readonly file to | 90 | Also the driver provides /sys/devices/platform/dell_rbu/data readonly file to |
69 | read back the image downloaded. This is useful in case of packet update | 91 | read back the image downloaded. |
70 | mechanism where the above steps 1,2,3 will repeated for every packet. | ||
71 | By reading the /sys/devices/platform/dell_rbu/data file all packet data | ||
72 | downloaded can be verified in a single file. | ||
73 | The packets are arranged in this file one after the other in a FIFO order. | ||
74 | 92 | ||
75 | NOTE: | 93 | NOTE: |
76 | This driver requires a patch for firmware_class.c which has the addition | 94 | This driver requires a patch for firmware_class.c which has the modified |
77 | of request_firmware_nowait_nohotplug function to wortk | 95 | request_firmware_nowait function. |
78 | Also after updating the BIOS image an user mdoe application neeeds to execute | 96 | Also after updating the BIOS image an user mdoe application neeeds to execute |
79 | code which message the BIOS update request to the BIOS. So on the next reboot | 97 | code which message the BIOS update request to the BIOS. So on the next reboot |
80 | the BIOS knows about the new image downloaded and it updates it self. | 98 | the BIOS knows about the new image downloaded and it updates it self. |
diff --git a/Documentation/device-mapper/snapshot.txt b/Documentation/device-mapper/snapshot.txt new file mode 100644 index 000000000000..dca274ff4005 --- /dev/null +++ b/Documentation/device-mapper/snapshot.txt | |||
@@ -0,0 +1,73 @@ | |||
1 | Device-mapper snapshot support | ||
2 | ============================== | ||
3 | |||
4 | Device-mapper allows you, without massive data copying: | ||
5 | |||
6 | *) To create snapshots of any block device i.e. mountable, saved states of | ||
7 | the block device which are also writable without interfering with the | ||
8 | original content; | ||
9 | *) To create device "forks", i.e. multiple different versions of the | ||
10 | same data stream. | ||
11 | |||
12 | |||
13 | In both cases, dm copies only the chunks of data that get changed and | ||
14 | uses a separate copy-on-write (COW) block device for storage. | ||
15 | |||
16 | |||
17 | There are two dm targets available: snapshot and snapshot-origin. | ||
18 | |||
19 | *) snapshot-origin <origin> | ||
20 | |||
21 | which will normally have one or more snapshots based on it. | ||
22 | You must create the snapshot-origin device before you can create snapshots. | ||
23 | Reads will be mapped directly to the backing device. For each write, the | ||
24 | original data will be saved in the <COW device> of each snapshot to keep | ||
25 | its visible content unchanged, at least until the <COW device> fills up. | ||
26 | |||
27 | |||
28 | *) snapshot <origin> <COW device> <persistent?> <chunksize> | ||
29 | |||
30 | A snapshot is created of the <origin> block device. Changed chunks of | ||
31 | <chunksize> sectors will be stored on the <COW device>. Writes will | ||
32 | only go to the <COW device>. Reads will come from the <COW device> or | ||
33 | from <origin> for unchanged data. <COW device> will often be | ||
34 | smaller than the origin and if it fills up the snapshot will become | ||
35 | useless and be disabled, returning errors. So it is important to monitor | ||
36 | the amount of free space and expand the <COW device> before it fills up. | ||
37 | |||
38 | <persistent?> is P (Persistent) or N (Not persistent - will not survive | ||
39 | after reboot). | ||
40 | |||
41 | |||
42 | How this is used by LVM2 | ||
43 | ======================== | ||
44 | When you create the first LVM2 snapshot of a volume, four dm devices are used: | ||
45 | |||
46 | 1) a device containing the original mapping table of the source volume; | ||
47 | 2) a device used as the <COW device>; | ||
48 | 3) a "snapshot" device, combining #1 and #2, which is the visible snapshot | ||
49 | volume; | ||
50 | 4) the "original" volume (which uses the device number used by the original | ||
51 | source volume), whose table is replaced by a "snapshot-origin" mapping | ||
52 | from device #1. | ||
53 | |||
54 | A fixed naming scheme is used, so with the following commands: | ||
55 | |||
56 | lvcreate -L 1G -n base volumeGroup | ||
57 | lvcreate -L 100M --snapshot -n snap volumeGroup/base | ||
58 | |||
59 | we'll have this situation (with volumes in above order): | ||
60 | |||
61 | # dmsetup table|grep volumeGroup | ||
62 | |||
63 | volumeGroup-base-real: 0 2097152 linear 8:19 384 | ||
64 | volumeGroup-snap-cow: 0 204800 linear 8:19 2097536 | ||
65 | volumeGroup-snap: 0 2097152 snapshot 254:11 254:12 P 16 | ||
66 | volumeGroup-base: 0 2097152 snapshot-origin 254:11 | ||
67 | |||
68 | # ls -lL /dev/mapper/volumeGroup-* | ||
69 | brw------- 1 root root 254, 11 29 ago 18:15 /dev/mapper/volumeGroup-base-real | ||
70 | brw------- 1 root root 254, 12 29 ago 18:15 /dev/mapper/volumeGroup-snap-cow | ||
71 | brw------- 1 root root 254, 13 29 ago 18:15 /dev/mapper/volumeGroup-snap | ||
72 | brw------- 1 root root 254, 10 29 ago 18:14 /dev/mapper/volumeGroup-base | ||
73 | |||
diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt index 7086f0a90d14..971589a9752d 100644 --- a/Documentation/kernel-parameters.txt +++ b/Documentation/kernel-parameters.txt | |||
@@ -17,7 +17,7 @@ are specified on the kernel command line with the module name plus | |||
17 | 17 | ||
18 | usbcore.blinkenlights=1 | 18 | usbcore.blinkenlights=1 |
19 | 19 | ||
20 | The text in square brackets at the beginning of the description state the | 20 | The text in square brackets at the beginning of the description states the |
21 | restrictions on the kernel for the said kernel parameter to be valid. The | 21 | restrictions on the kernel for the said kernel parameter to be valid. The |
22 | restrictions referred to are that the relevant option is valid if: | 22 | restrictions referred to are that the relevant option is valid if: |
23 | 23 | ||
@@ -27,8 +27,8 @@ restrictions referred to are that the relevant option is valid if: | |||
27 | APM Advanced Power Management support is enabled. | 27 | APM Advanced Power Management support is enabled. |
28 | AX25 Appropriate AX.25 support is enabled. | 28 | AX25 Appropriate AX.25 support is enabled. |
29 | CD Appropriate CD support is enabled. | 29 | CD Appropriate CD support is enabled. |
30 | DEVFS devfs support is enabled. | 30 | DEVFS devfs support is enabled. |
31 | DRM Direct Rendering Management support is enabled. | 31 | DRM Direct Rendering Management support is enabled. |
32 | EDD BIOS Enhanced Disk Drive Services (EDD) is enabled | 32 | EDD BIOS Enhanced Disk Drive Services (EDD) is enabled |
33 | EFI EFI Partitioning (GPT) is enabled | 33 | EFI EFI Partitioning (GPT) is enabled |
34 | EIDE EIDE/ATAPI support is enabled. | 34 | EIDE EIDE/ATAPI support is enabled. |
@@ -71,7 +71,7 @@ restrictions referred to are that the relevant option is valid if: | |||
71 | SERIAL Serial support is enabled. | 71 | SERIAL Serial support is enabled. |
72 | SMP The kernel is an SMP kernel. | 72 | SMP The kernel is an SMP kernel. |
73 | SPARC Sparc architecture is enabled. | 73 | SPARC Sparc architecture is enabled. |
74 | SWSUSP Software suspension is enabled. | 74 | SWSUSP Software suspend is enabled. |
75 | TS Appropriate touchscreen support is enabled. | 75 | TS Appropriate touchscreen support is enabled. |
76 | USB USB support is enabled. | 76 | USB USB support is enabled. |
77 | USBHID USB Human Interface Device support is enabled. | 77 | USBHID USB Human Interface Device support is enabled. |
@@ -105,13 +105,13 @@ running once the system is up. | |||
105 | See header of drivers/scsi/53c7xx.c. | 105 | See header of drivers/scsi/53c7xx.c. |
106 | See also Documentation/scsi/ncr53c7xx.txt. | 106 | See also Documentation/scsi/ncr53c7xx.txt. |
107 | 107 | ||
108 | acpi= [HW,ACPI] Advanced Configuration and Power Interface | 108 | acpi= [HW,ACPI] Advanced Configuration and Power Interface |
109 | Format: { force | off | ht | strict } | 109 | Format: { force | off | ht | strict | noirq } |
110 | force -- enable ACPI if default was off | 110 | force -- enable ACPI if default was off |
111 | off -- disable ACPI if default was on | 111 | off -- disable ACPI if default was on |
112 | noirq -- do not use ACPI for IRQ routing | 112 | noirq -- do not use ACPI for IRQ routing |
113 | ht -- run only enough ACPI to enable Hyper Threading | 113 | ht -- run only enough ACPI to enable Hyper Threading |
114 | strict -- Be less tolerant of platforms that are not | 114 | strict -- Be less tolerant of platforms that are not |
115 | strictly ACPI specification compliant. | 115 | strictly ACPI specification compliant. |
116 | 116 | ||
117 | See also Documentation/pm.txt, pci=noacpi | 117 | See also Documentation/pm.txt, pci=noacpi |
@@ -119,20 +119,23 @@ running once the system is up. | |||
119 | acpi_sleep= [HW,ACPI] Sleep options | 119 | acpi_sleep= [HW,ACPI] Sleep options |
120 | Format: { s3_bios, s3_mode } | 120 | Format: { s3_bios, s3_mode } |
121 | See Documentation/power/video.txt | 121 | See Documentation/power/video.txt |
122 | 122 | ||
123 | acpi_sci= [HW,ACPI] ACPI System Control Interrupt trigger mode | 123 | acpi_sci= [HW,ACPI] ACPI System Control Interrupt trigger mode |
124 | Format: { level | edge | high | low } | 124 | Format: { level | edge | high | low } |
125 | 125 | ||
126 | acpi_irq_balance [HW,ACPI] ACPI will balance active IRQs | 126 | acpi_irq_balance [HW,ACPI] |
127 | default in APIC mode | 127 | ACPI will balance active IRQs |
128 | default in APIC mode | ||
128 | 129 | ||
129 | acpi_irq_nobalance [HW,ACPI] ACPI will not move active IRQs (default) | 130 | acpi_irq_nobalance [HW,ACPI] |
130 | default in PIC mode | 131 | ACPI will not move active IRQs (default) |
132 | default in PIC mode | ||
131 | 133 | ||
132 | acpi_irq_pci= [HW,ACPI] If irq_balance, Clear listed IRQs for use by PCI | 134 | acpi_irq_pci= [HW,ACPI] If irq_balance, clear listed IRQs for |
135 | use by PCI | ||
133 | Format: <irq>,<irq>... | 136 | Format: <irq>,<irq>... |
134 | 137 | ||
135 | acpi_irq_isa= [HW,ACPI] If irq_balance, Mark listed IRQs used by ISA | 138 | acpi_irq_isa= [HW,ACPI] If irq_balance, mark listed IRQs used by ISA |
136 | Format: <irq>,<irq>... | 139 | Format: <irq>,<irq>... |
137 | 140 | ||
138 | acpi_osi= [HW,ACPI] empty param disables _OSI | 141 | acpi_osi= [HW,ACPI] empty param disables _OSI |
@@ -145,14 +148,14 @@ running once the system is up. | |||
145 | 148 | ||
146 | acpi_dbg_layer= [HW,ACPI] | 149 | acpi_dbg_layer= [HW,ACPI] |
147 | Format: <int> | 150 | Format: <int> |
148 | Each bit of the <int> indicates an acpi debug layer, | 151 | Each bit of the <int> indicates an ACPI debug layer, |
149 | 1: enable, 0: disable. It is useful for boot time | 152 | 1: enable, 0: disable. It is useful for boot time |
150 | debugging. After system has booted up, it can be set | 153 | debugging. After system has booted up, it can be set |
151 | via /proc/acpi/debug_layer. | 154 | via /proc/acpi/debug_layer. |
152 | 155 | ||
153 | acpi_dbg_level= [HW,ACPI] | 156 | acpi_dbg_level= [HW,ACPI] |
154 | Format: <int> | 157 | Format: <int> |
155 | Each bit of the <int> indicates an acpi debug level, | 158 | Each bit of the <int> indicates an ACPI debug level, |
156 | 1: enable, 0: disable. It is useful for boot time | 159 | 1: enable, 0: disable. It is useful for boot time |
157 | debugging. After system has booted up, it can be set | 160 | debugging. After system has booted up, it can be set |
158 | via /proc/acpi/debug_level. | 161 | via /proc/acpi/debug_level. |
@@ -161,12 +164,13 @@ running once the system is up. | |||
161 | 164 | ||
162 | acpi_generic_hotkey [HW,ACPI] | 165 | acpi_generic_hotkey [HW,ACPI] |
163 | Allow consolidated generic hotkey driver to | 166 | Allow consolidated generic hotkey driver to |
164 | over-ride platform specific driver. | 167 | override platform specific driver. |
165 | See also Documentation/acpi-hotkey.txt. | 168 | See also Documentation/acpi-hotkey.txt. |
166 | 169 | ||
167 | enable_timer_pin_1 [i386,x86-64] | 170 | enable_timer_pin_1 [i386,x86-64] |
168 | Enable PIN 1 of APIC timer | 171 | Enable PIN 1 of APIC timer |
169 | Can be useful to work around chipset bugs (in particular on some ATI chipsets) | 172 | Can be useful to work around chipset bugs |
173 | (in particular on some ATI chipsets). | ||
170 | The kernel tries to set a reasonable default. | 174 | The kernel tries to set a reasonable default. |
171 | 175 | ||
172 | disable_timer_pin_1 [i386,x86-64] | 176 | disable_timer_pin_1 [i386,x86-64] |
@@ -182,7 +186,7 @@ running once the system is up. | |||
182 | 186 | ||
183 | adlib= [HW,OSS] | 187 | adlib= [HW,OSS] |
184 | Format: <io> | 188 | Format: <io> |
185 | 189 | ||
186 | advansys= [HW,SCSI] | 190 | advansys= [HW,SCSI] |
187 | See header of drivers/scsi/advansys.c. | 191 | See header of drivers/scsi/advansys.c. |
188 | 192 | ||
@@ -192,7 +196,7 @@ running once the system is up. | |||
192 | aedsp16= [HW,OSS] Audio Excel DSP 16 | 196 | aedsp16= [HW,OSS] Audio Excel DSP 16 |
193 | Format: <io>,<irq>,<dma>,<mss_io>,<mpu_io>,<mpu_irq> | 197 | Format: <io>,<irq>,<dma>,<mss_io>,<mpu_io>,<mpu_irq> |
194 | See also header of sound/oss/aedsp16.c. | 198 | See also header of sound/oss/aedsp16.c. |
195 | 199 | ||
196 | aha152x= [HW,SCSI] | 200 | aha152x= [HW,SCSI] |
197 | See Documentation/scsi/aha152x.txt. | 201 | See Documentation/scsi/aha152x.txt. |
198 | 202 | ||
@@ -205,10 +209,6 @@ running once the system is up. | |||
205 | aic79xx= [HW,SCSI] | 209 | aic79xx= [HW,SCSI] |
206 | See Documentation/scsi/aic79xx.txt. | 210 | See Documentation/scsi/aic79xx.txt. |
207 | 211 | ||
208 | AM53C974= [HW,SCSI] | ||
209 | Format: <host-scsi-id>,<target-scsi-id>,<max-rate>,<max-offset> | ||
210 | See also header of drivers/scsi/AM53C974.c. | ||
211 | |||
212 | amijoy.map= [HW,JOY] Amiga joystick support | 212 | amijoy.map= [HW,JOY] Amiga joystick support |
213 | Map of devices attached to JOY0DAT and JOY1DAT | 213 | Map of devices attached to JOY0DAT and JOY1DAT |
214 | Format: <a>,<b> | 214 | Format: <a>,<b> |
@@ -219,23 +219,24 @@ running once the system is up. | |||
219 | connected to one of 16 gameports | 219 | connected to one of 16 gameports |
220 | Format: <type1>,<type2>,..<type16> | 220 | Format: <type1>,<type2>,..<type16> |
221 | 221 | ||
222 | apc= [HW,SPARC] Power management functions (SPARCstation-4/5 + deriv.) | 222 | apc= [HW,SPARC] |
223 | Power management functions (SPARCstation-4/5 + deriv.) | ||
223 | Format: noidle | 224 | Format: noidle |
224 | Disable APC CPU standby support. SPARCstation-Fox does | 225 | Disable APC CPU standby support. SPARCstation-Fox does |
225 | not play well with APC CPU idle - disable it if you have | 226 | not play well with APC CPU idle - disable it if you have |
226 | APC and your system crashes randomly. | 227 | APC and your system crashes randomly. |
227 | 228 | ||
228 | apic= [APIC,i386] Change the output verbosity whilst booting | 229 | apic= [APIC,i386] Change the output verbosity whilst booting |
229 | Format: { quiet (default) | verbose | debug } | 230 | Format: { quiet (default) | verbose | debug } |
230 | Change the amount of debugging information output | 231 | Change the amount of debugging information output |
231 | when initialising the APIC and IO-APIC components. | 232 | when initialising the APIC and IO-APIC components. |
232 | 233 | ||
233 | apm= [APM] Advanced Power Management | 234 | apm= [APM] Advanced Power Management |
234 | See header of arch/i386/kernel/apm.c. | 235 | See header of arch/i386/kernel/apm.c. |
235 | 236 | ||
236 | applicom= [HW] | 237 | applicom= [HW] |
237 | Format: <mem>,<irq> | 238 | Format: <mem>,<irq> |
238 | 239 | ||
239 | arcrimi= [HW,NET] ARCnet - "RIM I" (entirely mem-mapped) cards | 240 | arcrimi= [HW,NET] ARCnet - "RIM I" (entirely mem-mapped) cards |
240 | Format: <io>,<irq>,<nodeID> | 241 | Format: <io>,<irq>,<nodeID> |
241 | 242 | ||
@@ -250,38 +251,40 @@ running once the system is up. | |||
250 | 251 | ||
251 | atkbd.reset= [HW] Reset keyboard during initialization | 252 | atkbd.reset= [HW] Reset keyboard during initialization |
252 | 253 | ||
253 | atkbd.set= [HW] Select keyboard code set | 254 | atkbd.set= [HW] Select keyboard code set |
254 | Format: <int> (2 = AT (default) 3 = PS/2) | 255 | Format: <int> (2 = AT (default), 3 = PS/2) |
255 | 256 | ||
256 | atkbd.scroll= [HW] Enable scroll wheel on MS Office and similar | 257 | atkbd.scroll= [HW] Enable scroll wheel on MS Office and similar |
257 | keyboards | 258 | keyboards |
258 | 259 | ||
259 | atkbd.softraw= [HW] Choose between synthetic and real raw mode | 260 | atkbd.softraw= [HW] Choose between synthetic and real raw mode |
260 | Format: <bool> (0 = real, 1 = synthetic (default)) | 261 | Format: <bool> (0 = real, 1 = synthetic (default)) |
261 | 262 | ||
262 | atkbd.softrepeat= | 263 | atkbd.softrepeat= [HW] |
263 | [HW] Use software keyboard repeat | 264 | Use software keyboard repeat |
264 | 265 | ||
265 | autotest [IA64] | 266 | autotest [IA64] |
266 | 267 | ||
267 | awe= [HW,OSS] AWE32/SB32/AWE64 wave table synth | 268 | awe= [HW,OSS] AWE32/SB32/AWE64 wave table synth |
268 | Format: <io>,<memsize>,<isapnp> | 269 | Format: <io>,<memsize>,<isapnp> |
269 | 270 | ||
270 | aztcd= [HW,CD] Aztech CD268 CDROM driver | 271 | aztcd= [HW,CD] Aztech CD268 CDROM driver |
271 | Format: <io>,0x79 (?) | 272 | Format: <io>,0x79 (?) |
272 | 273 | ||
273 | baycom_epp= [HW,AX25] | 274 | baycom_epp= [HW,AX25] |
274 | Format: <io>,<mode> | 275 | Format: <io>,<mode> |
275 | 276 | ||
276 | baycom_par= [HW,AX25] BayCom Parallel Port AX.25 Modem | 277 | baycom_par= [HW,AX25] BayCom Parallel Port AX.25 Modem |
277 | Format: <io>,<mode> | 278 | Format: <io>,<mode> |
278 | See header of drivers/net/hamradio/baycom_par.c. | 279 | See header of drivers/net/hamradio/baycom_par.c. |
279 | 280 | ||
280 | baycom_ser_fdx= [HW,AX25] BayCom Serial Port AX.25 Modem (Full Duplex Mode) | 281 | baycom_ser_fdx= [HW,AX25] |
282 | BayCom Serial Port AX.25 Modem (Full Duplex Mode) | ||
281 | Format: <io>,<irq>,<mode>[,<baud>] | 283 | Format: <io>,<irq>,<mode>[,<baud>] |
282 | See header of drivers/net/hamradio/baycom_ser_fdx.c. | 284 | See header of drivers/net/hamradio/baycom_ser_fdx.c. |
283 | 285 | ||
284 | baycom_ser_hdx= [HW,AX25] BayCom Serial Port AX.25 Modem (Half Duplex Mode) | 286 | baycom_ser_hdx= [HW,AX25] |
287 | BayCom Serial Port AX.25 Modem (Half Duplex Mode) | ||
285 | Format: <io>,<irq>,<mode> | 288 | Format: <io>,<irq>,<mode> |
286 | See header of drivers/net/hamradio/baycom_ser_hdx.c. | 289 | See header of drivers/net/hamradio/baycom_ser_hdx.c. |
287 | 290 | ||
@@ -292,7 +295,8 @@ running once the system is up. | |||
292 | blkmtd_count= | 295 | blkmtd_count= |
293 | 296 | ||
294 | bttv.card= [HW,V4L] bttv (bt848 + bt878 based grabber cards) | 297 | bttv.card= [HW,V4L] bttv (bt848 + bt878 based grabber cards) |
295 | bttv.radio= Most important insmod options are available as kernel args too. | 298 | bttv.radio= Most important insmod options are available as |
299 | kernel args too. | ||
296 | bttv.pll= See Documentation/video4linux/bttv/Insmod-options | 300 | bttv.pll= See Documentation/video4linux/bttv/Insmod-options |
297 | bttv.tuner= and Documentation/video4linux/bttv/CARDLIST | 301 | bttv.tuner= and Documentation/video4linux/bttv/CARDLIST |
298 | 302 | ||
@@ -318,15 +322,17 @@ running once the system is up. | |||
318 | checkreqprot [SELINUX] Set initial checkreqprot flag value. | 322 | checkreqprot [SELINUX] Set initial checkreqprot flag value. |
319 | Format: { "0" | "1" } | 323 | Format: { "0" | "1" } |
320 | See security/selinux/Kconfig help text. | 324 | See security/selinux/Kconfig help text. |
321 | 0 -- check protection applied by kernel (includes any implied execute protection). | 325 | 0 -- check protection applied by kernel (includes |
326 | any implied execute protection). | ||
322 | 1 -- check protection requested by application. | 327 | 1 -- check protection requested by application. |
323 | Default value is set via a kernel config option. | 328 | Default value is set via a kernel config option. |
324 | Value can be changed at runtime via /selinux/checkreqprot. | 329 | Value can be changed at runtime via |
325 | 330 | /selinux/checkreqprot. | |
326 | clock= [BUGS=IA-32, HW] gettimeofday timesource override. | 331 | |
332 | clock= [BUGS=IA-32,HW] gettimeofday timesource override. | ||
327 | Forces specified timesource (if avaliable) to be used | 333 | Forces specified timesource (if avaliable) to be used |
328 | when calculating gettimeofday(). If specicified timesource | 334 | when calculating gettimeofday(). If specicified |
329 | is not avalible, it defaults to PIT. | 335 | timesource is not avalible, it defaults to PIT. |
330 | Format: { pit | tsc | cyclone | pmtmr } | 336 | Format: { pit | tsc | cyclone | pmtmr } |
331 | 337 | ||
332 | hpet= [IA-32,HPET] option to disable HPET and use PIT. | 338 | hpet= [IA-32,HPET] option to disable HPET and use PIT. |
@@ -336,17 +342,19 @@ running once the system is up. | |||
336 | Format: { auto | [<io>,][<irq>] } | 342 | Format: { auto | [<io>,][<irq>] } |
337 | 343 | ||
338 | com20020= [HW,NET] ARCnet - COM20020 chipset | 344 | com20020= [HW,NET] ARCnet - COM20020 chipset |
339 | Format: <io>[,<irq>[,<nodeID>[,<backplane>[,<ckp>[,<timeout>]]]]] | 345 | Format: |
346 | <io>[,<irq>[,<nodeID>[,<backplane>[,<ckp>[,<timeout>]]]]] | ||
340 | 347 | ||
341 | com90io= [HW,NET] ARCnet - COM90xx chipset (IO-mapped buffers) | 348 | com90io= [HW,NET] ARCnet - COM90xx chipset (IO-mapped buffers) |
342 | Format: <io>[,<irq>] | 349 | Format: <io>[,<irq>] |
343 | 350 | ||
344 | com90xx= [HW,NET] ARCnet - COM90xx chipset (memory-mapped buffers) | 351 | com90xx= [HW,NET] |
352 | ARCnet - COM90xx chipset (memory-mapped buffers) | ||
345 | Format: <io>[,<irq>[,<memstart>]] | 353 | Format: <io>[,<irq>[,<memstart>]] |
346 | 354 | ||
347 | condev= [HW,S390] console device | 355 | condev= [HW,S390] console device |
348 | conmode= | 356 | conmode= |
349 | 357 | ||
350 | console= [KNL] Output console device and options. | 358 | console= [KNL] Output console device and options. |
351 | 359 | ||
352 | tty<n> Use the virtual console device <n>. | 360 | tty<n> Use the virtual console device <n>. |
@@ -367,7 +375,8 @@ running once the system is up. | |||
367 | options are the same as for ttyS, above. | 375 | options are the same as for ttyS, above. |
368 | 376 | ||
369 | cpcihp_generic= [HW,PCI] Generic port I/O CompactPCI driver | 377 | cpcihp_generic= [HW,PCI] Generic port I/O CompactPCI driver |
370 | Format: <first_slot>,<last_slot>,<port>,<enum_bit>[,<debug>] | 378 | Format: |
379 | <first_slot>,<last_slot>,<port>,<enum_bit>[,<debug>] | ||
371 | 380 | ||
372 | cpia_pp= [HW,PPT] | 381 | cpia_pp= [HW,PPT] |
373 | Format: { parport<nr> | auto | none } | 382 | Format: { parport<nr> | auto | none } |
@@ -384,10 +393,10 @@ running once the system is up. | |||
384 | 393 | ||
385 | cs89x0_media= [HW,NET] | 394 | cs89x0_media= [HW,NET] |
386 | Format: { rj45 | aui | bnc } | 395 | Format: { rj45 | aui | bnc } |
387 | 396 | ||
388 | cyclades= [HW,SERIAL] Cyclades multi-serial port adapter. | 397 | cyclades= [HW,SERIAL] Cyclades multi-serial port adapter. |
389 | 398 | ||
390 | dasd= [HW,NET] | 399 | dasd= [HW,NET] |
391 | See header of drivers/s390/block/dasd_devmap.c. | 400 | See header of drivers/s390/block/dasd_devmap.c. |
392 | 401 | ||
393 | db9.dev[2|3]= [HW,JOY] Multisystem joystick support via parallel port | 402 | db9.dev[2|3]= [HW,JOY] Multisystem joystick support via parallel port |
@@ -406,7 +415,7 @@ running once the system is up. | |||
406 | 415 | ||
407 | dhash_entries= [KNL] | 416 | dhash_entries= [KNL] |
408 | Set number of hash buckets for dentry cache. | 417 | Set number of hash buckets for dentry cache. |
409 | 418 | ||
410 | digi= [HW,SERIAL] | 419 | digi= [HW,SERIAL] |
411 | IO parameters + enable/disable command. | 420 | IO parameters + enable/disable command. |
412 | 421 | ||
@@ -424,11 +433,11 @@ running once the system is up. | |||
424 | 433 | ||
425 | dtc3181e= [HW,SCSI] | 434 | dtc3181e= [HW,SCSI] |
426 | 435 | ||
427 | earlyprintk= [IA-32, X86-64] | 436 | earlyprintk= [IA-32,X86-64] |
428 | earlyprintk=vga | 437 | earlyprintk=vga |
429 | earlyprintk=serial[,ttySn[,baudrate]] | 438 | earlyprintk=serial[,ttySn[,baudrate]] |
430 | 439 | ||
431 | Append ,keep to not disable it when the real console | 440 | Append ",keep" to not disable it when the real console |
432 | takes over. | 441 | takes over. |
433 | 442 | ||
434 | Only vga or serial at a time, not both. | 443 | Only vga or serial at a time, not both. |
@@ -451,7 +460,7 @@ running once the system is up. | |||
451 | Format: {"of[f]" | "sk[ipmbr]"} | 460 | Format: {"of[f]" | "sk[ipmbr]"} |
452 | See comment in arch/i386/boot/edd.S | 461 | See comment in arch/i386/boot/edd.S |
453 | 462 | ||
454 | eicon= [HW,ISDN] | 463 | eicon= [HW,ISDN] |
455 | Format: <id>,<membase>,<irq> | 464 | Format: <id>,<membase>,<irq> |
456 | 465 | ||
457 | eisa_irq_edge= [PARISC,HW] | 466 | eisa_irq_edge= [PARISC,HW] |
@@ -462,12 +471,13 @@ running once the system is up. | |||
462 | arch/i386/kernel/cpu/cpufreq/elanfreq.c. | 471 | arch/i386/kernel/cpu/cpufreq/elanfreq.c. |
463 | 472 | ||
464 | elevator= [IOSCHED] | 473 | elevator= [IOSCHED] |
465 | Format: {"as"|"cfq"|"deadline"|"noop"} | 474 | Format: {"as" | "cfq" | "deadline" | "noop"} |
466 | See Documentation/block/as-iosched.txt | 475 | See Documentation/block/as-iosched.txt and |
467 | and Documentation/block/deadline-iosched.txt for details. | 476 | Documentation/block/deadline-iosched.txt for details. |
477 | |||
468 | elfcorehdr= [IA-32] | 478 | elfcorehdr= [IA-32] |
469 | Specifies physical address of start of kernel core image | 479 | Specifies physical address of start of kernel core |
470 | elf header. | 480 | image elf header. |
471 | See Documentation/kdump.txt for details. | 481 | See Documentation/kdump.txt for details. |
472 | 482 | ||
473 | enforcing [SELINUX] Set initial enforcing status. | 483 | enforcing [SELINUX] Set initial enforcing status. |
@@ -485,7 +495,7 @@ running once the system is up. | |||
485 | es1371= [HW,OSS] | 495 | es1371= [HW,OSS] |
486 | Format: <spdif>,[<nomix>,[<amplifier>]] | 496 | Format: <spdif>,[<nomix>,[<amplifier>]] |
487 | See also header of sound/oss/es1371.c. | 497 | See also header of sound/oss/es1371.c. |
488 | 498 | ||
489 | ether= [HW,NET] Ethernet cards parameters | 499 | ether= [HW,NET] Ethernet cards parameters |
490 | This option is obsoleted by the "netdev=" option, which | 500 | This option is obsoleted by the "netdev=" option, which |
491 | has equivalent usage. See its documentation for details. | 501 | has equivalent usage. See its documentation for details. |
@@ -526,12 +536,13 @@ running once the system is up. | |||
526 | 536 | ||
527 | gus= [HW,OSS] | 537 | gus= [HW,OSS] |
528 | Format: <io>,<irq>,<dma>,<dma16> | 538 | Format: <io>,<irq>,<dma>,<dma16> |
529 | 539 | ||
530 | gvp11= [HW,SCSI] | 540 | gvp11= [HW,SCSI] |
531 | 541 | ||
532 | hashdist= [KNL,NUMA] Large hashes allocated during boot | 542 | hashdist= [KNL,NUMA] Large hashes allocated during boot |
533 | are distributed across NUMA nodes. Defaults on | 543 | are distributed across NUMA nodes. Defaults on |
534 | for IA-64, off otherwise. | 544 | for IA-64, off otherwise. |
545 | Format: 0 | 1 (for off | on) | ||
535 | 546 | ||
536 | hcl= [IA-64] SGI's Hardware Graph compatibility layer | 547 | hcl= [IA-64] SGI's Hardware Graph compatibility layer |
537 | 548 | ||
@@ -595,13 +606,13 @@ running once the system is up. | |||
595 | ide?= [HW] (E)IDE subsystem | 606 | ide?= [HW] (E)IDE subsystem |
596 | Format: ide?=noprobe or chipset specific parameters. | 607 | Format: ide?=noprobe or chipset specific parameters. |
597 | See Documentation/ide.txt. | 608 | See Documentation/ide.txt. |
598 | 609 | ||
599 | idebus= [HW] (E)IDE subsystem - VLB/PCI bus speed | 610 | idebus= [HW] (E)IDE subsystem - VLB/PCI bus speed |
600 | See Documentation/ide.txt. | 611 | See Documentation/ide.txt. |
601 | 612 | ||
602 | idle= [HW] | 613 | idle= [HW] |
603 | Format: idle=poll or idle=halt | 614 | Format: idle=poll or idle=halt |
604 | 615 | ||
605 | ihash_entries= [KNL] | 616 | ihash_entries= [KNL] |
606 | Set number of hash buckets for inode cache. | 617 | Set number of hash buckets for inode cache. |
607 | 618 | ||
@@ -649,7 +660,7 @@ running once the system is up. | |||
649 | firmware running. | 660 | firmware running. |
650 | 661 | ||
651 | isapnp= [ISAPNP] | 662 | isapnp= [ISAPNP] |
652 | Format: <RDP>, <reset>, <pci_scan>, <verbosity> | 663 | Format: <RDP>,<reset>,<pci_scan>,<verbosity> |
653 | 664 | ||
654 | isolcpus= [KNL,SMP] Isolate CPUs from the general scheduler. | 665 | isolcpus= [KNL,SMP] Isolate CPUs from the general scheduler. |
655 | Format: <cpu number>,...,<cpu number> | 666 | Format: <cpu number>,...,<cpu number> |
@@ -661,32 +672,33 @@ running once the system is up. | |||
661 | "number of CPUs in system - 1". | 672 | "number of CPUs in system - 1". |
662 | 673 | ||
663 | This option is the preferred way to isolate CPUs. The | 674 | This option is the preferred way to isolate CPUs. The |
664 | alternative - manually setting the CPU mask of all tasks | 675 | alternative -- manually setting the CPU mask of all |
665 | in the system can cause problems and suboptimal load | 676 | tasks in the system -- can cause problems and |
666 | balancer performance. | 677 | suboptimal load balancer performance. |
667 | 678 | ||
668 | isp16= [HW,CD] | 679 | isp16= [HW,CD] |
669 | Format: <io>,<irq>,<dma>,<setup> | 680 | Format: <io>,<irq>,<dma>,<setup> |
670 | 681 | ||
671 | iucv= [HW,NET] | 682 | iucv= [HW,NET] |
672 | 683 | ||
673 | js= [HW,JOY] Analog joystick | 684 | js= [HW,JOY] Analog joystick |
674 | See Documentation/input/joystick.txt. | 685 | See Documentation/input/joystick.txt. |
675 | 686 | ||
676 | keepinitrd [HW,ARM] | 687 | keepinitrd [HW,ARM] |
677 | 688 | ||
678 | kstack=N [IA-32, X86-64] Print N words from the kernel stack | 689 | kstack=N [IA-32,X86-64] Print N words from the kernel stack |
679 | in oops dumps. | 690 | in oops dumps. |
680 | 691 | ||
681 | l2cr= [PPC] | 692 | l2cr= [PPC] |
682 | 693 | ||
683 | lapic [IA-32,APIC] Enable the local APIC even if BIOS disabled it. | 694 | lapic [IA-32,APIC] Enable the local APIC even if BIOS |
695 | disabled it. | ||
684 | 696 | ||
685 | lasi= [HW,SCSI] PARISC LASI driver for the 53c700 chip | 697 | lasi= [HW,SCSI] PARISC LASI driver for the 53c700 chip |
686 | Format: addr:<io>,irq:<irq> | 698 | Format: addr:<io>,irq:<irq> |
687 | 699 | ||
688 | llsc*= [IA64] | 700 | llsc*= [IA64] See function print_params() in |
689 | See function print_params() in arch/ia64/sn/kernel/llsc4.c. | 701 | arch/ia64/sn/kernel/llsc4.c. |
690 | 702 | ||
691 | load_ramdisk= [RAM] List of ramdisks to load from floppy | 703 | load_ramdisk= [RAM] List of ramdisks to load from floppy |
692 | See Documentation/ramdisk.txt. | 704 | See Documentation/ramdisk.txt. |
@@ -713,8 +725,9 @@ running once the system is up. | |||
713 | 7 (KERN_DEBUG) debug-level messages | 725 | 7 (KERN_DEBUG) debug-level messages |
714 | 726 | ||
715 | log_buf_len=n Sets the size of the printk ring buffer, in bytes. | 727 | log_buf_len=n Sets the size of the printk ring buffer, in bytes. |
716 | Format is n, nk, nM. n must be a power of two. The | 728 | Format: { n | nk | nM } |
717 | default is set in kernel config. | 729 | n must be a power of two. The default size |
730 | is set in the kernel config file. | ||
718 | 731 | ||
719 | lp=0 [LP] Specify parallel ports to use, e.g, | 732 | lp=0 [LP] Specify parallel ports to use, e.g, |
720 | lp=port[,port...] lp=none,parport0 (lp0 not configured, lp1 uses | 733 | lp=port[,port...] lp=none,parport0 (lp0 not configured, lp1 uses |
@@ -750,23 +763,23 @@ running once the system is up. | |||
750 | ltpc= [NET] | 763 | ltpc= [NET] |
751 | Format: <io>,<irq>,<dma> | 764 | Format: <io>,<irq>,<dma> |
752 | 765 | ||
753 | mac5380= [HW,SCSI] | 766 | mac5380= [HW,SCSI] Format: |
754 | Format: <can_queue>,<cmd_per_lun>,<sg_tablesize>,<hostid>,<use_tags> | 767 | <can_queue>,<cmd_per_lun>,<sg_tablesize>,<hostid>,<use_tags> |
755 | 768 | ||
756 | mac53c9x= [HW,SCSI] | 769 | mac53c9x= [HW,SCSI] Format: |
757 | Format: <num_esps>,<disconnect>,<nosync>,<can_queue>,<cmd_per_lun>,<sg_tablesize>,<hostid>,<use_tags> | 770 | <num_esps>,<disconnect>,<nosync>,<can_queue>,<cmd_per_lun>,<sg_tablesize>,<hostid>,<use_tags> |
758 | 771 | ||
759 | machvec= [IA64] | 772 | machvec= [IA64] Force the use of a particular machine-vector |
760 | Force the use of a particular machine-vector (machvec) in a generic | 773 | (machvec) in a generic kernel. |
761 | kernel. Example: machvec=hpzx1_swiotlb | 774 | Example: machvec=hpzx1_swiotlb |
762 | 775 | ||
763 | mad16= [HW,OSS] | 776 | mad16= [HW,OSS] Format: |
764 | Format: <io>,<irq>,<dma>,<dma16>,<mpu_io>,<mpu_irq>,<joystick> | 777 | <io>,<irq>,<dma>,<dma16>,<mpu_io>,<mpu_irq>,<joystick> |
765 | 778 | ||
766 | maui= [HW,OSS] | 779 | maui= [HW,OSS] |
767 | Format: <io>,<irq> | 780 | Format: <io>,<irq> |
768 | 781 | ||
769 | max_loop= [LOOP] Maximum number of loopback devices that can | 782 | max_loop= [LOOP] Maximum number of loopback devices that can |
770 | be mounted | 783 | be mounted |
771 | Format: <1-256> | 784 | Format: <1-256> |
772 | 785 | ||
@@ -776,11 +789,11 @@ running once the system is up. | |||
776 | max_addr=[KMG] [KNL,BOOT,ia64] All physical memory greater than or | 789 | max_addr=[KMG] [KNL,BOOT,ia64] All physical memory greater than or |
777 | equal to this physical address is ignored. | 790 | equal to this physical address is ignored. |
778 | 791 | ||
779 | max_luns= [SCSI] Maximum number of LUNs to probe | 792 | max_luns= [SCSI] Maximum number of LUNs to probe. |
780 | Should be between 1 and 2^32-1. | 793 | Should be between 1 and 2^32-1. |
781 | 794 | ||
782 | max_report_luns= | 795 | max_report_luns= |
783 | [SCSI] Maximum number of LUNs received | 796 | [SCSI] Maximum number of LUNs received. |
784 | Should be between 1 and 16384. | 797 | Should be between 1 and 16384. |
785 | 798 | ||
786 | mca-pentium [BUGS=IA-32] | 799 | mca-pentium [BUGS=IA-32] |
@@ -796,11 +809,11 @@ running once the system is up. | |||
796 | 809 | ||
797 | md= [HW] RAID subsystems devices and level | 810 | md= [HW] RAID subsystems devices and level |
798 | See Documentation/md.txt. | 811 | See Documentation/md.txt. |
799 | 812 | ||
800 | mdacon= [MDA] | 813 | mdacon= [MDA] |
801 | Format: <first>,<last> | 814 | Format: <first>,<last> |
802 | Specifies range of consoles to be captured by the MDA. | 815 | Specifies range of consoles to be captured by the MDA. |
803 | 816 | ||
804 | mem=nn[KMG] [KNL,BOOT] Force usage of a specific amount of memory | 817 | mem=nn[KMG] [KNL,BOOT] Force usage of a specific amount of memory |
805 | Amount of memory to be used when the kernel is not able | 818 | Amount of memory to be used when the kernel is not able |
806 | to see the whole system memory or for test. | 819 | to see the whole system memory or for test. |
@@ -851,15 +864,15 @@ running once the system is up. | |||
851 | MTD_Partition= [MTD] | 864 | MTD_Partition= [MTD] |
852 | Format: <name>,<region-number>,<size>,<offset> | 865 | Format: <name>,<region-number>,<size>,<offset> |
853 | 866 | ||
854 | MTD_Region= [MTD] | 867 | MTD_Region= [MTD] Format: |
855 | Format: <name>,<region-number>[,<base>,<size>,<buswidth>,<altbuswidth>] | 868 | <name>,<region-number>[,<base>,<size>,<buswidth>,<altbuswidth>] |
856 | 869 | ||
857 | mtdparts= [MTD] | 870 | mtdparts= [MTD] |
858 | See drivers/mtd/cmdline.c. | 871 | See drivers/mtd/cmdline.c. |
859 | 872 | ||
860 | mtouchusb.raw_coordinates= | 873 | mtouchusb.raw_coordinates= |
861 | [HW] Make the MicroTouch USB driver use raw coordinates ('y', default) | 874 | [HW] Make the MicroTouch USB driver use raw coordinates |
862 | or cooked coordinates ('n') | 875 | ('y', default) or cooked coordinates ('n') |
863 | 876 | ||
864 | n2= [NET] SDL Inc. RISCom/N2 synchronous serial card | 877 | n2= [NET] SDL Inc. RISCom/N2 synchronous serial card |
865 | 878 | ||
@@ -880,7 +893,9 @@ running once the system is up. | |||
880 | Format: <irq>,<io>,<mem_start>,<mem_end>,<name> | 893 | Format: <irq>,<io>,<mem_start>,<mem_end>,<name> |
881 | Note that mem_start is often overloaded to mean | 894 | Note that mem_start is often overloaded to mean |
882 | something different and driver-specific. | 895 | something different and driver-specific. |
883 | 896 | This usage is only documented in each driver source | |
897 | file if at all. | ||
898 | |||
884 | nfsaddrs= [NFS] | 899 | nfsaddrs= [NFS] |
885 | See Documentation/nfsroot.txt. | 900 | See Documentation/nfsroot.txt. |
886 | 901 | ||
@@ -893,8 +908,8 @@ running once the system is up. | |||
893 | emulation library even if a 387 maths coprocessor | 908 | emulation library even if a 387 maths coprocessor |
894 | is present. | 909 | is present. |
895 | 910 | ||
896 | noalign [KNL,ARM] | 911 | noalign [KNL,ARM] |
897 | 912 | ||
898 | noapic [SMP,APIC] Tells the kernel to not make use of any | 913 | noapic [SMP,APIC] Tells the kernel to not make use of any |
899 | IOAPICs that may be present in the system. | 914 | IOAPICs that may be present in the system. |
900 | 915 | ||
@@ -905,19 +920,19 @@ running once the system is up. | |||
905 | on "Classic" PPC cores. | 920 | on "Classic" PPC cores. |
906 | 921 | ||
907 | nocache [ARM] | 922 | nocache [ARM] |
908 | 923 | ||
909 | nodisconnect [HW,SCSI,M68K] Disables SCSI disconnects. | 924 | nodisconnect [HW,SCSI,M68K] Disables SCSI disconnects. |
910 | 925 | ||
911 | noexec [IA-64] | 926 | noexec [IA-64] |
912 | 927 | ||
913 | noexec [IA-32, X86-64] | 928 | noexec [IA-32,X86-64] |
914 | noexec=on: enable non-executable mappings (default) | 929 | noexec=on: enable non-executable mappings (default) |
915 | noexec=off: disable nn-executable mappings | 930 | noexec=off: disable nn-executable mappings |
916 | 931 | ||
917 | nofxsr [BUGS=IA-32] | 932 | nofxsr [BUGS=IA-32] |
918 | 933 | ||
919 | nohlt [BUGS=ARM] | 934 | nohlt [BUGS=ARM] |
920 | 935 | ||
921 | no-hlt [BUGS=IA-32] Tells the kernel that the hlt | 936 | no-hlt [BUGS=IA-32] Tells the kernel that the hlt |
922 | instruction doesn't work correctly and not to | 937 | instruction doesn't work correctly and not to |
923 | use it. | 938 | use it. |
@@ -948,8 +963,9 @@ running once the system is up. | |||
948 | 963 | ||
949 | noresidual [PPC] Don't use residual data on PReP machines. | 964 | noresidual [PPC] Don't use residual data on PReP machines. |
950 | 965 | ||
951 | noresume [SWSUSP] Disables resume and restore original swap space. | 966 | noresume [SWSUSP] Disables resume and restores original swap |
952 | 967 | space. | |
968 | |||
953 | no-scroll [VGA] Disables scrollback. | 969 | no-scroll [VGA] Disables scrollback. |
954 | This is required for the Braillex ib80-piezo Braille | 970 | This is required for the Braillex ib80-piezo Braille |
955 | reader made by F.H. Papenmeier (Germany). | 971 | reader made by F.H. Papenmeier (Germany). |
@@ -965,16 +981,16 @@ running once the system is up. | |||
965 | nousb [USB] Disable the USB subsystem | 981 | nousb [USB] Disable the USB subsystem |
966 | 982 | ||
967 | nowb [ARM] | 983 | nowb [ARM] |
968 | 984 | ||
969 | opl3= [HW,OSS] | 985 | opl3= [HW,OSS] |
970 | Format: <io> | 986 | Format: <io> |
971 | 987 | ||
972 | opl3sa= [HW,OSS] | 988 | opl3sa= [HW,OSS] |
973 | Format: <io>,<irq>,<dma>,<dma2>,<mpu_io>,<mpu_irq> | 989 | Format: <io>,<irq>,<dma>,<dma2>,<mpu_io>,<mpu_irq> |
974 | 990 | ||
975 | opl3sa2= [HW,OSS] | 991 | opl3sa2= [HW,OSS] Format: |
976 | Format: <io>,<irq>,<dma>,<dma2>,<mss_io>,<mpu_io>,<ymode>,<loopback>[,<isapnp>,<multiple] | 992 | <io>,<irq>,<dma>,<dma2>,<mss_io>,<mpu_io>,<ymode>,<loopback>[,<isapnp>,<multiple] |
977 | 993 | ||
978 | oprofile.timer= [HW] | 994 | oprofile.timer= [HW] |
979 | Use timer interrupt instead of performance counters | 995 | Use timer interrupt instead of performance counters |
980 | 996 | ||
@@ -993,36 +1009,33 @@ running once the system is up. | |||
993 | Format: <parport#> | 1009 | Format: <parport#> |
994 | parkbd.mode= [HW] Parallel port keyboard adapter mode of operation, | 1010 | parkbd.mode= [HW] Parallel port keyboard adapter mode of operation, |
995 | 0 for XT, 1 for AT (default is AT). | 1011 | 0 for XT, 1 for AT (default is AT). |
996 | Format: <mode> | 1012 | Format: <mode> |
997 | 1013 | ||
998 | parport=0 [HW,PPT] Specify parallel ports. 0 disables. | 1014 | parport= [HW,PPT] Specify parallel ports. 0 disables. |
999 | parport=auto Use 'auto' to force the driver to use | 1015 | Format: { 0 | auto | 0xBBB[,IRQ[,DMA]] } |
1000 | parport=0xBBB[,IRQ[,DMA]] any IRQ/DMA settings detected (the | 1016 | Use 'auto' to force the driver to use any |
1001 | default is to ignore detected IRQ/DMA | 1017 | IRQ/DMA settings detected (the default is to |
1002 | settings because of possible | 1018 | ignore detected IRQ/DMA settings because of |
1003 | conflicts). You can specify the base | 1019 | possible conflicts). You can specify the base |
1004 | address, IRQ, and DMA settings; IRQ and | 1020 | address, IRQ, and DMA settings; IRQ and DMA |
1005 | DMA should be numbers, or 'auto' (for | 1021 | should be numbers, or 'auto' (for using detected |
1006 | using detected settings on that | 1022 | settings on that particular port), or 'nofifo' |
1007 | particular port), or 'nofifo' (to avoid | 1023 | (to avoid using a FIFO even if it is detected). |
1008 | using a FIFO even if it is detected). | 1024 | Parallel ports are assigned in the order they |
1009 | Parallel ports are assigned in the | 1025 | are specified on the command line, starting |
1010 | order they are specified on the command | 1026 | with parport0. |
1011 | line, starting with parport0. | 1027 | |
1012 | 1028 | parport_init_mode= [HW,PPT] | |
1013 | parport_init_mode= | 1029 | Configure VIA parallel port to operate in |
1014 | [HW,PPT] Configure VIA parallel port to | 1030 | a specific mode. This is necessary on Pegasos |
1015 | operate in specific mode. This is | 1031 | computer where firmware has no options for setting |
1016 | necessary on Pegasos computer where | 1032 | up parallel port mode and sets it to spp. |
1017 | firmware has no options for setting up | 1033 | Currently this function knows 686a and 8231 chips. |
1018 | parallel port mode and sets it to | ||
1019 | spp. Currently this function knows | ||
1020 | 686a and 8231 chips. | ||
1021 | Format: [spp|ps2|epp|ecp|ecpepp] | 1034 | Format: [spp|ps2|epp|ecp|ecpepp] |
1022 | 1035 | ||
1023 | pas2= [HW,OSS] | 1036 | pas2= [HW,OSS] Format: |
1024 | Format: <io>,<irq>,<dma>,<dma16>,<sb_io>,<sb_irq>,<sb_dma>,<sb_dma16> | 1037 | <io>,<irq>,<dma>,<dma16>,<sb_io>,<sb_irq>,<sb_dma>,<sb_dma16> |
1025 | 1038 | ||
1026 | pas16= [HW,SCSI] | 1039 | pas16= [HW,SCSI] |
1027 | See header of drivers/scsi/pas16.c. | 1040 | See header of drivers/scsi/pas16.c. |
1028 | 1041 | ||
@@ -1032,64 +1045,67 @@ running once the system is up. | |||
1032 | See header of drivers/block/paride/pcd.c. | 1045 | See header of drivers/block/paride/pcd.c. |
1033 | See also Documentation/paride.txt. | 1046 | See also Documentation/paride.txt. |
1034 | 1047 | ||
1035 | pci=option[,option...] [PCI] various PCI subsystem options: | 1048 | pci=option[,option...] [PCI] various PCI subsystem options: |
1036 | off [IA-32] don't probe for the PCI bus | 1049 | off [IA-32] don't probe for the PCI bus |
1037 | bios [IA-32] force use of PCI BIOS, don't access | 1050 | bios [IA-32] force use of PCI BIOS, don't access |
1038 | the hardware directly. Use this if your machine | 1051 | the hardware directly. Use this if your machine |
1039 | has a non-standard PCI host bridge. | 1052 | has a non-standard PCI host bridge. |
1040 | nobios [IA-32] disallow use of PCI BIOS, only direct | 1053 | nobios [IA-32] disallow use of PCI BIOS, only direct |
1041 | hardware access methods are allowed. Use this | 1054 | hardware access methods are allowed. Use this |
1042 | if you experience crashes upon bootup and you | 1055 | if you experience crashes upon bootup and you |
1043 | suspect they are caused by the BIOS. | 1056 | suspect they are caused by the BIOS. |
1044 | conf1 [IA-32] Force use of PCI Configuration Mechanism 1. | 1057 | conf1 [IA-32] Force use of PCI Configuration |
1045 | conf2 [IA-32] Force use of PCI Configuration Mechanism 2. | 1058 | Mechanism 1. |
1046 | nosort [IA-32] Don't sort PCI devices according to | 1059 | conf2 [IA-32] Force use of PCI Configuration |
1047 | order given by the PCI BIOS. This sorting is done | 1060 | Mechanism 2. |
1048 | to get a device order compatible with older kernels. | 1061 | nosort [IA-32] Don't sort PCI devices according to |
1049 | biosirq [IA-32] Use PCI BIOS calls to get the interrupt | 1062 | order given by the PCI BIOS. This sorting is |
1050 | routing table. These calls are known to be buggy | 1063 | done to get a device order compatible with |
1051 | on several machines and they hang the machine when used, | 1064 | older kernels. |
1052 | but on other computers it's the only way to get the | 1065 | biosirq [IA-32] Use PCI BIOS calls to get the interrupt |
1053 | interrupt routing table. Try this option if the kernel | 1066 | routing table. These calls are known to be buggy |
1054 | is unable to allocate IRQs or discover secondary PCI | 1067 | on several machines and they hang the machine |
1055 | buses on your motherboard. | 1068 | when used, but on other computers it's the only |
1056 | rom [IA-32] Assign address space to expansion ROMs. | 1069 | way to get the interrupt routing table. Try |
1057 | Use with caution as certain devices share address | 1070 | this option if the kernel is unable to allocate |
1058 | decoders between ROMs and other resources. | 1071 | IRQs or discover secondary PCI buses on your |
1059 | irqmask=0xMMMM [IA-32] Set a bit mask of IRQs allowed to be assigned | 1072 | motherboard. |
1060 | automatically to PCI devices. You can make the kernel | 1073 | rom [IA-32] Assign address space to expansion ROMs. |
1061 | exclude IRQs of your ISA cards this way. | 1074 | Use with caution as certain devices share |
1075 | address decoders between ROMs and other | ||
1076 | resources. | ||
1077 | irqmask=0xMMMM [IA-32] Set a bit mask of IRQs allowed to be | ||
1078 | assigned automatically to PCI devices. You can | ||
1079 | make the kernel exclude IRQs of your ISA cards | ||
1080 | this way. | ||
1062 | pirqaddr=0xAAAAA [IA-32] Specify the physical address | 1081 | pirqaddr=0xAAAAA [IA-32] Specify the physical address |
1063 | of the PIRQ table (normally generated | 1082 | of the PIRQ table (normally generated |
1064 | by the BIOS) if it is outside the | 1083 | by the BIOS) if it is outside the |
1065 | F0000h-100000h range. | 1084 | F0000h-100000h range. |
1066 | lastbus=N [IA-32] Scan all buses till bus #N. Can be useful | 1085 | lastbus=N [IA-32] Scan all buses thru bus #N. Can be |
1067 | if the kernel is unable to find your secondary buses | 1086 | useful if the kernel is unable to find your |
1068 | and you want to tell it explicitly which ones they are. | 1087 | secondary buses and you want to tell it |
1069 | assign-busses [IA-32] Always assign all PCI bus | 1088 | explicitly which ones they are. |
1070 | numbers ourselves, overriding | 1089 | assign-busses [IA-32] Always assign all PCI bus |
1071 | whatever the firmware may have | 1090 | numbers ourselves, overriding |
1072 | done. | 1091 | whatever the firmware may have done. |
1073 | usepirqmask [IA-32] Honor the possible IRQ mask | 1092 | usepirqmask [IA-32] Honor the possible IRQ mask stored |
1074 | stored in the BIOS $PIR table. This is | 1093 | in the BIOS $PIR table. This is needed on |
1075 | needed on some systems with broken | 1094 | some systems with broken BIOSes, notably |
1076 | BIOSes, notably some HP Pavilion N5400 | 1095 | some HP Pavilion N5400 and Omnibook XE3 |
1077 | and Omnibook XE3 notebooks. This will | 1096 | notebooks. This will have no effect if ACPI |
1078 | have no effect if ACPI IRQ routing is | 1097 | IRQ routing is enabled. |
1079 | enabled. | 1098 | noacpi [IA-32] Do not use ACPI for IRQ routing |
1080 | noacpi [IA-32] Do not use ACPI for IRQ routing | 1099 | or for PCI scanning. |
1081 | or for PCI scanning. | 1100 | routeirq Do IRQ routing for all PCI devices. |
1082 | routeirq Do IRQ routing for all PCI devices. | 1101 | This is normally done in pci_enable_device(), |
1083 | This is normally done in pci_enable_device(), | 1102 | so this option is a temporary workaround |
1084 | so this option is a temporary workaround | 1103 | for broken drivers that don't call it. |
1085 | for broken drivers that don't call it. | 1104 | firmware [ARM] Do not re-enumerate the bus but instead |
1086 | 1105 | just use the configuration from the | |
1087 | firmware [ARM] Do not re-enumerate the bus but | 1106 | bootloader. This is currently used on |
1088 | instead just use the configuration | 1107 | IXP2000 systems where the bus has to be |
1089 | from the bootloader. This is currently | 1108 | configured a certain way for adjunct CPUs. |
1090 | used on IXP2000 systems where the | ||
1091 | bus has to be configured a certain way | ||
1092 | for adjunct CPUs. | ||
1093 | 1109 | ||
1094 | pcmv= [HW,PCMCIA] BadgePAD 4 | 1110 | pcmv= [HW,PCMCIA] BadgePAD 4 |
1095 | 1111 | ||
@@ -1127,19 +1143,20 @@ running once the system is up. | |||
1127 | [ISAPNP] Exclude DMAs for the autoconfiguration | 1143 | [ISAPNP] Exclude DMAs for the autoconfiguration |
1128 | 1144 | ||
1129 | pnp_reserve_io= [ISAPNP] Exclude I/O ports for the autoconfiguration | 1145 | pnp_reserve_io= [ISAPNP] Exclude I/O ports for the autoconfiguration |
1130 | Ranges are in pairs (I/O port base and size). | 1146 | Ranges are in pairs (I/O port base and size). |
1131 | 1147 | ||
1132 | pnp_reserve_mem= | 1148 | pnp_reserve_mem= |
1133 | [ISAPNP] Exclude memory regions for the autoconfiguration | 1149 | [ISAPNP] Exclude memory regions for the |
1150 | autoconfiguration. | ||
1134 | Ranges are in pairs (memory base and size). | 1151 | Ranges are in pairs (memory base and size). |
1135 | 1152 | ||
1136 | profile= [KNL] Enable kernel profiling via /proc/profile | 1153 | profile= [KNL] Enable kernel profiling via /proc/profile |
1137 | { schedule | <number> } | 1154 | Format: [schedule,]<number> |
1138 | (param: schedule - profile schedule points} | 1155 | Param: "schedule" - profile schedule points. |
1139 | (param: profile step/bucket size as a power of 2 for | 1156 | Param: <number> - step/bucket size as a power of 2 for |
1140 | statistical time based profiling) | 1157 | statistical time based profiling. |
1141 | 1158 | ||
1142 | processor.max_cstate= [HW, ACPI] | 1159 | processor.max_cstate= [HW,ACPI] |
1143 | Limit processor to maximum C-state | 1160 | Limit processor to maximum C-state |
1144 | max_cstate=9 overrides any DMI blacklist limit. | 1161 | max_cstate=9 overrides any DMI blacklist limit. |
1145 | 1162 | ||
@@ -1147,27 +1164,28 @@ running once the system is up. | |||
1147 | before loading. | 1164 | before loading. |
1148 | See Documentation/ramdisk.txt. | 1165 | See Documentation/ramdisk.txt. |
1149 | 1166 | ||
1150 | psmouse.proto= [HW,MOUSE] Highest PS2 mouse protocol extension to | 1167 | psmouse.proto= [HW,MOUSE] Highest PS2 mouse protocol extension to |
1151 | probe for (bare|imps|exps|lifebook|any). | 1168 | probe for; one of (bare|imps|exps|lifebook|any). |
1152 | psmouse.rate= [HW,MOUSE] Set desired mouse report rate, in reports | 1169 | psmouse.rate= [HW,MOUSE] Set desired mouse report rate, in reports |
1153 | per second. | 1170 | per second. |
1154 | psmouse.resetafter= | 1171 | psmouse.resetafter= [HW,MOUSE] |
1155 | [HW,MOUSE] Try to reset the device after so many bad packets | 1172 | Try to reset the device after so many bad packets |
1156 | (0 = never). | 1173 | (0 = never). |
1157 | psmouse.resolution= | 1174 | psmouse.resolution= |
1158 | [HW,MOUSE] Set desired mouse resolution, in dpi. | 1175 | [HW,MOUSE] Set desired mouse resolution, in dpi. |
1159 | psmouse.smartscroll= | 1176 | psmouse.smartscroll= |
1160 | [HW,MOUSE] Controls Logitech smartscroll autorepeat, | 1177 | [HW,MOUSE] Controls Logitech smartscroll autorepeat. |
1161 | 0 = disabled, 1 = enabled (default). | 1178 | 0 = disabled, 1 = enabled (default). |
1162 | 1179 | ||
1163 | pss= [HW,OSS] Personal Sound System (ECHO ESC614) | 1180 | pss= [HW,OSS] Personal Sound System (ECHO ESC614) |
1164 | Format: <io>,<mss_io>,<mss_irq>,<mss_dma>,<mpu_io>,<mpu_irq> | 1181 | Format: |
1182 | <io>,<mss_io>,<mss_irq>,<mss_dma>,<mpu_io>,<mpu_irq> | ||
1165 | 1183 | ||
1166 | pt. [PARIDE] | 1184 | pt. [PARIDE] |
1167 | See Documentation/paride.txt. | 1185 | See Documentation/paride.txt. |
1168 | 1186 | ||
1169 | quiet= [KNL] Disable log messages | 1187 | quiet= [KNL] Disable log messages |
1170 | 1188 | ||
1171 | r128= [HW,DRM] | 1189 | r128= [HW,DRM] |
1172 | 1190 | ||
1173 | raid= [HW,RAID] | 1191 | raid= [HW,RAID] |
@@ -1176,10 +1194,9 @@ running once the system is up. | |||
1176 | ramdisk= [RAM] Sizes of RAM disks in kilobytes [deprecated] | 1194 | ramdisk= [RAM] Sizes of RAM disks in kilobytes [deprecated] |
1177 | See Documentation/ramdisk.txt. | 1195 | See Documentation/ramdisk.txt. |
1178 | 1196 | ||
1179 | ramdisk_blocksize= | 1197 | ramdisk_blocksize= [RAM] |
1180 | [RAM] | ||
1181 | See Documentation/ramdisk.txt. | 1198 | See Documentation/ramdisk.txt. |
1182 | 1199 | ||
1183 | ramdisk_size= [RAM] Sizes of RAM disks in kilobytes | 1200 | ramdisk_size= [RAM] Sizes of RAM disks in kilobytes |
1184 | New name for the ramdisk parameter. | 1201 | New name for the ramdisk parameter. |
1185 | See Documentation/ramdisk.txt. | 1202 | See Documentation/ramdisk.txt. |
@@ -1195,7 +1212,8 @@ running once the system is up. | |||
1195 | 1212 | ||
1196 | reserve= [KNL,BUGS] Force the kernel to ignore some iomem area | 1213 | reserve= [KNL,BUGS] Force the kernel to ignore some iomem area |
1197 | 1214 | ||
1198 | resume= [SWSUSP] Specify the partition device for software suspension | 1215 | resume= [SWSUSP] |
1216 | Specify the partition device for software suspend | ||
1199 | 1217 | ||
1200 | rhash_entries= [KNL,NET] | 1218 | rhash_entries= [KNL,NET] |
1201 | Set number of hash buckets for route cache | 1219 | Set number of hash buckets for route cache |
@@ -1225,7 +1243,7 @@ running once the system is up. | |||
1225 | Format: <io>,<irq>,<dma>,<dma2> | 1243 | Format: <io>,<irq>,<dma>,<dma2> |
1226 | 1244 | ||
1227 | sbni= [NET] Granch SBNI12 leased line adapter | 1245 | sbni= [NET] Granch SBNI12 leased line adapter |
1228 | 1246 | ||
1229 | sbpcd= [HW,CD] Soundblaster CD adapter | 1247 | sbpcd= [HW,CD] Soundblaster CD adapter |
1230 | Format: <io>,<type> | 1248 | Format: <io>,<type> |
1231 | See a comment before function sbpcd_setup() in | 1249 | See a comment before function sbpcd_setup() in |
@@ -1258,21 +1276,20 @@ running once the system is up. | |||
1258 | 1276 | ||
1259 | serialnumber [BUGS=IA-32] | 1277 | serialnumber [BUGS=IA-32] |
1260 | 1278 | ||
1261 | sg_def_reserved_size= | 1279 | sg_def_reserved_size= [SCSI] |
1262 | [SCSI] | 1280 | |
1263 | |||
1264 | sgalaxy= [HW,OSS] | 1281 | sgalaxy= [HW,OSS] |
1265 | Format: <io>,<irq>,<dma>,<dma2>,<sgbase> | 1282 | Format: <io>,<irq>,<dma>,<dma2>,<sgbase> |
1266 | 1283 | ||
1267 | shapers= [NET] | 1284 | shapers= [NET] |
1268 | Maximal number of shapers. | 1285 | Maximal number of shapers. |
1269 | 1286 | ||
1270 | sim710= [SCSI,HW] | 1287 | sim710= [SCSI,HW] |
1271 | See header of drivers/scsi/sim710.c. | 1288 | See header of drivers/scsi/sim710.c. |
1272 | 1289 | ||
1273 | simeth= [IA-64] | 1290 | simeth= [IA-64] |
1274 | simscsi= | 1291 | simscsi= |
1275 | 1292 | ||
1276 | sjcd= [HW,CD] | 1293 | sjcd= [HW,CD] |
1277 | Format: <io>,<irq>,<dma> | 1294 | Format: <io>,<irq>,<dma> |
1278 | See header of drivers/cdrom/sjcd.c. | 1295 | See header of drivers/cdrom/sjcd.c. |
@@ -1403,10 +1420,10 @@ running once the system is up. | |||
1403 | snd-wavefront= [HW,ALSA] | 1420 | snd-wavefront= [HW,ALSA] |
1404 | 1421 | ||
1405 | snd-ymfpci= [HW,ALSA] | 1422 | snd-ymfpci= [HW,ALSA] |
1406 | 1423 | ||
1407 | sonicvibes= [HW,OSS] | 1424 | sonicvibes= [HW,OSS] |
1408 | Format: <reverb> | 1425 | Format: <reverb> |
1409 | 1426 | ||
1410 | sonycd535= [HW,CD] | 1427 | sonycd535= [HW,CD] |
1411 | Format: <io>[,<irq>] | 1428 | Format: <io>[,<irq>] |
1412 | 1429 | ||
@@ -1423,7 +1440,7 @@ running once the system is up. | |||
1423 | 1440 | ||
1424 | sscape= [HW,OSS] | 1441 | sscape= [HW,OSS] |
1425 | Format: <io>,<irq>,<dma>,<mpu_io>,<mpu_irq> | 1442 | Format: <io>,<irq>,<dma>,<mpu_io>,<mpu_irq> |
1426 | 1443 | ||
1427 | st= [HW,SCSI] SCSI tape parameters (buffers, etc.) | 1444 | st= [HW,SCSI] SCSI tape parameters (buffers, etc.) |
1428 | See Documentation/scsi/st.txt. | 1445 | See Documentation/scsi/st.txt. |
1429 | 1446 | ||
@@ -1446,7 +1463,7 @@ running once the system is up. | |||
1446 | stram_swap= [HW,M68k] | 1463 | stram_swap= [HW,M68k] |
1447 | 1464 | ||
1448 | swiotlb= [IA-64] Number of I/O TLB slabs | 1465 | swiotlb= [IA-64] Number of I/O TLB slabs |
1449 | 1466 | ||
1450 | switches= [HW,M68k] | 1467 | switches= [HW,M68k] |
1451 | 1468 | ||
1452 | sym53c416= [HW,SCSI] | 1469 | sym53c416= [HW,SCSI] |
@@ -1479,14 +1496,16 @@ running once the system is up. | |||
1479 | tp720= [HW,PS2] | 1496 | tp720= [HW,PS2] |
1480 | 1497 | ||
1481 | trix= [HW,OSS] MediaTrix AudioTrix Pro | 1498 | trix= [HW,OSS] MediaTrix AudioTrix Pro |
1482 | Format: <io>,<irq>,<dma>,<dma2>,<sb_io>,<sb_irq>,<sb_dma>,<mpu_io>,<mpu_irq> | 1499 | Format: |
1483 | 1500 | <io>,<irq>,<dma>,<dma2>,<sb_io>,<sb_irq>,<sb_dma>,<mpu_io>,<mpu_irq> | |
1501 | |||
1484 | tsdev.xres= [TS] Horizontal screen resolution. | 1502 | tsdev.xres= [TS] Horizontal screen resolution. |
1485 | tsdev.yres= [TS] Vertical screen resolution. | 1503 | tsdev.yres= [TS] Vertical screen resolution. |
1486 | 1504 | ||
1487 | turbografx.map[2|3]= | 1505 | turbografx.map[2|3]= [HW,JOY] |
1488 | [HW,JOY] TurboGraFX parallel port interface | 1506 | TurboGraFX parallel port interface |
1489 | Format: <port#>,<js1>,<js2>,<js3>,<js4>,<js5>,<js6>,<js7> | 1507 | Format: |
1508 | <port#>,<js1>,<js2>,<js3>,<js4>,<js5>,<js6>,<js7> | ||
1490 | See also Documentation/input/joystick-parport.txt | 1509 | See also Documentation/input/joystick-parport.txt |
1491 | 1510 | ||
1492 | u14-34f= [HW,SCSI] UltraStor 14F/34F SCSI host adapter | 1511 | u14-34f= [HW,SCSI] UltraStor 14F/34F SCSI host adapter |
@@ -1502,17 +1521,18 @@ running once the system is up. | |||
1502 | 1521 | ||
1503 | usbhid.mousepoll= | 1522 | usbhid.mousepoll= |
1504 | [USBHID] The interval which mice are to be polled at. | 1523 | [USBHID] The interval which mice are to be polled at. |
1505 | 1524 | ||
1506 | video= [FB] Frame buffer configuration | 1525 | video= [FB] Frame buffer configuration |
1507 | See Documentation/fb/modedb.txt. | 1526 | See Documentation/fb/modedb.txt. |
1508 | 1527 | ||
1509 | vga= [BOOT,IA-32] Select a particular video mode | 1528 | vga= [BOOT,IA-32] Select a particular video mode |
1510 | See Documentation/i386/boot.txt and Documentation/svga.txt. | 1529 | See Documentation/i386/boot.txt and |
1530 | Documentation/svga.txt. | ||
1511 | Use vga=ask for menu. | 1531 | Use vga=ask for menu. |
1512 | This is actually a boot loader parameter; the value is | 1532 | This is actually a boot loader parameter; the value is |
1513 | passed to the kernel using a special protocol. | 1533 | passed to the kernel using a special protocol. |
1514 | 1534 | ||
1515 | vmalloc=nn[KMG] [KNL,BOOT] forces the vmalloc area to have an exact | 1535 | vmalloc=nn[KMG] [KNL,BOOT] Forces the vmalloc area to have an exact |
1516 | size of <nn>. This can be used to increase the | 1536 | size of <nn>. This can be used to increase the |
1517 | minimum size (128MB on x86). It can also be used to | 1537 | minimum size (128MB on x86). It can also be used to |
1518 | decrease the size and leave more room for directly | 1538 | decrease the size and leave more room for directly |
@@ -1520,11 +1540,11 @@ running once the system is up. | |||
1520 | 1540 | ||
1521 | vmhalt= [KNL,S390] | 1541 | vmhalt= [KNL,S390] |
1522 | 1542 | ||
1523 | vmpoff= [KNL,S390] | 1543 | vmpoff= [KNL,S390] |
1524 | 1544 | ||
1525 | waveartist= [HW,OSS] | 1545 | waveartist= [HW,OSS] |
1526 | Format: <io>,<irq>,<dma>,<dma2> | 1546 | Format: <io>,<irq>,<dma>,<dma2> |
1527 | 1547 | ||
1528 | wd33c93= [HW,SCSI] | 1548 | wd33c93= [HW,SCSI] |
1529 | See header of drivers/scsi/wd33c93.c. | 1549 | See header of drivers/scsi/wd33c93.c. |
1530 | 1550 | ||
@@ -1538,21 +1558,25 @@ running once the system is up. | |||
1538 | xd_geo= See header of drivers/block/xd.c. | 1558 | xd_geo= See header of drivers/block/xd.c. |
1539 | 1559 | ||
1540 | xirc2ps_cs= [NET,PCMCIA] | 1560 | xirc2ps_cs= [NET,PCMCIA] |
1541 | Format: <irq>,<irq_mask>,<io>,<full_duplex>,<do_sound>,<lockup_hack>[,<irq2>[,<irq3>[,<irq4>]]] | 1561 | Format: |
1542 | 1562 | <irq>,<irq_mask>,<io>,<full_duplex>,<do_sound>,<lockup_hack>[,<irq2>[,<irq3>[,<irq4>]]] | |
1543 | 1563 | ||
1544 | 1564 | ||
1565 | ______________________________________________________________________ | ||
1545 | Changelog: | 1566 | Changelog: |
1546 | 1567 | ||
1568 | 2000-06-?? Mr. Unknown | ||
1547 | The last known update (for 2.4.0) - the changelog was not kept before. | 1569 | The last known update (for 2.4.0) - the changelog was not kept before. |
1548 | 2000-06-?? Mr. Unknown | ||
1549 | 1570 | ||
1571 | 2002-11-24 Petr Baudis <pasky@ucw.cz> | ||
1572 | Randy Dunlap <randy.dunlap@verizon.net> | ||
1550 | Update for 2.5.49, description for most of the options introduced, | 1573 | Update for 2.5.49, description for most of the options introduced, |
1551 | references to other documentation (C files, READMEs, ..), added S390, | 1574 | references to other documentation (C files, READMEs, ..), added S390, |
1552 | PPC, SPARC, MTD, ALSA and OSS category. Minor corrections and | 1575 | PPC, SPARC, MTD, ALSA and OSS category. Minor corrections and |
1553 | reformatting. | 1576 | reformatting. |
1554 | 2002-11-24 Petr Baudis <pasky@ucw.cz> | 1577 | |
1555 | Randy Dunlap <randy.dunlap@verizon.net> | 1578 | 2005-10-19 Randy Dunlap <rdunlap@xenotime.net> |
1579 | Lots of typos, whitespace, some reformatting. | ||
1556 | 1580 | ||
1557 | TODO: | 1581 | TODO: |
1558 | 1582 | ||
diff --git a/Documentation/keys-request-key.txt b/Documentation/keys-request-key.txt new file mode 100644 index 000000000000..5f2b9c5edbb5 --- /dev/null +++ b/Documentation/keys-request-key.txt | |||
@@ -0,0 +1,161 @@ | |||
1 | =================== | ||
2 | KEY REQUEST SERVICE | ||
3 | =================== | ||
4 | |||
5 | The key request service is part of the key retention service (refer to | ||
6 | Documentation/keys.txt). This document explains more fully how that the | ||
7 | requesting algorithm works. | ||
8 | |||
9 | The process starts by either the kernel requesting a service by calling | ||
10 | request_key(): | ||
11 | |||
12 | struct key *request_key(const struct key_type *type, | ||
13 | const char *description, | ||
14 | const char *callout_string); | ||
15 | |||
16 | Or by userspace invoking the request_key system call: | ||
17 | |||
18 | key_serial_t request_key(const char *type, | ||
19 | const char *description, | ||
20 | const char *callout_info, | ||
21 | key_serial_t dest_keyring); | ||
22 | |||
23 | The main difference between the two access points is that the in-kernel | ||
24 | interface does not need to link the key to a keyring to prevent it from being | ||
25 | immediately destroyed. The kernel interface returns a pointer directly to the | ||
26 | key, and it's up to the caller to destroy the key. | ||
27 | |||
28 | The userspace interface links the key to a keyring associated with the process | ||
29 | to prevent the key from going away, and returns the serial number of the key to | ||
30 | the caller. | ||
31 | |||
32 | |||
33 | =========== | ||
34 | THE PROCESS | ||
35 | =========== | ||
36 | |||
37 | A request proceeds in the following manner: | ||
38 | |||
39 | (1) Process A calls request_key() [the userspace syscall calls the kernel | ||
40 | interface]. | ||
41 | |||
42 | (2) request_key() searches the process's subscribed keyrings to see if there's | ||
43 | a suitable key there. If there is, it returns the key. If there isn't, and | ||
44 | callout_info is not set, an error is returned. Otherwise the process | ||
45 | proceeds to the next step. | ||
46 | |||
47 | (3) request_key() sees that A doesn't have the desired key yet, so it creates | ||
48 | two things: | ||
49 | |||
50 | (a) An uninstantiated key U of requested type and description. | ||
51 | |||
52 | (b) An authorisation key V that refers to key U and notes that process A | ||
53 | is the context in which key U should be instantiated and secured, and | ||
54 | from which associated key requests may be satisfied. | ||
55 | |||
56 | (4) request_key() then forks and executes /sbin/request-key with a new session | ||
57 | keyring that contains a link to auth key V. | ||
58 | |||
59 | (5) /sbin/request-key execs an appropriate program to perform the actual | ||
60 | instantiation. | ||
61 | |||
62 | (6) The program may want to access another key from A's context (say a | ||
63 | Kerberos TGT key). It just requests the appropriate key, and the keyring | ||
64 | search notes that the session keyring has auth key V in its bottom level. | ||
65 | |||
66 | This will permit it to then search the keyrings of process A with the | ||
67 | UID, GID, groups and security info of process A as if it was process A, | ||
68 | and come up with key W. | ||
69 | |||
70 | (7) The program then does what it must to get the data with which to | ||
71 | instantiate key U, using key W as a reference (perhaps it contacts a | ||
72 | Kerberos server using the TGT) and then instantiates key U. | ||
73 | |||
74 | (8) Upon instantiating key U, auth key V is automatically revoked so that it | ||
75 | may not be used again. | ||
76 | |||
77 | (9) The program then exits 0 and request_key() deletes key V and returns key | ||
78 | U to the caller. | ||
79 | |||
80 | This also extends further. If key W (step 5 above) didn't exist, key W would be | ||
81 | created uninstantiated, another auth key (X) would be created [as per step 3] | ||
82 | and another copy of /sbin/request-key spawned [as per step 4]; but the context | ||
83 | specified by auth key X will still be process A, as it was in auth key V. | ||
84 | |||
85 | This is because process A's keyrings can't simply be attached to | ||
86 | /sbin/request-key at the appropriate places because (a) execve will discard two | ||
87 | of them, and (b) it requires the same UID/GID/Groups all the way through. | ||
88 | |||
89 | |||
90 | ====================== | ||
91 | NEGATIVE INSTANTIATION | ||
92 | ====================== | ||
93 | |||
94 | Rather than instantiating a key, it is possible for the possessor of an | ||
95 | authorisation key to negatively instantiate a key that's under construction. | ||
96 | This is a short duration placeholder that causes any attempt at re-requesting | ||
97 | the key whilst it exists to fail with error ENOKEY. | ||
98 | |||
99 | This is provided to prevent excessive repeated spawning of /sbin/request-key | ||
100 | processes for a key that will never be obtainable. | ||
101 | |||
102 | Should the /sbin/request-key process exit anything other than 0 or die on a | ||
103 | signal, the key under construction will be automatically negatively | ||
104 | instantiated for a short amount of time. | ||
105 | |||
106 | |||
107 | ==================== | ||
108 | THE SEARCH ALGORITHM | ||
109 | ==================== | ||
110 | |||
111 | A search of any particular keyring proceeds in the following fashion: | ||
112 | |||
113 | (1) When the key management code searches for a key (keyring_search_aux) it | ||
114 | firstly calls key_permission(SEARCH) on the keyring it's starting with, | ||
115 | if this denies permission, it doesn't search further. | ||
116 | |||
117 | (2) It considers all the non-keyring keys within that keyring and, if any key | ||
118 | matches the criteria specified, calls key_permission(SEARCH) on it to see | ||
119 | if the key is allowed to be found. If it is, that key is returned; if | ||
120 | not, the search continues, and the error code is retained if of higher | ||
121 | priority than the one currently set. | ||
122 | |||
123 | (3) It then considers all the keyring-type keys in the keyring it's currently | ||
124 | searching. It calls key_permission(SEARCH) on each keyring, and if this | ||
125 | grants permission, it recurses, executing steps (2) and (3) on that | ||
126 | keyring. | ||
127 | |||
128 | The process stops immediately a valid key is found with permission granted to | ||
129 | use it. Any error from a previous match attempt is discarded and the key is | ||
130 | returned. | ||
131 | |||
132 | When search_process_keyrings() is invoked, it performs the following searches | ||
133 | until one succeeds: | ||
134 | |||
135 | (1) If extant, the process's thread keyring is searched. | ||
136 | |||
137 | (2) If extant, the process's process keyring is searched. | ||
138 | |||
139 | (3) The process's session keyring is searched. | ||
140 | |||
141 | (4) If the process has a request_key() authorisation key in its session | ||
142 | keyring then: | ||
143 | |||
144 | (a) If extant, the calling process's thread keyring is searched. | ||
145 | |||
146 | (b) If extant, the calling process's process keyring is searched. | ||
147 | |||
148 | (c) The calling process's session keyring is searched. | ||
149 | |||
150 | The moment one succeeds, all pending errors are discarded and the found key is | ||
151 | returned. | ||
152 | |||
153 | Only if all these fail does the whole thing fail with the highest priority | ||
154 | error. Note that several errors may have come from LSM. | ||
155 | |||
156 | The error priority is: | ||
157 | |||
158 | EKEYREVOKED > EKEYEXPIRED > ENOKEY | ||
159 | |||
160 | EACCES/EPERM are only returned on a direct search of a specific keyring where | ||
161 | the basal keyring does not grant Search permission. | ||
diff --git a/Documentation/keys.txt b/Documentation/keys.txt index 0321ded4b9ae..4afe03a58c5b 100644 --- a/Documentation/keys.txt +++ b/Documentation/keys.txt | |||
@@ -195,8 +195,8 @@ KEY ACCESS PERMISSIONS | |||
195 | ====================== | 195 | ====================== |
196 | 196 | ||
197 | Keys have an owner user ID, a group access ID, and a permissions mask. The mask | 197 | Keys have an owner user ID, a group access ID, and a permissions mask. The mask |
198 | has up to eight bits each for user, group and other access. Only five of each | 198 | has up to eight bits each for possessor, user, group and other access. Only |
199 | set of eight bits are defined. These permissions granted are: | 199 | five of each set of eight bits are defined. These permissions granted are: |
200 | 200 | ||
201 | (*) View | 201 | (*) View |
202 | 202 | ||
@@ -241,16 +241,16 @@ about the status of the key service: | |||
241 | type, description and permissions. The payload of the key is not available | 241 | type, description and permissions. The payload of the key is not available |
242 | this way: | 242 | this way: |
243 | 243 | ||
244 | SERIAL FLAGS USAGE EXPY PERM UID GID TYPE DESCRIPTION: SUMMARY | 244 | SERIAL FLAGS USAGE EXPY PERM UID GID TYPE DESCRIPTION: SUMMARY |
245 | 00000001 I----- 39 perm 1f0000 0 0 keyring _uid_ses.0: 1/4 | 245 | 00000001 I----- 39 perm 1f1f0000 0 0 keyring _uid_ses.0: 1/4 |
246 | 00000002 I----- 2 perm 1f0000 0 0 keyring _uid.0: empty | 246 | 00000002 I----- 2 perm 1f1f0000 0 0 keyring _uid.0: empty |
247 | 00000007 I----- 1 perm 1f0000 0 0 keyring _pid.1: empty | 247 | 00000007 I----- 1 perm 1f1f0000 0 0 keyring _pid.1: empty |
248 | 0000018d I----- 1 perm 1f0000 0 0 keyring _pid.412: empty | 248 | 0000018d I----- 1 perm 1f1f0000 0 0 keyring _pid.412: empty |
249 | 000004d2 I--Q-- 1 perm 1f0000 32 -1 keyring _uid.32: 1/4 | 249 | 000004d2 I--Q-- 1 perm 1f1f0000 32 -1 keyring _uid.32: 1/4 |
250 | 000004d3 I--Q-- 3 perm 1f0000 32 -1 keyring _uid_ses.32: empty | 250 | 000004d3 I--Q-- 3 perm 1f1f0000 32 -1 keyring _uid_ses.32: empty |
251 | 00000892 I--QU- 1 perm 1f0000 0 0 user metal:copper: 0 | 251 | 00000892 I--QU- 1 perm 1f000000 0 0 user metal:copper: 0 |
252 | 00000893 I--Q-N 1 35s 1f0000 0 0 user metal:silver: 0 | 252 | 00000893 I--Q-N 1 35s 1f1f0000 0 0 user metal:silver: 0 |
253 | 00000894 I--Q-- 1 10h 1f0000 0 0 user metal:gold: 0 | 253 | 00000894 I--Q-- 1 10h 001f0000 0 0 user metal:gold: 0 |
254 | 254 | ||
255 | The flags are: | 255 | The flags are: |
256 | 256 | ||
@@ -361,6 +361,8 @@ The main syscalls are: | |||
361 | /sbin/request-key will be invoked in an attempt to obtain a key. The | 361 | /sbin/request-key will be invoked in an attempt to obtain a key. The |
362 | callout_info string will be passed as an argument to the program. | 362 | callout_info string will be passed as an argument to the program. |
363 | 363 | ||
364 | See also Documentation/keys-request-key.txt. | ||
365 | |||
364 | 366 | ||
365 | The keyctl syscall functions are: | 367 | The keyctl syscall functions are: |
366 | 368 | ||
@@ -533,8 +535,8 @@ The keyctl syscall functions are: | |||
533 | 535 | ||
534 | (*) Read the payload data from a key: | 536 | (*) Read the payload data from a key: |
535 | 537 | ||
536 | key_serial_t keyctl(KEYCTL_READ, key_serial_t keyring, char *buffer, | 538 | long keyctl(KEYCTL_READ, key_serial_t keyring, char *buffer, |
537 | size_t buflen); | 539 | size_t buflen); |
538 | 540 | ||
539 | This function attempts to read the payload data from the specified key | 541 | This function attempts to read the payload data from the specified key |
540 | into the buffer. The process must have read permission on the key to | 542 | into the buffer. The process must have read permission on the key to |
@@ -555,9 +557,9 @@ The keyctl syscall functions are: | |||
555 | 557 | ||
556 | (*) Instantiate a partially constructed key. | 558 | (*) Instantiate a partially constructed key. |
557 | 559 | ||
558 | key_serial_t keyctl(KEYCTL_INSTANTIATE, key_serial_t key, | 560 | long keyctl(KEYCTL_INSTANTIATE, key_serial_t key, |
559 | const void *payload, size_t plen, | 561 | const void *payload, size_t plen, |
560 | key_serial_t keyring); | 562 | key_serial_t keyring); |
561 | 563 | ||
562 | If the kernel calls back to userspace to complete the instantiation of a | 564 | If the kernel calls back to userspace to complete the instantiation of a |
563 | key, userspace should use this call to supply data for the key before the | 565 | key, userspace should use this call to supply data for the key before the |
@@ -576,8 +578,8 @@ The keyctl syscall functions are: | |||
576 | 578 | ||
577 | (*) Negatively instantiate a partially constructed key. | 579 | (*) Negatively instantiate a partially constructed key. |
578 | 580 | ||
579 | key_serial_t keyctl(KEYCTL_NEGATE, key_serial_t key, | 581 | long keyctl(KEYCTL_NEGATE, key_serial_t key, |
580 | unsigned timeout, key_serial_t keyring); | 582 | unsigned timeout, key_serial_t keyring); |
581 | 583 | ||
582 | If the kernel calls back to userspace to complete the instantiation of a | 584 | If the kernel calls back to userspace to complete the instantiation of a |
583 | key, userspace should use this call mark the key as negative before the | 585 | key, userspace should use this call mark the key as negative before the |
@@ -637,6 +639,34 @@ call, and the key released upon close. How to deal with conflicting keys due to | |||
637 | two different users opening the same file is left to the filesystem author to | 639 | two different users opening the same file is left to the filesystem author to |
638 | solve. | 640 | solve. |
639 | 641 | ||
642 | Note that there are two different types of pointers to keys that may be | ||
643 | encountered: | ||
644 | |||
645 | (*) struct key * | ||
646 | |||
647 | This simply points to the key structure itself. Key structures will be at | ||
648 | least four-byte aligned. | ||
649 | |||
650 | (*) key_ref_t | ||
651 | |||
652 | This is equivalent to a struct key *, but the least significant bit is set | ||
653 | if the caller "possesses" the key. By "possession" it is meant that the | ||
654 | calling processes has a searchable link to the key from one of its | ||
655 | keyrings. There are three functions for dealing with these: | ||
656 | |||
657 | key_ref_t make_key_ref(const struct key *key, | ||
658 | unsigned long possession); | ||
659 | |||
660 | struct key *key_ref_to_ptr(const key_ref_t key_ref); | ||
661 | |||
662 | unsigned long is_key_possessed(const key_ref_t key_ref); | ||
663 | |||
664 | The first function constructs a key reference from a key pointer and | ||
665 | possession information (which must be 0 or 1 and not any other value). | ||
666 | |||
667 | The second function retrieves the key pointer from a reference and the | ||
668 | third retrieves the possession flag. | ||
669 | |||
640 | When accessing a key's payload contents, certain precautions must be taken to | 670 | When accessing a key's payload contents, certain precautions must be taken to |
641 | prevent access vs modification races. See the section "Notes on accessing | 671 | prevent access vs modification races. See the section "Notes on accessing |
642 | payload contents" for more information. | 672 | payload contents" for more information. |
@@ -660,12 +690,18 @@ payload contents" for more information. | |||
660 | If successful, the key will have been attached to the default keyring for | 690 | If successful, the key will have been attached to the default keyring for |
661 | implicitly obtained request-key keys, as set by KEYCTL_SET_REQKEY_KEYRING. | 691 | implicitly obtained request-key keys, as set by KEYCTL_SET_REQKEY_KEYRING. |
662 | 692 | ||
693 | See also Documentation/keys-request-key.txt. | ||
694 | |||
663 | 695 | ||
664 | (*) When it is no longer required, the key should be released using: | 696 | (*) When it is no longer required, the key should be released using: |
665 | 697 | ||
666 | void key_put(struct key *key); | 698 | void key_put(struct key *key); |
667 | 699 | ||
668 | This can be called from interrupt context. If CONFIG_KEYS is not set then | 700 | Or: |
701 | |||
702 | void key_ref_put(key_ref_t key_ref); | ||
703 | |||
704 | These can be called from interrupt context. If CONFIG_KEYS is not set then | ||
669 | the argument will not be parsed. | 705 | the argument will not be parsed. |
670 | 706 | ||
671 | 707 | ||
@@ -689,13 +725,17 @@ payload contents" for more information. | |||
689 | 725 | ||
690 | (*) If a keyring was found in the search, this can be further searched by: | 726 | (*) If a keyring was found in the search, this can be further searched by: |
691 | 727 | ||
692 | struct key *keyring_search(struct key *keyring, | 728 | key_ref_t keyring_search(key_ref_t keyring_ref, |
693 | const struct key_type *type, | 729 | const struct key_type *type, |
694 | const char *description) | 730 | const char *description) |
695 | 731 | ||
696 | This searches the keyring tree specified for a matching key. Error ENOKEY | 732 | This searches the keyring tree specified for a matching key. Error ENOKEY |
697 | is returned upon failure. If successful, the returned key will need to be | 733 | is returned upon failure (use IS_ERR/PTR_ERR to determine). If successful, |
698 | released. | 734 | the returned key will need to be released. |
735 | |||
736 | The possession attribute from the keyring reference is used to control | ||
737 | access through the permissions mask and is propagated to the returned key | ||
738 | reference pointer if successful. | ||
699 | 739 | ||
700 | 740 | ||
701 | (*) To check the validity of a key, this function can be called: | 741 | (*) To check the validity of a key, this function can be called: |
@@ -732,7 +772,7 @@ More complex payload contents must be allocated and a pointer to them set in | |||
732 | key->payload.data. One of the following ways must be selected to access the | 772 | key->payload.data. One of the following ways must be selected to access the |
733 | data: | 773 | data: |
734 | 774 | ||
735 | (1) Unmodifyable key type. | 775 | (1) Unmodifiable key type. |
736 | 776 | ||
737 | If the key type does not have a modify method, then the key's payload can | 777 | If the key type does not have a modify method, then the key's payload can |
738 | be accessed without any form of locking, provided that it's known to be | 778 | be accessed without any form of locking, provided that it's known to be |
diff --git a/Documentation/networking/bonding.txt b/Documentation/networking/bonding.txt index a55f0f95b171..b0fe41da007b 100644 --- a/Documentation/networking/bonding.txt +++ b/Documentation/networking/bonding.txt | |||
@@ -777,7 +777,7 @@ doing so is the same as described in the "Configuring Multiple Bonds | |||
777 | Manually" section, below. | 777 | Manually" section, below. |
778 | 778 | ||
779 | NOTE: It has been observed that some Red Hat supplied kernels | 779 | NOTE: It has been observed that some Red Hat supplied kernels |
780 | are apparently unable to rename modules at load time (the "-obonding1" | 780 | are apparently unable to rename modules at load time (the "-o bond1" |
781 | part). Attempts to pass that option to modprobe will produce an | 781 | part). Attempts to pass that option to modprobe will produce an |
782 | "Operation not permitted" error. This has been reported on some | 782 | "Operation not permitted" error. This has been reported on some |
783 | Fedora Core kernels, and has been seen on RHEL 4 as well. On kernels | 783 | Fedora Core kernels, and has been seen on RHEL 4 as well. On kernels |
@@ -883,7 +883,8 @@ the above does not work, and the second bonding instance never sees | |||
883 | its options. In that case, the second options line can be substituted | 883 | its options. In that case, the second options line can be substituted |
884 | as follows: | 884 | as follows: |
885 | 885 | ||
886 | install bonding1 /sbin/modprobe bonding -obond1 mode=balance-alb miimon=50 | 886 | install bond1 /sbin/modprobe --ignore-install bonding -o bond1 \ |
887 | mode=balance-alb miimon=50 | ||
887 | 888 | ||
888 | This may be repeated any number of times, specifying a new and | 889 | This may be repeated any number of times, specifying a new and |
889 | unique name in place of bond1 for each subsequent instance. | 890 | unique name in place of bond1 for each subsequent instance. |
diff --git a/Documentation/networking/ip-sysctl.txt b/Documentation/networking/ip-sysctl.txt index ab65714d95fc..b433c8a27e2d 100644 --- a/Documentation/networking/ip-sysctl.txt +++ b/Documentation/networking/ip-sysctl.txt | |||
@@ -355,10 +355,14 @@ ip_dynaddr - BOOLEAN | |||
355 | Default: 0 | 355 | Default: 0 |
356 | 356 | ||
357 | icmp_echo_ignore_all - BOOLEAN | 357 | icmp_echo_ignore_all - BOOLEAN |
358 | If set non-zero, then the kernel will ignore all ICMP ECHO | ||
359 | requests sent to it. | ||
360 | Default: 0 | ||
361 | |||
358 | icmp_echo_ignore_broadcasts - BOOLEAN | 362 | icmp_echo_ignore_broadcasts - BOOLEAN |
359 | If either is set to true, then the kernel will ignore either all | 363 | If set non-zero, then the kernel will ignore all ICMP ECHO and |
360 | ICMP ECHO requests sent to it or just those to broadcast/multicast | 364 | TIMESTAMP requests sent to it via broadcast/multicast. |
361 | addresses, respectively. | 365 | Default: 1 |
362 | 366 | ||
363 | icmp_ratelimit - INTEGER | 367 | icmp_ratelimit - INTEGER |
364 | Limit the maximal rates for sending ICMP packets whose type matches | 368 | Limit the maximal rates for sending ICMP packets whose type matches |
diff --git a/Documentation/sparse.txt b/Documentation/sparse.txt index 5df44dc894e5..1829009db771 100644 --- a/Documentation/sparse.txt +++ b/Documentation/sparse.txt | |||
@@ -51,9 +51,9 @@ or you don't get any checking at all. | |||
51 | Where to get sparse | 51 | Where to get sparse |
52 | ~~~~~~~~~~~~~~~~~~~ | 52 | ~~~~~~~~~~~~~~~~~~~ |
53 | 53 | ||
54 | With BK, you can just get it from | 54 | With git, you can just get it from |
55 | 55 | ||
56 | bk://sparse.bkbits.net/sparse | 56 | rsync://rsync.kernel.org/pub/scm/devel/sparse/sparse.git |
57 | 57 | ||
58 | and DaveJ has tar-balls at | 58 | and DaveJ has tar-balls at |
59 | 59 | ||
diff --git a/Documentation/usb/URB.txt b/Documentation/usb/URB.txt index d59b95cc6f1b..a49e5f2c2b46 100644 --- a/Documentation/usb/URB.txt +++ b/Documentation/usb/URB.txt | |||
@@ -1,5 +1,6 @@ | |||
1 | Revised: 2000-Dec-05. | 1 | Revised: 2000-Dec-05. |
2 | Again: 2002-Jul-06 | 2 | Again: 2002-Jul-06 |
3 | Again: 2005-Sep-19 | ||
3 | 4 | ||
4 | NOTE: | 5 | NOTE: |
5 | 6 | ||
@@ -18,8 +19,8 @@ called USB Request Block, or URB for short. | |||
18 | and deliver the data and status back. | 19 | and deliver the data and status back. |
19 | 20 | ||
20 | - Execution of an URB is inherently an asynchronous operation, i.e. the | 21 | - Execution of an URB is inherently an asynchronous operation, i.e. the |
21 | usb_submit_urb(urb) call returns immediately after it has successfully queued | 22 | usb_submit_urb(urb) call returns immediately after it has successfully |
22 | the requested action. | 23 | queued the requested action. |
23 | 24 | ||
24 | - Transfers for one URB can be canceled with usb_unlink_urb(urb) at any time. | 25 | - Transfers for one URB can be canceled with usb_unlink_urb(urb) at any time. |
25 | 26 | ||
@@ -94,8 +95,9 @@ To free an URB, use | |||
94 | 95 | ||
95 | void usb_free_urb(struct urb *urb) | 96 | void usb_free_urb(struct urb *urb) |
96 | 97 | ||
97 | You may not free an urb that you've submitted, but which hasn't yet been | 98 | You may free an urb that you've submitted, but which hasn't yet been |
98 | returned to you in a completion callback. | 99 | returned to you in a completion callback. It will automatically be |
100 | deallocated when it is no longer in use. | ||
99 | 101 | ||
100 | 102 | ||
101 | 1.4. What has to be filled in? | 103 | 1.4. What has to be filled in? |
@@ -145,30 +147,36 @@ to get seamless ISO streaming. | |||
145 | 147 | ||
146 | 1.6. How to cancel an already running URB? | 148 | 1.6. How to cancel an already running URB? |
147 | 149 | ||
148 | For an URB which you've submitted, but which hasn't been returned to | 150 | There are two ways to cancel an URB you've submitted but which hasn't |
149 | your driver by the host controller, call | 151 | been returned to your driver yet. For an asynchronous cancel, call |
150 | 152 | ||
151 | int usb_unlink_urb(struct urb *urb) | 153 | int usb_unlink_urb(struct urb *urb) |
152 | 154 | ||
153 | It removes the urb from the internal list and frees all allocated | 155 | It removes the urb from the internal list and frees all allocated |
154 | HW descriptors. The status is changed to reflect unlinking. After | 156 | HW descriptors. The status is changed to reflect unlinking. Note |
155 | usb_unlink_urb() returns with that status code, you can free the URB | 157 | that the URB will not normally have finished when usb_unlink_urb() |
156 | with usb_free_urb(). | 158 | returns; you must still wait for the completion handler to be called. |
157 | 159 | ||
158 | There is also an asynchronous unlink mode. To use this, set the | 160 | To cancel an URB synchronously, call |
159 | the URB_ASYNC_UNLINK flag in urb->transfer flags before calling | 161 | |
160 | usb_unlink_urb(). When using async unlinking, the URB will not | 162 | void usb_kill_urb(struct urb *urb) |
161 | normally be unlinked when usb_unlink_urb() returns. Instead, wait | 163 | |
162 | for the completion handler to be called. | 164 | It does everything usb_unlink_urb does, and in addition it waits |
165 | until after the URB has been returned and the completion handler | ||
166 | has finished. It also marks the URB as temporarily unusable, so | ||
167 | that if the completion handler or anyone else tries to resubmit it | ||
168 | they will get a -EPERM error. Thus you can be sure that when | ||
169 | usb_kill_urb() returns, the URB is totally idle. | ||
163 | 170 | ||
164 | 171 | ||
165 | 1.7. What about the completion handler? | 172 | 1.7. What about the completion handler? |
166 | 173 | ||
167 | The handler is of the following type: | 174 | The handler is of the following type: |
168 | 175 | ||
169 | typedef void (*usb_complete_t)(struct urb *); | 176 | typedef void (*usb_complete_t)(struct urb *, struct pt_regs *) |
170 | 177 | ||
171 | i.e. it gets just the URB that caused the completion call. | 178 | I.e., it gets the URB that caused the completion call, plus the |
179 | register values at the time of the corresponding interrupt (if any). | ||
172 | In the completion handler, you should have a look at urb->status to | 180 | In the completion handler, you should have a look at urb->status to |
173 | detect any USB errors. Since the context parameter is included in the URB, | 181 | detect any USB errors. Since the context parameter is included in the URB, |
174 | you can pass information to the completion handler. | 182 | you can pass information to the completion handler. |
@@ -176,17 +184,11 @@ you can pass information to the completion handler. | |||
176 | Note that even when an error (or unlink) is reported, data may have been | 184 | Note that even when an error (or unlink) is reported, data may have been |
177 | transferred. That's because USB transfers are packetized; it might take | 185 | transferred. That's because USB transfers are packetized; it might take |
178 | sixteen packets to transfer your 1KByte buffer, and ten of them might | 186 | sixteen packets to transfer your 1KByte buffer, and ten of them might |
179 | have transferred succesfully before the completion is called. | 187 | have transferred succesfully before the completion was called. |
180 | 188 | ||
181 | 189 | ||
182 | NOTE: ***** WARNING ***** | 190 | NOTE: ***** WARNING ***** |
183 | Don't use urb->dev field in your completion handler; it's cleared | 191 | NEVER SLEEP IN A COMPLETION HANDLER. These are normally called |
184 | as part of giving urbs back to drivers. (Addressing an issue with | ||
185 | ownership of periodic URBs, which was otherwise ambiguous.) Instead, | ||
186 | use urb->context to hold all the data your driver needs. | ||
187 | |||
188 | NOTE: ***** WARNING ***** | ||
189 | Also, NEVER SLEEP IN A COMPLETION HANDLER. These are normally called | ||
190 | during hardware interrupt processing. If you can, defer substantial | 192 | during hardware interrupt processing. If you can, defer substantial |
191 | work to a tasklet (bottom half) to keep system latencies low. You'll | 193 | work to a tasklet (bottom half) to keep system latencies low. You'll |
192 | probably need to use spinlocks to protect data structures you manipulate | 194 | probably need to use spinlocks to protect data structures you manipulate |
@@ -229,24 +231,10 @@ ISO data with some other event stream. | |||
229 | Interrupt transfers, like isochronous transfers, are periodic, and happen | 231 | Interrupt transfers, like isochronous transfers, are periodic, and happen |
230 | in intervals that are powers of two (1, 2, 4 etc) units. Units are frames | 232 | in intervals that are powers of two (1, 2, 4 etc) units. Units are frames |
231 | for full and low speed devices, and microframes for high speed ones. | 233 | for full and low speed devices, and microframes for high speed ones. |
232 | |||
233 | Currently, after you submit one interrupt URB, that urb is owned by the | ||
234 | host controller driver until you cancel it with usb_unlink_urb(). You | ||
235 | may unlink interrupt urbs in their completion handlers, if you need to. | ||
236 | |||
237 | After a transfer completion is called, the URB is automagically resubmitted. | ||
238 | THIS BEHAVIOR IS EXPECTED TO BE REMOVED!! | ||
239 | |||
240 | Interrupt transfers may only send (or receive) the "maxpacket" value for | ||
241 | the given interrupt endpoint; if you need more data, you will need to | ||
242 | copy that data out of (or into) another buffer. Similarly, you can't | ||
243 | queue interrupt transfers. | ||
244 | THESE RESTRICTIONS ARE EXPECTED TO BE REMOVED!! | ||
245 | |||
246 | Note that this automagic resubmission model does make it awkward to use | ||
247 | interrupt OUT transfers. The portable solution involves unlinking those | ||
248 | OUT urbs after the data is transferred, and perhaps submitting a final | ||
249 | URB for a short packet. | ||
250 | |||
251 | The usb_submit_urb() call modifies urb->interval to the implemented interval | 234 | The usb_submit_urb() call modifies urb->interval to the implemented interval |
252 | value that is less than or equal to the requested interval value. | 235 | value that is less than or equal to the requested interval value. |
236 | |||
237 | In Linux 2.6, unlike earlier versions, interrupt URBs are not automagically | ||
238 | restarted when they complete. They end when the completion handler is | ||
239 | called, just like other URBs. If you want an interrupt URB to be restarted, | ||
240 | your completion handler must resubmit it. | ||