The Linux Kernel API This documentation is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA For more details see the file COPYING in the source distribution of Linux. Data Types Doubly Linked Lists LINUX Kernel Hackers Manual July 2017 list_add 9 4.1.27 list_add add a new entry Synopsis void list_add struct list_head * new struct list_head * head Arguments new new entry to be added head list head to add it after Description Insert a new entry after the specified head. This is good for implementing stacks. LINUX Kernel Hackers Manual July 2017 list_add_tail 9 4.1.27 list_add_tail add a new entry Synopsis void list_add_tail struct list_head * new struct list_head * head Arguments new new entry to be added head list head to add it before Description Insert a new entry before the specified head. This is useful for implementing queues. LINUX Kernel Hackers Manual July 2017 __list_del_entry 9 4.1.27 __list_del_entry deletes entry from list. Synopsis void __list_del_entry struct list_head * entry Arguments entry the element to delete from the list. Note list_empty on entry does not return true after this, the entry is in an undefined state. LINUX Kernel Hackers Manual July 2017 list_replace 9 4.1.27 list_replace replace old entry by new one Synopsis void list_replace struct list_head * old struct list_head * new Arguments old the element to be replaced new the new element to insert Description If old was empty, it will be overwritten. LINUX Kernel Hackers Manual July 2017 list_del_init 9 4.1.27 list_del_init deletes entry from list and reinitialize it. Synopsis void list_del_init struct list_head * entry Arguments entry the element to delete from the list. LINUX Kernel Hackers Manual July 2017 list_move 9 4.1.27 list_move delete from one list and add as another's head Synopsis void list_move struct list_head * list struct list_head * head Arguments list the entry to move head the head that will precede our entry LINUX Kernel Hackers Manual July 2017 list_move_tail 9 4.1.27 list_move_tail delete from one list and add as another's tail Synopsis void list_move_tail struct list_head * list struct list_head * head Arguments list the entry to move head the head that will follow our entry LINUX Kernel Hackers Manual July 2017 list_is_last 9 4.1.27 list_is_last tests whether list is the last entry in list head Synopsis int list_is_last const struct list_head * list const struct list_head * head Arguments list the entry to test head the head of the list LINUX Kernel Hackers Manual July 2017 list_empty 9 4.1.27 list_empty tests whether a list is empty Synopsis int list_empty const struct list_head * head Arguments head the list to test. LINUX Kernel Hackers Manual July 2017 list_empty_careful 9 4.1.27 list_empty_careful tests whether a list is empty and not being modified Synopsis int list_empty_careful const struct list_head * head Arguments head the list to test Description tests whether a list is empty _and_ checks that no other CPU might be in the process of modifying either member (next or prev) NOTE using list_empty_careful without synchronization can only be safe if the only activity that can happen to the list entry is list_del_init. Eg. it cannot be used if another CPU could re-list_add it. LINUX Kernel Hackers Manual July 2017 list_rotate_left 9 4.1.27 list_rotate_left rotate the list to the left Synopsis void list_rotate_left struct list_head * head Arguments head the head of the list LINUX Kernel Hackers Manual July 2017 list_is_singular 9 4.1.27 list_is_singular tests whether a list has just one entry. Synopsis int list_is_singular const struct list_head * head Arguments head the list to test. LINUX Kernel Hackers Manual July 2017 list_cut_position 9 4.1.27 list_cut_position cut a list into two Synopsis void list_cut_position struct list_head * list struct list_head * head struct list_head * entry Arguments list a new list to add all removed entries head a list with entries entry an entry within head, could be the head itself and if so we won't cut the list Description This helper moves the initial part of head, up to and including entry, from head to list. You should pass on entry an element you know is on head. list should be an empty list or a list you do not care about losing its data. LINUX Kernel Hackers Manual July 2017 list_splice 9 4.1.27 list_splice join two lists, this is designed for stacks Synopsis void list_splice const struct list_head * list struct list_head * head Arguments list the new list to add. head the place to add it in the first list. LINUX Kernel Hackers Manual July 2017 list_splice_tail 9 4.1.27 list_splice_tail join two lists, each list being a queue Synopsis void list_splice_tail struct list_head * list struct list_head * head Arguments list the new list to add. head the place to add it in the first list. LINUX Kernel Hackers Manual July 2017 list_splice_init 9 4.1.27 list_splice_init join two lists and reinitialise the emptied list. Synopsis void list_splice_init struct list_head * list struct list_head * head Arguments list the new list to add. head the place to add it in the first list. Description The list at list is reinitialised LINUX Kernel Hackers Manual July 2017 list_splice_tail_init 9 4.1.27 list_splice_tail_init join two lists and reinitialise the emptied list Synopsis void list_splice_tail_init struct list_head * list struct list_head * head Arguments list the new list to add. head the place to add it in the first list. Description Each of the lists is a queue. The list at list is reinitialised LINUX Kernel Hackers Manual July 2017 list_entry 9 4.1.27 list_entry get the struct for this entry Synopsis list_entry ptr type member Arguments ptr the struct list_head pointer. type the type of the struct this is embedded in. member the name of the list_head within the struct. LINUX Kernel Hackers Manual July 2017 list_first_entry 9 4.1.27 list_first_entry get the first element from a list Synopsis list_first_entry ptr type member Arguments ptr the list head to take the element from. type the type of the struct this is embedded in. member the name of the list_head within the struct. Description Note, that list is expected to be not empty. LINUX Kernel Hackers Manual July 2017 list_last_entry 9 4.1.27 list_last_entry get the last element from a list Synopsis list_last_entry ptr type member Arguments ptr the list head to take the element from. type the type of the struct this is embedded in. member the name of the list_head within the struct. Description Note, that list is expected to be not empty. LINUX Kernel Hackers Manual July 2017 list_first_entry_or_null 9 4.1.27 list_first_entry_or_null get the first element from a list Synopsis list_first_entry_or_null ptr type member Arguments ptr the list head to take the element from. type the type of the struct this is embedded in. member the name of the list_head within the struct. Description Note that if the list is empty, it returns NULL. LINUX Kernel Hackers Manual July 2017 list_next_entry 9 4.1.27 list_next_entry get the next element in list Synopsis list_next_entry pos member Arguments pos the type * to cursor member the name of the list_head within the struct. LINUX Kernel Hackers Manual July 2017 list_prev_entry 9 4.1.27 list_prev_entry get the prev element in list Synopsis list_prev_entry pos member Arguments pos the type * to cursor member the name of the list_head within the struct. LINUX Kernel Hackers Manual July 2017 list_for_each 9 4.1.27 list_for_each iterate over a list Synopsis list_for_each pos head Arguments pos the struct list_head to use as a loop cursor. head the head for your list. LINUX Kernel Hackers Manual July 2017 list_for_each_prev 9 4.1.27 list_for_each_prev iterate over a list backwards Synopsis list_for_each_prev pos head Arguments pos the struct list_head to use as a loop cursor. head the head for your list. LINUX Kernel Hackers Manual July 2017 list_for_each_safe 9 4.1.27 list_for_each_safe iterate over a list safe against removal of list entry Synopsis list_for_each_safe pos n head Arguments pos the struct list_head to use as a loop cursor. n another struct list_head to use as temporary storage head the head for your list. LINUX Kernel Hackers Manual July 2017 list_for_each_prev_safe 9 4.1.27 list_for_each_prev_safe iterate over a list backwards safe against removal of list entry Synopsis list_for_each_prev_safe pos n head Arguments pos the struct list_head to use as a loop cursor. n another struct list_head to use as temporary storage head the head for your list. LINUX Kernel Hackers Manual July 2017 list_for_each_entry 9 4.1.27 list_for_each_entry iterate over list of given type Synopsis list_for_each_entry pos head member Arguments pos the type * to use as a loop cursor. head the head for your list. member the name of the list_head within the struct. LINUX Kernel Hackers Manual July 2017 list_for_each_entry_reverse 9 4.1.27 list_for_each_entry_reverse iterate backwards over list of given type. Synopsis list_for_each_entry_reverse pos head member Arguments pos the type * to use as a loop cursor. head the head for your list. member the name of the list_head within the struct. LINUX Kernel Hackers Manual July 2017 list_prepare_entry 9 4.1.27 list_prepare_entry prepare a pos entry for use in list_for_each_entry_continue Synopsis list_prepare_entry pos head member Arguments pos the type * to use as a start point head the head of the list member the name of the list_head within the struct. Description Prepares a pos entry for use as a start point in list_for_each_entry_continue. LINUX Kernel Hackers Manual July 2017 list_for_each_entry_continue 9 4.1.27 list_for_each_entry_continue continue iteration over list of given type Synopsis list_for_each_entry_continue pos head member Arguments pos the type * to use as a loop cursor. head the head for your list. member the name of the list_head within the struct. Description Continue to iterate over list of given type, continuing after the current position. LINUX Kernel Hackers Manual July 2017 list_for_each_entry_continue_reverse 9 4.1.27 list_for_each_entry_continue_reverse iterate backwards from the given point Synopsis list_for_each_entry_continue_reverse pos head member Arguments pos the type * to use as a loop cursor. head the head for your list. member the name of the list_head within the struct. Description Start to iterate over list of given type backwards, continuing after the current position. LINUX Kernel Hackers Manual July 2017 list_for_each_entry_from 9 4.1.27 list_for_each_entry_from iterate over list of given type from the current point Synopsis list_for_each_entry_from pos head member Arguments pos the type * to use as a loop cursor. head the head for your list. member the name of the list_head within the struct. Description Iterate over list of given type, continuing from current position. LINUX Kernel Hackers Manual July 2017 list_for_each_entry_safe 9 4.1.27 list_for_each_entry_safe iterate over list of given type safe against removal of list entry Synopsis list_for_each_entry_safe pos n head member Arguments pos the type * to use as a loop cursor. n another type * to use as temporary storage head the head for your list. member the name of the list_head within the struct. LINUX Kernel Hackers Manual July 2017 list_for_each_entry_safe_continue 9 4.1.27 list_for_each_entry_safe_continue continue list iteration safe against removal Synopsis list_for_each_entry_safe_continue pos n head member Arguments pos the type * to use as a loop cursor. n another type * to use as temporary storage head the head for your list. member the name of the list_head within the struct. Description Iterate over list of given type, continuing after current point, safe against removal of list entry. LINUX Kernel Hackers Manual July 2017 list_for_each_entry_safe_from 9 4.1.27 list_for_each_entry_safe_from iterate over list from current point safe against removal Synopsis list_for_each_entry_safe_from pos n head member Arguments pos the type * to use as a loop cursor. n another type * to use as temporary storage head the head for your list. member the name of the list_head within the struct. Description Iterate over list of given type from current point, safe against removal of list entry. LINUX Kernel Hackers Manual July 2017 list_for_each_entry_safe_reverse 9 4.1.27 list_for_each_entry_safe_reverse iterate backwards over list safe against removal Synopsis list_for_each_entry_safe_reverse pos n head member Arguments pos the type * to use as a loop cursor. n another type * to use as temporary storage head the head for your list. member the name of the list_head within the struct. Description Iterate backwards over list of given type, safe against removal of list entry. LINUX Kernel Hackers Manual July 2017 list_safe_reset_next 9 4.1.27 list_safe_reset_next reset a stale list_for_each_entry_safe loop Synopsis list_safe_reset_next pos n member Arguments pos the loop cursor used in the list_for_each_entry_safe loop n temporary storage used in list_for_each_entry_safe member the name of the list_head within the struct. Description list_safe_reset_next is not safe to use in general if the list may be modified concurrently (eg. the lock is dropped in the loop body). An exception to this is if the cursor element (pos) is pinned in the list, and list_safe_reset_next is called after re-taking the lock and before completing the current iteration of the loop body. LINUX Kernel Hackers Manual July 2017 hlist_for_each_entry 9 4.1.27 hlist_for_each_entry iterate over list of given type Synopsis hlist_for_each_entry pos head member Arguments pos the type * to use as a loop cursor. head the head for your list. member the name of the hlist_node within the struct. LINUX Kernel Hackers Manual July 2017 hlist_for_each_entry_continue 9 4.1.27 hlist_for_each_entry_continue iterate over a hlist continuing after current point Synopsis hlist_for_each_entry_continue pos member Arguments pos the type * to use as a loop cursor. member the name of the hlist_node within the struct. LINUX Kernel Hackers Manual July 2017 hlist_for_each_entry_from 9 4.1.27 hlist_for_each_entry_from iterate over a hlist continuing from current point Synopsis hlist_for_each_entry_from pos member Arguments pos the type * to use as a loop cursor. member the name of the hlist_node within the struct. LINUX Kernel Hackers Manual July 2017 hlist_for_each_entry_safe 9 4.1.27 hlist_for_each_entry_safe iterate over list of given type safe against removal of list entry Synopsis hlist_for_each_entry_safe pos n head member Arguments pos the type * to use as a loop cursor. n another struct hlist_node to use as temporary storage head the head for your list. member the name of the hlist_node within the struct. Basic C Library Functions When writing drivers, you cannot in general use routines which are from the C Library. Some of the functions have been found generally useful and they are listed below. The behaviour of these functions may vary slightly from those defined by ANSI, and these deviations are noted in the text. String Conversions LINUX Kernel Hackers Manual July 2017 simple_strtoull 9 4.1.27 simple_strtoull convert a string to an unsigned long long Synopsis unsigned long long simple_strtoull const char * cp char ** endp unsigned int base Arguments cp The start of the string endp A pointer to the end of the parsed string will be placed here base The number base to use Description This function is obsolete. Please use kstrtoull instead. LINUX Kernel Hackers Manual July 2017 simple_strtoul 9 4.1.27 simple_strtoul convert a string to an unsigned long Synopsis unsigned long simple_strtoul const char * cp char ** endp unsigned int base Arguments cp The start of the string endp A pointer to the end of the parsed string will be placed here base The number base to use Description This function is obsolete. Please use kstrtoul instead. LINUX Kernel Hackers Manual July 2017 simple_strtol 9 4.1.27 simple_strtol convert a string to a signed long Synopsis long simple_strtol const char * cp char ** endp unsigned int base Arguments cp The start of the string endp A pointer to the end of the parsed string will be placed here base The number base to use Description This function is obsolete. Please use kstrtol instead. LINUX Kernel Hackers Manual July 2017 simple_strtoll 9 4.1.27 simple_strtoll convert a string to a signed long long Synopsis long long simple_strtoll const char * cp char ** endp unsigned int base Arguments cp The start of the string endp A pointer to the end of the parsed string will be placed here base The number base to use Description This function is obsolete. Please use kstrtoll instead. LINUX Kernel Hackers Manual July 2017 vsnprintf 9 4.1.27 vsnprintf Format a string and place it in a buffer Synopsis int vsnprintf char * buf size_t size const char * fmt va_list args Arguments buf The buffer to place the result into size The size of the buffer, including the trailing null space fmt The format string to use args Arguments for the format string Description This function follows C99 vsnprintf, but has some extensions: pS output the name of a text symbol with offset ps output the name of a text symbol without offset pF output the name of a function pointer with its offset pf output the name of a function pointer without its offset pB output the name of a backtrace symbol with its offset pR output the address range in a struct resource with decoded flags pr output the address range in a struct resource with raw flags pb output the bitmap with field width as the number of bits pbl output the bitmap as range list with field width as the number of bits pM output a 6-byte MAC address with colons pMR output a 6-byte MAC address with colons in reversed order pMF output a 6-byte MAC address with dashes pm output a 6-byte MAC address without colons pmR output a 6-byte MAC address without colons in reversed order pI4 print an IPv4 address without leading zeros pi4 print an IPv4 address with leading zeros pI6 print an IPv6 address with colons pi6 print an IPv6 address without colons pI6c print an IPv6 address as specified by RFC 5952 pIS depending on sa_family of 'struct sockaddr *' print IPv4/IPv6 address piS depending on sa_family of 'struct sockaddr *' print IPv4/IPv6 address pU[bBlL] print a UUID/GUID in big or little endian using lower or upper case. %*pE[achnops] print an escaped buffer %*ph[CDN] a variable-length hex string with a separator (supports up to 64 bytes of the input) pC output the name (Common Clock Framework) or address (legacy clock framework) of a clock pCn output the name (Common Clock Framework) or address (legacy clock framework) of a clock pCr output the current rate of a clock n is ignored ** Please update Documentation/printk-formats.txt when making changes ** The return value is the number of characters which would be generated for the given input, excluding the trailing '\0', as per ISO C99. If you want to have the exact number of characters written into buf as return value (not including the trailing '\0'), use vscnprintf. If the return is greater than or equal to size, the resulting string is truncated. If you're not already dealing with a va_list consider using snprintf. LINUX Kernel Hackers Manual July 2017 vscnprintf 9 4.1.27 vscnprintf Format a string and place it in a buffer Synopsis int vscnprintf char * buf size_t size const char * fmt va_list args Arguments buf The buffer to place the result into size The size of the buffer, including the trailing null space fmt The format string to use args Arguments for the format string Description The return value is the number of characters which have been written into the buf not including the trailing '\0'. If size is == 0 the function returns 0. If you're not already dealing with a va_list consider using scnprintf. See the vsnprintf documentation for format string extensions over C99. LINUX Kernel Hackers Manual July 2017 snprintf 9 4.1.27 snprintf Format a string and place it in a buffer Synopsis int snprintf char * buf size_t size const char * fmt ... Arguments buf The buffer to place the result into size The size of the buffer, including the trailing null space fmt The format string to use @...: Arguments for the format string ... variable arguments Description The return value is the number of characters which would be generated for the given input, excluding the trailing null, as per ISO C99. If the return is greater than or equal to size, the resulting string is truncated. See the vsnprintf documentation for format string extensions over C99. LINUX Kernel Hackers Manual July 2017 scnprintf 9 4.1.27 scnprintf Format a string and place it in a buffer Synopsis int scnprintf char * buf size_t size const char * fmt ... Arguments buf The buffer to place the result into size The size of the buffer, including the trailing null space fmt The format string to use @...: Arguments for the format string ... variable arguments Description The return value is the number of characters written into buf not including the trailing '\0'. If size is == 0 the function returns 0. LINUX Kernel Hackers Manual July 2017 vsprintf 9 4.1.27 vsprintf Format a string and place it in a buffer Synopsis int vsprintf char * buf const char * fmt va_list args Arguments buf The buffer to place the result into fmt The format string to use args Arguments for the format string Description The function returns the number of characters written into buf. Use vsnprintf or vscnprintf in order to avoid buffer overflows. If you're not already dealing with a va_list consider using sprintf. See the vsnprintf documentation for format string extensions over C99. LINUX Kernel Hackers Manual July 2017 sprintf 9 4.1.27 sprintf Format a string and place it in a buffer Synopsis int sprintf char * buf const char * fmt ... Arguments buf The buffer to place the result into fmt The format string to use @...: Arguments for the format string ... variable arguments Description The function returns the number of characters written into buf. Use snprintf or scnprintf in order to avoid buffer overflows. See the vsnprintf documentation for format string extensions over C99. LINUX Kernel Hackers Manual July 2017 vbin_printf 9 4.1.27 vbin_printf Parse a format string and place args' binary value in a buffer Synopsis int vbin_printf u32 * bin_buf size_t size const char * fmt va_list args Arguments bin_buf The buffer to place args' binary value size The size of the buffer(by words(32bits), not characters) fmt The format string to use args Arguments for the format string Description The format follows C99 vsnprintf, except n is ignored, and its argument is skipped. The return value is the number of words(32bits) which would be generated for the given input. NOTE If the return value is greater than size, the resulting bin_buf is NOT valid for bstr_printf. LINUX Kernel Hackers Manual July 2017 bstr_printf 9 4.1.27 bstr_printf Format a string from binary arguments and place it in a buffer Synopsis int bstr_printf char * buf size_t size const char * fmt const u32 * bin_buf Arguments buf The buffer to place the result into size The size of the buffer, including the trailing null space fmt The format string to use bin_buf Binary arguments for the format string Description This function like C99 vsnprintf, but the difference is that vsnprintf gets arguments from stack, and bstr_printf gets arguments from bin_buf which is a binary buffer that generated by vbin_printf. The format follows C99 vsnprintf, but has some extensions: see vsnprintf comment for details. The return value is the number of characters which would be generated for the given input, excluding the trailing '\0', as per ISO C99. If you want to have the exact number of characters written into buf as return value (not including the trailing '\0'), use vscnprintf. If the return is greater than or equal to size, the resulting string is truncated. LINUX Kernel Hackers Manual July 2017 bprintf 9 4.1.27 bprintf Parse a format string and place args' binary value in a buffer Synopsis int bprintf u32 * bin_buf size_t size const char * fmt ... Arguments bin_buf The buffer to place args' binary value size The size of the buffer(by words(32bits), not characters) fmt The format string to use @...: Arguments for the format string ... variable arguments Description The function returns the number of words(u32) written into bin_buf. LINUX Kernel Hackers Manual July 2017 vsscanf 9 4.1.27 vsscanf Unformat a buffer into a list of arguments Synopsis int vsscanf const char * buf const char * fmt va_list args Arguments buf input buffer fmt format of buffer args arguments LINUX Kernel Hackers Manual July 2017 sscanf 9 4.1.27 sscanf Unformat a buffer into a list of arguments Synopsis int sscanf const char * buf const char * fmt ... Arguments buf input buffer fmt formatting of buffer @...: resulting arguments ... variable arguments LINUX Kernel Hackers Manual July 2017 kstrtol 9 4.1.27 kstrtol convert a string to a long Synopsis int kstrtol const char * s unsigned int base long * res Arguments s The start of the string. The string must be null-terminated, and may also include a single newline before its terminating null. The first character may also be a plus sign or a minus sign. base The number base to use. The maximum supported base is 16. If base is given as 0, then the base of the string is automatically detected with the conventional semantics - If it begins with 0x the number will be parsed as a hexadecimal (case insensitive), if it otherwise begins with 0, it will be parsed as an octal number. Otherwise it will be parsed as a decimal. res Where to write the result of the conversion on success. Description Returns 0 on success, -ERANGE on overflow and -EINVAL on parsing error. Used as a replacement for the obsolete simple_strtoull. Return code must be checked. LINUX Kernel Hackers Manual July 2017 kstrtoul 9 4.1.27 kstrtoul convert a string to an unsigned long Synopsis int kstrtoul const char * s unsigned int base unsigned long * res Arguments s The start of the string. The string must be null-terminated, and may also include a single newline before its terminating null. The first character may also be a plus sign, but not a minus sign. base The number base to use. The maximum supported base is 16. If base is given as 0, then the base of the string is automatically detected with the conventional semantics - If it begins with 0x the number will be parsed as a hexadecimal (case insensitive), if it otherwise begins with 0, it will be parsed as an octal number. Otherwise it will be parsed as a decimal. res Where to write the result of the conversion on success. Description Returns 0 on success, -ERANGE on overflow and -EINVAL on parsing error. Used as a replacement for the obsolete simple_strtoull. Return code must be checked. LINUX Kernel Hackers Manual July 2017 kstrtoull 9 4.1.27 kstrtoull convert a string to an unsigned long long Synopsis int kstrtoull const char * s unsigned int base unsigned long long * res Arguments s The start of the string. The string must be null-terminated, and may also include a single newline before its terminating null. The first character may also be a plus sign, but not a minus sign. base The number base to use. The maximum supported base is 16. If base is given as 0, then the base of the string is automatically detected with the conventional semantics - If it begins with 0x the number will be parsed as a hexadecimal (case insensitive), if it otherwise begins with 0, it will be parsed as an octal number. Otherwise it will be parsed as a decimal. res Where to write the result of the conversion on success. Description Returns 0 on success, -ERANGE on overflow and -EINVAL on parsing error. Used as a replacement for the obsolete simple_strtoull. Return code must be checked. LINUX Kernel Hackers Manual July 2017 kstrtoll 9 4.1.27 kstrtoll convert a string to a long long Synopsis int kstrtoll const char * s unsigned int base long long * res Arguments s The start of the string. The string must be null-terminated, and may also include a single newline before its terminating null. The first character may also be a plus sign or a minus sign. base The number base to use. The maximum supported base is 16. If base is given as 0, then the base of the string is automatically detected with the conventional semantics - If it begins with 0x the number will be parsed as a hexadecimal (case insensitive), if it otherwise begins with 0, it will be parsed as an octal number. Otherwise it will be parsed as a decimal. res Where to write the result of the conversion on success. Description Returns 0 on success, -ERANGE on overflow and -EINVAL on parsing error. Used as a replacement for the obsolete simple_strtoull. Return code must be checked. LINUX Kernel Hackers Manual July 2017 kstrtouint 9 4.1.27 kstrtouint convert a string to an unsigned int Synopsis int kstrtouint const char * s unsigned int base unsigned int * res Arguments s The start of the string. The string must be null-terminated, and may also include a single newline before its terminating null. The first character may also be a plus sign, but not a minus sign. base The number base to use. The maximum supported base is 16. If base is given as 0, then the base of the string is automatically detected with the conventional semantics - If it begins with 0x the number will be parsed as a hexadecimal (case insensitive), if it otherwise begins with 0, it will be parsed as an octal number. Otherwise it will be parsed as a decimal. res Where to write the result of the conversion on success. Description Returns 0 on success, -ERANGE on overflow and -EINVAL on parsing error. Used as a replacement for the obsolete simple_strtoull. Return code must be checked. LINUX Kernel Hackers Manual July 2017 kstrtoint 9 4.1.27 kstrtoint convert a string to an int Synopsis int kstrtoint const char * s unsigned int base int * res Arguments s The start of the string. The string must be null-terminated, and may also include a single newline before its terminating null. The first character may also be a plus sign or a minus sign. base The number base to use. The maximum supported base is 16. If base is given as 0, then the base of the string is automatically detected with the conventional semantics - If it begins with 0x the number will be parsed as a hexadecimal (case insensitive), if it otherwise begins with 0, it will be parsed as an octal number. Otherwise it will be parsed as a decimal. res Where to write the result of the conversion on success. Description Returns 0 on success, -ERANGE on overflow and -EINVAL on parsing error. Used as a replacement for the obsolete simple_strtoull. Return code must be checked. String Manipulation LINUX Kernel Hackers Manual July 2017 strncasecmp 9 4.1.27 strncasecmp Case insensitive, length-limited string comparison Synopsis int strncasecmp const char * s1 const char * s2 size_t len Arguments s1 One string s2 The other string len the maximum number of characters to compare LINUX Kernel Hackers Manual July 2017 strcpy 9 4.1.27 strcpy Copy a NUL terminated string Synopsis char * strcpy char * dest const char * src Arguments dest Where to copy the string to src Where to copy the string from LINUX Kernel Hackers Manual July 2017 strncpy 9 4.1.27 strncpy Copy a length-limited, C-string Synopsis char * strncpy char * dest const char * src size_t count Arguments dest Where to copy the string to src Where to copy the string from count The maximum number of bytes to copy Description The result is not NUL-terminated if the source exceeds count bytes. In the case where the length of src is less than that of count, the remainder of dest will be padded with NUL. LINUX Kernel Hackers Manual July 2017 strlcpy 9 4.1.27 strlcpy Copy a C-string into a sized buffer Synopsis size_t strlcpy char * dest const char * src size_t size Arguments dest Where to copy the string to src Where to copy the string from size size of destination buffer BSD the result is always a valid NUL-terminated string that fits in the buffer (unless, of course, the buffer size is zero). It does not pad out the result like strncpy does. LINUX Kernel Hackers Manual July 2017 strcat 9 4.1.27 strcat Append one NUL-terminated string to another Synopsis char * strcat char * dest const char * src Arguments dest The string to be appended to src The string to append to it LINUX Kernel Hackers Manual July 2017 strncat 9 4.1.27 strncat Append a length-limited, C-string to another Synopsis char * strncat char * dest const char * src size_t count Arguments dest The string to be appended to src The string to append to it count The maximum numbers of bytes to copy Description Note that in contrast to strncpy, strncat ensures the result is terminated. LINUX Kernel Hackers Manual July 2017 strlcat 9 4.1.27 strlcat Append a length-limited, C-string to another Synopsis size_t strlcat char * dest const char * src size_t count Arguments dest The string to be appended to src The string to append to it count The size of the destination buffer. LINUX Kernel Hackers Manual July 2017 strcmp 9 4.1.27 strcmp Compare two strings Synopsis int strcmp const char * cs const char * ct Arguments cs One string ct Another string LINUX Kernel Hackers Manual July 2017 strncmp 9 4.1.27 strncmp Compare two length-limited strings Synopsis int strncmp const char * cs const char * ct size_t count Arguments cs One string ct Another string count The maximum number of bytes to compare LINUX Kernel Hackers Manual July 2017 strchr 9 4.1.27 strchr Find the first occurrence of a character in a string Synopsis char * strchr const char * s int c Arguments s The string to be searched c The character to search for LINUX Kernel Hackers Manual July 2017 strchrnul 9 4.1.27 strchrnul Find and return a character in a string, or end of string Synopsis char * strchrnul const char * s int c Arguments s The string to be searched c The character to search for Description Returns pointer to first occurrence of 'c' in s. If c is not found, then return a pointer to the null byte at the end of s. LINUX Kernel Hackers Manual July 2017 strrchr 9 4.1.27 strrchr Find the last occurrence of a character in a string Synopsis char * strrchr const char * s int c Arguments s The string to be searched c The character to search for LINUX Kernel Hackers Manual July 2017 strnchr 9 4.1.27 strnchr Find a character in a length limited string Synopsis char * strnchr const char * s size_t count int c Arguments s The string to be searched count The number of characters to be searched c The character to search for LINUX Kernel Hackers Manual July 2017 skip_spaces 9 4.1.27 skip_spaces Removes leading whitespace from str. Synopsis char * skip_spaces const char * str Arguments str The string to be stripped. Description Returns a pointer to the first non-whitespace character in str. LINUX Kernel Hackers Manual July 2017 strim 9 4.1.27 strim Removes leading and trailing whitespace from s. Synopsis char * strim char * s Arguments s The string to be stripped. Description Note that the first trailing whitespace is replaced with a NUL-terminator in the given string s. Returns a pointer to the first non-whitespace character in s. LINUX Kernel Hackers Manual July 2017 strlen 9 4.1.27 strlen Find the length of a string Synopsis size_t strlen const char * s Arguments s The string to be sized LINUX Kernel Hackers Manual July 2017 strnlen 9 4.1.27 strnlen Find the length of a length-limited string Synopsis size_t strnlen const char * s size_t count Arguments s The string to be sized count The maximum number of bytes to search LINUX Kernel Hackers Manual July 2017 strspn 9 4.1.27 strspn Calculate the length of the initial substring of s which only contain letters in accept Synopsis size_t strspn const char * s const char * accept Arguments s The string to be searched accept The string to search for LINUX Kernel Hackers Manual July 2017 strcspn 9 4.1.27 strcspn Calculate the length of the initial substring of s which does not contain letters in reject Synopsis size_t strcspn const char * s const char * reject Arguments s The string to be searched reject The string to avoid LINUX Kernel Hackers Manual July 2017 strpbrk 9 4.1.27 strpbrk Find the first occurrence of a set of characters Synopsis char * strpbrk const char * cs const char * ct Arguments cs The string to be searched ct The characters to search for LINUX Kernel Hackers Manual July 2017 strsep 9 4.1.27 strsep Split a string into tokens Synopsis char * strsep char ** s const char * ct Arguments s The string to be searched ct The characters to search for Description strsep updates s to point after the token, ready for the next call. It returns empty tokens, too, behaving exactly like the libc function of that name. In fact, it was stolen from glibc2 and de-fancy-fied. Same semantics, slimmer shape. ;) LINUX Kernel Hackers Manual July 2017 sysfs_streq 9 4.1.27 sysfs_streq return true if strings are equal, modulo trailing newline Synopsis bool sysfs_streq const char * s1 const char * s2 Arguments s1 one string s2 another string Description This routine returns true iff two strings are equal, treating both NUL and newline-then-NUL as equivalent string terminations. It's geared for use with sysfs input strings, which generally terminate with newlines but are compared against values without newlines. LINUX Kernel Hackers Manual July 2017 strtobool 9 4.1.27 strtobool convert common user inputs into boolean values Synopsis int strtobool const char * s bool * res Arguments s input string res result Description This routine returns 0 iff the first character is one of 'Yy1Nn0'. Otherwise it will return -EINVAL. Value pointed to by res is updated upon finding a match. LINUX Kernel Hackers Manual July 2017 memset 9 4.1.27 memset Fill a region of memory with the given value Synopsis void * memset void * s int c size_t count Arguments s Pointer to the start of the area. c The byte to fill the area with count The size of the area. Description Do not use memset to access IO space, use memset_io instead. LINUX Kernel Hackers Manual July 2017 memzero_explicit 9 4.1.27 memzero_explicit Fill a region of memory (e.g. sensitive keying data) with 0s. Synopsis void memzero_explicit void * s size_t count Arguments s Pointer to the start of the area. count The size of the area. Note usually using memset is just fine (!), but in cases where clearing out _local_ data at the end of a scope is necessary, memzero_explicit should be used instead in order to prevent the compiler from optimising away zeroing. memzero_explicit doesn't need an arch-specific version as it just invokes the one of memset implicitly. LINUX Kernel Hackers Manual July 2017 memcpy 9 4.1.27 memcpy Copy one area of memory to another Synopsis void * memcpy void * dest const void * src size_t count Arguments dest Where to copy to src Where to copy from count The size of the area. Description You should not use this function to access IO space, use memcpy_toio or memcpy_fromio instead. LINUX Kernel Hackers Manual July 2017 memmove 9 4.1.27 memmove Copy one area of memory to another Synopsis void * memmove void * dest const void * src size_t count Arguments dest Where to copy to src Where to copy from count The size of the area. Description Unlike memcpy, memmove copes with overlapping areas. LINUX Kernel Hackers Manual July 2017 memcmp 9 4.1.27 memcmp Compare two areas of memory Synopsis __visible int memcmp const void * cs const void * ct size_t count Arguments cs One area of memory ct Another area of memory count The size of the area. LINUX Kernel Hackers Manual July 2017 memscan 9 4.1.27 memscan Find a character in an area of memory. Synopsis void * memscan void * addr int c size_t size Arguments addr The memory area c The byte to search for size The size of the area. Description returns the address of the first occurrence of c, or 1 byte past the area if c is not found LINUX Kernel Hackers Manual July 2017 strstr 9 4.1.27 strstr Find the first substring in a NUL terminated string Synopsis char * strstr const char * s1 const char * s2 Arguments s1 The string to be searched s2 The string to search for LINUX Kernel Hackers Manual July 2017 strnstr 9 4.1.27 strnstr Find the first substring in a length-limited string Synopsis char * strnstr const char * s1 const char * s2 size_t len Arguments s1 The string to be searched s2 The string to search for len the maximum number of characters to search LINUX Kernel Hackers Manual July 2017 memchr 9 4.1.27 memchr Find a character in an area of memory. Synopsis void * memchr const void * s int c size_t n Arguments s The memory area c The byte to search for n The size of the area. Description returns the address of the first occurrence of c, or NULL if c is not found LINUX Kernel Hackers Manual July 2017 memchr_inv 9 4.1.27 memchr_inv Find an unmatching character in an area of memory. Synopsis void * memchr_inv const void * start int c size_t bytes Arguments start The memory area c Find a character other than c bytes The size of the area. Description returns the address of the first character other than c, or NULL if the whole buffer contains just c. Bit Operations LINUX Kernel Hackers Manual July 2017 set_bit 9 4.1.27 set_bit Atomically set a bit in memory Synopsis void set_bit long nr volatile unsigned long * addr Arguments nr the bit to set addr the address to start counting from Description This function is atomic and may not be reordered. See __set_bit if you do not require the atomic guarantees. Note there are no guarantees that this function will not be reordered on non x86 architectures, so if you are writing portable code, make sure not to rely on its reordering guarantees. Note that nr may be almost arbitrarily large; this function is not restricted to acting on a single-word quantity. LINUX Kernel Hackers Manual July 2017 __set_bit 9 4.1.27 __set_bit Set a bit in memory Synopsis void __set_bit long nr volatile unsigned long * addr Arguments nr the bit to set addr the address to start counting from Description Unlike set_bit, this function is non-atomic and may be reordered. If it's called on the same region of memory simultaneously, the effect may be that only one operation succeeds. LINUX Kernel Hackers Manual July 2017 clear_bit 9 4.1.27 clear_bit Clears a bit in memory Synopsis void clear_bit long nr volatile unsigned long * addr Arguments nr Bit to clear addr Address to start counting from Description clear_bit is atomic and may not be reordered. However, it does not contain a memory barrier, so if it is used for locking purposes, you should call smp_mb__before_atomic and/or smp_mb__after_atomic in order to ensure changes are visible on other processors. LINUX Kernel Hackers Manual July 2017 __change_bit 9 4.1.27 __change_bit Toggle a bit in memory Synopsis void __change_bit long nr volatile unsigned long * addr Arguments nr the bit to change addr the address to start counting from Description Unlike change_bit, this function is non-atomic and may be reordered. If it's called on the same region of memory simultaneously, the effect may be that only one operation succeeds. LINUX Kernel Hackers Manual July 2017 change_bit 9 4.1.27 change_bit Toggle a bit in memory Synopsis void change_bit long nr volatile unsigned long * addr Arguments nr Bit to change addr Address to start counting from Description change_bit is atomic and may not be reordered. Note that nr may be almost arbitrarily large; this function is not restricted to acting on a single-word quantity. LINUX Kernel Hackers Manual July 2017 test_and_set_bit 9 4.1.27 test_and_set_bit Set a bit and return its old value Synopsis int test_and_set_bit long nr volatile unsigned long * addr Arguments nr Bit to set addr Address to count from Description This operation is atomic and cannot be reordered. It also implies a memory barrier. LINUX Kernel Hackers Manual July 2017 test_and_set_bit_lock 9 4.1.27 test_and_set_bit_lock Set a bit and return its old value for lock Synopsis int test_and_set_bit_lock long nr volatile unsigned long * addr Arguments nr Bit to set addr Address to count from Description This is the same as test_and_set_bit on x86. LINUX Kernel Hackers Manual July 2017 __test_and_set_bit 9 4.1.27 __test_and_set_bit Set a bit and return its old value Synopsis int __test_and_set_bit long nr volatile unsigned long * addr Arguments nr Bit to set addr Address to count from Description This operation is non-atomic and can be reordered. If two examples of this operation race, one can appear to succeed but actually fail. You must protect multiple accesses with a lock. LINUX Kernel Hackers Manual July 2017 test_and_clear_bit 9 4.1.27 test_and_clear_bit Clear a bit and return its old value Synopsis int test_and_clear_bit long nr volatile unsigned long * addr Arguments nr Bit to clear addr Address to count from Description This operation is atomic and cannot be reordered. It also implies a memory barrier. LINUX Kernel Hackers Manual July 2017 __test_and_clear_bit 9 4.1.27 __test_and_clear_bit Clear a bit and return its old value Synopsis int __test_and_clear_bit long nr volatile unsigned long * addr Arguments nr Bit to clear addr Address to count from Description This operation is non-atomic and can be reordered. If two examples of this operation race, one can appear to succeed but actually fail. You must protect multiple accesses with a lock. Note the operation is performed atomically with respect to the local CPU, but not other CPUs. Portable code should not rely on this behaviour. KVM relies on this behaviour on x86 for modifying memory that is also accessed from a hypervisor on the same CPU if running in a VM don't change this without also updating arch/x86/kernel/kvm.c LINUX Kernel Hackers Manual July 2017 test_and_change_bit 9 4.1.27 test_and_change_bit Change a bit and return its old value Synopsis int test_and_change_bit long nr volatile unsigned long * addr Arguments nr Bit to change addr Address to count from Description This operation is atomic and cannot be reordered. It also implies a memory barrier. LINUX Kernel Hackers Manual July 2017 test_bit 9 4.1.27 test_bit Determine whether a bit is set Synopsis int test_bit int nr const volatile unsigned long * addr Arguments nr bit number to test addr Address to start counting from LINUX Kernel Hackers Manual July 2017 __ffs 9 4.1.27 __ffs find first set bit in word Synopsis unsigned long __ffs unsigned long word Arguments word The word to search Description Undefined if no bit exists, so code should check against 0 first. LINUX Kernel Hackers Manual July 2017 ffz 9 4.1.27 ffz find first zero bit in word Synopsis unsigned long ffz unsigned long word Arguments word The word to search Description Undefined if no zero exists, so code should check against ~0UL first. LINUX Kernel Hackers Manual July 2017 ffs 9 4.1.27 ffs find first set bit in word Synopsis int ffs int x Arguments x the word to search Description This is defined the same way as the libc and compiler builtin ffs routines, therefore differs in spirit from the other bitops. ffs(value) returns 0 if value is 0 or the position of the first set bit if value is nonzero. The first (least significant) bit is at position 1. LINUX Kernel Hackers Manual July 2017 fls 9 4.1.27 fls find last set bit in word Synopsis int fls int x Arguments x the word to search Description This is defined in a similar way as the libc and compiler builtin ffs, but returns the position of the most significant set bit. fls(value) returns 0 if value is 0 or the position of the last set bit if value is nonzero. The last (most significant) bit is at position 32. LINUX Kernel Hackers Manual July 2017 fls64 9 4.1.27 fls64 find last set bit in a 64-bit word Synopsis int fls64 __u64 x Arguments x the word to search Description This is defined in a similar way as the libc and compiler builtin ffsll, but returns the position of the most significant set bit. fls64(value) returns 0 if value is 0 or the position of the last set bit if value is nonzero. The last (most significant) bit is at position 64. Basic Kernel Library Functions The Linux kernel provides more basic utility functions. Bitmap Operations LINUX Kernel Hackers Manual July 2017 __bitmap_shift_right 9 4.1.27 __bitmap_shift_right logical right shift of the bits in a bitmap Synopsis void __bitmap_shift_right unsigned long * dst const unsigned long * src unsigned shift unsigned nbits Arguments dst destination bitmap src source bitmap shift shift by this many bits nbits bitmap size, in bits Description Shifting right (dividing) means moving bits in the MS -> LS bit direction. Zeros are fed into the vacated MS positions and the LS bits shifted off the bottom are lost. LINUX Kernel Hackers Manual July 2017 __bitmap_shift_left 9 4.1.27 __bitmap_shift_left logical left shift of the bits in a bitmap Synopsis void __bitmap_shift_left unsigned long * dst const unsigned long * src unsigned int shift unsigned int nbits Arguments dst destination bitmap src source bitmap shift shift by this many bits nbits bitmap size, in bits Description Shifting left (multiplying) means moving bits in the LS -> MS direction. Zeros are fed into the vacated LS bit positions and those MS bits shifted off the top are lost. LINUX Kernel Hackers Manual July 2017 bitmap_find_next_zero_area_off 9 4.1.27 bitmap_find_next_zero_area_off find a contiguous aligned zero area Synopsis unsigned long bitmap_find_next_zero_area_off unsigned long * map unsigned long size unsigned long start unsigned int nr unsigned long align_mask unsigned long align_offset Arguments map The address to base the search on size The bitmap size in bits start The bitnumber to start searching at nr The number of zeroed bits we're looking for align_mask Alignment mask for zero area align_offset Alignment offset for zero area. Description The align_mask should be one less than a power of 2; the effect is that the bit offset of all zero areas this function finds plus align_offset is multiple of that power of 2. LINUX Kernel Hackers Manual July 2017 __bitmap_parse 9 4.1.27 __bitmap_parse convert an ASCII hex string into a bitmap. Synopsis int __bitmap_parse const char * buf unsigned int buflen int is_user unsigned long * maskp int nmaskbits Arguments buf pointer to buffer containing string. buflen buffer size in bytes. If string is smaller than this then it must be terminated with a \0. is_user location of buffer, 0 indicates kernel space maskp pointer to bitmap array that will contain result. nmaskbits size of bitmap, in bits. Description Commas group hex digits into chunks. Each chunk defines exactly 32 bits of the resultant bitmask. No chunk may specify a value larger than 32 bits (-EOVERFLOW), and if a chunk specifies a smaller value then leading 0-bits are prepended. -EINVAL is returned for illegal characters and for grouping errors such as 1,,5, ,44, , and "". Leading and trailing whitespace accepted, but not embedded whitespace. LINUX Kernel Hackers Manual July 2017 bitmap_parse_user 9 4.1.27 bitmap_parse_user convert an ASCII hex string in a user buffer into a bitmap Synopsis int bitmap_parse_user const char __user * ubuf unsigned int ulen unsigned long * maskp int nmaskbits Arguments ubuf pointer to user buffer containing string. ulen buffer size in bytes. If string is smaller than this then it must be terminated with a \0. maskp pointer to bitmap array that will contain result. nmaskbits size of bitmap, in bits. Description Wrapper for __bitmap_parse, providing it with user buffer. We cannot have this as an inline function in bitmap.h because it needs linux/uaccess.h to get the access_ok declaration and this causes cyclic dependencies. LINUX Kernel Hackers Manual July 2017 bitmap_print_to_pagebuf 9 4.1.27 bitmap_print_to_pagebuf convert bitmap to list or hex format ASCII string Synopsis int bitmap_print_to_pagebuf bool list char * buf const unsigned long * maskp int nmaskbits Arguments list indicates whether the bitmap must be list buf page aligned buffer into which string is placed maskp pointer to bitmap to convert nmaskbits size of bitmap, in bits Description Output format is a comma-separated list of decimal numbers and ranges if list is specified or hex digits grouped into comma-separated sets of 8 digits/set. Returns the number of characters written to buf. LINUX Kernel Hackers Manual July 2017 bitmap_parselist_user 9 4.1.27 bitmap_parselist_user Synopsis int bitmap_parselist_user const char __user * ubuf unsigned int ulen unsigned long * maskp int nmaskbits Arguments ubuf pointer to user buffer containing string. ulen buffer size in bytes. If string is smaller than this then it must be terminated with a \0. maskp pointer to bitmap array that will contain result. nmaskbits size of bitmap, in bits. Description Wrapper for bitmap_parselist, providing it with user buffer. We cannot have this as an inline function in bitmap.h because it needs linux/uaccess.h to get the access_ok declaration and this causes cyclic dependencies. LINUX Kernel Hackers Manual July 2017 bitmap_remap 9 4.1.27 bitmap_remap Apply map defined by a pair of bitmaps to another bitmap Synopsis void bitmap_remap unsigned long * dst const unsigned long * src const unsigned long * old const unsigned long * new unsigned int nbits Arguments dst remapped result src subset to be remapped old defines domain of map new defines range of map nbits number of bits in each of these bitmaps Description Let old and new define a mapping of bit positions, such that whatever position is held by the n-th set bit in old is mapped to the n-th set bit in new. In the more general case, allowing for the possibility that the weight 'w' of new is less than the weight of old, map the position of the n-th set bit in old to the position of the m-th set bit in new, where m == n % w. If either of the old and new bitmaps are empty, or if src and dst point to the same location, then this routine copies src to dst. The positions of unset bits in old are mapped to themselves (the identify map). Apply the above specified mapping to src, placing the result in dst, clearing any bits previously set in dst. For example, lets say that old has bits 4 through 7 set, and new has bits 12 through 15 set. This defines the mapping of bit position 4 to 12, 5 to 13, 6 to 14 and 7 to 15, and of all other bit positions unchanged. So if say src comes into this routine with bits 1, 5 and 7 set, then dst should leave with bits 1, 13 and 15 set. LINUX Kernel Hackers Manual July 2017 bitmap_bitremap 9 4.1.27 bitmap_bitremap Apply map defined by a pair of bitmaps to a single bit Synopsis int bitmap_bitremap int oldbit const unsigned long * old const unsigned long * new int bits Arguments oldbit bit position to be mapped old defines domain of map new defines range of map bits number of bits in each of these bitmaps Description Let old and new define a mapping of bit positions, such that whatever position is held by the n-th set bit in old is mapped to the n-th set bit in new. In the more general case, allowing for the possibility that the weight 'w' of new is less than the weight of old, map the position of the n-th set bit in old to the position of the m-th set bit in new, where m == n % w. The positions of unset bits in old are mapped to themselves (the identify map). Apply the above specified mapping to bit position oldbit, returning the new bit position. For example, lets say that old has bits 4 through 7 set, and new has bits 12 through 15 set. This defines the mapping of bit position 4 to 12, 5 to 13, 6 to 14 and 7 to 15, and of all other bit positions unchanged. So if say oldbit is 5, then this routine returns 13. LINUX Kernel Hackers Manual July 2017 bitmap_onto 9 4.1.27 bitmap_onto translate one bitmap relative to another Synopsis void bitmap_onto unsigned long * dst const unsigned long * orig const unsigned long * relmap unsigned int bits Arguments dst resulting translated bitmap orig original untranslated bitmap relmap bitmap relative to which translated bits number of bits in each of these bitmaps Description Set the n-th bit of dst iff there exists some m such that the n-th bit of relmap is set, the m-th bit of orig is set, and the n-th bit of relmap is also the m-th _set_ bit of relmap. (If you understood the previous sentence the first time your read it, you're overqualified for your current job.) In other words, orig is mapped onto (surjectively) dst, using the map { <n, m> | the n-th bit of relmap is the m-th set bit of relmap }. Any set bits in orig above bit number W, where W is the weight of (number of set bits in) relmap are mapped nowhere. In particular, if for all bits m set in orig, m >= W, then dst will end up empty. In situations where the possibility of such an empty result is not desired, one way to avoid it is to use the bitmap_fold operator, below, to first fold the orig bitmap over itself so that all its set bits x are in the range 0 <= x < W. The bitmap_fold operator does this by setting the bit (m % W) in dst, for each bit (m) set in orig. Example [1] for bitmap_onto: Let's say relmap has bits 30-39 set, and orig has bits 1, 3, 5, 7, 9 and 11 set. Then on return from this routine, dst will have bits 31, 33, 35, 37 and 39 set. When bit 0 is set in orig, it means turn on the bit in dst corresponding to whatever is the first bit (if any) that is turned on in relmap. Since bit 0 was off in the above example, we leave off that bit (bit 30) in dst. When bit 1 is set in orig (as in the above example), it means turn on the bit in dst corresponding to whatever is the second bit that is turned on in relmap. The second bit in relmap that was turned on in the above example was bit 31, so we turned on bit 31 in dst. Similarly, we turned on bits 33, 35, 37 and 39 in dst, because they were the 4th, 6th, 8th and 10th set bits set in relmap, and the 4th, 6th, 8th and 10th bits of orig (i.e. bits 3, 5, 7 and 9) were also set. When bit 11 is set in orig, it means turn on the bit in dst corresponding to whatever is the twelfth bit that is turned on in relmap. In the above example, there were only ten bits turned on in relmap (30..39), so that bit 11 was set in orig had no affect on dst. Example [2] for bitmap_fold + bitmap_onto: Let's say relmap has these ten bits set: 40 41 42 43 45 48 53 61 74 95 (for the curious, that's 40 plus the first ten terms of the Fibonacci sequence.) Further lets say we use the following code, invoking bitmap_fold then bitmap_onto, as suggested above to avoid the possibility of an empty dst result: unsigned long *tmp; // a temporary bitmap's bits bitmap_fold(tmp, orig, bitmap_weight(relmap, bits), bits); bitmap_onto(dst, tmp, relmap, bits); Then this table shows what various values of dst would be, for various orig's. I list the zero-based positions of each set bit. The tmp column shows the intermediate result, as computed by using bitmap_fold to fold the orig bitmap modulo ten (the weight of relmap). orig tmp dst 0 0 40 1 1 41 9 9 95 10 0 40 (*) 1 3 5 7 1 3 5 7 41 43 48 61 0 1 2 3 4 0 1 2 3 4 40 41 42 43 45 0 9 18 27 0 9 8 7 40 61 74 95 0 10 20 30 0 40 0 11 22 33 0 1 2 3 40 41 42 43 0 12 24 36 0 2 4 6 40 42 45 53 78 102 211 1 2 8 41 42 74 (*) (*) For these marked lines, if we hadn't first done bitmap_fold into tmp, then the dst result would have been empty. If either of orig or relmap is empty (no set bits), then dst will be returned empty. If (as explained above) the only set bits in orig are in positions m where m >= W, (where W is the weight of relmap) then dst will once again be returned empty. All bits in dst not set by the above rule are cleared. LINUX Kernel Hackers Manual July 2017 bitmap_fold 9 4.1.27 bitmap_fold fold larger bitmap into smaller, modulo specified size Synopsis void bitmap_fold unsigned long * dst const unsigned long * orig unsigned int sz unsigned int nbits Arguments dst resulting smaller bitmap orig original larger bitmap sz specified size nbits number of bits in each of these bitmaps Description For each bit oldbit in orig, set bit oldbit mod sz in dst. Clear all other bits in dst. See further the comment and Example [2] for bitmap_onto for why and how to use this. LINUX Kernel Hackers Manual July 2017 bitmap_find_free_region 9 4.1.27 bitmap_find_free_region find a contiguous aligned mem region Synopsis int bitmap_find_free_region unsigned long * bitmap unsigned int bits int order Arguments bitmap array of unsigned longs corresponding to the bitmap bits number of bits in the bitmap order region size (log base 2 of number of bits) to find Description Find a region of free (zero) bits in a bitmap of bits bits and allocate them (set them to one). Only consider regions of length a power (order) of two, aligned to that power of two, which makes the search algorithm much faster. Return the bit offset in bitmap of the allocated region, or -errno on failure. LINUX Kernel Hackers Manual July 2017 bitmap_release_region 9 4.1.27 bitmap_release_region release allocated bitmap region Synopsis void bitmap_release_region unsigned long * bitmap unsigned int pos int order Arguments bitmap array of unsigned longs corresponding to the bitmap pos beginning of bit region to release order region size (log base 2 of number of bits) to release Description This is the complement to __bitmap_find_free_region and releases the found region (by clearing it in the bitmap). No return value. LINUX Kernel Hackers Manual July 2017 bitmap_allocate_region 9 4.1.27 bitmap_allocate_region allocate bitmap region Synopsis int bitmap_allocate_region unsigned long * bitmap unsigned int pos int order Arguments bitmap array of unsigned longs corresponding to the bitmap pos beginning of bit region to allocate order region size (log base 2 of number of bits) to allocate Description Allocate (set bits in) a specified region of a bitmap. Return 0 on success, or -EBUSY if specified region wasn't free (not all bits were zero). LINUX Kernel Hackers Manual July 2017 bitmap_copy_le 9 4.1.27 bitmap_copy_le copy a bitmap, putting the bits into little-endian order. Synopsis void bitmap_copy_le unsigned long * dst const unsigned long * src unsigned int nbits Arguments dst destination buffer src bitmap to copy nbits number of bits in the bitmap Description Require nbits % BITS_PER_LONG == 0. LINUX Kernel Hackers Manual July 2017 __bitmap_parselist 9 4.1.27 __bitmap_parselist convert list format ASCII string to bitmap Synopsis int __bitmap_parselist const char * buf unsigned int buflen int is_user unsigned long * maskp int nmaskbits Arguments buf read nul-terminated user string from this buffer buflen buffer size in bytes. If string is smaller than this then it must be terminated with a \0. is_user location of buffer, 0 indicates kernel space maskp write resulting mask here nmaskbits number of bits in mask to be written Description Input format is a comma-separated list of decimal numbers and ranges. Consecutively set bits are shown as two hyphen-separated decimal numbers, the smallest and largest bit numbers set in the range. Returns 0 on success, -errno on invalid input strings. Error values -EINVAL: second number in range smaller than first -EINVAL: invalid character in string -ERANGE: bit number specified too large for mask LINUX Kernel Hackers Manual July 2017 bitmap_pos_to_ord 9 4.1.27 bitmap_pos_to_ord find ordinal of set bit at given position in bitmap Synopsis int bitmap_pos_to_ord const unsigned long * buf unsigned int pos unsigned int nbits Arguments buf pointer to a bitmap pos a bit position in buf (0 <= pos < nbits) nbits number of valid bit positions in buf Description Map the bit at position pos in buf (of length nbits) to the ordinal of which set bit it is. If it is not set or if pos is not a valid bit position, map to -1. If for example, just bits 4 through 7 are set in buf, then pos values 4 through 7 will get mapped to 0 through 3, respectively, and other pos values will get mapped to -1. When pos value 7 gets mapped to (returns) ord value 3 in this example, that means that bit 7 is the 3rd (starting with 0th) set bit in buf. The bit positions 0 through bits are valid positions in buf. LINUX Kernel Hackers Manual July 2017 bitmap_ord_to_pos 9 4.1.27 bitmap_ord_to_pos find position of n-th set bit in bitmap Synopsis unsigned int bitmap_ord_to_pos const unsigned long * buf unsigned int ord unsigned int nbits Arguments buf pointer to bitmap ord ordinal bit position (n-th set bit, n >= 0) nbits number of valid bit positions in buf Description Map the ordinal offset of bit ord in buf to its position in buf. Value of ord should be in range 0 <= ord < weight(buf). If ord >= weight(buf), returns nbits. If for example, just bits 4 through 7 are set in buf, then ord values 0 through 3 will get mapped to 4 through 7, respectively, and all other ord values returns nbits. When ord value 3 gets mapped to (returns) pos value 7 in this example, that means that the 3rd set bit (starting with 0th) is at position 7 in buf. The bit positions 0 through nbits-1 are valid positions in buf. Command-line Parsing LINUX Kernel Hackers Manual July 2017 get_option 9 4.1.27 get_option Parse integer from an option string Synopsis int get_option char ** str int * pint Arguments str option string pint (output) integer value parsed from str Description Read an int from an option string; if available accept a subsequent comma as well. Return values 0 - no int in string 1 - int found, no subsequent comma 2 - int found including a subsequent comma 3 - hyphen found to denote a range LINUX Kernel Hackers Manual July 2017 get_options 9 4.1.27 get_options Parse a string into a list of integers Synopsis char * get_options const char * str int nints int * ints Arguments str String to be parsed nints size of integer array ints integer array Description This function parses a string containing a comma-separated list of integers, a hyphen-separated range of _positive_ integers, or a combination of both. The parse halts when the array is full, or when no more numbers can be retrieved from the string. Return value is the character in the string which caused the parse to end (typically a null terminator, if str is completely parseable). LINUX Kernel Hackers Manual July 2017 memparse 9 4.1.27 memparse parse a string with mem suffixes into a number Synopsis unsigned long long memparse const char * ptr char ** retptr Arguments ptr Where parse begins retptr (output) Optional pointer to next char after parse completes Description Parses a string into a number. The number stored at ptr is potentially suffixed with K, M, G, T, P, E. CRC Functions LINUX Kernel Hackers Manual July 2017 crc7_be 9 4.1.27 crc7_be update the CRC7 for the data buffer Synopsis u8 crc7_be u8 crc const u8 * buffer size_t len Arguments crc previous CRC7 value buffer data pointer len number of bytes in the buffer Context any Description Returns the updated CRC7 value. The CRC7 is left-aligned in the byte (the lsbit is always 0), as that makes the computation easier, and all callers want it in that form. LINUX Kernel Hackers Manual July 2017 crc16 9 4.1.27 crc16 compute the CRC-16 for the data buffer Synopsis u16 crc16 u16 crc u8 const * buffer size_t len Arguments crc previous CRC value buffer data pointer len number of bytes in the buffer Description Returns the updated CRC value. LINUX Kernel Hackers Manual July 2017 crc_itu_t 9 4.1.27 crc_itu_t Compute the CRC-ITU-T for the data buffer Synopsis u16 crc_itu_t u16 crc const u8 * buffer size_t len Arguments crc previous CRC value buffer data pointer len number of bytes in the buffer Description Returns the updated CRC value .//lib/crc32.c Document generation inconsistency Oops The template for this document tried to insert the structured comment from the file .//lib/crc32.c at this point, but none was found. This dummy section is inserted to allow generation to continue. LINUX Kernel Hackers Manual July 2017 crc_ccitt 9 4.1.27 crc_ccitt recompute the CRC for the data buffer Synopsis u16 crc_ccitt u16 crc u8 const * buffer size_t len Arguments crc previous CRC value buffer data pointer len number of bytes in the buffer idr/ida Functions idr synchronization (stolen from radix-tree.h) idr_find is able to be called locklessly, using RCU. The caller must ensure calls to this function are made within rcu_read_lock regions. Other readers (lock-free or otherwise) and modifications may be running concurrently. It is still required that the caller manage the synchronization and lifetimes of the items. So if RCU lock-free lookups are used, typically this would mean that the items have their own locks, or are amenable to lock-free access; and that the items are freed by RCU (or only freed after having been deleted from the idr tree *and* a synchronize_rcu grace period). IDA - IDR based ID allocator This is id allocator without id -> pointer translation. Memory usage is much lower than full blown idr because each id only occupies a bit. ida uses a custom leaf node which contains IDA_BITMAP_BITS slots. 2007-04-25 written by Tejun Heo <htejungmail.com> LINUX Kernel Hackers Manual July 2017 idr_preload 9 4.1.27 idr_preload preload for idr_alloc Synopsis void idr_preload gfp_t gfp_mask Arguments gfp_mask allocation mask to use for preloading Description Preload per-cpu layer buffer for idr_alloc. Can only be used from process context and each idr_preload invocation should be matched with idr_preload_end. Note that preemption is disabled while preloaded. The first idr_alloc in the preloaded section can be treated as if it were invoked with gfp_mask used for preloading. This allows using more permissive allocation masks for idrs protected by spinlocks. For example, if idr_alloc below fails, the failure can be treated as if idr_alloc were called with GFP_KERNEL rather than GFP_NOWAIT. idr_preload(GFP_KERNEL); spin_lock(lock); id = idr_alloc(idr, ptr, start, end, GFP_NOWAIT); spin_unlock(lock); idr_preload_end; if (id < 0) error; LINUX Kernel Hackers Manual July 2017 idr_alloc 9 4.1.27 idr_alloc allocate new idr entry Synopsis int idr_alloc struct idr * idr void * ptr int start int end gfp_t gfp_mask Arguments idr the (initialized) idr ptr pointer to be associated with the new id start the minimum id (inclusive) end the maximum id (exclusive, <= 0 for max) gfp_mask memory allocation flags Description Allocate an id in [start, end) and associate it with ptr. If no ID is available in the specified range, returns -ENOSPC. On memory allocation failure, returns -ENOMEM. Note that end is treated as max when <= 0. This is to always allow using start + N as end as long as N is inside integer range. The user is responsible for exclusively synchronizing all operations which may modify idr. However, read-only accesses such as idr_find or iteration can be performed under RCU read lock provided the user destroys ptr in RCU-safe way after removal from idr. LINUX Kernel Hackers Manual July 2017 idr_alloc_cyclic 9 4.1.27 idr_alloc_cyclic allocate new idr entry in a cyclical fashion Synopsis int idr_alloc_cyclic struct idr * idr void * ptr int start int end gfp_t gfp_mask Arguments idr the (initialized) idr ptr pointer to be associated with the new id start the minimum id (inclusive) end the maximum id (exclusive, <= 0 for max) gfp_mask memory allocation flags Description Essentially the same as idr_alloc, but prefers to allocate progressively higher ids if it can. If the cur counter wraps, then it will start again at the start end of the range and allocate one that has already been used. LINUX Kernel Hackers Manual July 2017 idr_remove 9 4.1.27 idr_remove remove the given id and free its slot Synopsis void idr_remove struct idr * idp int id Arguments idp idr handle id unique key LINUX Kernel Hackers Manual July 2017 idr_destroy 9 4.1.27 idr_destroy release all cached layers within an idr tree Synopsis void idr_destroy struct idr * idp Arguments idp idr handle Description Free all id mappings and all idp_layers. After this function, idp is completely unused and can be freed / recycled. The caller is responsible for ensuring that no one else accesses idp during or after idr_destroy. A typical clean-up sequence for objects stored in an idr tree will use idr_for_each to free all objects, if necessary, then idr_destroy to free up the id mappings and cached idr_layers. LINUX Kernel Hackers Manual July 2017 idr_for_each 9 4.1.27 idr_for_each iterate through all stored pointers Synopsis int idr_for_each struct idr * idp int (*fn) int id, void *p, void *data void * data Arguments idp idr handle fn function to be called for each pointer data data passed back to callback function Description Iterate over the pointers registered with the given idr. The callback function will be called for each pointer currently registered, passing the id, the pointer and the data pointer passed to this function. It is not safe to modify the idr tree while in the callback, so functions such as idr_get_new and idr_remove are not allowed. We check the return of fn each time. If it returns anything other than 0, we break out and return that value. The caller must serialize idr_for_each vs idr_get_new and idr_remove. LINUX Kernel Hackers Manual July 2017 idr_get_next 9 4.1.27 idr_get_next lookup next object of id to given id. Synopsis void * idr_get_next struct idr * idp int * nextidp Arguments idp idr handle nextidp pointer to lookup key Description Returns pointer to registered object with id, which is next number to given id. After being looked up, *nextidp will be updated for the next iteration. This function can be called under rcu_read_lock, given that the leaf pointers lifetimes are correctly managed. LINUX Kernel Hackers Manual July 2017 idr_replace 9 4.1.27 idr_replace replace pointer for given id Synopsis void * idr_replace struct idr * idp void * ptr int id Arguments idp idr handle ptr pointer you want associated with the id id lookup key Description Replace the pointer registered with an id and return the old value. A -ENOENT return indicates that id was not found. A -EINVAL return indicates that id was not within valid constraints. The caller must serialize with writers. LINUX Kernel Hackers Manual July 2017 idr_init 9 4.1.27 idr_init initialize idr handle Synopsis void idr_init struct idr * idp Arguments idp idr handle Description This function is use to set up the handle (idp) that you will pass to the rest of the functions. LINUX Kernel Hackers Manual July 2017 ida_pre_get 9 4.1.27 ida_pre_get reserve resources for ida allocation Synopsis int ida_pre_get struct ida * ida gfp_t gfp_mask Arguments ida ida handle gfp_mask memory allocation flag Description This function should be called prior to locking and calling the following function. It preallocates enough memory to satisfy the worst possible allocation. If the system is REALLY out of memory this function returns 0, otherwise 1. LINUX Kernel Hackers Manual July 2017 ida_get_new_above 9 4.1.27 ida_get_new_above allocate new ID above or equal to a start id Synopsis int ida_get_new_above struct ida * ida int starting_id int * p_id Arguments ida ida handle starting_id id to start search at p_id pointer to the allocated handle Description Allocate new ID above or equal to starting_id. It should be called with any required locks. If memory is required, it will return -EAGAIN, you should unlock and go back to the ida_pre_get call. If the ida is full, it will return -ENOSPC. p_id returns a value in the range starting_id ... 0x7fffffff. LINUX Kernel Hackers Manual July 2017 ida_remove 9 4.1.27 ida_remove remove the given ID Synopsis void ida_remove struct ida * ida int id Arguments ida ida handle id ID to free LINUX Kernel Hackers Manual July 2017 ida_destroy 9 4.1.27 ida_destroy release all cached layers within an ida tree Synopsis void ida_destroy struct ida * ida Arguments ida ida handle LINUX Kernel Hackers Manual July 2017 ida_simple_get 9 4.1.27 ida_simple_get get a new id. Synopsis int ida_simple_get struct ida * ida unsigned int start unsigned int end gfp_t gfp_mask Arguments ida the (initialized) ida. start the minimum id (inclusive, < 0x8000000) end the maximum id (exclusive, < 0x8000000 or 0) gfp_mask memory allocation flags Description Allocates an id in the range start <= id < end, or returns -ENOSPC. On memory allocation failure, returns -ENOMEM. Use ida_simple_remove to get rid of an id. LINUX Kernel Hackers Manual July 2017 ida_simple_remove 9 4.1.27 ida_simple_remove remove an allocated id. Synopsis void ida_simple_remove struct ida * ida unsigned int id Arguments ida the (initialized) ida. id the id returned by ida_simple_get. LINUX Kernel Hackers Manual July 2017 ida_init 9 4.1.27 ida_init initialize ida handle Synopsis void ida_init struct ida * ida Arguments ida ida handle Description This function is use to set up the handle (ida) that you will pass to the rest of the functions. Memory Management in Linux The Slab Cache LINUX Kernel Hackers Manual July 2017 kmalloc 9 4.1.27 kmalloc allocate memory Synopsis void * kmalloc size_t size gfp_t flags Arguments size how many bytes of memory are required. flags the type of memory to allocate. Description kmalloc is the normal method of allocating memory for objects smaller than page size in the kernel. The flags argument may be one of: GFP_USER - Allocate memory on behalf of user. May sleep. GFP_KERNEL - Allocate normal kernel ram. May sleep. GFP_ATOMIC - Allocation will not sleep. May use emergency pools. For example, use this inside interrupt handlers. GFP_HIGHUSER - Allocate pages from high memory. GFP_NOIO - Do not do any I/O at all while trying to get memory. GFP_NOFS - Do not make any fs calls while trying to get memory. GFP_NOWAIT - Allocation will not sleep. __GFP_THISNODE - Allocate node-local memory only. GFP_DMA - Allocation suitable for DMA. Should only be used for kmalloc caches. Otherwise, use a slab created with SLAB_DMA. Also it is possible to set different flags by OR'ing in one or more of the following additional flags: __GFP_COLD - Request cache-cold pages instead of trying to return cache-warm pages. __GFP_HIGH - This allocation has high priority and may use emergency pools. __GFP_NOFAIL - Indicate that this allocation is in no way allowed to fail (think twice before using). __GFP_NORETRY - If memory is not immediately available, then give up at once. __GFP_NOWARN - If allocation fails, don't issue any warnings. __GFP_REPEAT - If allocation fails initially, try once more before failing. There are other flags available as well, but these are not intended for general use, and so are not documented here. For a full list of potential flags, always refer to linux/gfp.h. LINUX Kernel Hackers Manual July 2017 kmalloc_array 9 4.1.27 kmalloc_array allocate memory for an array. Synopsis void * kmalloc_array size_t n size_t size gfp_t flags Arguments n number of elements. size element size. flags the type of memory to allocate (see kmalloc). LINUX Kernel Hackers Manual July 2017 kcalloc 9 4.1.27 kcalloc allocate memory for an array. The memory is set to zero. Synopsis void * kcalloc size_t n size_t size gfp_t flags Arguments n number of elements. size element size. flags the type of memory to allocate (see kmalloc). LINUX Kernel Hackers Manual July 2017 kzalloc 9 4.1.27 kzalloc allocate memory. The memory is set to zero. Synopsis void * kzalloc size_t size gfp_t flags Arguments size how many bytes of memory are required. flags the type of memory to allocate (see kmalloc). LINUX Kernel Hackers Manual July 2017 kzalloc_node 9 4.1.27 kzalloc_node allocate zeroed memory from a particular memory node. Synopsis void * kzalloc_node size_t size gfp_t flags int node Arguments size how many bytes of memory are required. flags the type of memory to allocate (see kmalloc). node memory node from which to allocate LINUX Kernel Hackers Manual July 2017 kmem_cache_alloc 9 4.1.27 kmem_cache_alloc Allocate an object Synopsis void * kmem_cache_alloc struct kmem_cache * cachep gfp_t flags Arguments cachep The cache to allocate from. flags See kmalloc. Description Allocate an object from this cache. The flags are only relevant if the cache has no available objects. LINUX Kernel Hackers Manual July 2017 kmem_cache_alloc_node 9 4.1.27 kmem_cache_alloc_node Allocate an object on the specified node Synopsis void * kmem_cache_alloc_node struct kmem_cache * cachep gfp_t flags int nodeid Arguments cachep The cache to allocate from. flags See kmalloc. nodeid node number of the target node. Description Identical to kmem_cache_alloc but it will allocate memory on the given node, which can improve the performance for cpu bound structures. Fallback to other node is possible if __GFP_THISNODE is not set. LINUX Kernel Hackers Manual July 2017 kmem_cache_free 9 4.1.27 kmem_cache_free Deallocate an object Synopsis void kmem_cache_free struct kmem_cache * cachep void * objp Arguments cachep The cache the allocation was from. objp The previously allocated object. Description Free an object which was previously allocated from this cache. LINUX Kernel Hackers Manual July 2017 kfree 9 4.1.27 kfree free previously allocated memory Synopsis void kfree const void * objp Arguments objp pointer returned by kmalloc. Description If objp is NULL, no operation is performed. Don't free memory not originally allocated by kmalloc or you will run into trouble. LINUX Kernel Hackers Manual July 2017 ksize 9 4.1.27 ksize get the actual amount of memory allocated for a given object Synopsis size_t ksize const void * objp Arguments objp Pointer to the object Description kmalloc may internally round up allocations and return more memory than requested. ksize can be used to determine the actual amount of memory allocated. The caller may use this additional memory, even though a smaller amount of memory was initially specified with the kmalloc call. The caller must guarantee that objp points to a valid object previously allocated with either kmalloc or kmem_cache_alloc. The object must not be freed during the duration of the call. LINUX Kernel Hackers Manual July 2017 kfree_const 9 4.1.27 kfree_const conditionally free memory Synopsis void kfree_const const void * x Arguments x pointer to the memory Description Function calls kfree only if x is not in .rodata section. LINUX Kernel Hackers Manual July 2017 kstrdup 9 4.1.27 kstrdup allocate space for and copy an existing string Synopsis char * kstrdup const char * s gfp_t gfp Arguments s the string to duplicate gfp the GFP mask used in the kmalloc call when allocating memory LINUX Kernel Hackers Manual July 2017 kstrdup_const 9 4.1.27 kstrdup_const conditionally duplicate an existing const string Synopsis const char * kstrdup_const const char * s gfp_t gfp Arguments s the string to duplicate gfp the GFP mask used in the kmalloc call when allocating memory Description Function returns source string if it is in .rodata section otherwise it fallbacks to kstrdup. Strings allocated by kstrdup_const should be freed by kfree_const. LINUX Kernel Hackers Manual July 2017 kstrndup 9 4.1.27 kstrndup allocate space for and copy an existing string Synopsis char * kstrndup const char * s size_t max gfp_t gfp Arguments s the string to duplicate max read at most max chars from s gfp the GFP mask used in the kmalloc call when allocating memory LINUX Kernel Hackers Manual July 2017 kmemdup 9 4.1.27 kmemdup duplicate region of memory Synopsis void * kmemdup const void * src size_t len gfp_t gfp Arguments src memory region to duplicate len memory region length gfp GFP mask to use LINUX Kernel Hackers Manual July 2017 memdup_user 9 4.1.27 memdup_user duplicate memory region from user space Synopsis void * memdup_user const void __user * src size_t len Arguments src source address in user space len number of bytes to copy Description Returns an ERR_PTR on failure. LINUX Kernel Hackers Manual July 2017 get_user_pages_fast 9 4.1.27 get_user_pages_fast pin user pages in memory Synopsis int get_user_pages_fast unsigned long start int nr_pages int write struct page ** pages Arguments start starting user address nr_pages number of pages from start to pin write whether pages will be written to pages array that receives pointers to the pages pinned. Should be at least nr_pages long. Description Returns number of pages pinned. This may be fewer than the number requested. If nr_pages is 0 or negative, returns 0. If no pages were pinned, returns -errno. get_user_pages_fast provides equivalent functionality to get_user_pages, operating on current and current->mm, with force=0 and vma=NULL. However unlike get_user_pages, it must be called without mmap_sem held. get_user_pages_fast may take mmap_sem and page table locks, so no assumptions can be made about lack of locking. get_user_pages_fast is to be implemented in a way that is advantageous (vs get_user_pages) when the user memory area is already faulted in and present in ptes. However if the pages have to be faulted in, it may turn out to be slightly slower so callers need to carefully consider what to use. On many architectures, get_user_pages_fast simply falls back to get_user_pages. User Space Memory Access LINUX Kernel Hackers Manual July 2017 __copy_to_user_inatomic 9 4.1.27 __copy_to_user_inatomic Copy a block of data into user space, with less checking. Synopsis unsigned long __copy_to_user_inatomic void __user * to const void * from unsigned long n Arguments to Destination address, in user space. from Source address, in kernel space. n Number of bytes to copy. Context User context only. Description Copy data from kernel space to user space. Caller must check the specified block with access_ok before calling this function. The caller should also make sure he pins the user space address so that we don't result in page fault and sleep. Here we special-case 1, 2 and 4-byte copy_*_user invocations. On a fault we return the initial request size (1, 2 or 4), as copy_*_user should do. If a store crosses a page boundary and gets a fault, the x86 will not write anything, so this is accurate. LINUX Kernel Hackers Manual July 2017 __copy_to_user 9 4.1.27 __copy_to_user Copy a block of data into user space, with less checking. Synopsis unsigned long __copy_to_user void __user * to const void * from unsigned long n Arguments to Destination address, in user space. from Source address, in kernel space. n Number of bytes to copy. Context User context only. This function may sleep. Description Copy data from kernel space to user space. Caller must check the specified block with access_ok before calling this function. Returns number of bytes that could not be copied. On success, this will be zero. LINUX Kernel Hackers Manual July 2017 __copy_from_user 9 4.1.27 __copy_from_user Copy a block of data from user space, with less checking. Synopsis unsigned long __copy_from_user void * to const void __user * from unsigned long n Arguments to Destination address, in kernel space. from Source address, in user space. n Number of bytes to copy. Context User context only. This function may sleep. Description Copy data from user space to kernel space. Caller must check the specified block with access_ok before calling this function. Returns number of bytes that could not be copied. On success, this will be zero. If some data could not be copied, this function will pad the copied data to the requested size using zero bytes. An alternate version - __copy_from_user_inatomic - may be called from atomic context and will fail rather than sleep. In this case the uncopied bytes will *NOT* be padded with zeros. See fs/filemap.h for explanation of why this is needed. LINUX Kernel Hackers Manual July 2017 clear_user 9 4.1.27 clear_user Zero a block of memory in user space. Synopsis unsigned long clear_user void __user * to unsigned long n Arguments to Destination address, in user space. n Number of bytes to zero. Description Zero a block of memory in user space. Returns number of bytes that could not be cleared. On success, this will be zero. LINUX Kernel Hackers Manual July 2017 __clear_user 9 4.1.27 __clear_user Zero a block of memory in user space, with less checking. Synopsis unsigned long __clear_user void __user * to unsigned long n Arguments to Destination address, in user space. n Number of bytes to zero. Description Zero a block of memory in user space. Caller must check the specified block with access_ok before calling this function. Returns number of bytes that could not be cleared. On success, this will be zero. LINUX Kernel Hackers Manual July 2017 _copy_to_user 9 4.1.27 _copy_to_user Copy a block of data into user space. Synopsis unsigned long _copy_to_user void __user * to const void * from unsigned n Arguments to Destination address, in user space. from Source address, in kernel space. n Number of bytes to copy. Context User context only. This function may sleep. Description Copy data from kernel space to user space. Returns number of bytes that could not be copied. On success, this will be zero. LINUX Kernel Hackers Manual July 2017 _copy_from_user 9 4.1.27 _copy_from_user Copy a block of data from user space. Synopsis unsigned long _copy_from_user void * to const void __user * from unsigned n Arguments to Destination address, in kernel space. from Source address, in user space. n Number of bytes to copy. Context User context only. This function may sleep. Description Copy data from user space to kernel space. Returns number of bytes that could not be copied. On success, this will be zero. If some data could not be copied, this function will pad the copied data to the requested size using zero bytes. More Memory Management Functions LINUX Kernel Hackers Manual July 2017 read_cache_pages 9 4.1.27 read_cache_pages populate an address space with some pages & start reads against them Synopsis int read_cache_pages struct address_space * mapping struct list_head * pages int (*filler) void *, struct page * void * data Arguments mapping the address_space pages The address of a list_head which contains the target pages. These pages have their ->index populated and are otherwise uninitialised. filler callback routine for filling a single page. data private data for the callback routine. Description Hides the details of the LRU cache etc from the filesystems. LINUX Kernel Hackers Manual July 2017 page_cache_sync_readahead 9 4.1.27 page_cache_sync_readahead generic file readahead Synopsis void page_cache_sync_readahead struct address_space * mapping struct file_ra_state * ra struct file * filp pgoff_t offset unsigned long req_size Arguments mapping address_space which holds the pagecache and I/O vectors ra file_ra_state which holds the readahead state filp passed on to ->readpage and ->readpages offset start offset into mapping, in pagecache page-sized units req_size hint: total size of the read which the caller is performing in pagecache pages Description page_cache_sync_readahead should be called when a cache miss happened: it will submit the read. The readahead logic may decide to piggyback more pages onto the read request if access patterns suggest it will improve performance. LINUX Kernel Hackers Manual July 2017 page_cache_async_readahead 9 4.1.27 page_cache_async_readahead file readahead for marked pages Synopsis void page_cache_async_readahead struct address_space * mapping struct file_ra_state * ra struct file * filp struct page * page pgoff_t offset unsigned long req_size Arguments mapping address_space which holds the pagecache and I/O vectors ra file_ra_state which holds the readahead state filp passed on to ->readpage and ->readpages page the page at offset which has the PG_readahead flag set offset start offset into mapping, in pagecache page-sized units req_size hint: total size of the read which the caller is performing in pagecache pages Description page_cache_async_readahead should be called when a page is used which has the PG_readahead flag; this is a marker to suggest that the application has used up enough of the readahead window that we should start pulling in more pages. LINUX Kernel Hackers Manual July 2017 delete_from_page_cache 9 4.1.27 delete_from_page_cache delete page from page cache Synopsis void delete_from_page_cache struct page * page Arguments page the page which the kernel is trying to remove from page cache Description This must be called only on pages that have been verified to be in the page cache and locked. It will never put the page into the free list, the caller has a reference on the page. LINUX Kernel Hackers Manual July 2017 filemap_flush 9 4.1.27 filemap_flush mostly a non-blocking flush Synopsis int filemap_flush struct address_space * mapping Arguments mapping target address_space Description This is a mostly non-blocking flush. Not suitable for data-integrity purposes - I/O may not be started against all dirty pages. LINUX Kernel Hackers Manual July 2017 filemap_fdatawait_range 9 4.1.27 filemap_fdatawait_range wait for writeback to complete Synopsis int filemap_fdatawait_range struct address_space * mapping loff_t start_byte loff_t end_byte Arguments mapping address space structure to wait for start_byte offset in bytes where the range starts end_byte offset in bytes where the range ends (inclusive) Description Walk the list of under-writeback pages of the given address space in the given range and wait for all of them. LINUX Kernel Hackers Manual July 2017 filemap_fdatawait 9 4.1.27 filemap_fdatawait wait for all under-writeback pages to complete Synopsis int filemap_fdatawait struct address_space * mapping Arguments mapping address space structure to wait for Description Walk the list of under-writeback pages of the given address space and wait for all of them. LINUX Kernel Hackers Manual July 2017 filemap_write_and_wait_range 9 4.1.27 filemap_write_and_wait_range write out & wait on a file range Synopsis int filemap_write_and_wait_range struct address_space * mapping loff_t lstart loff_t lend Arguments mapping the address_space for the pages lstart offset in bytes where the range starts lend offset in bytes where the range ends (inclusive) Description Write out and wait upon file offsets lstart->lend, inclusive. Note that `lend' is inclusive (describes the last byte to be written) so that this function can be used to write to the very end-of-file (end = -1). LINUX Kernel Hackers Manual July 2017 replace_page_cache_page 9 4.1.27 replace_page_cache_page replace a pagecache page with a new one Synopsis int replace_page_cache_page struct page * old struct page * new gfp_t gfp_mask Arguments old page to be replaced new page to replace with gfp_mask allocation mode Description This function replaces a page in the pagecache with a new one. On success it acquires the pagecache reference for the new page and drops it for the old page. Both the old and new pages must be locked. This function does not add the new page to the LRU, the caller must do that. The remove + add is atomic. The only way this function can fail is memory allocation failure. LINUX Kernel Hackers Manual July 2017 add_to_page_cache_locked 9 4.1.27 add_to_page_cache_locked add a locked page to the pagecache Synopsis int add_to_page_cache_locked struct page * page struct address_space * mapping pgoff_t offset gfp_t gfp_mask Arguments page page to add mapping the page's address_space offset page index gfp_mask page allocation mode Description This function is used to add a page to the pagecache. It must be locked. This function does not add the page to the LRU. The caller must do that. LINUX Kernel Hackers Manual July 2017 add_page_wait_queue 9 4.1.27 add_page_wait_queue Add an arbitrary waiter to a page's wait queue Synopsis void add_page_wait_queue struct page * page wait_queue_t * waiter Arguments page Page defining the wait queue of interest waiter Waiter to add to the queue Description Add an arbitrary waiter to the wait queue for the nominated page. LINUX Kernel Hackers Manual July 2017 unlock_page 9 4.1.27 unlock_page unlock a locked page Synopsis void unlock_page struct page * page Arguments page the page Description Unlocks the page and wakes up sleepers in ___wait_on_page_locked. Also wakes sleepers in wait_on_page_writeback because the wakeup mechanism between PageLocked pages and PageWriteback pages is shared. But that's OK - sleepers in wait_on_page_writeback just go back to sleep. The mb is necessary to enforce ordering between the clear_bit and the read of the waitqueue (to avoid SMP races with a parallel wait_on_page_locked). LINUX Kernel Hackers Manual July 2017 end_page_writeback 9 4.1.27 end_page_writeback end writeback against a page Synopsis void end_page_writeback struct page * page Arguments page the page LINUX Kernel Hackers Manual July 2017 __lock_page 9 4.1.27 __lock_page get a lock on the page, assuming we need to sleep to get it Synopsis void __lock_page struct page * page Arguments page the page to lock LINUX Kernel Hackers Manual July 2017 page_cache_next_hole 9 4.1.27 page_cache_next_hole find the next hole (not-present entry) Synopsis pgoff_t page_cache_next_hole struct address_space * mapping pgoff_t index unsigned long max_scan Arguments mapping mapping index index max_scan maximum range to search Description Search the set [index, min(index+max_scan-1, MAX_INDEX)] for the lowest indexed hole. Returns the index of the hole if found, otherwise returns an index outside of the set specified (in which case 'return - index >= max_scan' will be true). In rare cases of index wrap-around, 0 will be returned. page_cache_next_hole may be called under rcu_read_lock. However, like radix_tree_gang_lookup, this will not atomically search a snapshot of the tree at a single point in time. For example, if a hole is created at index 5, then subsequently a hole is created at index 10, page_cache_next_hole covering both indexes may return 10 if called under rcu_read_lock. LINUX Kernel Hackers Manual July 2017 page_cache_prev_hole 9 4.1.27 page_cache_prev_hole find the prev hole (not-present entry) Synopsis pgoff_t page_cache_prev_hole struct address_space * mapping pgoff_t index unsigned long max_scan Arguments mapping mapping index index max_scan maximum range to search Description Search backwards in the range [max(index-max_scan+1, 0), index] for the first hole. Returns the index of the hole if found, otherwise returns an index outside of the set specified (in which case 'index - return >= max_scan' will be true). In rare cases of wrap-around, ULONG_MAX will be returned. page_cache_prev_hole may be called under rcu_read_lock. However, like radix_tree_gang_lookup, this will not atomically search a snapshot of the tree at a single point in time. For example, if a hole is created at index 10, then subsequently a hole is created at index 5, page_cache_prev_hole covering both indexes may return 5 if called under rcu_read_lock. LINUX Kernel Hackers Manual July 2017 find_get_entry 9 4.1.27 find_get_entry find and get a page cache entry Synopsis struct page * find_get_entry struct address_space * mapping pgoff_t offset Arguments mapping the address_space to search offset the page cache index Description Looks up the page cache slot at mapping & offset. If there is a page cache page, it is returned with an increased refcount. If the slot holds a shadow entry of a previously evicted page, or a swap entry from shmem/tmpfs, it is returned. Otherwise, NULL is returned. LINUX Kernel Hackers Manual July 2017 find_lock_entry 9 4.1.27 find_lock_entry locate, pin and lock a page cache entry Synopsis struct page * find_lock_entry struct address_space * mapping pgoff_t offset Arguments mapping the address_space to search offset the page cache index Description Looks up the page cache slot at mapping & offset. If there is a page cache page, it is returned locked and with an increased refcount. If the slot holds a shadow entry of a previously evicted page, or a swap entry from shmem/tmpfs, it is returned. Otherwise, NULL is returned. find_lock_entry may sleep. LINUX Kernel Hackers Manual July 2017 pagecache_get_page 9 4.1.27 pagecache_get_page find and get a page reference Synopsis struct page * pagecache_get_page struct address_space * mapping pgoff_t offset int fgp_flags gfp_t gfp_mask Arguments mapping the address_space to search offset the page index fgp_flags PCG flags gfp_mask gfp mask to use for the page cache data page allocation Description Looks up the page cache slot at mapping & offset. PCG flags modify how the page is returned. FGP_ACCESSED the page will be marked accessed FGP_LOCK Page is return locked FGP_CREAT If page is not present then a new page is allocated using gfp_mask and added to the page cache and the VM's LRU list. The page is returned locked and with an increased refcount. Otherwise, NULL is returned. If FGP_LOCK or FGP_CREAT are specified then the function may sleep even if the GFP flags specified for FGP_CREAT are atomic. If there is a page cache page, it is returned with an increased refcount. LINUX Kernel Hackers Manual July 2017 find_get_pages_contig 9 4.1.27 find_get_pages_contig gang contiguous pagecache lookup Synopsis unsigned find_get_pages_contig struct address_space * mapping pgoff_t index unsigned int nr_pages struct page ** pages Arguments mapping The address_space to search index The starting page index nr_pages The maximum number of pages pages Where the resulting pages are placed Description find_get_pages_contig works exactly like find_get_pages, except that the returned number of pages are guaranteed to be contiguous. find_get_pages_contig returns the number of pages which were found. LINUX Kernel Hackers Manual July 2017 find_get_pages_tag 9 4.1.27 find_get_pages_tag find and return pages that match tag Synopsis unsigned find_get_pages_tag struct address_space * mapping pgoff_t * index int tag unsigned int nr_pages struct page ** pages Arguments mapping the address_space to search index the starting page index tag the tag index nr_pages the maximum number of pages pages where the resulting pages are placed Description Like find_get_pages, except we only return pages which are tagged with tag. We update index to index the next page for the traversal. LINUX Kernel Hackers Manual July 2017 generic_file_read_iter 9 4.1.27 generic_file_read_iter generic filesystem read routine Synopsis ssize_t generic_file_read_iter struct kiocb * iocb struct iov_iter * iter Arguments iocb kernel I/O control block iter destination for the data read Description This is the read_iter routine for all filesystems that can use the page cache directly. LINUX Kernel Hackers Manual July 2017 filemap_fault 9 4.1.27 filemap_fault read in file data for page fault handling Synopsis int filemap_fault struct vm_area_struct * vma struct vm_fault * vmf Arguments vma vma in which the fault was taken vmf struct vm_fault containing details of the fault Description filemap_fault is invoked via the vma operations vector for a mapped memory region to read in file data during a page fault. The goto's are kind of ugly, but this streamlines the normal case of having it in the page cache, and handles the special cases reasonably without having a lot of duplicated code. vma->vm_mm->mmap_sem must be held on entry. If our return value has VM_FAULT_RETRY set, it's because lock_page_or_retry returned 0. The mmap_sem has usually been released in this case. See __lock_page_or_retry for the exception. If our return value does not have VM_FAULT_RETRY set, the mmap_sem has not been released. We never return with VM_FAULT_RETRY and a bit from VM_FAULT_ERROR set. LINUX Kernel Hackers Manual July 2017 read_cache_page 9 4.1.27 read_cache_page read into page cache, fill it if needed Synopsis struct page * read_cache_page struct address_space * mapping pgoff_t index int (*filler) void *, struct page * void * data Arguments mapping the page's address_space index the page index filler function to perform the read data first arg to filler(data, page) function, often left as NULL Description Read into the page cache. If a page already exists, and PageUptodate is not set, try to fill the page and wait for it to become unlocked. If the page does not get brought uptodate, return -EIO. LINUX Kernel Hackers Manual July 2017 read_cache_page_gfp 9 4.1.27 read_cache_page_gfp read into page cache, using specified page allocation flags. Synopsis struct page * read_cache_page_gfp struct address_space * mapping pgoff_t index gfp_t gfp Arguments mapping the page's address_space index the page index gfp the page allocator flags to use if allocating Description This is the same as read_mapping_page(mapping, index, NULL), but with any new page allocations done using the specified allocation flags. If the page does not get brought uptodate, return -EIO. LINUX Kernel Hackers Manual July 2017 __generic_file_write_iter 9 4.1.27 __generic_file_write_iter write data to a file Synopsis ssize_t __generic_file_write_iter struct kiocb * iocb struct iov_iter * from Arguments iocb IO state structure (file, offset, etc.) from iov_iter with data to write Description This function does all the work needed for actually writing data to a file. It does all basic checks, removes SUID from the file, updates modification times and calls proper subroutines depending on whether we do direct IO or a standard buffered write. It expects i_mutex to be grabbed unless we work on a block device or similar object which does not need locking at all. This function does *not* take care of syncing data in case of O_SYNC write. A caller has to handle it. This is mainly due to the fact that we want to avoid syncing under i_mutex. LINUX Kernel Hackers Manual July 2017 generic_file_write_iter 9 4.1.27 generic_file_write_iter write data to a file Synopsis ssize_t generic_file_write_iter struct kiocb * iocb struct iov_iter * from Arguments iocb IO state structure from iov_iter with data to write Description This is a wrapper around __generic_file_write_iter to be used by most filesystems. It takes care of syncing the file in case of O_SYNC file and acquires i_mutex as needed. LINUX Kernel Hackers Manual July 2017 try_to_release_page 9 4.1.27 try_to_release_page release old fs-specific metadata on a page Synopsis int try_to_release_page struct page * page gfp_t gfp_mask Arguments page the page which the kernel is trying to free gfp_mask memory allocation flags (and I/O mode) Description The address_space is to try to release any data against the page (presumably at page->private). If the release was successful, return `1'. Otherwise return zero. This may also be called if PG_fscache is set on a page, indicating that the page is known to the local caching routines. The gfp_mask argument specifies whether I/O may be performed to release this page (__GFP_IO), and whether the call may block (__GFP_WAIT & __GFP_FS). LINUX Kernel Hackers Manual July 2017 zap_vma_ptes 9 4.1.27 zap_vma_ptes remove ptes mapping the vma Synopsis int zap_vma_ptes struct vm_area_struct * vma unsigned long address unsigned long size Arguments vma vm_area_struct holding ptes to be zapped address starting address of pages to zap size number of bytes to zap Description This function only unmaps ptes assigned to VM_PFNMAP vmas. The entire address range must be fully contained within the vma. Returns 0 if successful. LINUX Kernel Hackers Manual July 2017 vm_insert_page 9 4.1.27 vm_insert_page insert single page into user vma Synopsis int vm_insert_page struct vm_area_struct * vma unsigned long addr struct page * page Arguments vma user vma to map to addr target user address of this page page source kernel page Description This allows drivers to insert individual pages they've allocated into a user vma. The page has to be a nice clean _individual_ kernel allocation. If you allocate a compound page, you need to have marked it as such (__GFP_COMP), or manually just split the page up yourself (see split_page). NOTE! Traditionally this was done with remap_pfn_range which took an arbitrary page protection parameter. This doesn't allow that. Your vma protection will have to be set up correctly, which means that if you want a shared writable mapping, you'd better ask for a shared writable mapping! The page does not need to be reserved. Usually this function is called from f_op->mmap handler under mm->mmap_sem write-lock, so it can change vma->vm_flags. Caller must set VM_MIXEDMAP on vma if it wants to call this function from other places, for example from page-fault handler. LINUX Kernel Hackers Manual July 2017 vm_insert_pfn 9 4.1.27 vm_insert_pfn insert single pfn into user vma Synopsis int vm_insert_pfn struct vm_area_struct * vma unsigned long addr unsigned long pfn Arguments vma user vma to map to addr target user address of this page pfn source kernel pfn Description Similar to vm_insert_page, this allows drivers to insert individual pages they've allocated into a user vma. Same comments apply. This function should only be called from a vm_ops->fault handler, and in that case the handler should return NULL. vma cannot be a COW mapping. As this is called only for pages that do not currently exist, we do not need to flush old virtual caches or the TLB. LINUX Kernel Hackers Manual July 2017 remap_pfn_range 9 4.1.27 remap_pfn_range remap kernel memory to userspace Synopsis int remap_pfn_range struct vm_area_struct * vma unsigned long addr unsigned long pfn unsigned long size pgprot_t prot Arguments vma user vma to map to addr target user address to start at pfn physical address of kernel memory size size of map area prot page protection flags for this mapping Note this is only safe if the mm semaphore is held when called. LINUX Kernel Hackers Manual July 2017 vm_iomap_memory 9 4.1.27 vm_iomap_memory remap memory to userspace Synopsis int vm_iomap_memory struct vm_area_struct * vma phys_addr_t start unsigned long len Arguments vma user vma to map to start start of area len size of area Description This is a simplified io_remap_pfn_range for common driver use. The driver just needs to give us the physical memory range to be mapped, we'll figure out the rest from the vma information. NOTE! Some drivers might want to tweak vma->vm_page_prot first to get whatever write-combining details or similar. LINUX Kernel Hackers Manual July 2017 unmap_mapping_range 9 4.1.27 unmap_mapping_range unmap the portion of all mmaps in the specified address_space corresponding to the specified page range in the underlying file. Synopsis void unmap_mapping_range struct address_space * mapping loff_t const holebegin loff_t const holelen int even_cows Arguments mapping the address space containing mmaps to be unmapped. holebegin byte in first page to unmap, relative to the start of the underlying file. This will be rounded down to a PAGE_SIZE boundary. Note that this is different from truncate_pagecache, which must keep the partial page. In contrast, we must get rid of partial pages. holelen size of prospective hole in bytes. This will be rounded up to a PAGE_SIZE boundary. A holelen of zero truncates to the end of the file. even_cows 1 when truncating a file, unmap even private COWed pages; but 0 when invalidating pagecache, don't throw away private data. LINUX Kernel Hackers Manual July 2017 follow_pfn 9 4.1.27 follow_pfn look up PFN at a user virtual address Synopsis int follow_pfn struct vm_area_struct * vma unsigned long address unsigned long * pfn Arguments vma memory mapping address user virtual address pfn location to store found PFN Description Only IO mappings and raw PFN mappings are allowed. Returns zero and the pfn at pfn on success, -ve otherwise. LINUX Kernel Hackers Manual July 2017 vm_unmap_aliases 9 4.1.27 vm_unmap_aliases unmap outstanding lazy aliases in the vmap layer Synopsis void vm_unmap_aliases void Arguments void no arguments Description The vmap/vmalloc layer lazily flushes kernel virtual mappings primarily to amortize TLB flushing overheads. What this means is that any page you have now, may, in a former life, have been mapped into kernel virtual address by the vmap layer and so there might be some CPUs with TLB entries still referencing that page (additional to the regular 1:1 kernel mapping). vm_unmap_aliases flushes all such lazy mappings. After it returns, we can be sure that none of the pages we have control over will have any aliases from the vmap layer. LINUX Kernel Hackers Manual July 2017 vm_unmap_ram 9 4.1.27 vm_unmap_ram unmap linear kernel address space set up by vm_map_ram Synopsis void vm_unmap_ram const void * mem unsigned int count Arguments mem the pointer returned by vm_map_ram count the count passed to that vm_map_ram call (cannot unmap partial) LINUX Kernel Hackers Manual July 2017 vm_map_ram 9 4.1.27 vm_map_ram map pages linearly into kernel virtual address (vmalloc space) Synopsis void * vm_map_ram struct page ** pages unsigned int count int node pgprot_t prot Arguments pages an array of pointers to the pages to be mapped count number of pages node prefer to allocate data structures on this node prot memory protection to use. PAGE_KERNEL for regular RAM Description If you use this function for less than VMAP_MAX_ALLOC pages, it could be faster than vmap so it's good. But if you mix long-life and short-life objects with vm_map_ram, it could consume lots of address space through fragmentation (especially on a 32bit machine). You could see failures in the end. Please use this function for short-lived objects. Returns a pointer to the address that has been mapped, or NULL on failure LINUX Kernel Hackers Manual July 2017 unmap_kernel_range_noflush 9 4.1.27 unmap_kernel_range_noflush unmap kernel VM area Synopsis void unmap_kernel_range_noflush unsigned long addr unsigned long size Arguments addr start of the VM area to unmap size size of the VM area to unmap Description Unmap PFN_UP(size) pages at addr. The VM area addr and size specify should have been allocated using get_vm_area and its friends. NOTE This function does NOT do any cache flushing. The caller is responsible for calling flush_cache_vunmap on to-be-mapped areas before calling this function and flush_tlb_kernel_range after. LINUX Kernel Hackers Manual July 2017 unmap_kernel_range 9 4.1.27 unmap_kernel_range unmap kernel VM area and flush cache and TLB Synopsis void unmap_kernel_range unsigned long addr unsigned long size Arguments addr start of the VM area to unmap size size of the VM area to unmap Description Similar to unmap_kernel_range_noflush but flushes vcache before the unmapping and tlb after. LINUX Kernel Hackers Manual July 2017 vfree 9 4.1.27 vfree release memory allocated by vmalloc Synopsis void vfree const void * addr Arguments addr memory base address Description Free the virtually continuous memory area starting at addr, as obtained from vmalloc, vmalloc_32 or __vmalloc. If addr is NULL, no operation is performed. Must not be called in NMI context (strictly speaking, only if we don't have CONFIG_ARCH_HAVE_NMI_SAFE_CMPXCHG, but making the calling conventions for vfree arch-depenedent would be a really bad idea) NOTE assumes that the object at *addr has a size >= sizeof(llist_node) LINUX Kernel Hackers Manual July 2017 vunmap 9 4.1.27 vunmap release virtual mapping obtained by vmap Synopsis void vunmap const void * addr Arguments addr memory base address Description Free the virtually contiguous memory area starting at addr, which was created from the page array passed to vmap. Must not be called in interrupt context. LINUX Kernel Hackers Manual July 2017 vmap 9 4.1.27 vmap map an array of pages into virtually contiguous space Synopsis void * vmap struct page ** pages unsigned int count unsigned long flags pgprot_t prot Arguments pages array of page pointers count number of pages to map flags vm_area->flags prot page protection for the mapping Description Maps count pages from pages into contiguous kernel virtual space. LINUX Kernel Hackers Manual July 2017 vmalloc 9 4.1.27 vmalloc allocate virtually contiguous memory Synopsis void * vmalloc unsigned long size Arguments size allocation size Allocate enough pages to cover size from the page level allocator and map them into contiguous kernel virtual space. Description For tight control over page level allocator and protection flags use __vmalloc instead. LINUX Kernel Hackers Manual July 2017 vzalloc 9 4.1.27 vzalloc allocate virtually contiguous memory with zero fill Synopsis void * vzalloc unsigned long size Arguments size allocation size Allocate enough pages to cover size from the page level allocator and map them into contiguous kernel virtual space. The memory allocated is set to zero. Description For tight control over page level allocator and protection flags use __vmalloc instead. LINUX Kernel Hackers Manual July 2017 vmalloc_user 9 4.1.27 vmalloc_user allocate zeroed virtually contiguous memory for userspace Synopsis void * vmalloc_user unsigned long size Arguments size allocation size Description The resulting memory area is zeroed so it can be mapped to userspace without leaking data. LINUX Kernel Hackers Manual July 2017 vmalloc_node 9 4.1.27 vmalloc_node allocate memory on a specific node Synopsis void * vmalloc_node unsigned long size int node Arguments size allocation size node numa node Description Allocate enough pages to cover size from the page level allocator and map them into contiguous kernel virtual space. For tight control over page level allocator and protection flags use __vmalloc instead. LINUX Kernel Hackers Manual July 2017 vzalloc_node 9 4.1.27 vzalloc_node allocate memory on a specific node with zero fill Synopsis void * vzalloc_node unsigned long size int node Arguments size allocation size node numa node Description Allocate enough pages to cover size from the page level allocator and map them into contiguous kernel virtual space. The memory allocated is set to zero. For tight control over page level allocator and protection flags use __vmalloc_node instead. LINUX Kernel Hackers Manual July 2017 vmalloc_32 9 4.1.27 vmalloc_32 allocate virtually contiguous memory (32bit addressable) Synopsis void * vmalloc_32 unsigned long size Arguments size allocation size Description Allocate enough 32bit PA addressable pages to cover size from the page level allocator and map them into contiguous kernel virtual space. LINUX Kernel Hackers Manual July 2017 vmalloc_32_user 9 4.1.27 vmalloc_32_user allocate zeroed virtually contiguous 32bit memory Synopsis void * vmalloc_32_user unsigned long size Arguments size allocation size Description The resulting memory area is 32bit addressable and zeroed so it can be mapped to userspace without leaking data. LINUX Kernel Hackers Manual July 2017 remap_vmalloc_range_partial 9 4.1.27 remap_vmalloc_range_partial map vmalloc pages to userspace Synopsis int remap_vmalloc_range_partial struct vm_area_struct * vma unsigned long uaddr void * kaddr unsigned long size Arguments vma vma to cover uaddr target user address to start at kaddr virtual address of vmalloc kernel memory size size of map area Returns 0 for success, -Exxx on failure This function checks that kaddr is a valid vmalloc'ed area, and that it is big enough to cover the range starting at uaddr in vma. Will return failure if that criteria isn't met. Similar to remap_pfn_range (see mm/memory.c) LINUX Kernel Hackers Manual July 2017 remap_vmalloc_range 9 4.1.27 remap_vmalloc_range map vmalloc pages to userspace Synopsis int remap_vmalloc_range struct vm_area_struct * vma void * addr unsigned long pgoff Arguments vma vma to cover (map full range of vma) addr vmalloc memory pgoff number of pages into addr before first page to map Returns 0 for success, -Exxx on failure This function checks that addr is a valid vmalloc'ed area, and that it is big enough to cover the vma. Will return failure if that criteria isn't met. Similar to remap_pfn_range (see mm/memory.c) LINUX Kernel Hackers Manual July 2017 alloc_vm_area 9 4.1.27 alloc_vm_area allocate a range of kernel address space Synopsis struct vm_struct * alloc_vm_area size_t size pte_t ** ptes Arguments size size of the area ptes returns the PTEs for the address space Returns NULL on failure, vm_struct on success This function reserves a range of kernel address space, and allocates pagetables to map that range. No actual mappings are created. If ptes is non-NULL, pointers to the PTEs (in init_mm) allocated for the VM area are returned. LINUX Kernel Hackers Manual July 2017 alloc_pages_exact_nid 9 4.1.27 alloc_pages_exact_nid allocate an exact number of physically-contiguous pages on a node. Synopsis void * alloc_pages_exact_nid int nid size_t size gfp_t gfp_mask Arguments nid the preferred node ID where memory should be allocated size the number of bytes to allocate gfp_mask GFP flags for the allocation Description Like alloc_pages_exact, but try to allocate on node nid first before falling back. Note this is not alloc_pages_exact_node which allocates on a specific node, but is not exact. LINUX Kernel Hackers Manual July 2017 nr_free_zone_pages 9 4.1.27 nr_free_zone_pages count number of pages beyond high watermark Synopsis unsigned long nr_free_zone_pages int offset Arguments offset The zone index of the highest zone Description nr_free_zone_pages counts the number of counts pages which are beyond the high watermark within all zones at or below a given zone index. For each zone, the number of pages is calculated as: managed_pages - high_pages LINUX Kernel Hackers Manual July 2017 nr_free_pagecache_pages 9 4.1.27 nr_free_pagecache_pages count number of pages beyond high watermark Synopsis unsigned long nr_free_pagecache_pages void Arguments void no arguments Description nr_free_pagecache_pages counts the number of pages which are beyond the high watermark within all zones. LINUX Kernel Hackers Manual July 2017 find_next_best_node 9 4.1.27 find_next_best_node find the next node that should appear in a given node's fallback list Synopsis int find_next_best_node int node nodemask_t * used_node_mask Arguments node node whose fallback list we're appending used_node_mask nodemask_t of already used nodes Description We use a number of factors to determine which is the next node that should appear on a given node's fallback list. The node should not have appeared already in node's fallback list, and it should be the next closest node according to the distance array (which contains arbitrary distance values from each node to each node in the system), and should also prefer nodes with no CPUs, since presumably they'll have very little allocation pressure on them otherwise. It returns -1 if no node is found. LINUX Kernel Hackers Manual July 2017 free_bootmem_with_active_regions 9 4.1.27 free_bootmem_with_active_regions Call memblock_free_early_nid for each active range Synopsis void free_bootmem_with_active_regions int nid unsigned long max_low_pfn Arguments nid The node to free memory on. If MAX_NUMNODES, all nodes are freed. max_low_pfn The highest PFN that will be passed to memblock_free_early_nid Description If an architecture guarantees that all ranges registered contain no holes and may be freed, this this function may be used instead of calling memblock_free_early_nid manually. LINUX Kernel Hackers Manual July 2017 sparse_memory_present_with_active_regions 9 4.1.27 sparse_memory_present_with_active_regions Call memory_present for each active range Synopsis void sparse_memory_present_with_active_regions int nid Arguments nid The node to call memory_present for. If MAX_NUMNODES, all nodes will be used. Description If an architecture guarantees that all ranges registered contain no holes and may be freed, this function may be used instead of calling memory_present manually. LINUX Kernel Hackers Manual July 2017 get_pfn_range_for_nid 9 4.1.27 get_pfn_range_for_nid Return the start and end page frames for a node Synopsis void get_pfn_range_for_nid unsigned int nid unsigned long * start_pfn unsigned long * end_pfn Arguments nid The nid to return the range for. If MAX_NUMNODES, the min and max PFN are returned. start_pfn Passed by reference. On return, it will have the node start_pfn. end_pfn Passed by reference. On return, it will have the node end_pfn. Description It returns the start and end page frame of a node based on information provided by memblock_set_node. If called for a node with no available memory, a warning is printed and the start and end PFNs will be 0. LINUX Kernel Hackers Manual July 2017 absent_pages_in_range 9 4.1.27 absent_pages_in_range Return number of page frames in holes within a range Synopsis unsigned long absent_pages_in_range unsigned long start_pfn unsigned long end_pfn Arguments start_pfn The start PFN to start searching for holes end_pfn The end PFN to stop searching for holes Description It returns the number of pages frames in memory holes within a range. LINUX Kernel Hackers Manual July 2017 node_map_pfn_alignment 9 4.1.27 node_map_pfn_alignment determine the maximum internode alignment Synopsis unsigned long node_map_pfn_alignment void Arguments void no arguments Description This function should be called after node map is populated and sorted. It calculates the maximum power of two alignment which can distinguish all the nodes. For example, if all nodes are 1GiB and aligned to 1GiB, the return value would indicate 1GiB alignment with (1 << (30 - PAGE_SHIFT)). If the nodes are shifted by 256MiB, 256MiB. Note that if only the last node is shifted, 1GiB is enough and this function will indicate so. This is used to test whether pfn -> nid mapping of the chosen memory model has fine enough granularity to avoid incorrect mapping for the populated node map. Returns the determined alignment in pfn's. 0 if there is no alignment requirement (single node). LINUX Kernel Hackers Manual July 2017 find_min_pfn_with_active_regions 9 4.1.27 find_min_pfn_with_active_regions Find the minimum PFN registered Synopsis unsigned long find_min_pfn_with_active_regions void Arguments void no arguments Description It returns the minimum PFN based on information provided via memblock_set_node. LINUX Kernel Hackers Manual July 2017 free_area_init_nodes 9 4.1.27 free_area_init_nodes Initialise all pg_data_t and zone data Synopsis void free_area_init_nodes unsigned long * max_zone_pfn Arguments max_zone_pfn an array of max PFNs for each zone Description This will call free_area_init_node for each active node in the system. Using the page ranges provided by memblock_set_node, the size of each zone in each node and their holes is calculated. If the maximum PFN between two adjacent zones match, it is assumed that the zone is empty. For example, if arch_max_dma_pfn == arch_max_dma32_pfn, it is assumed that arch_max_dma32_pfn has no pages. It is also assumed that a zone starts where the previous one ended. For example, ZONE_DMA32 starts at arch_max_dma_pfn. LINUX Kernel Hackers Manual July 2017 set_dma_reserve 9 4.1.27 set_dma_reserve set the specified number of pages reserved in the first zone Synopsis void set_dma_reserve unsigned long new_dma_reserve Arguments new_dma_reserve The number of pages to mark reserved Description The per-cpu batchsize and zone watermarks are determined by present_pages. In the DMA zone, a significant percentage may be consumed by kernel image and other unfreeable allocations which can skew the watermarks badly. This function may optionally be used to account for unfreeable pages in the first zone (e.g., ZONE_DMA). The effect will be lower watermarks and smaller per-cpu batchsize. LINUX Kernel Hackers Manual July 2017 setup_per_zone_wmarks 9 4.1.27 setup_per_zone_wmarks called when min_free_kbytes changes or when memory is hot-{added|removed} Synopsis void setup_per_zone_wmarks void Arguments void no arguments Description Ensures that the watermark[min,low,high] values for each zone are set correctly with respect to min_free_kbytes. LINUX Kernel Hackers Manual July 2017 get_pfnblock_flags_mask 9 4.1.27 get_pfnblock_flags_mask Return the requested group of flags for the pageblock_nr_pages block of pages Synopsis unsigned long get_pfnblock_flags_mask struct page * page unsigned long pfn unsigned long end_bitidx unsigned long mask Arguments page The page within the block of interest pfn The target page frame number end_bitidx The last bit of interest to retrieve mask mask of bits that the caller is interested in Return pageblock_bits flags LINUX Kernel Hackers Manual July 2017 set_pfnblock_flags_mask 9 4.1.27 set_pfnblock_flags_mask Set the requested group of flags for a pageblock_nr_pages block of pages Synopsis void set_pfnblock_flags_mask struct page * page unsigned long flags unsigned long pfn unsigned long end_bitidx unsigned long mask Arguments page The page within the block of interest flags The flags to set pfn The target page frame number end_bitidx The last bit of interest mask mask of bits that the caller is interested in LINUX Kernel Hackers Manual July 2017 alloc_contig_range 9 4.1.27 alloc_contig_range - tries to allocate given range of pages Synopsis int alloc_contig_range unsigned long start unsigned long end unsigned migratetype Arguments start start PFN to allocate end one-past-the-last PFN to allocate migratetype migratetype of the underlaying pageblocks (either #MIGRATE_MOVABLE or #MIGRATE_CMA). All pageblocks in range must have the same migratetype and it must be either of the two. Description The PFN range does not have to be pageblock or MAX_ORDER_NR_PAGES aligned, however it's the caller's responsibility to guarantee that we are the only thread that changes migrate type of pageblocks the pages fall in. The PFN range must belong to a single zone. Returns zero on success or negative error code. On success all pages which PFN is in [start, end) are allocated for the caller and need to be freed with free_contig_range. LINUX Kernel Hackers Manual July 2017 mempool_destroy 9 4.1.27 mempool_destroy deallocate a memory pool Synopsis void mempool_destroy mempool_t * pool Arguments pool pointer to the memory pool which was allocated via mempool_create. Description Free all reserved elements in pool and pool itself. This function only sleeps if the free_fn function sleeps. LINUX Kernel Hackers Manual July 2017 mempool_create 9 4.1.27 mempool_create create a memory pool Synopsis mempool_t * mempool_create int min_nr mempool_alloc_t * alloc_fn mempool_free_t * free_fn void * pool_data Arguments min_nr the minimum number of elements guaranteed to be allocated for this pool. alloc_fn user-defined element-allocation function. free_fn user-defined element-freeing function. pool_data optional private data available to the user-defined functions. Description this function creates and allocates a guaranteed size, preallocated memory pool. The pool can be used from the mempool_alloc and mempool_free functions. This function might sleep. Both the alloc_fn and the free_fn functions might sleep - as long as the mempool_alloc function is not called from IRQ contexts. LINUX Kernel Hackers Manual July 2017 mempool_resize 9 4.1.27 mempool_resize resize an existing memory pool Synopsis int mempool_resize mempool_t * pool int new_min_nr Arguments pool pointer to the memory pool which was allocated via mempool_create. new_min_nr the new minimum number of elements guaranteed to be allocated for this pool. Description This function shrinks/grows the pool. In the case of growing, it cannot be guaranteed that the pool will be grown to the new size immediately, but new mempool_free calls will refill it. This function may sleep. Note, the caller must guarantee that no mempool_destroy is called while this function is running. mempool_alloc & mempool_free might be called (eg. from IRQ contexts) while this function executes. LINUX Kernel Hackers Manual July 2017 mempool_alloc 9 4.1.27 mempool_alloc allocate an element from a specific memory pool Synopsis void * mempool_alloc mempool_t * pool gfp_t gfp_mask Arguments pool pointer to the memory pool which was allocated via mempool_create. gfp_mask the usual allocation bitmask. Description this function only sleeps if the alloc_fn function sleeps or returns NULL. Note that due to preallocation, this function *never* fails when called from process contexts. (it might fail if called from an IRQ context.) Note using __GFP_ZERO is not supported. LINUX Kernel Hackers Manual July 2017 mempool_free 9 4.1.27 mempool_free return an element to the pool. Synopsis void mempool_free void * element mempool_t * pool Arguments element pool element pointer. pool pointer to the memory pool which was allocated via mempool_create. Description this function only sleeps if the free_fn function sleeps. LINUX Kernel Hackers Manual July 2017 dma_pool_create 9 4.1.27 dma_pool_create Creates a pool of consistent memory blocks, for dma. Synopsis struct dma_pool * dma_pool_create const char * name struct device * dev size_t size size_t align size_t boundary Arguments name name of pool, for diagnostics dev device that will be doing the DMA size size of the blocks in this pool. align alignment requirement for blocks; must be a power of two boundary returned blocks won't cross this power of two boundary Context !in_interrupt Description Returns a dma allocation pool with the requested characteristics, or null if one can't be created. Given one of these pools, dma_pool_alloc may be used to allocate memory. Such memory will all have consistent DMA mappings, accessible by the device and its driver without using cache flushing primitives. The actual size of blocks allocated may be larger than requested because of alignment. If boundary is nonzero, objects returned from dma_pool_alloc won't cross that size boundary. This is useful for devices which have addressing restrictions on individual DMA transfers, such as not crossing boundaries of 4KBytes. LINUX Kernel Hackers Manual July 2017 dma_pool_destroy 9 4.1.27 dma_pool_destroy destroys a pool of dma memory blocks. Synopsis void dma_pool_destroy struct dma_pool * pool Arguments pool dma pool that will be destroyed Context !in_interrupt Description Caller guarantees that no more memory from the pool is in use, and that nothing will try to use the pool after this call. LINUX Kernel Hackers Manual July 2017 dma_pool_alloc 9 4.1.27 dma_pool_alloc get a block of consistent memory Synopsis void * dma_pool_alloc struct dma_pool * pool gfp_t mem_flags dma_addr_t * handle Arguments pool dma pool that will produce the block mem_flags GFP_* bitmask handle pointer to dma address of block Description This returns the kernel virtual address of a currently unused block, and reports its dma address through the handle. If such a memory block can't be allocated, NULL is returned. LINUX Kernel Hackers Manual July 2017 dma_pool_free 9 4.1.27 dma_pool_free put block back into dma pool Synopsis void dma_pool_free struct dma_pool * pool void * vaddr dma_addr_t dma Arguments pool the dma pool holding the block vaddr virtual address of block dma dma address of block Description Caller promises neither device nor driver will again touch this block unless it is first re-allocated. LINUX Kernel Hackers Manual July 2017 dmam_pool_create 9 4.1.27 dmam_pool_create Managed dma_pool_create Synopsis struct dma_pool * dmam_pool_create const char * name struct device * dev size_t size size_t align size_t allocation Arguments name name of pool, for diagnostics dev device that will be doing the DMA size size of the blocks in this pool. align alignment requirement for blocks; must be a power of two allocation returned blocks won't cross this boundary (or zero) Description Managed dma_pool_create. DMA pool created with this function is automatically destroyed on driver detach. LINUX Kernel Hackers Manual July 2017 dmam_pool_destroy 9 4.1.27 dmam_pool_destroy Managed dma_pool_destroy Synopsis void dmam_pool_destroy struct dma_pool * pool Arguments pool dma pool that will be destroyed Description Managed dma_pool_destroy. LINUX Kernel Hackers Manual July 2017 balance_dirty_pages_ratelimited 9 4.1.27 balance_dirty_pages_ratelimited balance dirty memory state Synopsis void balance_dirty_pages_ratelimited struct address_space * mapping Arguments mapping address_space which was dirtied Description Processes which are dirtying memory should call in here once for each page which was newly dirtied. The function will periodically check the system's dirty state and will initiate writeback if needed. On really big machines, get_writeback_state is expensive, so try to avoid calling it too often (ratelimiting). But once we're over the dirty memory limit we decrease the ratelimiting by a lot, to prevent individual processes from overshooting the limit by (ratelimit_pages) each. LINUX Kernel Hackers Manual July 2017 tag_pages_for_writeback 9 4.1.27 tag_pages_for_writeback tag pages to be written by write_cache_pages Synopsis void tag_pages_for_writeback struct address_space * mapping pgoff_t start pgoff_t end Arguments mapping address space structure to write start starting page index end ending page index (inclusive) Description This function scans the page range from start to end (inclusive) and tags all pages that have DIRTY tag set with a special TOWRITE tag. The idea is that write_cache_pages (or whoever calls this function) will then use TOWRITE tag to identify pages eligible for writeback. This mechanism is used to avoid livelocking of writeback by a process steadily creating new dirty pages in the file (thus it is important for this function to be quick so that it can tag pages faster than a dirtying process can create them). LINUX Kernel Hackers Manual July 2017 write_cache_pages 9 4.1.27 write_cache_pages walk the list of dirty pages of the given address space and write all of them. Synopsis int write_cache_pages struct address_space * mapping struct writeback_control * wbc writepage_t writepage void * data Arguments mapping address space structure to write wbc subtract the number of written pages from *wbc->nr_to_write writepage function called for each page data data passed to writepage function Description If a page is already under I/O, write_cache_pages skips it, even if it's dirty. This is desirable behaviour for memory-cleaning writeback, but it is INCORRECT for data-integrity system calls such as fsync. fsync and msync need to guarantee that all the data which was dirty at the time the call was made get new I/O started against them. If wbc->sync_mode is WB_SYNC_ALL then we were called for data integrity and we must wait for existing IO to complete. To avoid livelocks (when other process dirties new pages), we first tag pages which should be written back with TOWRITE tag and only then start writing them. For data-integrity sync we have to be careful so that we do not miss some pages (e.g., because some other process has cleared TOWRITE tag we set). The rule we follow is that TOWRITE tag can be cleared only by the process clearing the DIRTY tag (and submitting the page for IO). LINUX Kernel Hackers Manual July 2017 generic_writepages 9 4.1.27 generic_writepages walk the list of dirty pages of the given address space and writepage all of them. Synopsis int generic_writepages struct address_space * mapping struct writeback_control * wbc Arguments mapping address space structure to write wbc subtract the number of written pages from *wbc->nr_to_write Description This is a library function, which implements the writepages address_space_operation. LINUX Kernel Hackers Manual July 2017 write_one_page 9 4.1.27 write_one_page write out a single page and optionally wait on I/O Synopsis int write_one_page struct page * page int wait Arguments page the page to write wait if true, wait on writeout Description The page must be locked by the caller and will be unlocked upon return. write_one_page returns a negative error code if I/O failed. LINUX Kernel Hackers Manual July 2017 wait_for_stable_page 9 4.1.27 wait_for_stable_page wait for writeback to finish, if necessary. Synopsis void wait_for_stable_page struct page * page Arguments page The page to wait on. Description This function determines if the given page is related to a backing device that requires page contents to be held stable during writeback. If so, then it will wait for any pending writeback to complete. LINUX Kernel Hackers Manual July 2017 truncate_inode_pages_range 9 4.1.27 truncate_inode_pages_range truncate range of pages specified by start & end byte offsets Synopsis void truncate_inode_pages_range struct address_space * mapping loff_t lstart loff_t lend Arguments mapping mapping to truncate lstart offset from which to truncate lend offset to which to truncate (inclusive) Description Truncate the page cache, removing the pages that are between specified offsets (and zeroing out partial pages if lstart or lend + 1 is not page aligned). Truncate takes two passes - the first pass is nonblocking. It will not block on page locks and it will not block on writeback. The second pass will wait. This is to prevent as much IO as possible in the affected region. The first pass will remove most pages, so the search cost of the second pass is low. We pass down the cache-hot hint to the page freeing code. Even if the mapping is large, it is probably the case that the final pages are the most recently touched, and freeing happens in ascending file offset order. Note that since ->invalidatepage accepts range to invalidate truncate_inode_pages_range is able to handle cases where lend + 1 is not page aligned properly. LINUX Kernel Hackers Manual July 2017 truncate_inode_pages 9 4.1.27 truncate_inode_pages truncate *all* the pages from an offset Synopsis void truncate_inode_pages struct address_space * mapping loff_t lstart Arguments mapping mapping to truncate lstart offset from which to truncate Description Called under (and serialised by) inode->i_mutex. Note When this function returns, there can be a page in the process of deletion (inside __delete_from_page_cache) in the specified range. Thus mapping->nrpages can be non-zero when this function returns even after truncation of the whole mapping. LINUX Kernel Hackers Manual July 2017 truncate_inode_pages_final 9 4.1.27 truncate_inode_pages_final truncate *all* pages before inode dies Synopsis void truncate_inode_pages_final struct address_space * mapping Arguments mapping mapping to truncate Description Called under (and serialized by) inode->i_mutex. Filesystems have to use this in the .evict_inode path to inform the VM that this is the final truncate and the inode is going away. LINUX Kernel Hackers Manual July 2017 invalidate_mapping_pages 9 4.1.27 invalidate_mapping_pages Invalidate all the unlocked pages of one inode Synopsis unsigned long invalidate_mapping_pages struct address_space * mapping pgoff_t start pgoff_t end Arguments mapping the address_space which holds the pages to invalidate start the offset 'from' which to invalidate end the offset 'to' which to invalidate (inclusive) Description This function only removes the unlocked pages, if you want to remove all the pages of one inode, you must call truncate_inode_pages. invalidate_mapping_pages will not block on IO activity. It will not invalidate pages which are dirty, locked, under writeback or mapped into pagetables. LINUX Kernel Hackers Manual July 2017 invalidate_inode_pages2_range 9 4.1.27 invalidate_inode_pages2_range remove range of pages from an address_space Synopsis int invalidate_inode_pages2_range struct address_space * mapping pgoff_t start pgoff_t end Arguments mapping the address_space start the page offset 'from' which to invalidate end the page offset 'to' which to invalidate (inclusive) Description Any pages which are found to be mapped into pagetables are unmapped prior to invalidation. Returns -EBUSY if any pages could not be invalidated. LINUX Kernel Hackers Manual July 2017 invalidate_inode_pages2 9 4.1.27 invalidate_inode_pages2 remove all pages from an address_space Synopsis int invalidate_inode_pages2 struct address_space * mapping Arguments mapping the address_space Description Any pages which are found to be mapped into pagetables are unmapped prior to invalidation. Returns -EBUSY if any pages could not be invalidated. LINUX Kernel Hackers Manual July 2017 truncate_pagecache 9 4.1.27 truncate_pagecache unmap and remove pagecache that has been truncated Synopsis void truncate_pagecache struct inode * inode loff_t newsize Arguments inode inode newsize new file size Description inode's new i_size must already be written before truncate_pagecache is called. This function should typically be called before the filesystem releases resources associated with the freed range (eg. deallocates blocks). This way, pagecache will always stay logically coherent with on-disk format, and the filesystem would not have to deal with situations such as writepage being called for a page that has already had its underlying blocks deallocated. LINUX Kernel Hackers Manual July 2017 truncate_setsize 9 4.1.27 truncate_setsize update inode and pagecache for a new file size Synopsis void truncate_setsize struct inode * inode loff_t newsize Arguments inode inode newsize new file size Description truncate_setsize updates i_size and performs pagecache truncation (if necessary) to newsize. It will be typically be called from the filesystem's setattr function when ATTR_SIZE is passed in. Must be called with a lock serializing truncates and writes (generally i_mutex but e.g. xfs uses a different lock) and before all filesystem specific block truncation has been performed. LINUX Kernel Hackers Manual July 2017 pagecache_isize_extended 9 4.1.27 pagecache_isize_extended update pagecache after extension of i_size Synopsis void pagecache_isize_extended struct inode * inode loff_t from loff_t to Arguments inode inode for which i_size was extended from original inode size to new inode size Description Handle extension of inode size either caused by extending truncate or by write starting after current i_size. We mark the page straddling current i_size RO so that page_mkwrite is called on the nearest write access to the page. This way filesystem can be sure that page_mkwrite is called on the page before user writes to the page via mmap after the i_size has been changed. The function must be called after i_size is updated so that page fault coming after we unlock the page will already see the new i_size. The function must be called while we still hold i_mutex - this not only makes sure i_size is stable but also that userspace cannot observe new i_size value before we are prepared to store mmap writes at new inode size. LINUX Kernel Hackers Manual July 2017 truncate_pagecache_range 9 4.1.27 truncate_pagecache_range unmap and remove pagecache that is hole-punched Synopsis void truncate_pagecache_range struct inode * inode loff_t lstart loff_t lend Arguments inode inode lstart offset of beginning of hole lend offset of last byte of hole Description This function should typically be called before the filesystem releases resources associated with the freed range (eg. deallocates blocks). This way, pagecache will always stay logically coherent with on-disk format, and the filesystem would not have to deal with situations such as writepage being called for a page that has already had its underlying blocks deallocated. Kernel IPC facilities IPC utilities LINUX Kernel Hackers Manual July 2017 ipc_init 9 4.1.27 ipc_init initialise ipc subsystem Synopsis int ipc_init void Arguments void no arguments Description The various sysv ipc resources (semaphores, messages and shared memory) are initialised. A callback routine is registered into the memory hotplug notifier chain since msgmni scales to lowmem this callback routine will be called upon successful memory add / remove to recompute msmgni. LINUX Kernel Hackers Manual July 2017 ipc_init_ids 9 4.1.27 ipc_init_ids initialise ipc identifiers Synopsis void ipc_init_ids struct ipc_ids * ids Arguments ids ipc identifier set Description Set up the sequence range to use for the ipc identifier range (limited below IPCMNI) then initialise the ids idr. LINUX Kernel Hackers Manual July 2017 ipc_init_proc_interface 9 4.1.27 ipc_init_proc_interface create a proc interface for sysipc types using a seq_file interface. Synopsis void ipc_init_proc_interface const char * path const char * header int ids int (*show) struct seq_file *, void * Arguments path Path in procfs header Banner to be printed at the beginning of the file. ids ipc id table to iterate. show show routine. LINUX Kernel Hackers Manual July 2017 ipc_findkey 9 4.1.27 ipc_findkey find a key in an ipc identifier set Synopsis struct kern_ipc_perm * ipc_findkey struct ipc_ids * ids key_t key Arguments ids ipc identifier set key key to find Description Returns the locked pointer to the ipc structure if found or NULL otherwise. If key is found ipc points to the owning ipc structure Called with ipc_ids.rwsem held. LINUX Kernel Hackers Manual July 2017 ipc_get_maxid 9 4.1.27 ipc_get_maxid get the last assigned id Synopsis int ipc_get_maxid struct ipc_ids * ids Arguments ids ipc identifier set Description Called with ipc_ids.rwsem held. LINUX Kernel Hackers Manual July 2017 ipc_addid 9 4.1.27 ipc_addid add an ipc identifier Synopsis int ipc_addid struct ipc_ids * ids struct kern_ipc_perm * new int size Arguments ids ipc identifier set new new ipc permission set size limit for the number of used ids Description Add an entry 'new' to the ipc ids idr. The permissions object is initialised and the first free entry is set up and the id assigned is returned. The 'new' entry is returned in a locked state on success. On failure the entry is not locked and a negative err-code is returned. Called with writer ipc_ids.rwsem held. LINUX Kernel Hackers Manual July 2017 ipcget_new 9 4.1.27 ipcget_new create a new ipc object Synopsis int ipcget_new struct ipc_namespace * ns struct ipc_ids * ids const struct ipc_ops * ops struct ipc_params * params Arguments ns ipc namespace ids ipc identifier set ops the actual creation routine to call params its parameters Description This routine is called by sys_msgget, sys_semget and sys_shmget when the key is IPC_PRIVATE. LINUX Kernel Hackers Manual July 2017 ipc_check_perms 9 4.1.27 ipc_check_perms check security and permissions for an ipc object Synopsis int ipc_check_perms struct ipc_namespace * ns struct kern_ipc_perm * ipcp const struct ipc_ops * ops struct ipc_params * params Arguments ns ipc namespace ipcp ipc permission set ops the actual security routine to call params its parameters Description This routine is called by sys_msgget, sys_semget and sys_shmget when the key is not IPC_PRIVATE and that key already exists in the ds IDR. On success, the ipc id is returned. It is called with ipc_ids.rwsem and ipcp->lock held. LINUX Kernel Hackers Manual July 2017 ipcget_public 9 4.1.27 ipcget_public get an ipc object or create a new one Synopsis int ipcget_public struct ipc_namespace * ns struct ipc_ids * ids const struct ipc_ops * ops struct ipc_params * params Arguments ns ipc namespace ids ipc identifier set ops the actual creation routine to call params its parameters Description This routine is called by sys_msgget, sys_semget and sys_shmget when the key is not IPC_PRIVATE. It adds a new entry if the key is not found and does some permission / security checkings if the key is found. On success, the ipc id is returned. LINUX Kernel Hackers Manual July 2017 ipc_rmid 9 4.1.27 ipc_rmid remove an ipc identifier Synopsis void ipc_rmid struct ipc_ids * ids struct kern_ipc_perm * ipcp Arguments ids ipc identifier set ipcp ipc perm structure containing the identifier to remove Description ipc_ids.rwsem (as a writer) and the spinlock for this ID are held before this function is called, and remain locked on the exit. LINUX Kernel Hackers Manual July 2017 ipc_alloc 9 4.1.27 ipc_alloc allocate ipc space Synopsis void * ipc_alloc int size Arguments size size desired Description Allocate memory from the appropriate pools and return a pointer to it. NULL is returned if the allocation fails LINUX Kernel Hackers Manual July 2017 ipc_free 9 4.1.27 ipc_free free ipc space Synopsis void ipc_free void * ptr int size Arguments ptr pointer returned by ipc_alloc size size of block Description Free a block created with ipc_alloc. The caller must know the size used in the allocation call. LINUX Kernel Hackers Manual July 2017 ipc_rcu_alloc 9 4.1.27 ipc_rcu_alloc allocate ipc and rcu space Synopsis void * ipc_rcu_alloc int size Arguments size size desired Description Allocate memory for the rcu header structure + the object. Returns the pointer to the object or NULL upon failure. LINUX Kernel Hackers Manual July 2017 ipcperms 9 4.1.27 ipcperms check ipc permissions Synopsis int ipcperms struct ipc_namespace * ns struct kern_ipc_perm * ipcp short flag Arguments ns ipc namespace ipcp ipc permission set flag desired permission set Description Check user, group, other permissions for access to ipc resources. return 0 if allowed flag will most probably be 0 or S_...UGO from <linux/stat.h> LINUX Kernel Hackers Manual July 2017 kernel_to_ipc64_perm 9 4.1.27 kernel_to_ipc64_perm convert kernel ipc permissions to user Synopsis void kernel_to_ipc64_perm struct kern_ipc_perm * in struct ipc64_perm * out Arguments in kernel permissions out new style ipc permissions Description Turn the kernel object in into a set of permissions descriptions for returning to userspace (out). LINUX Kernel Hackers Manual July 2017 ipc64_perm_to_ipc_perm 9 4.1.27 ipc64_perm_to_ipc_perm convert new ipc permissions to old Synopsis void ipc64_perm_to_ipc_perm struct ipc64_perm * in struct ipc_perm * out Arguments in new style ipc permissions out old style ipc permissions Description Turn the new style permissions object in into a compatibility object and store it into the out pointer. LINUX Kernel Hackers Manual July 2017 ipc_obtain_object 9 4.1.27 ipc_obtain_object Synopsis struct kern_ipc_perm * ipc_obtain_object struct ipc_ids * ids int id Arguments ids ipc identifier set id ipc id to look for Description Look for an id in the ipc ids idr and return associated ipc object. Call inside the RCU critical section. The ipc object is *not* locked on exit. LINUX Kernel Hackers Manual July 2017 ipc_lock 9 4.1.27 ipc_lock lock an ipc structure without rwsem held Synopsis struct kern_ipc_perm * ipc_lock struct ipc_ids * ids int id Arguments ids ipc identifier set id ipc id to look for Description Look for an id in the ipc ids idr and lock the associated ipc object. The ipc object is locked on successful exit. LINUX Kernel Hackers Manual July 2017 ipc_obtain_object_check 9 4.1.27 ipc_obtain_object_check Synopsis struct kern_ipc_perm * ipc_obtain_object_check struct ipc_ids * ids int id Arguments ids ipc identifier set id ipc id to look for Description Similar to ipc_obtain_object but also checks the ipc object reference counter. Call inside the RCU critical section. The ipc object is *not* locked on exit. LINUX Kernel Hackers Manual July 2017 ipcget 9 4.1.27 ipcget Common sys_*get code Synopsis int ipcget struct ipc_namespace * ns struct ipc_ids * ids const struct ipc_ops * ops struct ipc_params * params Arguments ns namespace ids ipc identifier set ops operations to be called on ipc object creation, permission checks and further checks params the parameters needed by the previous operations. Description Common routine called by sys_msgget, sys_semget and sys_shmget. LINUX Kernel Hackers Manual July 2017 ipc_update_perm 9 4.1.27 ipc_update_perm update the permissions of an ipc object Synopsis int ipc_update_perm struct ipc64_perm * in struct kern_ipc_perm * out Arguments in the permission given as input. out the permission of the ipc to set. LINUX Kernel Hackers Manual July 2017 ipcctl_pre_down_nolock 9 4.1.27 ipcctl_pre_down_nolock retrieve an ipc and check permissions for some IPC_XXX cmd Synopsis struct kern_ipc_perm * ipcctl_pre_down_nolock struct ipc_namespace * ns struct ipc_ids * ids int id int cmd struct ipc64_perm * perm int extra_perm Arguments ns ipc namespace ids the table of ids where to look for the ipc id the id of the ipc to retrieve cmd the cmd to check perm the permission to set extra_perm one extra permission parameter used by msq Description This function does some common audit and permissions check for some IPC_XXX cmd and is called from semctl_down, shmctl_down and msgctl_down. It must be called without any lock held and - retrieves the ipc with the given id in the given table. - performs some audit and permission check, depending on the given cmd - returns a pointer to the ipc object or otherwise, the corresponding error. Call holding the both the rwsem and the rcu read lock. LINUX Kernel Hackers Manual July 2017 ipc_parse_version 9 4.1.27 ipc_parse_version ipc call version Synopsis int ipc_parse_version int * cmd Arguments cmd pointer to command Description Return IPC_64 for new style IPC and IPC_OLD for old style IPC. The cmd value is turned from an encoding command and version into just the command code. FIFO Buffer kfifo interface LINUX Kernel Hackers Manual July 2017 DECLARE_KFIFO_PTR 9 4.1.27 DECLARE_KFIFO_PTR macro to declare a fifo pointer object Synopsis DECLARE_KFIFO_PTR fifo type Arguments fifo name of the declared fifo type type of the fifo elements LINUX Kernel Hackers Manual July 2017 DECLARE_KFIFO 9 4.1.27 DECLARE_KFIFO macro to declare a fifo object Synopsis DECLARE_KFIFO fifo type size Arguments fifo name of the declared fifo type type of the fifo elements size the number of elements in the fifo, this must be a power of 2 LINUX Kernel Hackers Manual July 2017 INIT_KFIFO 9 4.1.27 INIT_KFIFO Initialize a fifo declared by DECLARE_KFIFO Synopsis INIT_KFIFO fifo Arguments fifo name of the declared fifo datatype LINUX Kernel Hackers Manual July 2017 DEFINE_KFIFO 9 4.1.27 DEFINE_KFIFO macro to define and initialize a fifo Synopsis DEFINE_KFIFO fifo type size Arguments fifo name of the declared fifo datatype type type of the fifo elements size the number of elements in the fifo, this must be a power of 2 Note the macro can be used for global and local fifo data type variables. LINUX Kernel Hackers Manual July 2017 kfifo_initialized 9 4.1.27 kfifo_initialized Check if the fifo is initialized Synopsis kfifo_initialized fifo Arguments fifo address of the fifo to check Description Return true if fifo is initialized, otherwise false. Assumes the fifo was 0 before. LINUX Kernel Hackers Manual July 2017 kfifo_esize 9 4.1.27 kfifo_esize returns the size of the element managed by the fifo Synopsis kfifo_esize fifo Arguments fifo address of the fifo to be used LINUX Kernel Hackers Manual July 2017 kfifo_recsize 9 4.1.27 kfifo_recsize returns the size of the record length field Synopsis kfifo_recsize fifo Arguments fifo address of the fifo to be used LINUX Kernel Hackers Manual July 2017 kfifo_size 9 4.1.27 kfifo_size returns the size of the fifo in elements Synopsis kfifo_size fifo Arguments fifo address of the fifo to be used LINUX Kernel Hackers Manual July 2017 kfifo_reset 9 4.1.27 kfifo_reset removes the entire fifo content Synopsis kfifo_reset fifo Arguments fifo address of the fifo to be used Note usage of kfifo_reset is dangerous. It should be only called when the fifo is exclusived locked or when it is secured that no other thread is accessing the fifo. LINUX Kernel Hackers Manual July 2017 kfifo_reset_out 9 4.1.27 kfifo_reset_out skip fifo content Synopsis kfifo_reset_out fifo Arguments fifo address of the fifo to be used Note The usage of kfifo_reset_out is safe until it will be only called from the reader thread and there is only one concurrent reader. Otherwise it is dangerous and must be handled in the same way as kfifo_reset. LINUX Kernel Hackers Manual July 2017 kfifo_len 9 4.1.27 kfifo_len returns the number of used elements in the fifo Synopsis kfifo_len fifo Arguments fifo address of the fifo to be used LINUX Kernel Hackers Manual July 2017 kfifo_is_empty 9 4.1.27 kfifo_is_empty returns true if the fifo is empty Synopsis kfifo_is_empty fifo Arguments fifo address of the fifo to be used LINUX Kernel Hackers Manual July 2017 kfifo_is_full 9 4.1.27 kfifo_is_full returns true if the fifo is full Synopsis kfifo_is_full fifo Arguments fifo address of the fifo to be used LINUX Kernel Hackers Manual July 2017 kfifo_avail 9 4.1.27 kfifo_avail returns the number of unused elements in the fifo Synopsis kfifo_avail fifo Arguments fifo address of the fifo to be used LINUX Kernel Hackers Manual July 2017 kfifo_skip 9 4.1.27 kfifo_skip skip output data Synopsis kfifo_skip fifo Arguments fifo address of the fifo to be used LINUX Kernel Hackers Manual July 2017 kfifo_peek_len 9 4.1.27 kfifo_peek_len gets the size of the next fifo record Synopsis kfifo_peek_len fifo Arguments fifo address of the fifo to be used Description This function returns the size of the next fifo record in number of bytes. LINUX Kernel Hackers Manual July 2017 kfifo_alloc 9 4.1.27 kfifo_alloc dynamically allocates a new fifo buffer Synopsis kfifo_alloc fifo size gfp_mask Arguments fifo pointer to the fifo size the number of elements in the fifo, this must be a power of 2 gfp_mask get_free_pages mask, passed to kmalloc Description This macro dynamically allocates a new fifo buffer. The numer of elements will be rounded-up to a power of 2. The fifo will be release with kfifo_free. Return 0 if no error, otherwise an error code. LINUX Kernel Hackers Manual July 2017 kfifo_free 9 4.1.27 kfifo_free frees the fifo Synopsis kfifo_free fifo Arguments fifo the fifo to be freed LINUX Kernel Hackers Manual July 2017 kfifo_init 9 4.1.27 kfifo_init initialize a fifo using a preallocated buffer Synopsis kfifo_init fifo buffer size Arguments fifo the fifo to assign the buffer buffer the preallocated buffer to be used size the size of the internal buffer, this have to be a power of 2 Description This macro initialize a fifo using a preallocated buffer. The numer of elements will be rounded-up to a power of 2. Return 0 if no error, otherwise an error code. LINUX Kernel Hackers Manual July 2017 kfifo_put 9 4.1.27 kfifo_put put data into the fifo Synopsis kfifo_put fifo val Arguments fifo address of the fifo to be used val the data to be added Description This macro copies the given value into the fifo. It returns 0 if the fifo was full. Otherwise it returns the number processed elements. Note that with only one concurrent reader and one concurrent writer, you don't need extra locking to use these macro. LINUX Kernel Hackers Manual July 2017 kfifo_get 9 4.1.27 kfifo_get get data from the fifo Synopsis kfifo_get fifo val Arguments fifo address of the fifo to be used val address where to store the data Description This macro reads the data from the fifo. It returns 0 if the fifo was empty. Otherwise it returns the number processed elements. Note that with only one concurrent reader and one concurrent writer, you don't need extra locking to use these macro. LINUX Kernel Hackers Manual July 2017 kfifo_peek 9 4.1.27 kfifo_peek get data from the fifo without removing Synopsis kfifo_peek fifo val Arguments fifo address of the fifo to be used val address where to store the data Description This reads the data from the fifo without removing it from the fifo. It returns 0 if the fifo was empty. Otherwise it returns the number processed elements. Note that with only one concurrent reader and one concurrent writer, you don't need extra locking to use these macro. LINUX Kernel Hackers Manual July 2017 kfifo_in 9 4.1.27 kfifo_in put data into the fifo Synopsis kfifo_in fifo buf n Arguments fifo address of the fifo to be used buf the data to be added n number of elements to be added Description This macro copies the given buffer into the fifo and returns the number of copied elements. Note that with only one concurrent reader and one concurrent writer, you don't need extra locking to use these macro. LINUX Kernel Hackers Manual July 2017 kfifo_in_spinlocked 9 4.1.27 kfifo_in_spinlocked put data into the fifo using a spinlock for locking Synopsis kfifo_in_spinlocked fifo buf n lock Arguments fifo address of the fifo to be used buf the data to be added n number of elements to be added lock pointer to the spinlock to use for locking Description This macro copies the given values buffer into the fifo and returns the number of copied elements. LINUX Kernel Hackers Manual July 2017 kfifo_out 9 4.1.27 kfifo_out get data from the fifo Synopsis kfifo_out fifo buf n Arguments fifo address of the fifo to be used buf pointer to the storage buffer n max. number of elements to get Description This macro get some data from the fifo and return the numbers of elements copied. Note that with only one concurrent reader and one concurrent writer, you don't need extra locking to use these macro. LINUX Kernel Hackers Manual July 2017 kfifo_out_spinlocked 9 4.1.27 kfifo_out_spinlocked get data from the fifo using a spinlock for locking Synopsis kfifo_out_spinlocked fifo buf n lock Arguments fifo address of the fifo to be used buf pointer to the storage buffer n max. number of elements to get lock pointer to the spinlock to use for locking Description This macro get the data from the fifo and return the numbers of elements copied. LINUX Kernel Hackers Manual July 2017 kfifo_from_user 9 4.1.27 kfifo_from_user puts some data from user space into the fifo Synopsis kfifo_from_user fifo from len copied Arguments fifo address of the fifo to be used from pointer to the data to be added len the length of the data to be added copied pointer to output variable to store the number of copied bytes Description This macro copies at most len bytes from the from into the fifo, depending of the available space and returns -EFAULT/0. Note that with only one concurrent reader and one concurrent writer, you don't need extra locking to use these macro. LINUX Kernel Hackers Manual July 2017 kfifo_to_user 9 4.1.27 kfifo_to_user copies data from the fifo into user space Synopsis kfifo_to_user fifo to len copied Arguments fifo address of the fifo to be used to where the data must be copied len the size of the destination buffer copied pointer to output variable to store the number of copied bytes Description This macro copies at most len bytes from the fifo into the to buffer and returns -EFAULT/0. Note that with only one concurrent reader and one concurrent writer, you don't need extra locking to use these macro. LINUX Kernel Hackers Manual July 2017 kfifo_dma_in_prepare 9 4.1.27 kfifo_dma_in_prepare setup a scatterlist for DMA input Synopsis kfifo_dma_in_prepare fifo sgl nents len Arguments fifo address of the fifo to be used sgl pointer to the scatterlist array nents number of entries in the scatterlist array len number of elements to transfer Description This macro fills a scatterlist for DMA input. It returns the number entries in the scatterlist array. Note that with only one concurrent reader and one concurrent writer, you don't need extra locking to use these macros. LINUX Kernel Hackers Manual July 2017 kfifo_dma_in_finish 9 4.1.27 kfifo_dma_in_finish finish a DMA IN operation Synopsis kfifo_dma_in_finish fifo len Arguments fifo address of the fifo to be used len number of bytes to received Description This macro finish a DMA IN operation. The in counter will be updated by the len parameter. No error checking will be done. Note that with only one concurrent reader and one concurrent writer, you don't need extra locking to use these macros. LINUX Kernel Hackers Manual July 2017 kfifo_dma_out_prepare 9 4.1.27 kfifo_dma_out_prepare setup a scatterlist for DMA output Synopsis kfifo_dma_out_prepare fifo sgl nents len Arguments fifo address of the fifo to be used sgl pointer to the scatterlist array nents number of entries in the scatterlist array len number of elements to transfer Description This macro fills a scatterlist for DMA output which at most len bytes to transfer. It returns the number entries in the scatterlist array. A zero means there is no space available and the scatterlist is not filled. Note that with only one concurrent reader and one concurrent writer, you don't need extra locking to use these macros. LINUX Kernel Hackers Manual July 2017 kfifo_dma_out_finish 9 4.1.27 kfifo_dma_out_finish finish a DMA OUT operation Synopsis kfifo_dma_out_finish fifo len Arguments fifo address of the fifo to be used len number of bytes transferred Description This macro finish a DMA OUT operation. The out counter will be updated by the len parameter. No error checking will be done. Note that with only one concurrent reader and one concurrent writer, you don't need extra locking to use these macros. LINUX Kernel Hackers Manual July 2017 kfifo_out_peek 9 4.1.27 kfifo_out_peek gets some data from the fifo Synopsis kfifo_out_peek fifo buf n Arguments fifo address of the fifo to be used buf pointer to the storage buffer n max. number of elements to get Description This macro get the data from the fifo and return the numbers of elements copied. The data is not removed from the fifo. Note that with only one concurrent reader and one concurrent writer, you don't need extra locking to use these macro. relay interface support Relay interface support is designed to provide an efficient mechanism for tools and facilities to relay large amounts of data from kernel space to user space. relay interface LINUX Kernel Hackers Manual July 2017 relay_buf_full 9 4.1.27 relay_buf_full boolean, is the channel buffer full? Synopsis int relay_buf_full struct rchan_buf * buf Arguments buf channel buffer Description Returns 1 if the buffer is full, 0 otherwise. LINUX Kernel Hackers Manual July 2017 relay_reset 9 4.1.27 relay_reset reset the channel Synopsis void relay_reset struct rchan * chan Arguments chan the channel Description This has the effect of erasing all data from all channel buffers and restarting the channel in its initial state. The buffers are not freed, so any mappings are still in effect. NOTE. Care should be taken that the channel isn't actually being used by anything when this call is made. LINUX Kernel Hackers Manual July 2017 relay_open 9 4.1.27 relay_open create a new relay channel Synopsis struct rchan * relay_open const char * base_filename struct dentry * parent size_t subbuf_size size_t n_subbufs struct rchan_callbacks * cb void * private_data Arguments base_filename base name of files to create, NULL for buffering only parent dentry of parent directory, NULL for root directory or buffer subbuf_size size of sub-buffers n_subbufs number of sub-buffers cb client callback functions private_data user-defined data Description Returns channel pointer if successful, NULL otherwise. Creates a channel buffer for each cpu using the sizes and attributes specified. The created channel buffer files will be named base_filename0...base_filenameN-1. File permissions will be S_IRUSR. LINUX Kernel Hackers Manual July 2017 relay_switch_subbuf 9 4.1.27 relay_switch_subbuf switch to a new sub-buffer Synopsis size_t relay_switch_subbuf struct rchan_buf * buf size_t length Arguments buf channel buffer length size of current event Description Returns either the length passed in or 0 if full. Performs sub-buffer-switch tasks such as invoking callbacks, updating padding counts, waking up readers, etc. LINUX Kernel Hackers Manual July 2017 relay_subbufs_consumed 9 4.1.27 relay_subbufs_consumed update the buffer's sub-buffers-consumed count Synopsis void relay_subbufs_consumed struct rchan * chan unsigned int cpu size_t subbufs_consumed Arguments chan the channel cpu the cpu associated with the channel buffer to update subbufs_consumed number of sub-buffers to add to current buf's count Description Adds to the channel buffer's consumed sub-buffer count. subbufs_consumed should be the number of sub-buffers newly consumed, not the total consumed. NOTE. Kernel clients don't need to call this function if the channel mode is 'overwrite'. LINUX Kernel Hackers Manual July 2017 relay_close 9 4.1.27 relay_close close the channel Synopsis void relay_close struct rchan * chan Arguments chan the channel Description Closes all channel buffers and frees the channel. LINUX Kernel Hackers Manual July 2017 relay_flush 9 4.1.27 relay_flush close the channel Synopsis void relay_flush struct rchan * chan Arguments chan the channel Description Flushes all channel buffers, i.e. forces buffer switch. LINUX Kernel Hackers Manual July 2017 relay_mmap_buf 9 4.1.27 relay_mmap_buf mmap channel buffer to process address space Synopsis int relay_mmap_buf struct rchan_buf * buf struct vm_area_struct * vma Arguments buf relay channel buffer vma vm_area_struct describing memory to be mapped Description Returns 0 if ok, negative on error Caller should already have grabbed mmap_sem. LINUX Kernel Hackers Manual July 2017 relay_alloc_buf 9 4.1.27 relay_alloc_buf allocate a channel buffer Synopsis void * relay_alloc_buf struct rchan_buf * buf size_t * size Arguments buf the buffer struct size total size of the buffer Description Returns a pointer to the resulting buffer, NULL if unsuccessful. The passed in size will get page aligned, if it isn't already. LINUX Kernel Hackers Manual July 2017 relay_create_buf 9 4.1.27 relay_create_buf allocate and initialize a channel buffer Synopsis struct rchan_buf * relay_create_buf struct rchan * chan Arguments chan the relay channel Description Returns channel buffer if successful, NULL otherwise. LINUX Kernel Hackers Manual July 2017 relay_destroy_channel 9 4.1.27 relay_destroy_channel free the channel struct Synopsis void relay_destroy_channel struct kref * kref Arguments kref target kernel reference that contains the relay channel Description Should only be called from kref_put. LINUX Kernel Hackers Manual July 2017 relay_destroy_buf 9 4.1.27 relay_destroy_buf destroy an rchan_buf struct and associated buffer Synopsis void relay_destroy_buf struct rchan_buf * buf Arguments buf the buffer struct LINUX Kernel Hackers Manual July 2017 relay_remove_buf 9 4.1.27 relay_remove_buf remove a channel buffer Synopsis void relay_remove_buf struct kref * kref Arguments kref target kernel reference that contains the relay buffer Description Removes the file from the filesystem, which also frees the rchan_buf_struct and the channel buffer. Should only be called from kref_put. LINUX Kernel Hackers Manual July 2017 relay_buf_empty 9 4.1.27 relay_buf_empty boolean, is the channel buffer empty? Synopsis int relay_buf_empty struct rchan_buf * buf Arguments buf channel buffer Description Returns 1 if the buffer is empty, 0 otherwise. LINUX Kernel Hackers Manual July 2017 wakeup_readers 9 4.1.27 wakeup_readers wake up readers waiting on a channel Synopsis void wakeup_readers unsigned long data Arguments data contains the channel buffer Description This is the timer function used to defer reader waking. LINUX Kernel Hackers Manual July 2017 __relay_reset 9 4.1.27 __relay_reset reset a channel buffer Synopsis void __relay_reset struct rchan_buf * buf unsigned int init Arguments buf the channel buffer init 1 if this is a first-time initialization Description See relay_reset for description of effect. LINUX Kernel Hackers Manual July 2017 relay_close_buf 9 4.1.27 relay_close_buf close a channel buffer Synopsis void relay_close_buf struct rchan_buf * buf Arguments buf channel buffer Description Marks the buffer finalized and restores the default callbacks. The channel buffer and channel buffer data structure are then freed automatically when the last reference is given up. LINUX Kernel Hackers Manual July 2017 relay_hotcpu_callback 9 4.1.27 relay_hotcpu_callback CPU hotplug callback Synopsis int relay_hotcpu_callback struct notifier_block * nb unsigned long action void * hcpu Arguments nb notifier block action hotplug action to take hcpu CPU number Description Returns the success/failure of the operation. (NOTIFY_OK, NOTIFY_BAD) LINUX Kernel Hackers Manual July 2017 relay_late_setup_files 9 4.1.27 relay_late_setup_files triggers file creation Synopsis int relay_late_setup_files struct rchan * chan const char * base_filename struct dentry * parent Arguments chan channel to operate on base_filename base name of files to create parent dentry of parent directory, NULL for root directory Description Returns 0 if successful, non-zero otherwise. Use to setup files for a previously buffer-only channel. Useful to do early tracing in kernel, before VFS is up, for example. LINUX Kernel Hackers Manual July 2017 relay_file_open 9 4.1.27 relay_file_open open file op for relay files Synopsis int relay_file_open struct inode * inode struct file * filp Arguments inode the inode filp the file Description Increments the channel buffer refcount. LINUX Kernel Hackers Manual July 2017 relay_file_mmap 9 4.1.27 relay_file_mmap mmap file op for relay files Synopsis int relay_file_mmap struct file * filp struct vm_area_struct * vma Arguments filp the file vma the vma describing what to map Description Calls upon relay_mmap_buf to map the file into user space. LINUX Kernel Hackers Manual July 2017 relay_file_poll 9 4.1.27 relay_file_poll poll file op for relay files Synopsis unsigned int relay_file_poll struct file * filp poll_table * wait Arguments filp the file wait poll table Description Poll implemention. LINUX Kernel Hackers Manual July 2017 relay_file_release 9 4.1.27 relay_file_release release file op for relay files Synopsis int relay_file_release struct inode * inode struct file * filp Arguments inode the inode filp the file Description Decrements the channel refcount, as the filesystem is no longer using it. LINUX Kernel Hackers Manual July 2017 relay_file_read_subbuf_avail 9 4.1.27 relay_file_read_subbuf_avail return bytes available in sub-buffer Synopsis size_t relay_file_read_subbuf_avail size_t read_pos struct rchan_buf * buf Arguments read_pos file read position buf relay channel buffer LINUX Kernel Hackers Manual July 2017 relay_file_read_start_pos 9 4.1.27 relay_file_read_start_pos find the first available byte to read Synopsis size_t relay_file_read_start_pos size_t read_pos struct rchan_buf * buf Arguments read_pos file read position buf relay channel buffer Description If the read_pos is in the middle of padding, return the position of the first actually available byte, otherwise return the original value. LINUX Kernel Hackers Manual July 2017 relay_file_read_end_pos 9 4.1.27 relay_file_read_end_pos return the new read position Synopsis size_t relay_file_read_end_pos struct rchan_buf * buf size_t read_pos size_t count Arguments buf relay channel buffer read_pos file read position count number of bytes to be read Module Support Module Loading LINUX Kernel Hackers Manual July 2017 __request_module 9 4.1.27 __request_module try to load a kernel module Synopsis int __request_module bool wait const char * fmt ... Arguments wait wait (or not) for the operation to complete fmt printf style format string for the name of the module @...: arguments as specified in the format string ... variable arguments Description Load a module using the user mode module loader. The function returns zero on success or a negative errno code on failure. Note that a successful module load does not mean the module did not then unload and exit on an error of its own. Callers must check that the service they requested is now available not blindly invoke it. If module auto-loading support is disabled then this function becomes a no-operation. LINUX Kernel Hackers Manual July 2017 call_usermodehelper_setup 9 4.1.27 call_usermodehelper_setup prepare to call a usermode helper Synopsis struct subprocess_info * call_usermodehelper_setup char * path char ** argv char ** envp gfp_t gfp_mask int (*init) struct subprocess_info *info, struct cred *new void (*cleanup) struct subprocess_info *info void * data Arguments path path to usermode executable argv arg vector for process envp environment for process gfp_mask gfp mask for memory allocation init an init function cleanup a cleanup function data arbitrary context sensitive data Description Returns either NULL on allocation failure, or a subprocess_info structure. This should be passed to call_usermodehelper_exec to exec the process and free the structure. The init function is used to customize the helper process prior to exec. A non-zero return code causes the process to error out, exit, and return the failure to the calling process The cleanup function is just before ethe subprocess_info is about to be freed. This can be used for freeing the argv and envp. The Function must be runnable in either a process context or the context in which call_usermodehelper_exec is called. LINUX Kernel Hackers Manual July 2017 call_usermodehelper_exec 9 4.1.27 call_usermodehelper_exec start a usermode application Synopsis int call_usermodehelper_exec struct subprocess_info * sub_info int wait Arguments sub_info information about the subprocessa wait wait for the application to finish and return status. when UMH_NO_WAIT don't wait at all, but you get no useful error back when the program couldn't be exec'ed. This makes it safe to call from interrupt context. Description Runs a user-space application. The application is started asynchronously if wait is not set, and runs as a child of keventd. (ie. it runs with full root capabilities). LINUX Kernel Hackers Manual July 2017 call_usermodehelper 9 4.1.27 call_usermodehelper prepare and start a usermode application Synopsis int call_usermodehelper char * path char ** argv char ** envp int wait Arguments path path to usermode executable argv arg vector for process envp environment for process wait wait for the application to finish and return status. when UMH_NO_WAIT don't wait at all, but you get no useful error back when the program couldn't be exec'ed. This makes it safe to call from interrupt context. Description This function is the equivalent to use call_usermodehelper_setup and call_usermodehelper_exec. Inter Module support Refer to the file kernel/module.c for more information. Hardware Interfaces Interrupt Handling LINUX Kernel Hackers Manual July 2017 synchronize_hardirq 9 4.1.27 synchronize_hardirq wait for pending hard IRQ handlers (on other CPUs) Synopsis bool synchronize_hardirq unsigned int irq Arguments irq interrupt number to wait for Description This function waits for any pending hard IRQ handlers for this interrupt to complete before returning. If you use this function while holding a resource the IRQ handler may need you will deadlock. It does not take associated threaded handlers into account. Do not use this for shutdown scenarios where you must be sure that all parts (hardirq and threaded handler) have completed. Returns false if a threaded handler is active. This function may be called - with care - from IRQ context. LINUX Kernel Hackers Manual July 2017 synchronize_irq 9 4.1.27 synchronize_irq wait for pending IRQ handlers (on other CPUs) Synopsis void synchronize_irq unsigned int irq Arguments irq interrupt number to wait for Description This function waits for any pending IRQ handlers for this interrupt to complete before returning. If you use this function while holding a resource the IRQ handler may need you will deadlock. This function may be called - with care - from IRQ context. LINUX Kernel Hackers Manual July 2017 irq_set_affinity_notifier 9 4.1.27 irq_set_affinity_notifier control notification of IRQ affinity changes Synopsis int irq_set_affinity_notifier unsigned int irq struct irq_affinity_notify * notify Arguments irq Interrupt for which to enable/disable notification notify Context for notification, or NULL to disable notification. Function pointers must be initialised; the other fields will be initialised by this function. Description Must be called in process context. Notification may only be enabled after the IRQ is allocated and must be disabled before the IRQ is freed using free_irq. LINUX Kernel Hackers Manual July 2017 disable_irq_nosync 9 4.1.27 disable_irq_nosync disable an irq without waiting Synopsis void disable_irq_nosync unsigned int irq Arguments irq Interrupt to disable Description Disable the selected interrupt line. Disables and Enables are nested. Unlike disable_irq, this function does not ensure existing instances of the IRQ handler have completed before returning. This function may be called from IRQ context. LINUX Kernel Hackers Manual July 2017 disable_irq 9 4.1.27 disable_irq disable an irq and wait for completion Synopsis void disable_irq unsigned int irq Arguments irq Interrupt to disable Description Disable the selected interrupt line. Enables and Disables are nested. This function waits for any pending IRQ handlers for this interrupt to complete before returning. If you use this function while holding a resource the IRQ handler may need you will deadlock. This function may be called - with care - from IRQ context. LINUX Kernel Hackers Manual July 2017 disable_hardirq 9 4.1.27 disable_hardirq disables an irq and waits for hardirq completion Synopsis bool disable_hardirq unsigned int irq Arguments irq Interrupt to disable Description Disable the selected interrupt line. Enables and Disables are nested. This function waits for any pending hard IRQ handlers for this interrupt to complete before returning. If you use this function while holding a resource the hard IRQ handler may need you will deadlock. When used to optimistically disable an interrupt from atomic context the return value must be checked. Returns false if a threaded handler is active. This function may be called - with care - from IRQ context. LINUX Kernel Hackers Manual July 2017 enable_irq 9 4.1.27 enable_irq enable handling of an irq Synopsis void enable_irq unsigned int irq Arguments irq Interrupt to enable Description Undoes the effect of one call to disable_irq. If this matches the last disable, processing of interrupts on this IRQ line is re-enabled. This function may be called from IRQ context only when desc->irq_data.chip->bus_lock and desc->chip->bus_sync_unlock are NULL ! LINUX Kernel Hackers Manual July 2017 irq_set_irq_wake 9 4.1.27 irq_set_irq_wake control irq power management wakeup Synopsis int irq_set_irq_wake unsigned int irq unsigned int on Arguments irq interrupt to control on enable/disable power management wakeup Description Enable/disable power management wakeup mode, which is disabled by default. Enables and disables must match, just as they match for non-wakeup mode support. Wakeup mode lets this IRQ wake the system from sleep states like suspend to RAM. LINUX Kernel Hackers Manual July 2017 irq_wake_thread 9 4.1.27 irq_wake_thread wake the irq thread for the action identified by dev_id Synopsis void irq_wake_thread unsigned int irq void * dev_id Arguments irq Interrupt line dev_id Device identity for which the thread should be woken LINUX Kernel Hackers Manual July 2017 setup_irq 9 4.1.27 setup_irq setup an interrupt Synopsis int setup_irq unsigned int irq struct irqaction * act Arguments irq Interrupt line to setup act irqaction for the interrupt Description Used to statically setup interrupts in the early boot process. LINUX Kernel Hackers Manual July 2017 remove_irq 9 4.1.27 remove_irq free an interrupt Synopsis void remove_irq unsigned int irq struct irqaction * act Arguments irq Interrupt line to free act irqaction for the interrupt Description Used to remove interrupts statically setup by the early boot process. LINUX Kernel Hackers Manual July 2017 free_irq 9 4.1.27 free_irq free an interrupt allocated with request_irq Synopsis void free_irq unsigned int irq void * dev_id Arguments irq Interrupt line to free dev_id Device identity to free Description Remove an interrupt handler. The handler is removed and if the interrupt line is no longer in use by any driver it is disabled. On a shared IRQ the caller must ensure the interrupt is disabled on the card it drives before calling this function. The function does not return until any executing interrupts for this IRQ have completed. This function must not be called from interrupt context. LINUX Kernel Hackers Manual July 2017 request_threaded_irq 9 4.1.27 request_threaded_irq allocate an interrupt line Synopsis int request_threaded_irq unsigned int irq irq_handler_t handler irq_handler_t thread_fn unsigned long irqflags const char * devname void * dev_id Arguments irq Interrupt line to allocate handler Function to be called when the IRQ occurs. Primary handler for threaded interrupts If NULL and thread_fn != NULL the default primary handler is installed thread_fn Function called from the irq handler thread If NULL, no irq thread is created irqflags Interrupt type flags devname An ascii name for the claiming device dev_id A cookie passed back to the handler function Description This call allocates interrupt resources and enables the interrupt line and IRQ handling. From the point this call is made your handler function may be invoked. Since your handler function must clear any interrupt the board raises, you must take care both to initialise your hardware and to set up the interrupt handler in the right order. If you want to set up a threaded irq handler for your device then you need to supply handler and thread_fn. handler is still called in hard interrupt context and has to check whether the interrupt originates from the device. If yes it needs to disable the interrupt on the device and return IRQ_WAKE_THREAD which will wake up the handler thread and run thread_fn. This split handler design is necessary to support shared interrupts. Dev_id must be globally unique. Normally the address of the device data structure is used as the cookie. Since the handler receives this value it makes sense to use it. If your interrupt is shared you must pass a non NULL dev_id as this is required when freeing the interrupt. Flags IRQF_SHARED Interrupt is shared IRQF_TRIGGER_* Specify active edge(s) or level LINUX Kernel Hackers Manual July 2017 request_any_context_irq 9 4.1.27 request_any_context_irq allocate an interrupt line Synopsis int request_any_context_irq unsigned int irq irq_handler_t handler unsigned long flags const char * name void * dev_id Arguments irq Interrupt line to allocate handler Function to be called when the IRQ occurs. Threaded handler for threaded interrupts. flags Interrupt type flags name An ascii name for the claiming device dev_id A cookie passed back to the handler function Description This call allocates interrupt resources and enables the interrupt line and IRQ handling. It selects either a hardirq or threaded handling method depending on the context. On failure, it returns a negative value. On success, it returns either IRQC_IS_HARDIRQ or IRQC_IS_NESTED. DMA Channels LINUX Kernel Hackers Manual July 2017 request_dma 9 4.1.27 request_dma request and reserve a system DMA channel Synopsis int request_dma unsigned int dmanr const char * device_id Arguments dmanr DMA channel number device_id reserving device ID string, used in /proc/dma LINUX Kernel Hackers Manual July 2017 free_dma 9 4.1.27 free_dma free a reserved system DMA channel Synopsis void free_dma unsigned int dmanr Arguments dmanr DMA channel number Resources Management LINUX Kernel Hackers Manual July 2017 request_resource_conflict 9 4.1.27 request_resource_conflict request and reserve an I/O or memory resource Synopsis struct resource * request_resource_conflict struct resource * root struct resource * new Arguments root root resource descriptor new resource descriptor desired by caller Description Returns 0 for success, conflict resource on error. LINUX Kernel Hackers Manual July 2017 reallocate_resource 9 4.1.27 reallocate_resource allocate a slot in the resource tree given range & alignment. The resource will be relocated if the new size cannot be reallocated in the current location. Synopsis int reallocate_resource struct resource * root struct resource * old resource_size_t newsize struct resource_constraint * constraint Arguments root root resource descriptor old resource descriptor desired by caller newsize new size of the resource descriptor constraint the size and alignment constraints to be met. LINUX Kernel Hackers Manual July 2017 lookup_resource 9 4.1.27 lookup_resource find an existing resource by a resource start address Synopsis struct resource * lookup_resource struct resource * root resource_size_t start Arguments root root resource descriptor start resource start address Description Returns a pointer to the resource if found, NULL otherwise LINUX Kernel Hackers Manual July 2017 insert_resource_conflict 9 4.1.27 insert_resource_conflict Inserts resource in the resource tree Synopsis struct resource * insert_resource_conflict struct resource * parent struct resource * new Arguments parent parent of the new resource new new resource to insert Description Returns 0 on success, conflict resource if the resource can't be inserted. This function is equivalent to request_resource_conflict when no conflict happens. If a conflict happens, and the conflicting resources entirely fit within the range of the new resource, then the new resource is inserted and the conflicting resources become children of the new resource. LINUX Kernel Hackers Manual July 2017 insert_resource 9 4.1.27 insert_resource Inserts a resource in the resource tree Synopsis int insert_resource struct resource * parent struct resource * new Arguments parent parent of the new resource new new resource to insert Description Returns 0 on success, -EBUSY if the resource can't be inserted. LINUX Kernel Hackers Manual July 2017 insert_resource_expand_to_fit 9 4.1.27 insert_resource_expand_to_fit Insert a resource into the resource tree Synopsis void insert_resource_expand_to_fit struct resource * root struct resource * new Arguments root root resource descriptor new new resource to insert Description Insert a resource into the resource tree, possibly expanding it in order to make it encompass any conflicting resources. LINUX Kernel Hackers Manual July 2017 resource_alignment 9 4.1.27 resource_alignment calculate resource's alignment Synopsis resource_size_t resource_alignment struct resource * res Arguments res resource pointer Description Returns alignment on success, 0 (invalid alignment) on failure. LINUX Kernel Hackers Manual July 2017 release_mem_region_adjustable 9 4.1.27 release_mem_region_adjustable release a previously reserved memory region Synopsis int release_mem_region_adjustable struct resource * parent resource_size_t start resource_size_t size Arguments parent parent resource descriptor start resource start address size resource region size Description This interface is intended for memory hot-delete. The requested region is released from a currently busy memory resource. The requested region must either match exactly or fit into a single busy resource entry. In the latter case, the remaining resource is adjusted accordingly. Existing children of the busy memory resource must be immutable in the request. Note - Additional release conditions, such as overlapping region, can be supported after they are confirmed as valid cases. - When a busy memory resource gets split into two entries, the code assumes that all children remain in the lower address entry for simplicity. Enhance this logic when necessary. LINUX Kernel Hackers Manual July 2017 request_resource 9 4.1.27 request_resource request and reserve an I/O or memory resource Synopsis int request_resource struct resource * root struct resource * new Arguments root root resource descriptor new resource descriptor desired by caller Description Returns 0 for success, negative error code on error. LINUX Kernel Hackers Manual July 2017 release_resource 9 4.1.27 release_resource release a previously reserved resource Synopsis int release_resource struct resource * old Arguments old resource pointer LINUX Kernel Hackers Manual July 2017 allocate_resource 9 4.1.27 allocate_resource allocate empty slot in the resource tree given range & alignment. The resource will be reallocated with a new size if it was already allocated Synopsis int allocate_resource struct resource * root struct resource * new resource_size_t size resource_size_t min resource_size_t max resource_size_t align resource_size_t (*alignf) void *, const struct resource *, resource_size_t, resource_size_t void * alignf_data Arguments root root resource descriptor new resource descriptor desired by caller size requested resource region size min minimum boundary to allocate max maximum boundary to allocate align alignment requested, in bytes alignf alignment function, optional, called if not NULL alignf_data arbitrary data to pass to the alignf function LINUX Kernel Hackers Manual July 2017 adjust_resource 9 4.1.27 adjust_resource modify a resource's start and size Synopsis int adjust_resource struct resource * res resource_size_t start resource_size_t size Arguments res resource to modify start new start value size new size Description Given an existing resource, change its start and size to match the arguments. Returns 0 on success, -EBUSY if it can't fit. Existing children of the resource are assumed to be immutable. LINUX Kernel Hackers Manual July 2017 __request_region 9 4.1.27 __request_region create a new busy resource region Synopsis struct resource * __request_region struct resource * parent resource_size_t start resource_size_t n const char * name int flags Arguments parent parent resource descriptor start resource start address n resource region size name reserving caller's ID string flags IO resource flags LINUX Kernel Hackers Manual July 2017 __release_region 9 4.1.27 __release_region release a previously reserved resource region Synopsis void __release_region struct resource * parent resource_size_t start resource_size_t n Arguments parent parent resource descriptor start resource start address n resource region size Description The described resource region must match a currently busy region. LINUX Kernel Hackers Manual July 2017 devm_request_resource 9 4.1.27 devm_request_resource request and reserve an I/O or memory resource Synopsis int devm_request_resource struct device * dev struct resource * root struct resource * new Arguments dev device for which to request the resource root root of the resource tree from which to request the resource new descriptor of the resource to request Description This is a device-managed version of request_resource. There is usually no need to release resources requested by this function explicitly since that will be taken care of when the device is unbound from its driver. If for some reason the resource needs to be released explicitly, because of ordering issues for example, drivers must call devm_release_resource rather than the regular release_resource. When a conflict is detected between any existing resources and the newly requested resource, an error message will be printed. Returns 0 on success or a negative error code on failure. LINUX Kernel Hackers Manual July 2017 devm_release_resource 9 4.1.27 devm_release_resource release a previously requested resource Synopsis void devm_release_resource struct device * dev struct resource * new Arguments dev device for which to release the resource new descriptor of the resource to release Description Releases a resource previously requested using devm_request_resource. MTRR Handling LINUX Kernel Hackers Manual July 2017 mtrr_add 9 4.1.27 mtrr_add Add a memory type region Synopsis int mtrr_add unsigned long base unsigned long size unsigned int type bool increment Arguments base Physical base address of region size Physical size of region type Type of MTRR desired increment If this is true do usage counting on the region Description Memory type region registers control the caching on newer Intel and non Intel processors. This function allows drivers to request an MTRR is added. The details and hardware specifics of each processor's implementation are hidden from the caller, but nevertheless the caller should expect to need to provide a power of two size on an equivalent power of two boundary. If the region cannot be added either because all regions are in use or the CPU cannot support it a negative value is returned. On success the register number for this entry is returned, but should be treated as a cookie only. On a multiprocessor machine the changes are made to all processors. This is required on x86 by the Intel processors. The available types are MTRR_TYPE_UNCACHABLE - No caching MTRR_TYPE_WRBACK - Write data back in bursts whenever MTRR_TYPE_WRCOMB - Write data back soon but allow bursts MTRR_TYPE_WRTHROUGH - Cache reads but not writes BUGS Needs a quiet flag for the cases where drivers do not mind failures and do not wish system log messages to be sent. LINUX Kernel Hackers Manual July 2017 mtrr_del 9 4.1.27 mtrr_del delete a memory type region Synopsis int mtrr_del int reg unsigned long base unsigned long size Arguments reg Register returned by mtrr_add base Physical base address size Size of region Description If register is supplied then base and size are ignored. This is how drivers should call it. Releases an MTRR region. If the usage count drops to zero the register is freed and the region returns to default state. On success the register is returned, on failure a negative error code. LINUX Kernel Hackers Manual July 2017 arch_phys_wc_add 9 4.1.27 arch_phys_wc_add add a WC MTRR and handle errors if PAT is unavailable Synopsis int arch_phys_wc_add unsigned long base unsigned long size Arguments base Physical base address size Size of region Description If PAT is available, this does nothing. If PAT is unavailable, it attempts to add a WC MTRR covering size bytes starting at base and logs an error if this fails. Drivers must store the return value to pass to mtrr_del_wc_if_needed, but drivers should not try to interpret that return value. PCI Support Library LINUX Kernel Hackers Manual July 2017 pci_bus_max_busnr 9 4.1.27 pci_bus_max_busnr returns maximum PCI bus number of given bus' children Synopsis unsigned char pci_bus_max_busnr struct pci_bus * bus Arguments bus pointer to PCI bus structure to search Description Given a PCI bus, returns the highest PCI bus number present in the set including the given PCI bus and its list of child PCI buses. LINUX Kernel Hackers Manual July 2017 pci_find_capability 9 4.1.27 pci_find_capability query for devices' capabilities Synopsis int pci_find_capability struct pci_dev * dev int cap Arguments dev PCI device to query cap capability code Description Tell if a device supports a given PCI capability. Returns the address of the requested capability structure within the device's PCI configuration space or 0 in case the device does not support it. Possible values for cap: PCI_CAP_ID_PM Power Management PCI_CAP_ID_AGP Accelerated Graphics Port PCI_CAP_ID_VPD Vital Product Data PCI_CAP_ID_SLOTID Slot Identification PCI_CAP_ID_MSI Message Signalled Interrupts PCI_CAP_ID_CHSWP CompactPCI HotSwap PCI_CAP_ID_PCIX PCI-X PCI_CAP_ID_EXP PCI Express LINUX Kernel Hackers Manual July 2017 pci_bus_find_capability 9 4.1.27 pci_bus_find_capability query for devices' capabilities Synopsis int pci_bus_find_capability struct pci_bus * bus unsigned int devfn int cap Arguments bus the PCI bus to query devfn PCI device to query cap capability code Description Like pci_find_capability but works for pci devices that do not have a pci_dev structure set up yet. Returns the address of the requested capability structure within the device's PCI configuration space or 0 in case the device does not support it. LINUX Kernel Hackers Manual July 2017 pci_find_next_ext_capability 9 4.1.27 pci_find_next_ext_capability Find an extended capability Synopsis int pci_find_next_ext_capability struct pci_dev * dev int start int cap Arguments dev PCI device to query start address at which to start looking (0 to start at beginning of list) cap capability code Description Returns the address of the next matching extended capability structure within the device's PCI configuration space or 0 if the device does not support it. Some capabilities can occur several times, e.g., the vendor-specific capability, and this provides a way to find them all. LINUX Kernel Hackers Manual July 2017 pci_find_ext_capability 9 4.1.27 pci_find_ext_capability Find an extended capability Synopsis int pci_find_ext_capability struct pci_dev * dev int cap Arguments dev PCI device to query cap capability code Description Returns the address of the requested extended capability structure within the device's PCI configuration space or 0 if the device does not support it. Possible values for cap: PCI_EXT_CAP_ID_ERR Advanced Error Reporting PCI_EXT_CAP_ID_VC Virtual Channel PCI_EXT_CAP_ID_DSN Device Serial Number PCI_EXT_CAP_ID_PWR Power Budgeting LINUX Kernel Hackers Manual July 2017 pci_find_next_ht_capability 9 4.1.27 pci_find_next_ht_capability query a device's Hypertransport capabilities Synopsis int pci_find_next_ht_capability struct pci_dev * dev int pos int ht_cap Arguments dev PCI device to query pos Position from which to continue searching ht_cap Hypertransport capability code Description To be used in conjunction with pci_find_ht_capability to search for all capabilities matching ht_cap. pos should always be a value returned from pci_find_ht_capability. NB. To be 100% safe against broken PCI devices, the caller should take steps to avoid an infinite loop. LINUX Kernel Hackers Manual July 2017 pci_find_ht_capability 9 4.1.27 pci_find_ht_capability query a device's Hypertransport capabilities Synopsis int pci_find_ht_capability struct pci_dev * dev int ht_cap Arguments dev PCI device to query ht_cap Hypertransport capability code Description Tell if a device supports a given Hypertransport capability. Returns an address within the device's PCI configuration space or 0 in case the device does not support the request capability. The address points to the PCI capability, of type PCI_CAP_ID_HT, which has a Hypertransport capability matching ht_cap. LINUX Kernel Hackers Manual July 2017 pci_find_parent_resource 9 4.1.27 pci_find_parent_resource return resource region of parent bus of given region Synopsis struct resource * pci_find_parent_resource const struct pci_dev * dev struct resource * res Arguments dev PCI device structure contains resources to be searched res child resource record for which parent is sought Description For given resource region of given device, return the resource region of parent bus the given region is contained in. LINUX Kernel Hackers Manual July 2017 __pci_complete_power_transition 9 4.1.27 __pci_complete_power_transition Complete power transition of a PCI device Synopsis int __pci_complete_power_transition struct pci_dev * dev pci_power_t state Arguments dev PCI device to handle. state State to put the device into. Description This function should not be called directly by device drivers. LINUX Kernel Hackers Manual July 2017 pci_set_power_state 9 4.1.27 pci_set_power_state Set the power state of a PCI device Synopsis int pci_set_power_state struct pci_dev * dev pci_power_t state Arguments dev PCI device to handle. state PCI power state (D0, D1, D2, D3hot) to put the device into. Description Transition a device to a new power state, using the platform firmware and/or the device's PCI PM registers. RETURN VALUE -EINVAL if the requested state is invalid. -EIO if device does not support PCI PM or its PM capabilities register has a wrong version, or device doesn't support the requested state. 0 if device already is in the requested state. 0 if device's power state has been successfully changed. LINUX Kernel Hackers Manual July 2017 pci_choose_state 9 4.1.27 pci_choose_state Choose the power state of a PCI device Synopsis pci_power_t pci_choose_state struct pci_dev * dev pm_message_t state Arguments dev PCI device to be suspended state target sleep state for the whole system. This is the value that is passed to suspend function. Description Returns PCI power state suitable for given device and given system message. LINUX Kernel Hackers Manual July 2017 pci_save_state 9 4.1.27 pci_save_state save the PCI configuration space of a device before suspending Synopsis int pci_save_state struct pci_dev * dev Arguments dev - PCI device that we're dealing with LINUX Kernel Hackers Manual July 2017 pci_restore_state 9 4.1.27 pci_restore_state Restore the saved state of a PCI device Synopsis void pci_restore_state struct pci_dev * dev Arguments dev - PCI device that we're dealing with LINUX Kernel Hackers Manual July 2017 pci_store_saved_state 9 4.1.27 pci_store_saved_state Allocate and return an opaque struct containing the device saved state. Synopsis struct pci_saved_state * pci_store_saved_state struct pci_dev * dev Arguments dev PCI device that we're dealing with Description Return NULL if no state or error. LINUX Kernel Hackers Manual July 2017 pci_load_saved_state 9 4.1.27 pci_load_saved_state Reload the provided save state into struct pci_dev. Synopsis int pci_load_saved_state struct pci_dev * dev struct pci_saved_state * state Arguments dev PCI device that we're dealing with state Saved state returned from pci_store_saved_state LINUX Kernel Hackers Manual July 2017 pci_load_and_free_saved_state 9 4.1.27 pci_load_and_free_saved_state Reload the save state pointed to by state, and free the memory allocated for it. Synopsis int pci_load_and_free_saved_state struct pci_dev * dev struct pci_saved_state ** state Arguments dev PCI device that we're dealing with state Pointer to saved state returned from pci_store_saved_state LINUX Kernel Hackers Manual July 2017 pci_reenable_device 9 4.1.27 pci_reenable_device Resume abandoned device Synopsis int pci_reenable_device struct pci_dev * dev Arguments dev PCI device to be resumed Description Note this function is a backend of pci_default_resume and is not supposed to be called by normal code, write proper resume handler and use it instead. LINUX Kernel Hackers Manual July 2017 pci_enable_device_io 9 4.1.27 pci_enable_device_io Initialize a device for use with IO space Synopsis int pci_enable_device_io struct pci_dev * dev Arguments dev PCI device to be initialized Description Initialize device before it's used by a driver. Ask low-level code to enable I/O resources. Wake up the device if it was suspended. Beware, this function can fail. LINUX Kernel Hackers Manual July 2017 pci_enable_device_mem 9 4.1.27 pci_enable_device_mem Initialize a device for use with Memory space Synopsis int pci_enable_device_mem struct pci_dev * dev Arguments dev PCI device to be initialized Description Initialize device before it's used by a driver. Ask low-level code to enable Memory resources. Wake up the device if it was suspended. Beware, this function can fail. LINUX Kernel Hackers Manual July 2017 pci_enable_device 9 4.1.27 pci_enable_device Initialize device before it's used by a driver. Synopsis int pci_enable_device struct pci_dev * dev Arguments dev PCI device to be initialized Description Initialize device before it's used by a driver. Ask low-level code to enable I/O and memory. Wake up the device if it was suspended. Beware, this function can fail. Note we don't actually enable the device many times if we call this function repeatedly (we just increment the count). LINUX Kernel Hackers Manual July 2017 pcim_enable_device 9 4.1.27 pcim_enable_device Managed pci_enable_device Synopsis int pcim_enable_device struct pci_dev * pdev Arguments pdev PCI device to be initialized Description Managed pci_enable_device. LINUX Kernel Hackers Manual July 2017 pcim_pin_device 9 4.1.27 pcim_pin_device Pin managed PCI device Synopsis void pcim_pin_device struct pci_dev * pdev Arguments pdev PCI device to pin Description Pin managed PCI device pdev. Pinned device won't be disabled on driver detach. pdev must have been enabled with pcim_enable_device. LINUX Kernel Hackers Manual July 2017 pci_disable_device 9 4.1.27 pci_disable_device Disable PCI device after use Synopsis void pci_disable_device struct pci_dev * dev Arguments dev PCI device to be disabled Description Signal to the system that the PCI device is not in use by the system anymore. This only involves disabling PCI bus-mastering, if active. Note we don't actually disable the device until all callers of pci_enable_device have called pci_disable_device. LINUX Kernel Hackers Manual July 2017 pci_set_pcie_reset_state 9 4.1.27 pci_set_pcie_reset_state set reset state for device dev Synopsis int pci_set_pcie_reset_state struct pci_dev * dev enum pcie_reset_state state Arguments dev the PCIe device reset state Reset state to enter into Description Sets the PCI reset state for the device. LINUX Kernel Hackers Manual July 2017 pci_pme_capable 9 4.1.27 pci_pme_capable check the capability of PCI device to generate PME# Synopsis bool pci_pme_capable struct pci_dev * dev pci_power_t state Arguments dev PCI device to handle. state PCI state from which device will issue PME#. LINUX Kernel Hackers Manual July 2017 pci_pme_active 9 4.1.27 pci_pme_active enable or disable PCI device's PME# function Synopsis void pci_pme_active struct pci_dev * dev bool enable Arguments dev PCI device to handle. enable 'true' to enable PME# generation; 'false' to disable it. Description The caller must verify that the device is capable of generating PME# before calling this function with enable equal to 'true'. LINUX Kernel Hackers Manual July 2017 __pci_enable_wake 9 4.1.27 __pci_enable_wake enable PCI device as wakeup event source Synopsis int __pci_enable_wake struct pci_dev * dev pci_power_t state bool runtime bool enable Arguments dev PCI device affected state PCI state from which device will issue wakeup events runtime True if the events are to be generated at run time enable True to enable event generation; false to disable Description This enables the device as a wakeup event source, or disables it. When such events involves platform-specific hooks, those hooks are called automatically by this routine. Devices with legacy power management (no standard PCI PM capabilities) always require such platform hooks. RETURN VALUE 0 is returned on success -EINVAL is returned if device is not supposed to wake up the system Error code depending on the platform is returned if both the platform and the native mechanism fail to enable the generation of wake-up events LINUX Kernel Hackers Manual July 2017 pci_wake_from_d3 9 4.1.27 pci_wake_from_d3 enable/disable device to wake up from D3_hot or D3_cold Synopsis int pci_wake_from_d3 struct pci_dev * dev bool enable Arguments dev PCI device to prepare enable True to enable wake-up event generation; false to disable Description Many drivers want the device to wake up the system from D3_hot or D3_cold and this function allows them to set that up cleanly - pci_enable_wake should not be called twice in a row to enable wake-up due to PCI PM vs ACPI ordering constraints. This function only returns error code if the device is not capable of generating PME# from both D3_hot and D3_cold, and the platform is unable to enable wake-up power for it. LINUX Kernel Hackers Manual July 2017 pci_prepare_to_sleep 9 4.1.27 pci_prepare_to_sleep prepare PCI device for system-wide transition into a sleep state Synopsis int pci_prepare_to_sleep struct pci_dev * dev Arguments dev Device to handle. Description Choose the power state appropriate for the device depending on whether it can wake up the system and/or is power manageable by the platform (PCI_D3hot is the default) and put the device into that state. LINUX Kernel Hackers Manual July 2017 pci_back_from_sleep 9 4.1.27 pci_back_from_sleep turn PCI device on during system-wide transition into working state Synopsis int pci_back_from_sleep struct pci_dev * dev Arguments dev Device to handle. Description Disable device's system wake-up capability and put it into D0. LINUX Kernel Hackers Manual July 2017 pci_dev_run_wake 9 4.1.27 pci_dev_run_wake Check if device can generate run-time wake-up events. Synopsis bool pci_dev_run_wake struct pci_dev * dev Arguments dev Device to check. Description Return true if the device itself is capable of generating wake-up events (through the platform or using the native PCIe PME) or if the device supports PME and one of its upstream bridges can generate wake-up events. LINUX Kernel Hackers Manual July 2017 pci_common_swizzle 9 4.1.27 pci_common_swizzle swizzle INTx all the way to root bridge Synopsis u8 pci_common_swizzle struct pci_dev * dev u8 * pinp Arguments dev the PCI device pinp pointer to the INTx pin value (1=INTA, 2=INTB, 3=INTD, 4=INTD) Description Perform INTx swizzling for a device. This traverses through all PCI-to-PCI bridges all the way up to a PCI root bus. LINUX Kernel Hackers Manual July 2017 pci_release_region 9 4.1.27 pci_release_region Release a PCI bar Synopsis void pci_release_region struct pci_dev * pdev int bar Arguments pdev PCI device whose resources were previously reserved by pci_request_region bar BAR to release Description Releases the PCI I/O and memory resources previously reserved by a successful call to pci_request_region. Call this function only after all use of the PCI regions has ceased. LINUX Kernel Hackers Manual July 2017 pci_request_region 9 4.1.27 pci_request_region Reserve PCI I/O and memory resource Synopsis int pci_request_region struct pci_dev * pdev int bar const char * res_name Arguments pdev PCI device whose resources are to be reserved bar BAR to be reserved res_name Name to be associated with resource Description Mark the PCI region associated with PCI device pdev BAR bar as being reserved by owner res_name. Do not access any address inside the PCI regions unless this call returns successfully. Returns 0 on success, or EBUSY on error. A warning message is also printed on failure. LINUX Kernel Hackers Manual July 2017 pci_request_region_exclusive 9 4.1.27 pci_request_region_exclusive Reserved PCI I/O and memory resource Synopsis int pci_request_region_exclusive struct pci_dev * pdev int bar const char * res_name Arguments pdev PCI device whose resources are to be reserved bar BAR to be reserved res_name Name to be associated with resource. Description Mark the PCI region associated with PCI device pdev BR bar as being reserved by owner res_name. Do not access any address inside the PCI regions unless this call returns successfully. Returns 0 on success, or EBUSY on error. A warning message is also printed on failure. The key difference that _exclusive makes it that userspace is explicitly not allowed to map the resource via /dev/mem or sysfs. LINUX Kernel Hackers Manual July 2017 pci_release_selected_regions 9 4.1.27 pci_release_selected_regions Release selected PCI I/O and memory resources Synopsis void pci_release_selected_regions struct pci_dev * pdev int bars Arguments pdev PCI device whose resources were previously reserved bars Bitmask of BARs to be released Description Release selected PCI I/O and memory resources previously reserved. Call this function only after all use of the PCI regions has ceased. LINUX Kernel Hackers Manual July 2017 pci_request_selected_regions 9 4.1.27 pci_request_selected_regions Reserve selected PCI I/O and memory resources Synopsis int pci_request_selected_regions struct pci_dev * pdev int bars const char * res_name Arguments pdev PCI device whose resources are to be reserved bars Bitmask of BARs to be requested res_name Name to be associated with resource LINUX Kernel Hackers Manual July 2017 pci_release_regions 9 4.1.27 pci_release_regions Release reserved PCI I/O and memory resources Synopsis void pci_release_regions struct pci_dev * pdev Arguments pdev PCI device whose resources were previously reserved by pci_request_regions Description Releases all PCI I/O and memory resources previously reserved by a successful call to pci_request_regions. Call this function only after all use of the PCI regions has ceased. LINUX Kernel Hackers Manual July 2017 pci_request_regions 9 4.1.27 pci_request_regions Reserved PCI I/O and memory resources Synopsis int pci_request_regions struct pci_dev * pdev const char * res_name Arguments pdev PCI device whose resources are to be reserved res_name Name to be associated with resource. Description Mark all PCI regions associated with PCI device pdev as being reserved by owner res_name. Do not access any address inside the PCI regions unless this call returns successfully. Returns 0 on success, or EBUSY on error. A warning message is also printed on failure. LINUX Kernel Hackers Manual July 2017 pci_request_regions_exclusive 9 4.1.27 pci_request_regions_exclusive Reserved PCI I/O and memory resources Synopsis int pci_request_regions_exclusive struct pci_dev * pdev const char * res_name Arguments pdev PCI device whose resources are to be reserved res_name Name to be associated with resource. Description Mark all PCI regions associated with PCI device pdev as being reserved by owner res_name. Do not access any address inside the PCI regions unless this call returns successfully. pci_request_regions_exclusive will mark the region so that /dev/mem and the sysfs MMIO access will not be allowed. Returns 0 on success, or EBUSY on error. A warning message is also printed on failure. LINUX Kernel Hackers Manual July 2017 pci_set_master 9 4.1.27 pci_set_master enables bus-mastering for device dev Synopsis void pci_set_master struct pci_dev * dev Arguments dev the PCI device to enable Description Enables bus-mastering on the device and calls pcibios_set_master to do the needed arch specific settings. LINUX Kernel Hackers Manual July 2017 pci_clear_master 9 4.1.27 pci_clear_master disables bus-mastering for device dev Synopsis void pci_clear_master struct pci_dev * dev Arguments dev the PCI device to disable LINUX Kernel Hackers Manual July 2017 pci_set_cacheline_size 9 4.1.27 pci_set_cacheline_size ensure the CACHE_LINE_SIZE register is programmed Synopsis int pci_set_cacheline_size struct pci_dev * dev Arguments dev the PCI device for which MWI is to be enabled Description Helper function for pci_set_mwi. Originally copied from drivers/net/acenic.c. Copyright 1998-2001 by Jes Sorensen, <jestrained-monkey.org>. RETURNS An appropriate -ERRNO error value on error, or zero for success. LINUX Kernel Hackers Manual July 2017 pci_set_mwi 9 4.1.27 pci_set_mwi enables memory-write-invalidate PCI transaction Synopsis int pci_set_mwi struct pci_dev * dev Arguments dev the PCI device for which MWI is enabled Description Enables the Memory-Write-Invalidate transaction in PCI_COMMAND. RETURNS An appropriate -ERRNO error value on error, or zero for success. LINUX Kernel Hackers Manual July 2017 pci_try_set_mwi 9 4.1.27 pci_try_set_mwi enables memory-write-invalidate PCI transaction Synopsis int pci_try_set_mwi struct pci_dev * dev Arguments dev the PCI device for which MWI is enabled Description Enables the Memory-Write-Invalidate transaction in PCI_COMMAND. Callers are not required to check the return value. RETURNS An appropriate -ERRNO error value on error, or zero for success. LINUX Kernel Hackers Manual July 2017 pci_clear_mwi 9 4.1.27 pci_clear_mwi disables Memory-Write-Invalidate for device dev Synopsis void pci_clear_mwi struct pci_dev * dev Arguments dev the PCI device to disable Description Disables PCI Memory-Write-Invalidate transaction on the device LINUX Kernel Hackers Manual July 2017 pci_intx 9 4.1.27 pci_intx enables/disables PCI INTx for device dev Synopsis void pci_intx struct pci_dev * pdev int enable Arguments pdev the PCI device to operate on enable boolean: whether to enable or disable PCI INTx Description Enables/disables PCI INTx for device dev LINUX Kernel Hackers Manual July 2017 pci_intx_mask_supported 9 4.1.27 pci_intx_mask_supported probe for INTx masking support Synopsis bool pci_intx_mask_supported struct pci_dev * dev Arguments dev the PCI device to operate on Description Check if the device dev support INTx masking via the config space command word. LINUX Kernel Hackers Manual July 2017 pci_check_and_mask_intx 9 4.1.27 pci_check_and_mask_intx mask INTx on pending interrupt Synopsis bool pci_check_and_mask_intx struct pci_dev * dev Arguments dev the PCI device to operate on Description Check if the device dev has its INTx line asserted, mask it and return true in that case. False is returned if not interrupt was pending. LINUX Kernel Hackers Manual July 2017 pci_check_and_unmask_intx 9 4.1.27 pci_check_and_unmask_intx unmask INTx if no interrupt is pending Synopsis bool pci_check_and_unmask_intx struct pci_dev * dev Arguments dev the PCI device to operate on Description Check if the device dev has its INTx line asserted, unmask it if not and return true. False is returned and the mask remains active if there was still an interrupt pending. LINUX Kernel Hackers Manual July 2017 pci_msi_off 9 4.1.27 pci_msi_off disables any MSI or MSI-X capabilities Synopsis void pci_msi_off struct pci_dev * dev Arguments dev the PCI device to operate on Description If you want to use MSI, see pci_enable_msi and friends. This is a lower-level primitive that allows us to disable MSI operation at the device level. LINUX Kernel Hackers Manual July 2017 pci_wait_for_pending_transaction 9 4.1.27 pci_wait_for_pending_transaction waits for pending transaction Synopsis int pci_wait_for_pending_transaction struct pci_dev * dev Arguments dev the PCI device to operate on Description Return 0 if transaction is pending 1 otherwise. LINUX Kernel Hackers Manual July 2017 pci_reset_bridge_secondary_bus 9 4.1.27 pci_reset_bridge_secondary_bus Reset the secondary bus on a PCI bridge. Synopsis void pci_reset_bridge_secondary_bus struct pci_dev * dev Arguments dev Bridge device Description Use the bridge control register to assert reset on the secondary bus. Devices on the secondary bus are left in power-on state. LINUX Kernel Hackers Manual July 2017 __pci_reset_function 9 4.1.27 __pci_reset_function reset a PCI device function Synopsis int __pci_reset_function struct pci_dev * dev Arguments dev PCI device to reset Description Some devices allow an individual function to be reset without affecting other functions in the same device. The PCI device must be responsive to PCI config space in order to use this function. The device function is presumed to be unused when this function is called. Resetting the device will make the contents of PCI configuration space random, so any caller of this must be prepared to reinitialise the device including MSI, bus mastering, BARs, decoding IO and memory spaces, etc. Returns 0 if the device function was successfully reset or negative if the device doesn't support resetting a single function. LINUX Kernel Hackers Manual July 2017 __pci_reset_function_locked 9 4.1.27 __pci_reset_function_locked reset a PCI device function while holding the dev mutex lock. Synopsis int __pci_reset_function_locked struct pci_dev * dev Arguments dev PCI device to reset Description Some devices allow an individual function to be reset without affecting other functions in the same device. The PCI device must be responsive to PCI config space in order to use this function. The device function is presumed to be unused and the caller is holding the device mutex lock when this function is called. Resetting the device will make the contents of PCI configuration space random, so any caller of this must be prepared to reinitialise the device including MSI, bus mastering, BARs, decoding IO and memory spaces, etc. Returns 0 if the device function was successfully reset or negative if the device doesn't support resetting a single function. LINUX Kernel Hackers Manual July 2017 pci_reset_function 9 4.1.27 pci_reset_function quiesce and reset a PCI device function Synopsis int pci_reset_function struct pci_dev * dev Arguments dev PCI device to reset Description Some devices allow an individual function to be reset without affecting other functions in the same device. The PCI device must be responsive to PCI config space in order to use this function. This function does not just reset the PCI portion of a device, but clears all the state associated with the device. This function differs from __pci_reset_function in that it saves and restores device state over the reset. Returns 0 if the device function was successfully reset or negative if the device doesn't support resetting a single function. LINUX Kernel Hackers Manual July 2017 pci_try_reset_function 9 4.1.27 pci_try_reset_function quiesce and reset a PCI device function Synopsis int pci_try_reset_function struct pci_dev * dev Arguments dev PCI device to reset Description Same as above, except return -EAGAIN if unable to lock device. LINUX Kernel Hackers Manual July 2017 pci_probe_reset_slot 9 4.1.27 pci_probe_reset_slot probe whether a PCI slot can be reset Synopsis int pci_probe_reset_slot struct pci_slot * slot Arguments slot PCI slot to probe Description Return 0 if slot can be reset, negative if a slot reset is not supported. LINUX Kernel Hackers Manual July 2017 pci_reset_slot 9 4.1.27 pci_reset_slot reset a PCI slot Synopsis int pci_reset_slot struct pci_slot * slot Arguments slot PCI slot to reset Description A PCI bus may host multiple slots, each slot may support a reset mechanism independent of other slots. For instance, some slots may support slot power control. In the case of a 1:1 bus to slot architecture, this function may wrap the bus reset to avoid spurious slot related events such as hotplug. Generally a slot reset should be attempted before a bus reset. All of the function of the slot and any subordinate buses behind the slot are reset through this function. PCI config space of all devices in the slot and behind the slot is saved before and restored after reset. Return 0 on success, non-zero on error. LINUX Kernel Hackers Manual July 2017 pci_try_reset_slot 9 4.1.27 pci_try_reset_slot Try to reset a PCI slot Synopsis int pci_try_reset_slot struct pci_slot * slot Arguments slot PCI slot to reset Description Same as above except return -EAGAIN if the slot cannot be locked LINUX Kernel Hackers Manual July 2017 pci_probe_reset_bus 9 4.1.27 pci_probe_reset_bus probe whether a PCI bus can be reset Synopsis int pci_probe_reset_bus struct pci_bus * bus Arguments bus PCI bus to probe Description Return 0 if bus can be reset, negative if a bus reset is not supported. LINUX Kernel Hackers Manual July 2017 pci_reset_bus 9 4.1.27 pci_reset_bus reset a PCI bus Synopsis int pci_reset_bus struct pci_bus * bus Arguments bus top level PCI bus to reset Description Do a bus reset on the given bus and any subordinate buses, saving and restoring state of all devices. Return 0 on success, non-zero on error. LINUX Kernel Hackers Manual July 2017 pci_try_reset_bus 9 4.1.27 pci_try_reset_bus Try to reset a PCI bus Synopsis int pci_try_reset_bus struct pci_bus * bus Arguments bus top level PCI bus to reset Description Same as above except return -EAGAIN if the bus cannot be locked LINUX Kernel Hackers Manual July 2017 pcix_get_max_mmrbc 9 4.1.27 pcix_get_max_mmrbc get PCI-X maximum designed memory read byte count Synopsis int pcix_get_max_mmrbc struct pci_dev * dev Arguments dev PCI device to query Returns mmrbc maximum designed memory read count in bytes or appropriate error value. LINUX Kernel Hackers Manual July 2017 pcix_get_mmrbc 9 4.1.27 pcix_get_mmrbc get PCI-X maximum memory read byte count Synopsis int pcix_get_mmrbc struct pci_dev * dev Arguments dev PCI device to query Returns mmrbc maximum memory read count in bytes or appropriate error value. LINUX Kernel Hackers Manual July 2017 pcix_set_mmrbc 9 4.1.27 pcix_set_mmrbc set PCI-X maximum memory read byte count Synopsis int pcix_set_mmrbc struct pci_dev * dev int mmrbc Arguments dev PCI device to query mmrbc maximum memory read count in bytes valid values are 512, 1024, 2048, 4096 Description If possible sets maximum memory read byte count, some bridges have erratas that prevent this. LINUX Kernel Hackers Manual July 2017 pcie_get_readrq 9 4.1.27 pcie_get_readrq get PCI Express read request size Synopsis int pcie_get_readrq struct pci_dev * dev Arguments dev PCI device to query Description Returns maximum memory read request in bytes or appropriate error value. LINUX Kernel Hackers Manual July 2017 pcie_set_readrq 9 4.1.27 pcie_set_readrq set PCI Express maximum memory read request Synopsis int pcie_set_readrq struct pci_dev * dev int rq Arguments dev PCI device to query rq maximum memory read count in bytes valid values are 128, 256, 512, 1024, 2048, 4096 Description If possible sets maximum memory read request in bytes LINUX Kernel Hackers Manual July 2017 pcie_get_mps 9 4.1.27 pcie_get_mps get PCI Express maximum payload size Synopsis int pcie_get_mps struct pci_dev * dev Arguments dev PCI device to query Description Returns maximum payload size in bytes LINUX Kernel Hackers Manual July 2017 pcie_set_mps 9 4.1.27 pcie_set_mps set PCI Express maximum payload size Synopsis int pcie_set_mps struct pci_dev * dev int mps Arguments dev PCI device to query mps maximum payload size in bytes valid values are 128, 256, 512, 1024, 2048, 4096 Description If possible sets maximum payload size LINUX Kernel Hackers Manual July 2017 pcie_get_minimum_link 9 4.1.27 pcie_get_minimum_link determine minimum link settings of a PCI device Synopsis int pcie_get_minimum_link struct pci_dev * dev enum pci_bus_speed * speed enum pcie_link_width * width Arguments dev PCI device to query speed storage for minimum speed width storage for minimum width Description This function will walk up the PCI device chain and determine the minimum link width and speed of the device. LINUX Kernel Hackers Manual July 2017 pci_select_bars 9 4.1.27 pci_select_bars Make BAR mask from the type of resource Synopsis int pci_select_bars struct pci_dev * dev unsigned long flags Arguments dev the PCI device for which BAR mask is made flags resource type mask to be selected Description This helper routine makes bar mask from the type of resource. LINUX Kernel Hackers Manual July 2017 pci_add_dynid 9 4.1.27 pci_add_dynid add a new PCI device ID to this driver and re-probe devices Synopsis int pci_add_dynid struct pci_driver * drv unsigned int vendor unsigned int device unsigned int subvendor unsigned int subdevice unsigned int class unsigned int class_mask unsigned long driver_data Arguments drv target pci driver vendor PCI vendor ID device PCI device ID subvendor PCI subvendor ID subdevice PCI subdevice ID class PCI class class_mask PCI class mask driver_data private driver data Description Adds a new dynamic pci device ID to this driver and causes the driver to probe for all devices again. drv must have been registered prior to calling this function. CONTEXT Does GFP_KERNEL allocation. RETURNS 0 on success, -errno on failure. LINUX Kernel Hackers Manual July 2017 pci_match_id 9 4.1.27 pci_match_id See if a pci device matches a given pci_id table Synopsis const struct pci_device_id * pci_match_id const struct pci_device_id * ids struct pci_dev * dev Arguments ids array of PCI device id structures to search in dev the PCI device structure to match against. Description Used by a driver to check whether a PCI device present in the system is in its list of supported devices. Returns the matching pci_device_id structure or NULL if there is no match. Deprecated, don't use this as it will not catch any dynamic ids that a driver might want to check for. LINUX Kernel Hackers Manual July 2017 __pci_register_driver 9 4.1.27 __pci_register_driver register a new pci driver Synopsis int __pci_register_driver struct pci_driver * drv struct module * owner const char * mod_name Arguments drv the driver structure to register owner owner module of drv mod_name module name string Description Adds the driver structure to the list of registered drivers. Returns a negative value on error, otherwise 0. If no error occurred, the driver remains registered even if no device was claimed during registration. LINUX Kernel Hackers Manual July 2017 pci_unregister_driver 9 4.1.27 pci_unregister_driver unregister a pci driver Synopsis void pci_unregister_driver struct pci_driver * drv Arguments drv the driver structure to unregister Description Deletes the driver structure from the list of registered PCI drivers, gives it a chance to clean up by calling its remove function for each device it was responsible for, and marks those devices as driverless. LINUX Kernel Hackers Manual July 2017 pci_dev_driver 9 4.1.27 pci_dev_driver get the pci_driver of a device Synopsis struct pci_driver * pci_dev_driver const struct pci_dev * dev Arguments dev the device to query Description Returns the appropriate pci_driver structure or NULL if there is no registered driver for the device. LINUX Kernel Hackers Manual July 2017 pci_dev_get 9 4.1.27 pci_dev_get increments the reference count of the pci device structure Synopsis struct pci_dev * pci_dev_get struct pci_dev * dev Arguments dev the device being referenced Description Each live reference to a device should be refcounted. Drivers for PCI devices should normally record such references in their probe methods, when they bind to a device, and release them by calling pci_dev_put, in their disconnect methods. A pointer to the device with the incremented reference counter is returned. LINUX Kernel Hackers Manual July 2017 pci_dev_put 9 4.1.27 pci_dev_put release a use of the pci device structure Synopsis void pci_dev_put struct pci_dev * dev Arguments dev device that's been disconnected Description Must be called when a user of a device is finished with it. When the last user of the device calls this function, the memory of the device is freed. LINUX Kernel Hackers Manual July 2017 pci_stop_and_remove_bus_device 9 4.1.27 pci_stop_and_remove_bus_device remove a PCI device and any children Synopsis void pci_stop_and_remove_bus_device struct pci_dev * dev Arguments dev the device to remove Description Remove a PCI device from the device lists, informing the drivers that the device has been removed. We also remove any subordinate buses and children in a depth-first manner. For each device we remove, delete the device structure from the device lists, remove the /proc entry, and notify userspace (/sbin/hotplug). LINUX Kernel Hackers Manual July 2017 pci_find_bus 9 4.1.27 pci_find_bus locate PCI bus from a given domain and bus number Synopsis struct pci_bus * pci_find_bus int domain int busnr Arguments domain number of PCI domain to search busnr number of desired PCI bus Description Given a PCI bus number and domain number, the desired PCI bus is located in the global list of PCI buses. If the bus is found, a pointer to its data structure is returned. If no bus is found, NULL is returned. LINUX Kernel Hackers Manual July 2017 pci_find_next_bus 9 4.1.27 pci_find_next_bus begin or continue searching for a PCI bus Synopsis struct pci_bus * pci_find_next_bus const struct pci_bus * from Arguments from Previous PCI bus found, or NULL for new search. Description Iterates through the list of known PCI buses. A new search is initiated by passing NULL as the from argument. Otherwise if from is not NULL, searches continue from next device on the global list. LINUX Kernel Hackers Manual July 2017 pci_get_slot 9 4.1.27 pci_get_slot locate PCI device for a given PCI slot Synopsis struct pci_dev * pci_get_slot struct pci_bus * bus unsigned int devfn Arguments bus PCI bus on which desired PCI device resides devfn encodes number of PCI slot in which the desired PCI device resides and the logical device number within that slot in case of multi-function devices. Description Given a PCI bus and slot/function number, the desired PCI device is located in the list of PCI devices. If the device is found, its reference count is increased and this function returns a pointer to its data structure. The caller must decrement the reference count by calling pci_dev_put. If no device is found, NULL is returned. LINUX Kernel Hackers Manual July 2017 pci_get_domain_bus_and_slot 9 4.1.27 pci_get_domain_bus_and_slot locate PCI device for a given PCI domain (segment), bus, and slot Synopsis struct pci_dev * pci_get_domain_bus_and_slot int domain unsigned int bus unsigned int devfn Arguments domain PCI domain/segment on which the PCI device resides. bus PCI bus on which desired PCI device resides devfn encodes number of PCI slot in which the desired PCI device resides and the logical device number within that slot in case of multi-function devices. Description Given a PCI domain, bus, and slot/function number, the desired PCI device is located in the list of PCI devices. If the device is found, its reference count is increased and this function returns a pointer to its data structure. The caller must decrement the reference count by calling pci_dev_put. If no device is found, NULL is returned. LINUX Kernel Hackers Manual July 2017 pci_get_subsys 9 4.1.27 pci_get_subsys begin or continue searching for a PCI device by vendor/subvendor/device/subdevice id Synopsis struct pci_dev * pci_get_subsys unsigned int vendor unsigned int device unsigned int ss_vendor unsigned int ss_device struct pci_dev * from Arguments vendor PCI vendor id to match, or PCI_ANY_ID to match all vendor ids device PCI device id to match, or PCI_ANY_ID to match all device ids ss_vendor PCI subsystem vendor id to match, or PCI_ANY_ID to match all vendor ids ss_device PCI subsystem device id to match, or PCI_ANY_ID to match all device ids from Previous PCI device found in search, or NULL for new search. Description Iterates through the list of known PCI devices. If a PCI device is found with a matching vendor, device, ss_vendor and ss_device, a pointer to its device structure is returned, and the reference count to the device is incremented. Otherwise, NULL is returned. A new search is initiated by passing NULL as the from argument. Otherwise if from is not NULL, searches continue from next device on the global list. The reference count for from is always decremented if it is not NULL. LINUX Kernel Hackers Manual July 2017 pci_get_device 9 4.1.27 pci_get_device begin or continue searching for a PCI device by vendor/device id Synopsis struct pci_dev * pci_get_device unsigned int vendor unsigned int device struct pci_dev * from Arguments vendor PCI vendor id to match, or PCI_ANY_ID to match all vendor ids device PCI device id to match, or PCI_ANY_ID to match all device ids from Previous PCI device found in search, or NULL for new search. Description Iterates through the list of known PCI devices. If a PCI device is found with a matching vendor and device, the reference count to the device is incremented and a pointer to its device structure is returned. Otherwise, NULL is returned. A new search is initiated by passing NULL as the from argument. Otherwise if from is not NULL, searches continue from next device on the global list. The reference count for from is always decremented if it is not NULL. LINUX Kernel Hackers Manual July 2017 pci_get_class 9 4.1.27 pci_get_class begin or continue searching for a PCI device by class Synopsis struct pci_dev * pci_get_class unsigned int class struct pci_dev * from Arguments class search for a PCI device with this class designation from Previous PCI device found in search, or NULL for new search. Description Iterates through the list of known PCI devices. If a PCI device is found with a matching class, the reference count to the device is incremented and a pointer to its device structure is returned. Otherwise, NULL is returned. A new search is initiated by passing NULL as the from argument. Otherwise if from is not NULL, searches continue from next device on the global list. The reference count for from is always decremented if it is not NULL. LINUX Kernel Hackers Manual July 2017 pci_dev_present 9 4.1.27 pci_dev_present Returns 1 if device matching the device list is present, 0 if not. Synopsis int pci_dev_present const struct pci_device_id * ids Arguments ids A pointer to a null terminated list of struct pci_device_id structures that describe the type of PCI device the caller is trying to find. Obvious fact You do not have a reference to any device that might be found by this function, so if that device is removed from the system right after this function is finished, the value will be stale. Use this function to find devices that are usually built into a system, or for a general hint as to if another device happens to be present at this specific moment in time. LINUX Kernel Hackers Manual July 2017 pci_msi_vec_count 9 4.1.27 pci_msi_vec_count Return the number of MSI vectors a device can send Synopsis int pci_msi_vec_count struct pci_dev * dev Arguments dev device to report about Description This function returns the number of MSI vectors a device requested via Multiple Message Capable register. It returns a negative errno if the device is not capable sending MSI interrupts. Otherwise, the call succeeds and returns a power of two, up to a maximum of 2^5 (32), according to the MSI specification. LINUX Kernel Hackers Manual July 2017 pci_msix_vec_count 9 4.1.27 pci_msix_vec_count return the number of device's MSI-X table entries Synopsis int pci_msix_vec_count struct pci_dev * dev Arguments dev pointer to the pci_dev data structure of MSI-X device function This function returns the number of device's MSI-X table entries and therefore the number of MSI-X vectors device is capable of sending. It returns a negative errno if the device is not capable of sending MSI-X interrupts. LINUX Kernel Hackers Manual July 2017 pci_enable_msix 9 4.1.27 pci_enable_msix configure device's MSI-X capability structure Synopsis int pci_enable_msix struct pci_dev * dev struct msix_entry * entries int nvec Arguments dev pointer to the pci_dev data structure of MSI-X device function entries pointer to an array of MSI-X entries nvec number of MSI-X irqs requested for allocation by device driver Description Setup the MSI-X capability structure of device function with the number of requested irqs upon its software driver call to request for MSI-X mode enabled on its hardware device function. A return of zero indicates the successful configuration of MSI-X capability structure with new allocated MSI-X irqs. A return of < 0 indicates a failure. Or a return of > 0 indicates that driver request is exceeding the number of irqs or MSI-X vectors available. Driver should use the returned value to re-send its request. LINUX Kernel Hackers Manual July 2017 pci_msi_enabled 9 4.1.27 pci_msi_enabled is MSI enabled? Synopsis int pci_msi_enabled void Arguments void no arguments Description Returns true if MSI has not been disabled by the command-line option pci=nomsi. LINUX Kernel Hackers Manual July 2017 pci_enable_msi_range 9 4.1.27 pci_enable_msi_range configure device's MSI capability structure Synopsis int pci_enable_msi_range struct pci_dev * dev int minvec int maxvec Arguments dev device to configure minvec minimal number of interrupts to configure maxvec maximum number of interrupts to configure Description This function tries to allocate a maximum possible number of interrupts in a range between minvec and maxvec. It returns a negative errno if an error occurs. If it succeeds, it returns the actual number of interrupts allocated and updates the dev's irq member to the lowest new interrupt number; the other interrupt numbers allocated to this device are consecutive. LINUX Kernel Hackers Manual July 2017 pci_enable_msix_range 9 4.1.27 pci_enable_msix_range configure device's MSI-X capability structure Synopsis int pci_enable_msix_range struct pci_dev * dev struct msix_entry * entries int minvec int maxvec Arguments dev pointer to the pci_dev data structure of MSI-X device function entries pointer to an array of MSI-X entries minvec minimum number of MSI-X irqs requested maxvec maximum number of MSI-X irqs requested Description Setup the MSI-X capability structure of device function with a maximum possible number of interrupts in the range between minvec and maxvec upon its software driver call to request for MSI-X mode enabled on its hardware device function. It returns a negative errno if an error occurs. If it succeeds, it returns the actual number of interrupts allocated and indicates the successful configuration of MSI-X capability structure with new allocated MSI-X interrupts. LINUX Kernel Hackers Manual July 2017 pci_bus_alloc_resource 9 4.1.27 pci_bus_alloc_resource allocate a resource from a parent bus Synopsis int pci_bus_alloc_resource struct pci_bus * bus struct resource * res resource_size_t size resource_size_t align resource_size_t min unsigned long type_mask resource_size_t (*alignf) void *, const struct resource *, resource_size_t, resource_size_t void * alignf_data Arguments bus PCI bus res resource to allocate size size of resource to allocate align alignment of resource to allocate min minimum /proc/iomem address to allocate type_mask IORESOURCE_* type flags alignf resource alignment function alignf_data data argument for resource alignment function Description Given the PCI bus a device resides on, the size, minimum address, alignment and type, try to find an acceptable resource allocation for a specific device resource. LINUX Kernel Hackers Manual July 2017 pci_bus_add_device 9 4.1.27 pci_bus_add_device start driver for a single device Synopsis void pci_bus_add_device struct pci_dev * dev Arguments dev device to add Description This adds add sysfs entries and start device drivers LINUX Kernel Hackers Manual July 2017 pci_bus_add_devices 9 4.1.27 pci_bus_add_devices start driver for PCI devices Synopsis void pci_bus_add_devices const struct pci_bus * bus Arguments bus bus to check for new devices Description Start driver for PCI devices and add some sysfs entries. LINUX Kernel Hackers Manual July 2017 pci_bus_set_ops 9 4.1.27 pci_bus_set_ops Set raw operations of pci bus Synopsis struct pci_ops * pci_bus_set_ops struct pci_bus * bus struct pci_ops * ops Arguments bus pci bus struct ops new raw operations Description Return previous raw operations LINUX Kernel Hackers Manual July 2017 pci_read_vpd 9 4.1.27 pci_read_vpd Read one entry from Vital Product Data Synopsis ssize_t pci_read_vpd struct pci_dev * dev loff_t pos size_t count void * buf Arguments dev pci device struct pos offset in vpd space count number of bytes to read buf pointer to where to store result LINUX Kernel Hackers Manual July 2017 pci_write_vpd 9 4.1.27 pci_write_vpd Write entry to Vital Product Data Synopsis ssize_t pci_write_vpd struct pci_dev * dev loff_t pos size_t count const void * buf Arguments dev pci device struct pos offset in vpd space count number of bytes to write buf buffer containing write data LINUX Kernel Hackers Manual July 2017 pci_cfg_access_lock 9 4.1.27 pci_cfg_access_lock Lock PCI config reads/writes Synopsis void pci_cfg_access_lock struct pci_dev * dev Arguments dev pci device struct Description When access is locked, any userspace reads or writes to config space and concurrent lock requests will sleep until access is allowed via pci_cfg_access_unlocked again. LINUX Kernel Hackers Manual July 2017 pci_cfg_access_trylock 9 4.1.27 pci_cfg_access_trylock try to lock PCI config reads/writes Synopsis bool pci_cfg_access_trylock struct pci_dev * dev Arguments dev pci device struct Description Same as pci_cfg_access_lock, but will return 0 if access is already locked, 1 otherwise. This function can be used from atomic contexts. LINUX Kernel Hackers Manual July 2017 pci_cfg_access_unlock 9 4.1.27 pci_cfg_access_unlock Unlock PCI config reads/writes Synopsis void pci_cfg_access_unlock struct pci_dev * dev Arguments dev pci device struct Description This function allows PCI config accesses to resume. LINUX Kernel Hackers Manual July 2017 pci_lost_interrupt 9 4.1.27 pci_lost_interrupt reports a lost PCI interrupt Synopsis enum pci_lost_interrupt_reason pci_lost_interrupt struct pci_dev * pdev Arguments pdev device whose interrupt is lost Description The primary function of this routine is to report a lost interrupt in a standard way which users can recognise (instead of blaming the driver). Returns a suggestion for fixing it (although the driver is not required to act on this). LINUX Kernel Hackers Manual July 2017 __ht_create_irq 9 4.1.27 __ht_create_irq create an irq and attach it to a device. Synopsis int __ht_create_irq struct pci_dev * dev int idx ht_irq_update_t * update Arguments dev The hypertransport device to find the irq capability on. idx Which of the possible irqs to attach to. update Function to be called when changing the htirq message Description The irq number of the new irq or a negative error value is returned. LINUX Kernel Hackers Manual July 2017 ht_create_irq 9 4.1.27 ht_create_irq create an irq and attach it to a device. Synopsis int ht_create_irq struct pci_dev * dev int idx Arguments dev The hypertransport device to find the irq capability on. idx Which of the possible irqs to attach to. Description ht_create_irq needs to be called for all hypertransport devices that generate irqs. The irq number of the new irq or a negative error value is returned. LINUX Kernel Hackers Manual July 2017 ht_destroy_irq 9 4.1.27 ht_destroy_irq destroy an irq created with ht_create_irq Synopsis void ht_destroy_irq unsigned int irq Arguments irq irq to be destroyed Description This reverses ht_create_irq removing the specified irq from existence. The irq should be free before this happens. LINUX Kernel Hackers Manual July 2017 pci_scan_slot 9 4.1.27 pci_scan_slot scan a PCI slot on a bus for devices. Synopsis int pci_scan_slot struct pci_bus * bus int devfn Arguments bus PCI bus to scan devfn slot number to scan (must have zero function.) Description Scan a PCI slot on the specified PCI bus for devices, adding discovered devices to the bus->devices list. New devices will not have is_added set. Returns the number of new devices found. LINUX Kernel Hackers Manual July 2017 pci_rescan_bus 9 4.1.27 pci_rescan_bus scan a PCI bus for devices. Synopsis unsigned int pci_rescan_bus struct pci_bus * bus Arguments bus PCI bus to scan Description Scan a PCI bus and child buses for new devices, adds them, and enables them. Returns the max number of subordinate bus discovered. LINUX Kernel Hackers Manual July 2017 pci_create_slot 9 4.1.27 pci_create_slot create or increment refcount for physical PCI slot Synopsis struct pci_slot * pci_create_slot struct pci_bus * parent int slot_nr const char * name struct hotplug_slot * hotplug Arguments parent struct pci_bus of parent bridge slot_nr PCI_SLOT(pci_dev->devfn) or -1 for placeholder name user visible string presented in /sys/bus/pci/slots/<name> hotplug set if caller is hotplug driver, NULL otherwise Description PCI slots have first class attributes such as address, speed, width, and a struct pci_slot is used to manage them. This interface will either return a new struct pci_slot to the caller, or if the pci_slot already exists, its refcount will be incremented. Slots are uniquely identified by a pci_bus, slot_nr tuple. There are known platforms with broken firmware that assign the same name to multiple slots. Workaround these broken platforms by renaming the slots on behalf of the caller. If firmware assigns name N to multiple slots The first slot is assigned N The second slot is assigned N-1 The third slot is assigned N-2 etc. Placeholder slots In most cases, pci_bus, slot_nr will be sufficient to uniquely identify a slot. There is one notable exception - pSeries (rpaphp), where the slot_nr cannot be determined until a device is actually inserted into the slot. In this scenario, the caller may pass -1 for slot_nr. The following semantics are imposed when the caller passes slot_nr == -1. First, we no longer check for an existing struct pci_slot, as there may be many slots with slot_nr of -1. The other change in semantics is user-visible, which is the 'address' parameter presented in sysfs will consist solely of a dddd bb tuple, where dddd is the PCI domain of the struct pci_bus and bb is the bus number. In other words, the devfn of the 'placeholder' slot will not be displayed. LINUX Kernel Hackers Manual July 2017 pci_destroy_slot 9 4.1.27 pci_destroy_slot decrement refcount for physical PCI slot Synopsis void pci_destroy_slot struct pci_slot * slot Arguments slot struct pci_slot to decrement Description struct pci_slot is refcounted, so destroying them is really easy; we just call kobject_put on its kobj and let our release methods do the rest. LINUX Kernel Hackers Manual July 2017 pci_hp_create_module_link 9 4.1.27 pci_hp_create_module_link create symbolic link to the hotplug driver module. Synopsis void pci_hp_create_module_link struct pci_slot * pci_slot Arguments pci_slot struct pci_slot Description Helper function for pci_hotplug_core.c to create symbolic link to the hotplug driver module. LINUX Kernel Hackers Manual July 2017 pci_hp_remove_module_link 9 4.1.27 pci_hp_remove_module_link remove symbolic link to the hotplug driver module. Synopsis void pci_hp_remove_module_link struct pci_slot * pci_slot Arguments pci_slot struct pci_slot Description Helper function for pci_hotplug_core.c to remove symbolic link to the hotplug driver module. LINUX Kernel Hackers Manual July 2017 pci_enable_rom 9 4.1.27 pci_enable_rom enable ROM decoding for a PCI device Synopsis int pci_enable_rom struct pci_dev * pdev Arguments pdev PCI device to enable Description Enable ROM decoding on dev. This involves simply turning on the last bit of the PCI ROM BAR. Note that some cards may share address decoders between the ROM and other resources, so enabling it may disable access to MMIO registers or other card memory. LINUX Kernel Hackers Manual July 2017 pci_disable_rom 9 4.1.27 pci_disable_rom disable ROM decoding for a PCI device Synopsis void pci_disable_rom struct pci_dev * pdev Arguments pdev PCI device to disable Description Disable ROM decoding on a PCI device by turning off the last bit in the ROM BAR. LINUX Kernel Hackers Manual July 2017 pci_map_rom 9 4.1.27 pci_map_rom map a PCI ROM to kernel space Synopsis void __iomem * pci_map_rom struct pci_dev * pdev size_t * size Arguments pdev pointer to pci device struct size pointer to receive size of pci window over ROM Return kernel virtual pointer to image of ROM Map a PCI ROM into kernel space. If ROM is boot video ROM, the shadow BIOS copy will be returned instead of the actual ROM. LINUX Kernel Hackers Manual July 2017 pci_unmap_rom 9 4.1.27 pci_unmap_rom unmap the ROM from kernel space Synopsis void pci_unmap_rom struct pci_dev * pdev void __iomem * rom Arguments pdev pointer to pci device struct rom virtual address of the previous mapping Description Remove a mapping of a previously mapped ROM LINUX Kernel Hackers Manual July 2017 pci_platform_rom 9 4.1.27 pci_platform_rom provides a pointer to any ROM image provided by the platform Synopsis void __iomem * pci_platform_rom struct pci_dev * pdev size_t * size Arguments pdev pointer to pci device struct size pointer to receive size of pci window over ROM LINUX Kernel Hackers Manual July 2017 pci_enable_sriov 9 4.1.27 pci_enable_sriov enable the SR-IOV capability Synopsis int pci_enable_sriov struct pci_dev * dev int nr_virtfn Arguments dev the PCI device nr_virtfn number of virtual functions to enable Description Returns 0 on success, or negative on failure. LINUX Kernel Hackers Manual July 2017 pci_disable_sriov 9 4.1.27 pci_disable_sriov disable the SR-IOV capability Synopsis void pci_disable_sriov struct pci_dev * dev Arguments dev the PCI device LINUX Kernel Hackers Manual July 2017 pci_num_vf 9 4.1.27 pci_num_vf return number of VFs associated with a PF device_release_driver Synopsis int pci_num_vf struct pci_dev * dev Arguments dev the PCI device Description Returns number of VFs, or 0 if SR-IOV is not enabled. LINUX Kernel Hackers Manual July 2017 pci_vfs_assigned 9 4.1.27 pci_vfs_assigned returns number of VFs are assigned to a guest Synopsis int pci_vfs_assigned struct pci_dev * dev Arguments dev the PCI device Description Returns number of VFs belonging to this device that are assigned to a guest. If device is not a physical function returns 0. LINUX Kernel Hackers Manual July 2017 pci_sriov_set_totalvfs 9 4.1.27 pci_sriov_set_totalvfs - reduce the TotalVFs available Synopsis int pci_sriov_set_totalvfs struct pci_dev * dev u16 numvfs Arguments dev the PCI PF device numvfs number that should be used for TotalVFs supported Description Should be called from PF driver's probe routine with device's mutex held. Returns 0 if PF is an SRIOV-capable device and value of numvfs valid. If not a PF return -ENOSYS; if numvfs is invalid return -EINVAL; if VFs already enabled, return -EBUSY. LINUX Kernel Hackers Manual July 2017 pci_sriov_get_totalvfs 9 4.1.27 pci_sriov_get_totalvfs - get total VFs supported on this device Synopsis int pci_sriov_get_totalvfs struct pci_dev * dev Arguments dev the PCI PF device Description For a PCIe device with SRIOV support, return the PCIe SRIOV capability value of TotalVFs or the value of driver_max_VFs if the driver reduced it. Otherwise 0. LINUX Kernel Hackers Manual July 2017 pci_read_legacy_io 9 4.1.27 pci_read_legacy_io read byte(s) from legacy I/O port space Synopsis ssize_t pci_read_legacy_io struct file * filp struct kobject * kobj struct bin_attribute * bin_attr char * buf loff_t off size_t count Arguments filp open sysfs file kobj kobject corresponding to file to read from bin_attr struct bin_attribute for this file buf buffer to store results off offset into legacy I/O port space count number of bytes to read Description Reads 1, 2, or 4 bytes from legacy I/O port space using an arch specific callback routine (pci_legacy_read). LINUX Kernel Hackers Manual July 2017 pci_write_legacy_io 9 4.1.27 pci_write_legacy_io write byte(s) to legacy I/O port space Synopsis ssize_t pci_write_legacy_io struct file * filp struct kobject * kobj struct bin_attribute * bin_attr char * buf loff_t off size_t count Arguments filp open sysfs file kobj kobject corresponding to file to read from bin_attr struct bin_attribute for this file buf buffer containing value to be written off offset into legacy I/O port space count number of bytes to write Description Writes 1, 2, or 4 bytes from legacy I/O port space using an arch specific callback routine (pci_legacy_write). LINUX Kernel Hackers Manual July 2017 pci_mmap_legacy_mem 9 4.1.27 pci_mmap_legacy_mem map legacy PCI memory into user memory space Synopsis int pci_mmap_legacy_mem struct file * filp struct kobject * kobj struct bin_attribute * attr struct vm_area_struct * vma Arguments filp open sysfs file kobj kobject corresponding to device to be mapped attr struct bin_attribute for this file vma struct vm_area_struct passed to mmap Description Uses an arch specific callback, pci_mmap_legacy_mem_page_range, to mmap legacy memory space (first meg of bus space) into application virtual memory space. LINUX Kernel Hackers Manual July 2017 pci_mmap_legacy_io 9 4.1.27 pci_mmap_legacy_io map legacy PCI IO into user memory space Synopsis int pci_mmap_legacy_io struct file * filp struct kobject * kobj struct bin_attribute * attr struct vm_area_struct * vma Arguments filp open sysfs file kobj kobject corresponding to device to be mapped attr struct bin_attribute for this file vma struct vm_area_struct passed to mmap Description Uses an arch specific callback, pci_mmap_legacy_io_page_range, to mmap legacy IO space (first meg of bus space) into application virtual memory space. Returns -ENOSYS if the operation isn't supported LINUX Kernel Hackers Manual July 2017 pci_adjust_legacy_attr 9 4.1.27 pci_adjust_legacy_attr adjustment of legacy file attributes Synopsis void pci_adjust_legacy_attr struct pci_bus * b enum pci_mmap_state mmap_type Arguments b bus to create files under mmap_type I/O port or memory Description Stub implementation. Can be overridden by arch if necessary. LINUX Kernel Hackers Manual July 2017 pci_create_legacy_files 9 4.1.27 pci_create_legacy_files create legacy I/O port and memory files Synopsis void pci_create_legacy_files struct pci_bus * b Arguments b bus to create files under Description Some platforms allow access to legacy I/O port and ISA memory space on a per-bus basis. This routine creates the files and ties them into their associated read, write and mmap files from pci-sysfs.c On error unwind, but don't propagate the error to the caller as it is ok to set up the PCI bus without these files. LINUX Kernel Hackers Manual July 2017 pci_mmap_resource 9 4.1.27 pci_mmap_resource map a PCI resource into user memory space Synopsis int pci_mmap_resource struct kobject * kobj struct bin_attribute * attr struct vm_area_struct * vma int write_combine Arguments kobj kobject for mapping attr struct bin_attribute for the file being mapped vma struct vm_area_struct passed into the mmap write_combine 1 for write_combine mapping Description Use the regular PCI mapping routines to map a PCI resource into userspace. LINUX Kernel Hackers Manual July 2017 pci_remove_resource_files 9 4.1.27 pci_remove_resource_files cleanup resource files Synopsis void pci_remove_resource_files struct pci_dev * pdev Arguments pdev dev to cleanup Description If we created resource files for pdev, remove them from sysfs and free their resources. LINUX Kernel Hackers Manual July 2017 pci_create_resource_files 9 4.1.27 pci_create_resource_files create resource files in sysfs for dev Synopsis int pci_create_resource_files struct pci_dev * pdev Arguments pdev dev in question Description Walk the resources in pdev creating files for each resource available. LINUX Kernel Hackers Manual July 2017 pci_write_rom 9 4.1.27 pci_write_rom used to enable access to the PCI ROM display Synopsis ssize_t pci_write_rom struct file * filp struct kobject * kobj struct bin_attribute * bin_attr char * buf loff_t off size_t count Arguments filp sysfs file kobj kernel object handle bin_attr struct bin_attribute for this file buf user input off file offset count number of byte in input Description writing anything except 0 enables it LINUX Kernel Hackers Manual July 2017 pci_read_rom 9 4.1.27 pci_read_rom read a PCI ROM Synopsis ssize_t pci_read_rom struct file * filp struct kobject * kobj struct bin_attribute * bin_attr char * buf loff_t off size_t count Arguments filp sysfs file kobj kernel object handle bin_attr struct bin_attribute for this file buf where to put the data we read from the ROM off file offset count number of bytes to read Description Put count bytes starting at off into buf from the ROM in the PCI device corresponding to kobj. LINUX Kernel Hackers Manual July 2017 pci_remove_sysfs_dev_files 9 4.1.27 pci_remove_sysfs_dev_files cleanup PCI specific sysfs files Synopsis void pci_remove_sysfs_dev_files struct pci_dev * pdev Arguments pdev device whose entries we should free Description Cleanup when pdev is removed from sysfs. PCI Hotplug Support Library LINUX Kernel Hackers Manual July 2017 __pci_hp_register 9 4.1.27 __pci_hp_register register a hotplug_slot with the PCI hotplug subsystem Synopsis int __pci_hp_register struct hotplug_slot * slot struct pci_bus * bus int devnr const char * name struct module * owner const char * mod_name Arguments slot pointer to the struct hotplug_slot to register bus bus this slot is on devnr device number name name registered with kobject core owner caller module owner mod_name caller module name Description Registers a hotplug slot with the pci hotplug subsystem, which will allow userspace interaction to the slot. Returns 0 if successful, anything else for an error. LINUX Kernel Hackers Manual July 2017 pci_hp_deregister 9 4.1.27 pci_hp_deregister deregister a hotplug_slot with the PCI hotplug subsystem Synopsis int pci_hp_deregister struct hotplug_slot * hotplug Arguments hotplug pointer to the struct hotplug_slot to deregister Description The slot must have been registered with the pci hotplug subsystem previously with a call to pci_hp_register. Returns 0 if successful, anything else for an error. LINUX Kernel Hackers Manual July 2017 pci_hp_change_slot_info 9 4.1.27 pci_hp_change_slot_info changes the slot's information structure in the core Synopsis int pci_hp_change_slot_info struct hotplug_slot * hotplug struct hotplug_slot_info * info Arguments hotplug pointer to the slot whose info has changed info pointer to the info copy into the slot's info structure Description slot must have been registered with the pci hotplug subsystem previously with a call to pci_hp_register. Returns 0 if successful, anything else for an error. Firmware Interfaces DMI Interfaces LINUX Kernel Hackers Manual July 2017 dmi_check_system 9 4.1.27 dmi_check_system check system DMI data Synopsis int dmi_check_system const struct dmi_system_id * list Arguments list array of dmi_system_id structures to match against All non-null elements of the list must match their slot's (field index's) data (i.e., each list string must be a substring of the specified DMI slot's string data) to be considered a successful match. Description Walk the blacklist table running matching functions until someone returns non zero or we hit the end. Callback function is called for each successful match. Returns the number of matches. LINUX Kernel Hackers Manual July 2017 dmi_first_match 9 4.1.27 dmi_first_match find dmi_system_id structure matching system DMI data Synopsis const struct dmi_system_id * dmi_first_match const struct dmi_system_id * list Arguments list array of dmi_system_id structures to match against All non-null elements of the list must match their slot's (field index's) data (i.e., each list string must be a substring of the specified DMI slot's string data) to be considered a successful match. Description Walk the blacklist table until the first match is found. Return the pointer to the matching entry or NULL if there's no match. LINUX Kernel Hackers Manual July 2017 dmi_get_system_info 9 4.1.27 dmi_get_system_info return DMI data value Synopsis const char * dmi_get_system_info int field Arguments field data index (see enum dmi_field) Description Returns one DMI data value, can be used to perform complex DMI data checks. LINUX Kernel Hackers Manual July 2017 dmi_name_in_vendors 9 4.1.27 dmi_name_in_vendors Check if string is in the DMI system or board vendor name Synopsis int dmi_name_in_vendors const char * str Arguments str Case sensitive Name LINUX Kernel Hackers Manual July 2017 dmi_find_device 9 4.1.27 dmi_find_device find onboard device by type/name Synopsis const struct dmi_device * dmi_find_device int type const char * name const struct dmi_device * from Arguments type device type or DMI_DEV_TYPE_ANY to match all device types name device name string or NULL to match all from previous device found in search, or NULL for new search. Description Iterates through the list of known onboard devices. If a device is found with a matching vendor and device, a pointer to its device structure is returned. Otherwise, NULL is returned. A new search is initiated by passing NULL as the from argument. If from is not NULL, searches continue from next device. LINUX Kernel Hackers Manual July 2017 dmi_get_date 9 4.1.27 dmi_get_date parse a DMI date Synopsis bool dmi_get_date int field int * yearp int * monthp int * dayp Arguments field data index (see enum dmi_field) yearp optional out parameter for the year monthp optional out parameter for the month dayp optional out parameter for the day Description The date field is assumed to be in the form resembling [mm[/dd]]/yy[yy] and the result is stored in the out parameters any or all of which can be omitted. If the field doesn't exist, all out parameters are set to zero and false is returned. Otherwise, true is returned with any invalid part of date set to zero. On return, year, month and day are guaranteed to be in the range of [0,9999], [0,12] and [0,31] respectively. LINUX Kernel Hackers Manual July 2017 dmi_walk 9 4.1.27 dmi_walk Walk the DMI table and get called back for every record Synopsis int dmi_walk void (*decode) const struct dmi_header *, void * void * private_data Arguments decode Callback function private_data Private data to be passed to the callback function Description Returns -1 when the DMI table can't be reached, 0 on success. LINUX Kernel Hackers Manual July 2017 dmi_match 9 4.1.27 dmi_match compare a string to the dmi field (if exists) Synopsis bool dmi_match enum dmi_field f const char * str Arguments f DMI field identifier str string to compare the DMI field to Description Returns true if the requested field equals to the str (including NULL). EDD Interfaces LINUX Kernel Hackers Manual July 2017 edd_show_raw_data 9 4.1.27 edd_show_raw_data copies raw data to buffer for userspace to parse Synopsis ssize_t edd_show_raw_data struct edd_device * edev char * buf Arguments edev target edd_device buf output buffer Returns number of bytes written, or -EINVAL on failure LINUX Kernel Hackers Manual July 2017 edd_release 9 4.1.27 edd_release free edd structure Synopsis void edd_release struct kobject * kobj Arguments kobj kobject of edd structure Description This is called when the refcount of the edd structure reaches 0. This should happen right after we unregister, but just in case, we use the release callback anyway. LINUX Kernel Hackers Manual July 2017 edd_dev_is_type 9 4.1.27 edd_dev_is_type is this EDD device a 'type' device? Synopsis int edd_dev_is_type struct edd_device * edev const char * type Arguments edev target edd_device type a host bus or interface identifier string per the EDD spec Description Returns 1 (TRUE) if it is a 'type' device, 0 otherwise. LINUX Kernel Hackers Manual July 2017 edd_get_pci_dev 9 4.1.27 edd_get_pci_dev finds pci_dev that matches edev Synopsis struct pci_dev * edd_get_pci_dev struct edd_device * edev Arguments edev edd_device Description Returns pci_dev if found, or NULL LINUX Kernel Hackers Manual July 2017 edd_init 9 4.1.27 edd_init creates sysfs tree of EDD data Synopsis int edd_init void Arguments void no arguments Security Framework LINUX Kernel Hackers Manual July 2017 security_init 9 4.1.27 security_init initializes the security framework Synopsis int security_init void Arguments void no arguments Description This should be called early in the kernel initialization sequence. LINUX Kernel Hackers Manual July 2017 security_module_enable 9 4.1.27 security_module_enable Load given security module on boot ? Synopsis int security_module_enable struct security_operations * ops Arguments ops a pointer to the struct security_operations that is to be checked. Description Each LSM must pass this method before registering its own operations to avoid security registration races. This method may also be used to check if your LSM is currently loaded during kernel initialization. Return true if -The passed LSM is the one chosen by user at boot time, -or the passed LSM is configured as the default and the user did not choose an alternate LSM at boot time. Otherwise, return false. LINUX Kernel Hackers Manual July 2017 register_security 9 4.1.27 register_security registers a security framework with the kernel Synopsis int register_security struct security_operations * ops Arguments ops a pointer to the struct security_options that is to be registered Description This function allows a security module to register itself with the kernel security subsystem. Some rudimentary checking is done on the ops value passed to this function. You'll need to check first if your LSM is allowed to register its ops by calling security_module_enable(ops). If there is already a security module registered with the kernel, an error will be returned. Otherwise 0 is returned on success. LINUX Kernel Hackers Manual July 2017 securityfs_create_file 9 4.1.27 securityfs_create_file create a file in the securityfs filesystem Synopsis struct dentry * securityfs_create_file const char * name umode_t mode struct dentry * parent void * data const struct file_operations * fops Arguments name a pointer to a string containing the name of the file to create. mode the permission that the file should have parent a pointer to the parent dentry for this file. This should be a directory dentry if set. If this parameter is NULL, then the file will be created in the root of the securityfs filesystem. data a pointer to something that the caller will want to get to later on. The inode.i_private pointer will point to this value on the open call. fops a pointer to a struct file_operations that should be used for this file. Description This is the basic create a file function for securityfs. It allows for a wide range of flexibility in creating a file, or a directory (if you want to create a directory, the securityfs_create_dir function is recommended to be used instead). This function returns a pointer to a dentry if it succeeds. This pointer must be passed to the securityfs_remove function when the file is to be removed (no automatic cleanup happens if your module is unloaded, you are responsible here). If an error occurs, the function will return the error value (via ERR_PTR). If securityfs is not enabled in the kernel, the value -ENODEV is returned. LINUX Kernel Hackers Manual July 2017 securityfs_create_dir 9 4.1.27 securityfs_create_dir create a directory in the securityfs filesystem Synopsis struct dentry * securityfs_create_dir const char * name struct dentry * parent Arguments name a pointer to a string containing the name of the directory to create. parent a pointer to the parent dentry for this file. This should be a directory dentry if set. If this parameter is NULL, then the directory will be created in the root of the securityfs filesystem. Description This function creates a directory in securityfs with the given name. This function returns a pointer to a dentry if it succeeds. This pointer must be passed to the securityfs_remove function when the file is to be removed (no automatic cleanup happens if your module is unloaded, you are responsible here). If an error occurs, NULL will be returned. If securityfs is not enabled in the kernel, the value -ENODEV is returned. It is not wise to check for this value, but rather, check for NULL or !NULL instead as to eliminate the need for #ifdef in the calling code. LINUX Kernel Hackers Manual July 2017 securityfs_remove 9 4.1.27 securityfs_remove removes a file or directory from the securityfs filesystem Synopsis void securityfs_remove struct dentry * dentry Arguments dentry a pointer to a the dentry of the file or directory to be removed. Description This function removes a file or directory in securityfs that was previously created with a call to another securityfs function (like securityfs_create_file or variants thereof.) This function is required to be called in order for the file to be removed. No automatic cleanup of files will happen when a module is removed; you are responsible here. Audit Interfaces LINUX Kernel Hackers Manual July 2017 audit_log_start 9 4.1.27 audit_log_start obtain an audit buffer Synopsis struct audit_buffer * audit_log_start struct audit_context * ctx gfp_t gfp_mask int type Arguments ctx audit_context (may be NULL) gfp_mask type of allocation type audit message type Description Returns audit_buffer pointer on success or NULL on error. Obtain an audit buffer. This routine does locking to obtain the audit buffer, but then no locking is required for calls to audit_log_*format. If the task (ctx) is a task that is currently in a syscall, then the syscall is marked as auditable and an audit record will be written at syscall exit. If there is no associated task, then task context (ctx) should be NULL. LINUX Kernel Hackers Manual July 2017 audit_log_format 9 4.1.27 audit_log_format format a message into the audit buffer. Synopsis void audit_log_format struct audit_buffer * ab const char * fmt ... Arguments ab audit_buffer fmt format string @...: optional parameters matching fmt string ... variable arguments Description All the work is done in audit_log_vformat. LINUX Kernel Hackers Manual July 2017 audit_log_end 9 4.1.27 audit_log_end end one audit record Synopsis void audit_log_end struct audit_buffer * ab Arguments ab the audit_buffer Description netlink_unicast cannot be called inside an irq context because it blocks (last arg, flags, is not set to MSG_DONTWAIT), so the audit buffer is placed on a queue and a tasklet is scheduled to remove them from the queue outside the irq context. May be called in any context. LINUX Kernel Hackers Manual July 2017 audit_log 9 4.1.27 audit_log Log an audit record Synopsis void audit_log struct audit_context * ctx gfp_t gfp_mask int type const char * fmt ... Arguments ctx audit context gfp_mask type of allocation type audit message type fmt format string to use @...: variable parameters matching the format string ... variable arguments Description This is a convenience function that calls audit_log_start, audit_log_vformat, and audit_log_end. It may be called in any context. LINUX Kernel Hackers Manual July 2017 audit_log_secctx 9 4.1.27 audit_log_secctx Converts and logs SELinux context Synopsis void audit_log_secctx struct audit_buffer * ab u32 secid Arguments ab audit_buffer secid security number Description This is a helper function that calls security_secid_to_secctx to convert secid to secctx and then adds the (converted) SELinux context to the audit log by calling audit_log_format, thus also preventing leak of internal secid to userspace. If secid cannot be converted audit_panic is called. LINUX Kernel Hackers Manual July 2017 audit_alloc 9 4.1.27 audit_alloc allocate an audit context block for a task Synopsis int audit_alloc struct task_struct * tsk Arguments tsk task Description Filter on the task information and allocate a per-task audit context if necessary. Doing so turns on system call auditing for the specified task. This is called from copy_process, so no lock is needed. LINUX Kernel Hackers Manual July 2017 __audit_free 9 4.1.27 __audit_free free a per-task audit context Synopsis void __audit_free struct task_struct * tsk Arguments tsk task whose audit context block to free Description Called from copy_process and do_exit LINUX Kernel Hackers Manual July 2017 __audit_syscall_entry 9 4.1.27 __audit_syscall_entry fill in an audit record at syscall entry Synopsis void __audit_syscall_entry int major unsigned long a1 unsigned long a2 unsigned long a3 unsigned long a4 Arguments major major syscall type (function) a1 additional syscall register 1 a2 additional syscall register 2 a3 additional syscall register 3 a4 additional syscall register 4 Description Fill in audit context at syscall entry. This only happens if the audit context was created when the task was created and the state or filters demand the audit context be built. If the state from the per-task filter or from the per-syscall filter is AUDIT_RECORD_CONTEXT, then the record will be written at syscall exit time (otherwise, it will only be written if another part of the kernel requests that it be written). LINUX Kernel Hackers Manual July 2017 __audit_syscall_exit 9 4.1.27 __audit_syscall_exit deallocate audit context after a system call Synopsis void __audit_syscall_exit int success long return_code Arguments success success value of the syscall return_code return value of the syscall Description Tear down after system call. If the audit context has been marked as auditable (either because of the AUDIT_RECORD_CONTEXT state from filtering, or because some other part of the kernel wrote an audit message), then write out the syscall information. In call cases, free the names stored from getname. LINUX Kernel Hackers Manual July 2017 __audit_reusename 9 4.1.27 __audit_reusename fill out filename with info from existing entry Synopsis struct filename * __audit_reusename const __user char * uptr Arguments uptr userland ptr to pathname Description Search the audit_names list for the current audit context. If there is an existing entry with a matching uptr then return the filename associated with that audit_name. If not, return NULL. LINUX Kernel Hackers Manual July 2017 __audit_getname 9 4.1.27 __audit_getname add a name to the list Synopsis void __audit_getname struct filename * name Arguments name name to add Description Add a name to the list of audit names for this context. Called from fs/namei.c:getname. LINUX Kernel Hackers Manual July 2017 __audit_inode 9 4.1.27 __audit_inode store the inode and device from a lookup Synopsis void __audit_inode struct filename * name const struct dentry * dentry unsigned int flags Arguments name name being audited dentry dentry being audited flags attributes for this particular entry LINUX Kernel Hackers Manual July 2017 auditsc_get_stamp 9 4.1.27 auditsc_get_stamp get local copies of audit_context values Synopsis int auditsc_get_stamp struct audit_context * ctx struct timespec * t unsigned int * serial Arguments ctx audit_context for the task t timespec to store time recorded in the audit_context serial serial value that is recorded in the audit_context Description Also sets the context as auditable. LINUX Kernel Hackers Manual July 2017 audit_set_loginuid 9 4.1.27 audit_set_loginuid set current task's audit_context loginuid Synopsis int audit_set_loginuid kuid_t loginuid Arguments loginuid loginuid value Description Returns 0. Called (set) from fs/proc/base.c::proc_loginuid_write. LINUX Kernel Hackers Manual July 2017 __audit_mq_open 9 4.1.27 __audit_mq_open record audit data for a POSIX MQ open Synopsis void __audit_mq_open int oflag umode_t mode struct mq_attr * attr Arguments oflag open flag mode mode bits attr queue attributes LINUX Kernel Hackers Manual July 2017 __audit_mq_sendrecv 9 4.1.27 __audit_mq_sendrecv record audit data for a POSIX MQ timed send/receive Synopsis void __audit_mq_sendrecv mqd_t mqdes size_t msg_len unsigned int msg_prio const struct timespec * abs_timeout Arguments mqdes MQ descriptor msg_len Message length msg_prio Message priority abs_timeout Message timeout in absolute time LINUX Kernel Hackers Manual July 2017 __audit_mq_notify 9 4.1.27 __audit_mq_notify record audit data for a POSIX MQ notify Synopsis void __audit_mq_notify mqd_t mqdes const struct sigevent * notification Arguments mqdes MQ descriptor notification Notification event LINUX Kernel Hackers Manual July 2017 __audit_mq_getsetattr 9 4.1.27 __audit_mq_getsetattr record audit data for a POSIX MQ get/set attribute Synopsis void __audit_mq_getsetattr mqd_t mqdes struct mq_attr * mqstat Arguments mqdes MQ descriptor mqstat MQ flags LINUX Kernel Hackers Manual July 2017 __audit_ipc_obj 9 4.1.27 __audit_ipc_obj record audit data for ipc object Synopsis void __audit_ipc_obj struct kern_ipc_perm * ipcp Arguments ipcp ipc permissions LINUX Kernel Hackers Manual July 2017 __audit_ipc_set_perm 9 4.1.27 __audit_ipc_set_perm record audit data for new ipc permissions Synopsis void __audit_ipc_set_perm unsigned long qbytes uid_t uid gid_t gid umode_t mode Arguments qbytes msgq bytes uid msgq user id gid msgq group id mode msgq mode (permissions) Description Called only after audit_ipc_obj. LINUX Kernel Hackers Manual July 2017 __audit_socketcall 9 4.1.27 __audit_socketcall record audit data for sys_socketcall Synopsis int __audit_socketcall int nargs unsigned long * args Arguments nargs number of args, which should not be more than AUDITSC_ARGS. args args array LINUX Kernel Hackers Manual July 2017 __audit_fd_pair 9 4.1.27 __audit_fd_pair record audit data for pipe and socketpair Synopsis void __audit_fd_pair int fd1 int fd2 Arguments fd1 the first file descriptor fd2 the second file descriptor LINUX Kernel Hackers Manual July 2017 __audit_sockaddr 9 4.1.27 __audit_sockaddr record audit data for sys_bind, sys_connect, sys_sendto Synopsis int __audit_sockaddr int len void * a Arguments len data length in user space a data address in kernel space Description Returns 0 for success or NULL context or < 0 on error. LINUX Kernel Hackers Manual July 2017 __audit_signal_info 9 4.1.27 __audit_signal_info record signal info for shutting down audit subsystem Synopsis int __audit_signal_info int sig struct task_struct * t Arguments sig signal value t task being signaled Description If the audit subsystem is being terminated, record the task (pid) and uid that is doing that. LINUX Kernel Hackers Manual July 2017 __audit_log_bprm_fcaps 9 4.1.27 __audit_log_bprm_fcaps store information about a loading bprm and relevant fcaps Synopsis int __audit_log_bprm_fcaps struct linux_binprm * bprm const struct cred * new const struct cred * old Arguments bprm pointer to the bprm being processed new the proposed new credentials old the old credentials Description Simply check if the proc already has the caps given by the file and if not store the priv escalation info for later auditing at the end of the syscall -Eric LINUX Kernel Hackers Manual July 2017 __audit_log_capset 9 4.1.27 __audit_log_capset store information about the arguments to the capset syscall Synopsis void __audit_log_capset const struct cred * new const struct cred * old Arguments new the new credentials old the old (current) credentials Description Record the arguments userspace sent to sys_capset for later printing by the audit system if applicable LINUX Kernel Hackers Manual July 2017 audit_core_dumps 9 4.1.27 audit_core_dumps record information about processes that end abnormally Synopsis void audit_core_dumps long signr Arguments signr signal value Description If a process ends with a core dump, something fishy is going on and we should record the event for investigation. LINUX Kernel Hackers Manual July 2017 audit_rule_change 9 4.1.27 audit_rule_change apply all rules to the specified message type Synopsis int audit_rule_change int type __u32 portid int seq void * data size_t datasz Arguments type audit message type portid target port id for netlink audit messages seq netlink audit message sequence (serial) number data payload data datasz size of payload data LINUX Kernel Hackers Manual July 2017 audit_list_rules_send 9 4.1.27 audit_list_rules_send list the audit rules Synopsis int audit_list_rules_send struct sk_buff * request_skb int seq Arguments request_skb skb of request we are replying to (used to target the reply) seq netlink audit message sequence (serial) number LINUX Kernel Hackers Manual July 2017 parent_len 9 4.1.27 parent_len find the length of the parent portion of a pathname Synopsis int parent_len const char * path Arguments path pathname of which to determine length LINUX Kernel Hackers Manual July 2017 audit_compare_dname_path 9 4.1.27 audit_compare_dname_path compare given dentry name with last component in given path. Return of 0 indicates a match. Synopsis int audit_compare_dname_path const char * dname const char * path int parentlen Arguments dname dentry name that we're comparing path full pathname that we're comparing parentlen length of the parent if known. Passing in AUDIT_NAME_FULL here indicates that we must compute this value. Accounting Framework LINUX Kernel Hackers Manual July 2017 sys_acct 9 4.1.27 sys_acct enable/disable process accounting Synopsis long sys_acct const char __user * name Arguments name file name for accounting records or NULL to shutdown accounting Description Returns 0 for success or negative errno values for failure. sys_acct is the only system call needed to implement process accounting. It takes the name of the file where accounting records should be written. If the filename is NULL, accounting will be shutdown. LINUX Kernel Hackers Manual July 2017 acct_collect 9 4.1.27 acct_collect collect accounting information into pacct_struct Synopsis void acct_collect long exitcode int group_dead Arguments exitcode task exit code group_dead not 0, if this thread is the last one in the process. LINUX Kernel Hackers Manual July 2017 acct_process 9 4.1.27 acct_process Synopsis void acct_process void Arguments void no arguments Description handles process accounting for an exiting task Block Devices LINUX Kernel Hackers Manual July 2017 blk_get_backing_dev_info 9 4.1.27 blk_get_backing_dev_info get the address of a queue's backing_dev_info Synopsis struct backing_dev_info * blk_get_backing_dev_info struct block_device * bdev Arguments bdev device Description Locates the passed device's request queue and returns the address of its backing_dev_info. This function can only be called if bdev is opened and the return value is never NULL. LINUX Kernel Hackers Manual July 2017 blk_delay_queue 9 4.1.27 blk_delay_queue restart queueing after defined interval Synopsis void blk_delay_queue struct request_queue * q unsigned long msecs Arguments q The struct request_queue in question msecs Delay in msecs Description Sometimes queueing needs to be postponed for a little while, to allow resources to come back. This function will make sure that queueing is restarted around the specified time. Queue lock must be held. LINUX Kernel Hackers Manual July 2017 blk_start_queue 9 4.1.27 blk_start_queue restart a previously stopped queue Synopsis void blk_start_queue struct request_queue * q Arguments q The struct request_queue in question Description blk_start_queue will clear the stop flag on the queue, and call the request_fn for the queue if it was in a stopped state when entered. Also see blk_stop_queue. Queue lock must be held. LINUX Kernel Hackers Manual July 2017 blk_stop_queue 9 4.1.27 blk_stop_queue stop a queue Synopsis void blk_stop_queue struct request_queue * q Arguments q The struct request_queue in question Description The Linux block layer assumes that a block driver will consume all entries on the request queue when the request_fn strategy is called. Often this will not happen, because of hardware limitations (queue depth settings). If a device driver gets a 'queue full' response, or if it simply chooses not to queue more I/O at one point, it can call this function to prevent the request_fn from being called until the driver has signalled it's ready to go again. This happens by calling blk_start_queue to restart queue operations. Queue lock must be held. LINUX Kernel Hackers Manual July 2017 blk_sync_queue 9 4.1.27 blk_sync_queue cancel any pending callbacks on a queue Synopsis void blk_sync_queue struct request_queue * q Arguments q the queue Description The block layer may perform asynchronous callback activity on a queue, such as calling the unplug function after a timeout. A block device may call blk_sync_queue to ensure that any such activity is cancelled, thus allowing it to release resources that the callbacks might use. The caller must already have made sure that its ->make_request_fn will not re-add plugging prior to calling this function. This function does not cancel any asynchronous activity arising out of elevator or throttling code. That would require elevator_exit and blkcg_exit_queue to be called with queue lock initialized. LINUX Kernel Hackers Manual July 2017 __blk_run_queue 9 4.1.27 __blk_run_queue run a single device queue Synopsis void __blk_run_queue struct request_queue * q Arguments q The queue to run Description See blk_run_queue. This variant must be called with the queue lock held and interrupts disabled. LINUX Kernel Hackers Manual July 2017 blk_run_queue_async 9 4.1.27 blk_run_queue_async run a single device queue in workqueue context Synopsis void blk_run_queue_async struct request_queue * q Arguments q The queue to run Description Tells kblockd to perform the equivalent of blk_run_queue on behalf of us. The caller must hold the queue lock. LINUX Kernel Hackers Manual July 2017 blk_run_queue 9 4.1.27 blk_run_queue run a single device queue Synopsis void blk_run_queue struct request_queue * q Arguments q The queue to run Description Invoke request handling on this queue, if it has pending work to do. May be used to restart queueing when a request has completed. LINUX Kernel Hackers Manual July 2017 blk_queue_bypass_start 9 4.1.27 blk_queue_bypass_start enter queue bypass mode Synopsis void blk_queue_bypass_start struct request_queue * q Arguments q queue of interest Description In bypass mode, only the dispatch FIFO queue of q is used. This function makes q enter bypass mode and drains all requests which were throttled or issued before. On return, it's guaranteed that no request is being throttled or has ELVPRIV set and blk_queue_bypass true inside queue or RCU read lock. LINUX Kernel Hackers Manual July 2017 blk_queue_bypass_end 9 4.1.27 blk_queue_bypass_end leave queue bypass mode Synopsis void blk_queue_bypass_end struct request_queue * q Arguments q queue of interest Description Leave bypass mode and restore the normal queueing behavior. LINUX Kernel Hackers Manual July 2017 blk_cleanup_queue 9 4.1.27 blk_cleanup_queue shutdown a request queue Synopsis void blk_cleanup_queue struct request_queue * q Arguments q request queue to shutdown Description Mark q DYING, drain all pending requests, mark q DEAD, destroy and put it. All future requests will be failed immediately with -ENODEV. LINUX Kernel Hackers Manual July 2017 blk_init_queue 9 4.1.27 blk_init_queue prepare a request queue for use with a block device Synopsis struct request_queue * blk_init_queue request_fn_proc * rfn spinlock_t * lock Arguments rfn The function to be called to process requests that have been placed on the queue. lock Request queue spin lock Description If a block device wishes to use the standard request handling procedures, which sorts requests and coalesces adjacent requests, then it must call blk_init_queue. The function rfn will be called when there are requests on the queue that need to be processed. If the device supports plugging, then rfn may not be called immediately when requests are available on the queue, but may be called at some time later instead. Plugged queues are generally unplugged when a buffer belonging to one of the requests on the queue is needed, or due to memory pressure. rfn is not required, or even expected, to remove all requests off the queue, but only as many as it can handle at a time. If it does leave requests on the queue, it is responsible for arranging that the requests get dealt with eventually. The queue spin lock must be held while manipulating the requests on the request queue; this lock will be taken also from interrupt context, so irq disabling is needed for it. Function returns a pointer to the initialized request queue, or NULL if it didn't succeed. Note blk_init_queue must be paired with a blk_cleanup_queue call when the block device is deactivated (such as at module unload). LINUX Kernel Hackers Manual July 2017 blk_make_request 9 4.1.27 blk_make_request given a bio, allocate a corresponding struct request. Synopsis struct request * blk_make_request struct request_queue * q struct bio * bio gfp_t gfp_mask Arguments q target request queue bio The bio describing the memory mappings that will be submitted for IO. It may be a chained-bio properly constructed by block/bio layer. gfp_mask gfp flags to be used for memory allocation Description blk_make_request is the parallel of generic_make_request for BLOCK_PC type commands. Where the struct request needs to be farther initialized by the caller. It is passed a struct bio, which describes the memory info of the I/O transfer. The caller of blk_make_request must make sure that bi_io_vec are set to describe the memory buffers. That bio_data_dir will return the needed direction of the request. (And all bio's in the passed bio-chain are properly set accordingly) If called under none-sleepable conditions, mapped bio buffers must not need bouncing, by calling the appropriate masked or flagged allocator, suitable for the target device. Otherwise the call to blk_queue_bounce will BUG. WARNING When allocating/cloning a bio-chain, careful consideration should be given to how you allocate bios. In particular, you cannot use __GFP_WAIT for anything but the first bio in the chain. Otherwise you risk waiting for IO completion of a bio that hasn't been submitted yet, thus resulting in a deadlock. Alternatively bios should be allocated using bio_kmalloc instead of bio_alloc, as that avoids the mempool deadlock. If possible a big IO should be split into smaller parts when allocation fails. Partial allocation should not be an error, or you risk a live-lock. LINUX Kernel Hackers Manual July 2017 blk_rq_set_block_pc 9 4.1.27 blk_rq_set_block_pc initialize a request to type BLOCK_PC Synopsis void blk_rq_set_block_pc struct request * rq Arguments rq request to be initialized LINUX Kernel Hackers Manual July 2017 blk_requeue_request 9 4.1.27 blk_requeue_request put a request back on queue Synopsis void blk_requeue_request struct request_queue * q struct request * rq Arguments q request queue where request should be inserted rq request to be inserted Description Drivers often keep queueing requests until the hardware cannot accept more, when that condition happens we need to put the request back on the queue. Must be called with queue lock held. LINUX Kernel Hackers Manual July 2017 part_round_stats 9 4.1.27 part_round_stats Round off the performance stats on a struct disk_stats. Synopsis void part_round_stats int cpu struct hd_struct * part Arguments cpu cpu number for stats access part target partition Description The average IO queue length and utilisation statistics are maintained by observing the current state of the queue length and the amount of time it has been in this state for. Normally, that accounting is done on IO completion, but that can result in more than a second's worth of IO being accounted for within any one second, leading to >100% utilisation. To deal with that, we call this function to do a round-off before returning the results when reading /proc/diskstats. This accounts immediately for all queue usage up to the current jiffies and restarts the counters again. LINUX Kernel Hackers Manual July 2017 blk_add_request_payload 9 4.1.27 blk_add_request_payload add a payload to a request Synopsis void blk_add_request_payload struct request * rq struct page * page unsigned int len Arguments rq request to update page page backing the payload len length of the payload. Description This allows to later add a payload to an already submitted request by a block driver. The driver needs to take care of freeing the payload itself. Note that this is a quite horrible hack and nothing but handling of discard requests should ever use it. LINUX Kernel Hackers Manual July 2017 generic_make_request 9 4.1.27 generic_make_request hand a buffer to its device driver for I/O Synopsis void generic_make_request struct bio * bio Arguments bio The bio describing the location in memory and on the device. Description generic_make_request is used to make I/O requests of block devices. It is passed a struct bio, which describes the I/O that needs to be done. generic_make_request does not return any status. The success/failure status of the request, along with notification of completion, is delivered asynchronously through the bio->bi_end_io function described (one day) else where. The caller of generic_make_request must make sure that bi_io_vec are set to describe the memory buffer, and that bi_dev and bi_sector are set to describe the device address, and the bi_end_io and optionally bi_private are set to describe how completion notification should be signaled. generic_make_request and the drivers it calls may use bi_next if this bio happens to be merged with someone else, and may resubmit the bio to a lower device by calling into generic_make_request recursively, which means the bio should NOT be touched after the call to ->make_request_fn. LINUX Kernel Hackers Manual July 2017 submit_bio 9 4.1.27 submit_bio submit a bio to the block device layer for I/O Synopsis void submit_bio int rw struct bio * bio Arguments rw whether to READ or WRITE, or maybe to READA (read ahead) bio The struct bio which describes the I/O Description submit_bio is very similar in purpose to generic_make_request, and uses that function to do most of the work. Both are fairly rough interfaces; bio must be presetup and ready for I/O. LINUX Kernel Hackers Manual July 2017 blk_rq_check_limits 9 4.1.27 blk_rq_check_limits Helper function to check a request for the queue limit Synopsis int blk_rq_check_limits struct request_queue * q struct request * rq Arguments q the queue rq the request being checked Description rq may have been made based on weaker limitations of upper-level queues in request stacking drivers, and it may violate the limitation of q. Since the block layer and the underlying device driver trust rq after it is inserted to q, it should be checked against q before the insertion using this generic function. This function should also be useful for request stacking drivers in some cases below, so export this function. Request stacking drivers like request-based dm may change the queue limits while requests are in the queue (e.g. dm's table swapping). Such request stacking drivers should check those requests against the new queue limits again when they dispatch those requests, although such checkings are also done against the old queue limits when submitting requests. LINUX Kernel Hackers Manual July 2017 blk_insert_cloned_request 9 4.1.27 blk_insert_cloned_request Helper for stacking drivers to submit a request Synopsis int blk_insert_cloned_request struct request_queue * q struct request * rq Arguments q the queue to submit the request rq the request being queued LINUX Kernel Hackers Manual July 2017 blk_rq_err_bytes 9 4.1.27 blk_rq_err_bytes determine number of bytes till the next failure boundary Synopsis unsigned int blk_rq_err_bytes const struct request * rq Arguments rq request to examine Description A request could be merge of IOs which require different failure handling. This function determines the number of bytes which can be failed from the beginning of the request without crossing into area which need to be retried further. Return The number of bytes to fail. Context queue_lock must be held. LINUX Kernel Hackers Manual July 2017 blk_peek_request 9 4.1.27 blk_peek_request peek at the top of a request queue Synopsis struct request * blk_peek_request struct request_queue * q Arguments q request queue to peek at Description Return the request at the top of q. The returned request should be started using blk_start_request before LLD starts processing it. Return Pointer to the request at the top of q if available. Null otherwise. Context queue_lock must be held. LINUX Kernel Hackers Manual July 2017 blk_start_request 9 4.1.27 blk_start_request start request processing on the driver Synopsis void blk_start_request struct request * req Arguments req request to dequeue Description Dequeue req and start timeout timer on it. This hands off the request to the driver. Block internal functions which don't want to start timer should call blk_dequeue_request. Context queue_lock must be held. LINUX Kernel Hackers Manual July 2017 blk_fetch_request 9 4.1.27 blk_fetch_request fetch a request from a request queue Synopsis struct request * blk_fetch_request struct request_queue * q Arguments q request queue to fetch a request from Description Return the request at the top of q. The request is started on return and LLD can start processing it immediately. Return Pointer to the request at the top of q if available. Null otherwise. Context queue_lock must be held. LINUX Kernel Hackers Manual July 2017 blk_update_request 9 4.1.27 blk_update_request Special helper function for request stacking drivers Synopsis bool blk_update_request struct request * req int error unsigned int nr_bytes Arguments req the request being processed error 0 for success, < 0 for error nr_bytes number of bytes to complete req Description Ends I/O on a number of bytes attached to req, but doesn't complete the request structure even if req doesn't have leftover. If req has leftover, sets it up for the next range of segments. This special helper function is only for request stacking drivers (e.g. request-based dm) so that they can handle partial completion. Actual device drivers should use blk_end_request instead. Passing the result of blk_rq_bytes as nr_bytes guarantees false return from this function. Return false - this request doesn't have any more data true - this request has more data LINUX Kernel Hackers Manual July 2017 blk_unprep_request 9 4.1.27 blk_unprep_request unprepare a request Synopsis void blk_unprep_request struct request * req Arguments req the request Description This function makes a request ready for complete resubmission (or completion). It happens only after all error handling is complete, so represents the appropriate moment to deallocate any resources that were allocated to the request in the prep_rq_fn. The queue lock is held when calling this. LINUX Kernel Hackers Manual July 2017 blk_end_request 9 4.1.27 blk_end_request Helper function for drivers to complete the request. Synopsis bool blk_end_request struct request * rq int error unsigned int nr_bytes Arguments rq the request being processed error 0 for success, < 0 for error nr_bytes number of bytes to complete Description Ends I/O on a number of bytes attached to rq. If rq has leftover, sets it up for the next range of segments. Return false - we are done with this request true - still buffers pending for this request LINUX Kernel Hackers Manual July 2017 blk_end_request_all 9 4.1.27 blk_end_request_all Helper function for drives to finish the request. Synopsis void blk_end_request_all struct request * rq int error Arguments rq the request to finish error 0 for success, < 0 for error Description Completely finish rq. LINUX Kernel Hackers Manual July 2017 blk_end_request_cur 9 4.1.27 blk_end_request_cur Helper function to finish the current request chunk. Synopsis bool blk_end_request_cur struct request * rq int error Arguments rq the request to finish the current chunk for error 0 for success, < 0 for error Description Complete the current consecutively mapped chunk from rq. Return false - we are done with this request true - still buffers pending for this request LINUX Kernel Hackers Manual July 2017 blk_end_request_err 9 4.1.27 blk_end_request_err Finish a request till the next failure boundary. Synopsis bool blk_end_request_err struct request * rq int error Arguments rq the request to finish till the next failure boundary for error must be negative errno Description Complete rq till the next failure boundary. Return false - we are done with this request true - still buffers pending for this request LINUX Kernel Hackers Manual July 2017 __blk_end_request 9 4.1.27 __blk_end_request Helper function for drivers to complete the request. Synopsis bool __blk_end_request struct request * rq int error unsigned int nr_bytes Arguments rq the request being processed error 0 for success, < 0 for error nr_bytes number of bytes to complete Description Must be called with queue lock held unlike blk_end_request. Return false - we are done with this request true - still buffers pending for this request LINUX Kernel Hackers Manual July 2017 __blk_end_request_all 9 4.1.27 __blk_end_request_all Helper function for drives to finish the request. Synopsis void __blk_end_request_all struct request * rq int error Arguments rq the request to finish error 0 for success, < 0 for error Description Completely finish rq. Must be called with queue lock held. LINUX Kernel Hackers Manual July 2017 __blk_end_request_cur 9 4.1.27 __blk_end_request_cur Helper function to finish the current request chunk. Synopsis bool __blk_end_request_cur struct request * rq int error Arguments rq the request to finish the current chunk for error 0 for success, < 0 for error Description Complete the current consecutively mapped chunk from rq. Must be called with queue lock held. Return false - we are done with this request true - still buffers pending for this request LINUX Kernel Hackers Manual July 2017 __blk_end_request_err 9 4.1.27 __blk_end_request_err Finish a request till the next failure boundary. Synopsis bool __blk_end_request_err struct request * rq int error Arguments rq the request to finish till the next failure boundary for error must be negative errno Description Complete rq till the next failure boundary. Must be called with queue lock held. Return false - we are done with this request true - still buffers pending for this request LINUX Kernel Hackers Manual July 2017 rq_flush_dcache_pages 9 4.1.27 rq_flush_dcache_pages Helper function to flush all pages in a request Synopsis void rq_flush_dcache_pages struct request * rq Arguments rq the request to be flushed Description Flush all pages in rq. LINUX Kernel Hackers Manual July 2017 blk_lld_busy 9 4.1.27 blk_lld_busy Check if underlying low-level drivers of a device are busy Synopsis int blk_lld_busy struct request_queue * q Arguments q the queue of the device being checked Description Check if underlying low-level drivers of a device are busy. If the drivers want to export their busy state, they must set own exporting function using blk_queue_lld_busy first. Basically, this function is used only by request stacking drivers to stop dispatching requests to underlying devices when underlying devices are busy. This behavior helps more I/O merging on the queue of the request stacking driver and prevents I/O throughput regression on burst I/O load. Return 0 - Not busy (The request stacking driver should dispatch request) 1 - Busy (The request stacking driver should stop dispatching request) LINUX Kernel Hackers Manual July 2017 blk_rq_unprep_clone 9 4.1.27 blk_rq_unprep_clone Helper function to free all bios in a cloned request Synopsis void blk_rq_unprep_clone struct request * rq Arguments rq the clone request to be cleaned up Description Free all bios in rq for a cloned request. LINUX Kernel Hackers Manual July 2017 blk_rq_prep_clone 9 4.1.27 blk_rq_prep_clone Helper function to setup clone request Synopsis int blk_rq_prep_clone struct request * rq struct request * rq_src struct bio_set * bs gfp_t gfp_mask int (*bio_ctr) struct bio *, struct bio *, void * void * data Arguments rq the request to be setup rq_src original request to be cloned bs bio_set that bios for clone are allocated from gfp_mask memory allocation mask for bio bio_ctr setup function to be called for each clone bio. Returns 0 for success, non 0 for failure. data private data to be passed to bio_ctr Description Clones bios in rq_src to rq, and copies attributes of rq_src to rq. The actual data parts of rq_src (e.g. ->cmd, ->sense) are not copied, and copying such parts is the caller's responsibility. Also, pages which the original bios are pointing to are not copied and the cloned bios just point same pages. So cloned bios must be completed before original bios, which means the caller must complete rq before rq_src. LINUX Kernel Hackers Manual July 2017 blk_start_plug 9 4.1.27 blk_start_plug initialize blk_plug and track it inside the task_struct Synopsis void blk_start_plug struct blk_plug * plug Arguments plug The struct blk_plug that needs to be initialized Description Tracking blk_plug inside the task_struct will help with auto-flushing the pending I/O should the task end up blocking between blk_start_plug and blk_finish_plug. This is important from a performance perspective, but also ensures that we don't deadlock. For instance, if the task is blocking for a memory allocation, memory reclaim could end up wanting to free a page belonging to that request that is currently residing in our private plug. By flushing the pending I/O when the process goes to sleep, we avoid this kind of deadlock. LINUX Kernel Hackers Manual July 2017 blk_pm_runtime_init 9 4.1.27 blk_pm_runtime_init Block layer runtime PM initialization routine Synopsis void blk_pm_runtime_init struct request_queue * q struct device * dev Arguments q the queue of the device dev the device the queue belongs to Description Initialize runtime-PM-related fields for q and start auto suspend for dev. Drivers that want to take advantage of request-based runtime PM should call this function after dev has been initialized, and its request queue q has been allocated, and runtime PM for it can not happen yet(either due to disabled/forbidden or its usage_count > 0). In most cases, driver should call this function before any I/O has taken place. This function takes care of setting up using auto suspend for the device, the autosuspend delay is set to -1 to make runtime suspend impossible until an updated value is either set by user or by driver. Drivers do not need to touch other autosuspend settings. The block layer runtime PM is request based, so only works for drivers that use request as their IO unit instead of those directly use bio's. LINUX Kernel Hackers Manual July 2017 blk_pre_runtime_suspend 9 4.1.27 blk_pre_runtime_suspend Pre runtime suspend check Synopsis int blk_pre_runtime_suspend struct request_queue * q Arguments q the queue of the device Description This function will check if runtime suspend is allowed for the device by examining if there are any requests pending in the queue. If there are requests pending, the device can not be runtime suspended; otherwise, the queue's status will be updated to SUSPENDING and the driver can proceed to suspend the device. For the not allowed case, we mark last busy for the device so that runtime PM core will try to autosuspend it some time later. This function should be called near the start of the device's runtime_suspend callback. Return 0 - OK to runtime suspend the device -EBUSY - Device should not be runtime suspended LINUX Kernel Hackers Manual July 2017 blk_post_runtime_suspend 9 4.1.27 blk_post_runtime_suspend Post runtime suspend processing Synopsis void blk_post_runtime_suspend struct request_queue * q int err Arguments q the queue of the device err return value of the device's runtime_suspend function Description Update the queue's runtime status according to the return value of the device's runtime suspend function and mark last busy for the device so that PM core will try to auto suspend the device at a later time. This function should be called near the end of the device's runtime_suspend callback. LINUX Kernel Hackers Manual July 2017 blk_pre_runtime_resume 9 4.1.27 blk_pre_runtime_resume Pre runtime resume processing Synopsis void blk_pre_runtime_resume struct request_queue * q Arguments q the queue of the device Description Update the queue's runtime status to RESUMING in preparation for the runtime resume of the device. This function should be called near the start of the device's runtime_resume callback. LINUX Kernel Hackers Manual July 2017 blk_post_runtime_resume 9 4.1.27 blk_post_runtime_resume Post runtime resume processing Synopsis void blk_post_runtime_resume struct request_queue * q int err Arguments q the queue of the device err return value of the device's runtime_resume function Description Update the queue's runtime status according to the return value of the device's runtime_resume function. If it is successfully resumed, process the requests that are queued into the device's queue when it is resuming and then mark last busy and initiate autosuspend for it. This function should be called near the end of the device's runtime_resume callback. LINUX Kernel Hackers Manual July 2017 __blk_run_queue_uncond 9 4.1.27 __blk_run_queue_uncond run a queue whether or not it has been stopped Synopsis void __blk_run_queue_uncond struct request_queue * q Arguments q The queue to run Description Invoke request handling on a queue if there are any pending requests. May be used to restart request handling after a request has completed. This variant runs the queue whether or not the queue has been stopped. Must be called with the queue lock held and interrupts disabled. See also blk_run_queue. LINUX Kernel Hackers Manual July 2017 __blk_drain_queue 9 4.1.27 __blk_drain_queue drain requests from request_queue Synopsis void __blk_drain_queue struct request_queue * q bool drain_all Arguments q queue to drain drain_all whether to drain all requests or only the ones w/ ELVPRIV Description Drain requests from q. If drain_all is set, all requests are drained. If not, only ELVPRIV requests are drained. The caller is responsible for ensuring that no new requests which need to be drained are queued. LINUX Kernel Hackers Manual July 2017 rq_ioc 9 4.1.27 rq_ioc determine io_context for request allocation Synopsis struct io_context * rq_ioc struct bio * bio Arguments bio request being allocated is for this bio (can be NULL) Description Determine io_context to use for request allocation for bio. May return NULL if current->io_context doesn't exist. LINUX Kernel Hackers Manual July 2017 __get_request 9 4.1.27 __get_request get a free request Synopsis struct request * __get_request struct request_list * rl int rw_flags struct bio * bio gfp_t gfp_mask Arguments rl request list to allocate from rw_flags RW and SYNC flags bio bio to allocate request for (can be NULL) gfp_mask allocation mask Description Get a free request from q. This function may fail under memory pressure or if q is dead. Must be called with q->queue_lock held and, Returns ERR_PTR on failure, with q->queue_lock held. Returns request pointer on success, with q->queue_lock *not held*. LINUX Kernel Hackers Manual July 2017 get_request 9 4.1.27 get_request get a free request Synopsis struct request * get_request struct request_queue * q int rw_flags struct bio * bio gfp_t gfp_mask Arguments q request_queue to allocate request from rw_flags RW and SYNC flags bio bio to allocate request for (can be NULL) gfp_mask allocation mask Description Get a free request from q. If __GFP_WAIT is set in gfp_mask, this function keeps retrying under memory pressure and fails iff q is dead. Must be called with q->queue_lock held and, Returns ERR_PTR on failure, with q->queue_lock held. Returns request pointer on success, with q->queue_lock *not held*. LINUX Kernel Hackers Manual July 2017 blk_attempt_plug_merge 9 4.1.27 blk_attempt_plug_merge try to merge with current's plugged list Synopsis bool blk_attempt_plug_merge struct request_queue * q struct bio * bio unsigned int * request_count Arguments q request_queue new bio is being queued at bio new bio being queued request_count out parameter for number of traversed plugged requests Description Determine whether bio being queued on q can be merged with a request on current's plugged list. Returns true if merge was successful, otherwise false. Plugging coalesces IOs from the same issuer for the same purpose without going through q->queue_lock. As such it's more of an issuing mechanism than scheduling, and the request, while may have elvpriv data, is not added on the elevator at this point. In addition, we don't have reliable access to the elevator outside queue lock. Only check basic merging parameters without querying the elevator. Caller must ensure !blk_queue_nomerges(q) beforehand. LINUX Kernel Hackers Manual July 2017 blk_end_bidi_request 9 4.1.27 blk_end_bidi_request Complete a bidi request Synopsis bool blk_end_bidi_request struct request * rq int error unsigned int nr_bytes unsigned int bidi_bytes Arguments rq the request to complete error 0 for success, < 0 for error nr_bytes number of bytes to complete rq bidi_bytes number of bytes to complete rq->next_rq Description Ends I/O on a number of bytes attached to rq and rq->next_rq. Drivers that supports bidi can safely call this member for any type of request, bidi or uni. In the later case bidi_bytes is just ignored. Return false - we are done with this request true - still buffers pending for this request LINUX Kernel Hackers Manual July 2017 __blk_end_bidi_request 9 4.1.27 __blk_end_bidi_request Complete a bidi request with queue lock held Synopsis bool __blk_end_bidi_request struct request * rq int error unsigned int nr_bytes unsigned int bidi_bytes Arguments rq the request to complete error 0 for success, < 0 for error nr_bytes number of bytes to complete rq bidi_bytes number of bytes to complete rq->next_rq Description Identical to blk_end_bidi_request except that queue lock is assumed to be locked on entry and remains so on return. Return false - we are done with this request true - still buffers pending for this request LINUX Kernel Hackers Manual July 2017 blk_rq_map_user_iov 9 4.1.27 blk_rq_map_user_iov map user data to a request, for REQ_TYPE_BLOCK_PC usage Synopsis int blk_rq_map_user_iov struct request_queue * q struct request * rq struct rq_map_data * map_data const struct iov_iter * iter gfp_t gfp_mask Arguments q request queue where request should be inserted rq request to map data to map_data pointer to the rq_map_data holding pages (if necessary) iter iovec iterator gfp_mask memory allocation flags Description Data will be mapped directly for zero copy I/O, if possible. Otherwise a kernel bounce buffer is used. A matching blk_rq_unmap_user must be issued at the end of I/O, while still in process context. Note The mapped bio may need to be bounced through blk_queue_bounce before being submitted to the device, as pages mapped may be out of reach. It's the callers responsibility to make sure this happens. The original bio must be passed back in to blk_rq_unmap_user for proper unmapping. LINUX Kernel Hackers Manual July 2017 blk_rq_unmap_user 9 4.1.27 blk_rq_unmap_user unmap a request with user data Synopsis int blk_rq_unmap_user struct bio * bio Arguments bio start of bio list Description Unmap a rq previously mapped by blk_rq_map_user. The caller must supply the original rq->bio from the blk_rq_map_user return, since the I/O completion may have changed rq->bio. LINUX Kernel Hackers Manual July 2017 blk_rq_map_kern 9 4.1.27 blk_rq_map_kern map kernel data to a request, for REQ_TYPE_BLOCK_PC usage Synopsis int blk_rq_map_kern struct request_queue * q struct request * rq void * kbuf unsigned int len gfp_t gfp_mask Arguments q request queue where request should be inserted rq request to fill kbuf the kernel buffer len length of user data gfp_mask memory allocation flags Description Data will be mapped directly if possible. Otherwise a bounce buffer is used. Can be called multiple times to append multiple buffers. LINUX Kernel Hackers Manual July 2017 blk_release_queue 9 4.1.27 blk_release_queue release a struct request_queue when it is no longer needed Synopsis void blk_release_queue struct kobject * kobj Arguments kobj the kobj belonging to the request queue to be released Description blk_release_queue is the pair to blk_init_queue or blk_queue_make_request. It should be called when a request queue is being released; typically when a block device is being de-registered. Currently, its primary task it to free all the struct request structures that were allocated to the queue and the queue itself. Note The low level driver must have finished any outstanding requests first via blk_cleanup_queue. LINUX Kernel Hackers Manual July 2017 blk_queue_prep_rq 9 4.1.27 blk_queue_prep_rq set a prepare_request function for queue Synopsis void blk_queue_prep_rq struct request_queue * q prep_rq_fn * pfn Arguments q queue pfn prepare_request function Description It's possible for a queue to register a prepare_request callback which is invoked before the request is handed to the request_fn. The goal of the function is to prepare a request for I/O, it can be used to build a cdb from the request data for instance. LINUX Kernel Hackers Manual July 2017 blk_queue_unprep_rq 9 4.1.27 blk_queue_unprep_rq set an unprepare_request function for queue Synopsis void blk_queue_unprep_rq struct request_queue * q unprep_rq_fn * ufn Arguments q queue ufn unprepare_request function Description It's possible for a queue to register an unprepare_request callback which is invoked before the request is finally completed. The goal of the function is to deallocate any data that was allocated in the prepare_request callback. LINUX Kernel Hackers Manual July 2017 blk_queue_merge_bvec 9 4.1.27 blk_queue_merge_bvec set a merge_bvec function for queue Synopsis void blk_queue_merge_bvec struct request_queue * q merge_bvec_fn * mbfn Arguments q queue mbfn merge_bvec_fn Description Usually queues have static limitations on the max sectors or segments that we can put in a request. Stacking drivers may have some settings that are dynamic, and thus we have to query the queue whether it is ok to add a new bio_vec to a bio at a given offset or not. If the block device has such limitations, it needs to register a merge_bvec_fn to control the size of bio's sent to it. Note that a block device *must* allow a single page to be added to an empty bio. The block device driver may want to use the bio_split function to deal with these bio's. By default no merge_bvec_fn is defined for a queue, and only the fixed limits are honored. LINUX Kernel Hackers Manual July 2017 blk_set_default_limits 9 4.1.27 blk_set_default_limits reset limits to default values Synopsis void blk_set_default_limits struct queue_limits * lim Arguments lim the queue_limits structure to reset Description Returns a queue_limit struct to its default state. LINUX Kernel Hackers Manual July 2017 blk_set_stacking_limits 9 4.1.27 blk_set_stacking_limits set default limits for stacking devices Synopsis void blk_set_stacking_limits struct queue_limits * lim Arguments lim the queue_limits structure to reset Description Returns a queue_limit struct to its default state. Should be used by stacking drivers like DM that have no internal limits. LINUX Kernel Hackers Manual July 2017 blk_queue_make_request 9 4.1.27 blk_queue_make_request define an alternate make_request function for a device Synopsis void blk_queue_make_request struct request_queue * q make_request_fn * mfn Arguments q the request queue for the device to be affected mfn the alternate make_request function Description The normal way for struct bios to be passed to a device driver is for them to be collected into requests on a request queue, and then to allow the device driver to select requests off that queue when it is ready. This works well for many block devices. However some block devices (typically virtual devices such as md or lvm) do not benefit from the processing on the request queue, and are served best by having the requests passed directly to them. This can be achieved by providing a function to blk_queue_make_request. Caveat The driver that does this *must* be able to deal appropriately with buffers in highmemory. This can be accomplished by either calling __bio_kmap_atomic to get a temporary kernel mapping, or by calling blk_queue_bounce to create a buffer in normal memory. LINUX Kernel Hackers Manual July 2017 blk_queue_bounce_limit 9 4.1.27 blk_queue_bounce_limit set bounce buffer limit for queue Synopsis void blk_queue_bounce_limit struct request_queue * q u64 max_addr Arguments q the request queue for the device max_addr the maximum address the device can handle Description Different hardware can have different requirements as to what pages it can do I/O directly to. A low level driver can call blk_queue_bounce_limit to have lower memory pages allocated as bounce buffers for doing I/O to pages residing above max_addr. LINUX Kernel Hackers Manual July 2017 blk_limits_max_hw_sectors 9 4.1.27 blk_limits_max_hw_sectors set hard and soft limit of max sectors for request Synopsis void blk_limits_max_hw_sectors struct queue_limits * limits unsigned int max_hw_sectors Arguments limits the queue limits max_hw_sectors max hardware sectors in the usual 512b unit Description Enables a low level driver to set a hard upper limit, max_hw_sectors, on the size of requests. max_hw_sectors is set by the device driver based upon the capabilities of the I/O controller. max_sectors is a soft limit imposed by the block layer for filesystem type requests. This value can be overridden on a per-device basis in /sys/block/<device>/queue/max_sectors_kb. The soft limit can not exceed max_hw_sectors. LINUX Kernel Hackers Manual July 2017 blk_queue_max_hw_sectors 9 4.1.27 blk_queue_max_hw_sectors set max sectors for a request for this queue Synopsis void blk_queue_max_hw_sectors struct request_queue * q unsigned int max_hw_sectors Arguments q the request queue for the device max_hw_sectors max hardware sectors in the usual 512b unit Description See description for blk_limits_max_hw_sectors. LINUX Kernel Hackers Manual July 2017 blk_queue_chunk_sectors 9 4.1.27 blk_queue_chunk_sectors set size of the chunk for this queue Synopsis void blk_queue_chunk_sectors struct request_queue * q unsigned int chunk_sectors Arguments q the request queue for the device chunk_sectors chunk sectors in the usual 512b unit Description If a driver doesn't want IOs to cross a given chunk size, it can set this limit and prevent merging across chunks. Note that the chunk size must currently be a power-of-2 in sectors. Also note that the block layer must accept a page worth of data at any offset. So if the crossing of chunks is a hard limitation in the driver, it must still be prepared to split single page bios. LINUX Kernel Hackers Manual July 2017 blk_queue_max_discard_sectors 9 4.1.27 blk_queue_max_discard_sectors set max sectors for a single discard Synopsis void blk_queue_max_discard_sectors struct request_queue * q unsigned int max_discard_sectors Arguments q the request queue for the device max_discard_sectors maximum number of sectors to discard LINUX Kernel Hackers Manual July 2017 blk_queue_max_write_same_sectors 9 4.1.27 blk_queue_max_write_same_sectors set max sectors for a single write same Synopsis void blk_queue_max_write_same_sectors struct request_queue * q unsigned int max_write_same_sectors Arguments q the request queue for the device max_write_same_sectors maximum number of sectors to write per command LINUX Kernel Hackers Manual July 2017 blk_queue_max_segments 9 4.1.27 blk_queue_max_segments set max hw segments for a request for this queue Synopsis void blk_queue_max_segments struct request_queue * q unsigned short max_segments Arguments q the request queue for the device max_segments max number of segments Description Enables a low level driver to set an upper limit on the number of hw data segments in a request. LINUX Kernel Hackers Manual July 2017 blk_queue_max_segment_size 9 4.1.27 blk_queue_max_segment_size set max segment size for blk_rq_map_sg Synopsis void blk_queue_max_segment_size struct request_queue * q unsigned int max_size Arguments q the request queue for the device max_size max size of segment in bytes Description Enables a low level driver to set an upper limit on the size of a coalesced segment LINUX Kernel Hackers Manual July 2017 blk_queue_logical_block_size 9 4.1.27 blk_queue_logical_block_size set logical block size for the queue Synopsis void blk_queue_logical_block_size struct request_queue * q unsigned short size Arguments q the request queue for the device size the logical block size, in bytes Description This should be set to the lowest possible block size that the storage device can address. The default of 512 covers most hardware. LINUX Kernel Hackers Manual July 2017 blk_queue_physical_block_size 9 4.1.27 blk_queue_physical_block_size set physical block size for the queue Synopsis void blk_queue_physical_block_size struct request_queue * q unsigned int size Arguments q the request queue for the device size the physical block size, in bytes Description This should be set to the lowest possible sector size that the hardware can operate on without reverting to read-modify-write operations. LINUX Kernel Hackers Manual July 2017 blk_queue_alignment_offset 9 4.1.27 blk_queue_alignment_offset set physical block alignment offset Synopsis void blk_queue_alignment_offset struct request_queue * q unsigned int offset Arguments q the request queue for the device offset alignment offset in bytes Description Some devices are naturally misaligned to compensate for things like the legacy DOS partition table 63-sector offset. Low-level drivers should call this function for devices whose first sector is not naturally aligned. LINUX Kernel Hackers Manual July 2017 blk_limits_io_min 9 4.1.27 blk_limits_io_min set minimum request size for a device Synopsis void blk_limits_io_min struct queue_limits * limits unsigned int min Arguments limits the queue limits min smallest I/O size in bytes Description Some devices have an internal block size bigger than the reported hardware sector size. This function can be used to signal the smallest I/O the device can perform without incurring a performance penalty. LINUX Kernel Hackers Manual July 2017 blk_queue_io_min 9 4.1.27 blk_queue_io_min set minimum request size for the queue Synopsis void blk_queue_io_min struct request_queue * q unsigned int min Arguments q the request queue for the device min smallest I/O size in bytes Description Storage devices may report a granularity or preferred minimum I/O size which is the smallest request the device can perform without incurring a performance penalty. For disk drives this is often the physical block size. For RAID arrays it is often the stripe chunk size. A properly aligned multiple of minimum_io_size is the preferred request size for workloads where a high number of I/O operations is desired. LINUX Kernel Hackers Manual July 2017 blk_limits_io_opt 9 4.1.27 blk_limits_io_opt set optimal request size for a device Synopsis void blk_limits_io_opt struct queue_limits * limits unsigned int opt Arguments limits the queue limits opt smallest I/O size in bytes Description Storage devices may report an optimal I/O size, which is the device's preferred unit for sustained I/O. This is rarely reported for disk drives. For RAID arrays it is usually the stripe width or the internal track size. A properly aligned multiple of optimal_io_size is the preferred request size for workloads where sustained throughput is desired. LINUX Kernel Hackers Manual July 2017 blk_queue_io_opt 9 4.1.27 blk_queue_io_opt set optimal request size for the queue Synopsis void blk_queue_io_opt struct request_queue * q unsigned int opt Arguments q the request queue for the device opt optimal request size in bytes Description Storage devices may report an optimal I/O size, which is the device's preferred unit for sustained I/O. This is rarely reported for disk drives. For RAID arrays it is usually the stripe width or the internal track size. A properly aligned multiple of optimal_io_size is the preferred request size for workloads where sustained throughput is desired. LINUX Kernel Hackers Manual July 2017 blk_queue_stack_limits 9 4.1.27 blk_queue_stack_limits inherit underlying queue limits for stacked drivers Synopsis void blk_queue_stack_limits struct request_queue * t struct request_queue * b Arguments t the stacking driver (top) b the underlying device (bottom) LINUX Kernel Hackers Manual July 2017 blk_stack_limits 9 4.1.27 blk_stack_limits adjust queue_limits for stacked devices Synopsis int blk_stack_limits struct queue_limits * t struct queue_limits * b sector_t start Arguments t the stacking driver limits (top device) b the underlying queue limits (bottom, component device) start first data sector within component device Description This function is used by stacking drivers like MD and DM to ensure that all component devices have compatible block sizes and alignments. The stacking driver must provide a queue_limits struct (top) and then iteratively call the stacking function for all component (bottom) devices. The stacking function will attempt to combine the values and ensure proper alignment. Returns 0 if the top and bottom queue_limits are compatible. The top device's block sizes and alignment offsets may be adjusted to ensure alignment with the bottom device. If no compatible sizes and alignments exist, -1 is returned and the resulting top queue_limits will have the misaligned flag set to indicate that the alignment_offset is undefined. LINUX Kernel Hackers Manual July 2017 bdev_stack_limits 9 4.1.27 bdev_stack_limits adjust queue limits for stacked drivers Synopsis int bdev_stack_limits struct queue_limits * t struct block_device * bdev sector_t start Arguments t the stacking driver limits (top device) bdev the component block_device (bottom) start first data sector within component device Description Merges queue limits for a top device and a block_device. Returns 0 if alignment didn't change. Returns -1 if adding the bottom device caused misalignment. LINUX Kernel Hackers Manual July 2017 disk_stack_limits 9 4.1.27 disk_stack_limits adjust queue limits for stacked drivers Synopsis void disk_stack_limits struct gendisk * disk struct block_device * bdev sector_t offset Arguments disk MD/DM gendisk (top) bdev the underlying block device (bottom) offset offset to beginning of data within component device Description Merges the limits for a top level gendisk and a bottom level block_device. LINUX Kernel Hackers Manual July 2017 blk_queue_dma_pad 9 4.1.27 blk_queue_dma_pad set pad mask Synopsis void blk_queue_dma_pad struct request_queue * q unsigned int mask Arguments q the request queue for the device mask pad mask Description Set dma pad mask. Appending pad buffer to a request modifies the last entry of a scatter list such that it includes the pad buffer. LINUX Kernel Hackers Manual July 2017 blk_queue_update_dma_pad 9 4.1.27 blk_queue_update_dma_pad update pad mask Synopsis void blk_queue_update_dma_pad struct request_queue * q unsigned int mask Arguments q the request queue for the device mask pad mask Description Update dma pad mask. Appending pad buffer to a request modifies the last entry of a scatter list such that it includes the pad buffer. LINUX Kernel Hackers Manual July 2017 blk_queue_dma_drain 9 4.1.27 blk_queue_dma_drain Set up a drain buffer for excess dma. Synopsis int blk_queue_dma_drain struct request_queue * q dma_drain_needed_fn * dma_drain_needed void * buf unsigned int size Arguments q the request queue for the device dma_drain_needed fn which returns non-zero if drain is necessary buf physically contiguous buffer size size of the buffer in bytes Description Some devices have excess DMA problems and can't simply discard (or zero fill) the unwanted piece of the transfer. They have to have a real area of memory to transfer it into. The use case for this is ATAPI devices in DMA mode. If the packet command causes a transfer bigger than the transfer size some HBAs will lock up if there aren't DMA elements to contain the excess transfer. What this API does is adjust the queue so that the buf is always appended silently to the scatterlist. Note This routine adjusts max_hw_segments to make room for appending the drain buffer. If you call blk_queue_max_segments after calling this routine, you must set the limit to one fewer than your device can support otherwise there won't be room for the drain buffer. LINUX Kernel Hackers Manual July 2017 blk_queue_segment_boundary 9 4.1.27 blk_queue_segment_boundary set boundary rules for segment merging Synopsis void blk_queue_segment_boundary struct request_queue * q unsigned long mask Arguments q the request queue for the device mask the memory boundary mask LINUX Kernel Hackers Manual July 2017 blk_queue_dma_alignment 9 4.1.27 blk_queue_dma_alignment set dma length and memory alignment Synopsis void blk_queue_dma_alignment struct request_queue * q int mask Arguments q the request queue for the device mask alignment mask description set required memory and length alignment for direct dma transactions. this is used when building direct io requests for the queue. LINUX Kernel Hackers Manual July 2017 blk_queue_update_dma_alignment 9 4.1.27 blk_queue_update_dma_alignment update dma length and memory alignment Synopsis void blk_queue_update_dma_alignment struct request_queue * q int mask Arguments q the request queue for the device mask alignment mask description update required memory and length alignment for direct dma transactions. If the requested alignment is larger than the current alignment, then the current queue alignment is updated to the new value, otherwise it is left alone. The design of this is to allow multiple objects (driver, device, transport etc) to set their respective alignments without having them interfere. LINUX Kernel Hackers Manual July 2017 blk_queue_flush 9 4.1.27 blk_queue_flush configure queue's cache flush capability Synopsis void blk_queue_flush struct request_queue * q unsigned int flush Arguments q the request queue for the device flush 0, REQ_FLUSH or REQ_FLUSH | REQ_FUA Description Tell block layer cache flush capability of q. If it supports flushing, REQ_FLUSH should be set. If it supports bypassing write cache for individual writes, REQ_FUA should be set. LINUX Kernel Hackers Manual July 2017 blk_execute_rq_nowait 9 4.1.27 blk_execute_rq_nowait insert a request into queue for execution Synopsis void blk_execute_rq_nowait struct request_queue * q struct gendisk * bd_disk struct request * rq int at_head rq_end_io_fn * done Arguments q queue to insert the request in bd_disk matching gendisk rq request to insert at_head insert request at head or tail of queue done I/O completion handler Description Insert a fully prepared request at the back of the I/O scheduler queue for execution. Don't wait for completion. Note This function will invoke done directly if the queue is dead. LINUX Kernel Hackers Manual July 2017 blk_execute_rq 9 4.1.27 blk_execute_rq insert a request into queue for execution Synopsis int blk_execute_rq struct request_queue * q struct gendisk * bd_disk struct request * rq int at_head Arguments q queue to insert the request in bd_disk matching gendisk rq request to insert at_head insert request at head or tail of queue Description Insert a fully prepared request at the back of the I/O scheduler queue for execution and wait for completion. LINUX Kernel Hackers Manual July 2017 blkdev_issue_flush 9 4.1.27 blkdev_issue_flush queue a flush Synopsis int blkdev_issue_flush struct block_device * bdev gfp_t gfp_mask sector_t * error_sector Arguments bdev blockdev to issue flush for gfp_mask memory allocation flags (for bio_alloc) error_sector error sector Description Issue a flush for the block device in question. Caller can supply room for storing the error offset in case of a flush error, if they wish to. If WAIT flag is not passed then caller may check only what request was pushed in some internal queue for later handling. LINUX Kernel Hackers Manual July 2017 blkdev_issue_discard 9 4.1.27 blkdev_issue_discard queue a discard Synopsis int blkdev_issue_discard struct block_device * bdev sector_t sector sector_t nr_sects gfp_t gfp_mask unsigned long flags Arguments bdev blockdev to issue discard for sector start sector nr_sects number of sectors to discard gfp_mask memory allocation flags (for bio_alloc) flags BLKDEV_IFL_* flags to control behaviour Description Issue a discard request for the sectors in question. LINUX Kernel Hackers Manual July 2017 blkdev_issue_write_same 9 4.1.27 blkdev_issue_write_same queue a write same operation Synopsis int blkdev_issue_write_same struct block_device * bdev sector_t sector sector_t nr_sects gfp_t gfp_mask struct page * page Arguments bdev target blockdev sector start sector nr_sects number of sectors to write gfp_mask memory allocation flags (for bio_alloc) page page containing data to write Description Issue a write same request for the sectors in question. LINUX Kernel Hackers Manual July 2017 blkdev_issue_zeroout 9 4.1.27 blkdev_issue_zeroout zero-fill a block range Synopsis int blkdev_issue_zeroout struct block_device * bdev sector_t sector sector_t nr_sects gfp_t gfp_mask bool discard Arguments bdev blockdev to write sector start sector nr_sects number of sectors to write gfp_mask memory allocation flags (for bio_alloc) discard whether to discard the block range Description Zero-fill a block range. If the discard flag is set and the block device guarantees that subsequent READ operations to the block range in question will return zeroes, the blocks will be discarded. Should the discard request fail, if the discard flag is not set, or if discard_zeroes_data is not supported, this function will resort to zeroing the blocks manually, thus provisioning (allocating, anchoring) them. If the block device supports the WRITE SAME command blkdev_issue_zeroout will use it to optimize the process of clearing the block range. Otherwise the zeroing will be performed using regular WRITE calls. LINUX Kernel Hackers Manual July 2017 blk_queue_find_tag 9 4.1.27 blk_queue_find_tag find a request by its tag and queue Synopsis struct request * blk_queue_find_tag struct request_queue * q int tag Arguments q The request queue for the device tag The tag of the request Notes Should be used when a device returns a tag and you want to match it with a request. no locks need be held. LINUX Kernel Hackers Manual July 2017 blk_free_tags 9 4.1.27 blk_free_tags release a given set of tag maintenance info Synopsis void blk_free_tags struct blk_queue_tag * bqt Arguments bqt the tag map to free Description Drop the reference count on bqt and frees it when the last reference is dropped. LINUX Kernel Hackers Manual July 2017 blk_queue_free_tags 9 4.1.27 blk_queue_free_tags release tag maintenance info Synopsis void blk_queue_free_tags struct request_queue * q Arguments q the request queue for the device Notes This is used to disable tagged queuing to a device, yet leave queue in function. LINUX Kernel Hackers Manual July 2017 blk_init_tags 9 4.1.27 blk_init_tags initialize the tag info for an external tag map Synopsis struct blk_queue_tag * blk_init_tags int depth int alloc_policy Arguments depth the maximum queue depth supported alloc_policy tag allocation policy LINUX Kernel Hackers Manual July 2017 blk_queue_init_tags 9 4.1.27 blk_queue_init_tags initialize the queue tag info Synopsis int blk_queue_init_tags struct request_queue * q int depth struct blk_queue_tag * tags int alloc_policy Arguments q the request queue for the device depth the maximum queue depth supported tags the tag to use alloc_policy tag allocation policy Description Queue lock must be held here if the function is called to resize an existing map. LINUX Kernel Hackers Manual July 2017 blk_queue_resize_tags 9 4.1.27 blk_queue_resize_tags change the queueing depth Synopsis int blk_queue_resize_tags struct request_queue * q int new_depth Arguments q the request queue for the device new_depth the new max command queueing depth Notes Must be called with the queue lock held. LINUX Kernel Hackers Manual July 2017 blk_queue_end_tag 9 4.1.27 blk_queue_end_tag end tag operations for a request Synopsis void blk_queue_end_tag struct request_queue * q struct request * rq Arguments q the request queue for the device rq the request that has completed Description Typically called when end_that_request_first returns 0, meaning all transfers have been done for a request. It's important to call this function before end_that_request_last, as that will put the request back on the free list thus corrupting the internal tag list. Notes queue lock must be held. LINUX Kernel Hackers Manual July 2017 blk_queue_start_tag 9 4.1.27 blk_queue_start_tag find a free tag and assign it Synopsis int blk_queue_start_tag struct request_queue * q struct request * rq Arguments q the request queue for the device rq the block request that needs tagging Description This can either be used as a stand-alone helper, or possibly be assigned as the queue prep_rq_fn (in which case struct request automagically gets a tag assigned). Note that this function assumes that any type of request can be queued! if this is not true for your device, you must check the request type before calling this function. The request will also be removed from the request queue, so it's the drivers responsibility to readd it if it should need to be restarted for some reason. Notes queue lock must be held. LINUX Kernel Hackers Manual July 2017 blk_queue_invalidate_tags 9 4.1.27 blk_queue_invalidate_tags invalidate all pending tags Synopsis void blk_queue_invalidate_tags struct request_queue * q Arguments q the request queue for the device Description Hardware conditions may dictate a need to stop all pending requests. In this case, we will safely clear the block side of the tag queue and readd all requests to the request queue in the right order. Notes queue lock must be held. LINUX Kernel Hackers Manual July 2017 __blk_queue_free_tags 9 4.1.27 __blk_queue_free_tags release tag maintenance info Synopsis void __blk_queue_free_tags struct request_queue * q Arguments q the request queue for the device Notes blk_cleanup_queue will take care of calling this function, if tagging has been used. So there's no need to call this directly. LINUX Kernel Hackers Manual July 2017 blk_rq_count_integrity_sg 9 4.1.27 blk_rq_count_integrity_sg Count number of integrity scatterlist elements Synopsis int blk_rq_count_integrity_sg struct request_queue * q struct bio * bio Arguments q request queue bio bio with integrity metadata attached Description Returns the number of elements required in a scatterlist corresponding to the integrity metadata in a bio. LINUX Kernel Hackers Manual July 2017 blk_rq_map_integrity_sg 9 4.1.27 blk_rq_map_integrity_sg Map integrity metadata into a scatterlist Synopsis int blk_rq_map_integrity_sg struct request_queue * q struct bio * bio struct scatterlist * sglist Arguments q request queue bio bio with integrity metadata attached sglist target scatterlist Description Map the integrity vectors in request into a scatterlist. The scatterlist must be big enough to hold all elements. I.e. sized using blk_rq_count_integrity_sg. LINUX Kernel Hackers Manual July 2017 blk_integrity_compare 9 4.1.27 blk_integrity_compare Compare integrity profile of two disks Synopsis int blk_integrity_compare struct gendisk * gd1 struct gendisk * gd2 Arguments gd1 Disk to compare gd2 Disk to compare Description Meta-devices like DM and MD need to verify that all sub-devices use the same integrity format before advertising to upper layers that they can send/receive integrity metadata. This function can be used to check whether two gendisk devices have compatible integrity formats. LINUX Kernel Hackers Manual July 2017 blk_integrity_register 9 4.1.27 blk_integrity_register Register a gendisk as being integrity-capable Synopsis int blk_integrity_register struct gendisk * disk struct blk_integrity * template Arguments disk struct gendisk pointer to make integrity-aware template optional integrity profile to register Description When a device needs to advertise itself as being able to send/receive integrity metadata it must use this function to register the capability with the block layer. The template is a blk_integrity struct with values appropriate for the underlying hardware. If template is NULL the new profile is allocated but not filled out. See Documentation/block/data-integrity.txt. LINUX Kernel Hackers Manual July 2017 blk_integrity_unregister 9 4.1.27 blk_integrity_unregister Remove block integrity profile Synopsis void blk_integrity_unregister struct gendisk * disk Arguments disk disk whose integrity profile to deallocate Description This function frees all memory used by the block integrity profile. To be called at device teardown. LINUX Kernel Hackers Manual July 2017 blk_trace_ioctl 9 4.1.27 blk_trace_ioctl handle the ioctls associated with tracing Synopsis int blk_trace_ioctl struct block_device * bdev unsigned cmd char __user * arg Arguments bdev the block device cmd the ioctl cmd arg the argument data, if any LINUX Kernel Hackers Manual July 2017 blk_trace_shutdown 9 4.1.27 blk_trace_shutdown stop and cleanup trace structures Synopsis void blk_trace_shutdown struct request_queue * q Arguments q the request queue associated with the device LINUX Kernel Hackers Manual July 2017 blk_add_trace_rq 9 4.1.27 blk_add_trace_rq Add a trace for a request oriented action Synopsis void blk_add_trace_rq struct request_queue * q struct request * rq unsigned int nr_bytes u32 what Arguments q queue the io is for rq the source request nr_bytes number of completed bytes what the action Description Records an action against a request. Will log the bio offset + size. LINUX Kernel Hackers Manual July 2017 blk_add_trace_bio 9 4.1.27 blk_add_trace_bio Add a trace for a bio oriented action Synopsis void blk_add_trace_bio struct request_queue * q struct bio * bio u32 what int error Arguments q queue the io is for bio the source bio what the action error error, if any Description Records an action against a bio. Will log the bio offset + size. LINUX Kernel Hackers Manual July 2017 blk_add_trace_bio_remap 9 4.1.27 blk_add_trace_bio_remap Add a trace for a bio-remap operation Synopsis void blk_add_trace_bio_remap void * ignore struct request_queue * q struct bio * bio dev_t dev sector_t from Arguments ignore trace callback data parameter (not used) q queue the io is for bio the source bio dev target device from source sector Description Device mapper or raid target sometimes need to split a bio because it spans a stripe (or similar). Add a trace for that action. LINUX Kernel Hackers Manual July 2017 blk_add_trace_rq_remap 9 4.1.27 blk_add_trace_rq_remap Add a trace for a request-remap operation Synopsis void blk_add_trace_rq_remap void * ignore struct request_queue * q struct request * rq dev_t dev sector_t from Arguments ignore trace callback data parameter (not used) q queue the io is for rq the source request dev target device from source sector Description Device mapper remaps request to other devices. Add a trace for that action. LINUX Kernel Hackers Manual July 2017 blk_mangle_minor 9 4.1.27 blk_mangle_minor scatter minor numbers apart Synopsis int blk_mangle_minor int minor Arguments minor minor number to mangle Description Scatter consecutively allocated minor number apart if MANGLE_DEVT is enabled. Mangling twice gives the original value. RETURNS Mangled value. CONTEXT Don't care. LINUX Kernel Hackers Manual July 2017 blk_alloc_devt 9 4.1.27 blk_alloc_devt allocate a dev_t for a partition Synopsis int blk_alloc_devt struct hd_struct * part dev_t * devt Arguments part partition to allocate dev_t for devt out parameter for resulting dev_t Description Allocate a dev_t for block device. RETURNS 0 on success, allocated dev_t is returned in *devt. -errno on failure. CONTEXT Might sleep. LINUX Kernel Hackers Manual July 2017 blk_free_devt 9 4.1.27 blk_free_devt free a dev_t Synopsis void blk_free_devt dev_t devt Arguments devt dev_t to free Description Free devt which was allocated using blk_alloc_devt. CONTEXT Might sleep. LINUX Kernel Hackers Manual July 2017 disk_replace_part_tbl 9 4.1.27 disk_replace_part_tbl replace disk->part_tbl in RCU-safe way Synopsis void disk_replace_part_tbl struct gendisk * disk struct disk_part_tbl * new_ptbl Arguments disk disk to replace part_tbl for new_ptbl new part_tbl to install Description Replace disk->part_tbl with new_ptbl in RCU-safe way. The original ptbl is freed using RCU callback. LOCKING Matching bd_mutx locked. LINUX Kernel Hackers Manual July 2017 disk_expand_part_tbl 9 4.1.27 disk_expand_part_tbl expand disk->part_tbl Synopsis int disk_expand_part_tbl struct gendisk * disk int partno Arguments disk disk to expand part_tbl for partno expand such that this partno can fit in Description Expand disk->part_tbl such that partno can fit in. disk->part_tbl uses RCU to allow unlocked dereferencing for stats and other stuff. LOCKING Matching bd_mutex locked, might sleep. RETURNS 0 on success, -errno on failure. LINUX Kernel Hackers Manual July 2017 disk_block_events 9 4.1.27 disk_block_events block and flush disk event checking Synopsis void disk_block_events struct gendisk * disk Arguments disk disk to block events for Description On return from this function, it is guaranteed that event checking isn't in progress and won't happen until unblocked by disk_unblock_events. Events blocking is counted and the actual unblocking happens after the matching number of unblocks are done. Note that this intentionally does not block event checking from disk_clear_events. CONTEXT Might sleep. LINUX Kernel Hackers Manual July 2017 disk_unblock_events 9 4.1.27 disk_unblock_events unblock disk event checking Synopsis void disk_unblock_events struct gendisk * disk Arguments disk disk to unblock events for Description Undo disk_block_events. When the block count reaches zero, it starts events polling if configured. CONTEXT Don't care. Safe to call from irq context. LINUX Kernel Hackers Manual July 2017 disk_flush_events 9 4.1.27 disk_flush_events schedule immediate event checking and flushing Synopsis void disk_flush_events struct gendisk * disk unsigned int mask Arguments disk disk to check and flush events for mask events to flush Description Schedule immediate event checking on disk if not blocked. Events in mask are scheduled to be cleared from the driver. Note that this doesn't clear the events from disk->ev. CONTEXT If mask is non-zero must be called with bdev->bd_mutex held. LINUX Kernel Hackers Manual July 2017 disk_clear_events 9 4.1.27 disk_clear_events synchronously check, clear and return pending events Synopsis unsigned int disk_clear_events struct gendisk * disk unsigned int mask Arguments disk disk to fetch and clear events from mask mask of events to be fetched and cleared Description Disk events are synchronously checked and pending events in mask are cleared and returned. This ignores the block count. CONTEXT Might sleep. LINUX Kernel Hackers Manual July 2017 disk_get_part 9 4.1.27 disk_get_part get partition Synopsis struct hd_struct * disk_get_part struct gendisk * disk int partno Arguments disk disk to look partition from partno partition number Description Look for partition partno from disk. If found, increment reference count and return it. CONTEXT Don't care. RETURNS Pointer to the found partition on success, NULL if not found. LINUX Kernel Hackers Manual July 2017 disk_part_iter_init 9 4.1.27 disk_part_iter_init initialize partition iterator Synopsis void disk_part_iter_init struct disk_part_iter * piter struct gendisk * disk unsigned int flags Arguments piter iterator to initialize disk disk to iterate over flags DISK_PITER_* flags Description Initialize piter so that it iterates over partitions of disk. CONTEXT Don't care. LINUX Kernel Hackers Manual July 2017 disk_part_iter_next 9 4.1.27 disk_part_iter_next proceed iterator to the next partition and return it Synopsis struct hd_struct * disk_part_iter_next struct disk_part_iter * piter Arguments piter iterator of interest Description Proceed piter to the next partition and return it. CONTEXT Don't care. LINUX Kernel Hackers Manual July 2017 disk_part_iter_exit 9 4.1.27 disk_part_iter_exit finish up partition iteration Synopsis void disk_part_iter_exit struct disk_part_iter * piter Arguments piter iter of interest Description Called when iteration is over. Cleans up piter. CONTEXT Don't care. LINUX Kernel Hackers Manual July 2017 disk_map_sector_rcu 9 4.1.27 disk_map_sector_rcu map sector to partition Synopsis struct hd_struct * disk_map_sector_rcu struct gendisk * disk sector_t sector Arguments disk gendisk of interest sector sector to map Description Find out which partition sector maps to on disk. This is primarily used for stats accounting. CONTEXT RCU read locked. The returned partition pointer is valid only while preemption is disabled. RETURNS Found partition on success, part0 is returned if no partition matches LINUX Kernel Hackers Manual July 2017 register_blkdev 9 4.1.27 register_blkdev register a new block device Synopsis int register_blkdev unsigned int major const char * name Arguments major the requested major device number [1..255]. If major=0, try to allocate any unused major number. name the name of the new block device as a zero terminated string Description The name must be unique within the system. The return value depends on the major input parameter. - if a major device number was requested in range [1..255] then the function returns zero on success, or a negative error code - if any unused major number was requested with major=0 parameter then the return value is the allocated major number in range [1..255] or a negative error code otherwise LINUX Kernel Hackers Manual July 2017 add_disk 9 4.1.27 add_disk add partitioning information to kernel list Synopsis void add_disk struct gendisk * disk Arguments disk per-device partitioning information Description This function registers the partitioning information in disk with the kernel. FIXME error handling LINUX Kernel Hackers Manual July 2017 get_gendisk 9 4.1.27 get_gendisk get partitioning information for a given device Synopsis struct gendisk * get_gendisk dev_t devt int * partno Arguments devt device to get partitioning information for partno returned partition index Description This function gets the structure containing partitioning information for the given device devt. LINUX Kernel Hackers Manual July 2017 bdget_disk 9 4.1.27 bdget_disk do bdget by gendisk and partition number Synopsis struct block_device * bdget_disk struct gendisk * disk int partno Arguments disk gendisk of interest partno partition number Description Find partition partno from disk, do bdget on it. CONTEXT Don't care. RETURNS Resulting block_device on success, NULL on failure. Char devices LINUX Kernel Hackers Manual July 2017 register_chrdev_region 9 4.1.27 register_chrdev_region register a range of device numbers Synopsis int register_chrdev_region dev_t from unsigned count const char * name Arguments from the first in the desired range of device numbers; must include the major number. count the number of consecutive device numbers required name the name of the device or driver. Description Return value is zero on success, a negative error code on failure. LINUX Kernel Hackers Manual July 2017 alloc_chrdev_region 9 4.1.27 alloc_chrdev_region register a range of char device numbers Synopsis int alloc_chrdev_region dev_t * dev unsigned baseminor unsigned count const char * name Arguments dev output parameter for first assigned number baseminor first of the requested range of minor numbers count the number of minor numbers required name the name of the associated device or driver Description Allocates a range of char device numbers. The major number will be chosen dynamically, and returned (along with the first minor number) in dev. Returns zero or a negative error code. LINUX Kernel Hackers Manual July 2017 __register_chrdev 9 4.1.27 __register_chrdev create and register a cdev occupying a range of minors Synopsis int __register_chrdev unsigned int major unsigned int baseminor unsigned int count const char * name const struct file_operations * fops Arguments major major device number or 0 for dynamic allocation baseminor first of the requested range of minor numbers count the number of minor numbers required name name of this range of devices fops file operations associated with this devices Description If major == 0 this functions will dynamically allocate a major and return its number. If major > 0 this function will attempt to reserve a device with the given major number and will return zero on success. Returns a -ve errno on failure. The name of this device has nothing to do with the name of the device in /dev. It only helps to keep track of the different owners of devices. If your module name has only one type of devices it's ok to use e.g. the name of the module here. LINUX Kernel Hackers Manual July 2017 unregister_chrdev_region 9 4.1.27 unregister_chrdev_region return a range of device numbers Synopsis void unregister_chrdev_region dev_t from unsigned count Arguments from the first in the range of numbers to unregister count the number of device numbers to unregister Description This function will unregister a range of count device numbers, starting with from. The caller should normally be the one who allocated those numbers in the first place... LINUX Kernel Hackers Manual July 2017 __unregister_chrdev 9 4.1.27 __unregister_chrdev unregister and destroy a cdev Synopsis void __unregister_chrdev unsigned int major unsigned int baseminor unsigned int count const char * name Arguments major major device number baseminor first of the range of minor numbers count the number of minor numbers this cdev is occupying name name of this range of devices Description Unregister and destroy the cdev occupying the region described by major, baseminor and count. This function undoes what __register_chrdev did. LINUX Kernel Hackers Manual July 2017 cdev_add 9 4.1.27 cdev_add add a char device to the system Synopsis int cdev_add struct cdev * p dev_t dev unsigned count Arguments p the cdev structure for the device dev the first device number for which this device is responsible count the number of consecutive minor numbers corresponding to this device Description cdev_add adds the device represented by p to the system, making it live immediately. A negative error code is returned on failure. LINUX Kernel Hackers Manual July 2017 cdev_del 9 4.1.27 cdev_del remove a cdev from the system Synopsis void cdev_del struct cdev * p Arguments p the cdev structure to be removed Description cdev_del removes p from the system, possibly freeing the structure itself. LINUX Kernel Hackers Manual July 2017 cdev_alloc 9 4.1.27 cdev_alloc allocate a cdev structure Synopsis struct cdev * cdev_alloc void Arguments void no arguments Description Allocates and returns a cdev structure, or NULL on failure. LINUX Kernel Hackers Manual July 2017 cdev_init 9 4.1.27 cdev_init initialize a cdev structure Synopsis void cdev_init struct cdev * cdev const struct file_operations * fops Arguments cdev the structure to initialize fops the file_operations for this device Description Initializes cdev, remembering fops, making it ready to add to the system with cdev_add. Miscellaneous Devices LINUX Kernel Hackers Manual July 2017 misc_register 9 4.1.27 misc_register register a miscellaneous device Synopsis int misc_register struct miscdevice * misc Arguments misc device structure Register a miscellaneous device with the kernel. If the minor number is set to MISC_DYNAMIC_MINOR a minor number is assigned and placed in the minor field of the structure. For other cases the minor number requested is used. Description The structure passed is linked into the kernel and may not be destroyed until it has been unregistered. By default, an open syscall to the device sets file->private_data to point to the structure. Drivers don't need open in fops for this. A zero is returned on success and a negative errno code for failure. LINUX Kernel Hackers Manual July 2017 misc_deregister 9 4.1.27 misc_deregister unregister a miscellaneous device Synopsis int misc_deregister struct miscdevice * misc Arguments misc device to unregister Description Unregister a miscellaneous device that was previously successfully registered with misc_register. Success is indicated by a zero return, a negative errno code indicates an error. Clock Framework The clock framework defines programming interfaces to support software management of the system clock tree. This framework is widely used with System-On-Chip (SOC) platforms to support power management and various devices which may need custom clock rates. Note that these "clocks" don't relate to timekeeping or real time clocks (RTCs), each of which have separate frameworks. These struct clk instances may be used to manage for example a 96 MHz signal that is used to shift bits into and out of peripherals or busses, or otherwise trigger synchronous state machine transitions in system hardware. Power management is supported by explicit software clock gating: unused clocks are disabled, so the system doesn't waste power changing the state of transistors that aren't in active use. On some systems this may be backed by hardware clock gating, where clocks are gated without being disabled in software. Sections of chips that are powered but not clocked may be able to retain their last state. This low power state is often called a retention mode. This mode still incurs leakage currents, especially with finer circuit geometries, but for CMOS circuits power is mostly used by clocked state changes. Power-aware drivers only enable their clocks when the device they manage is in active use. Also, system sleep states often differ according to which clock domains are active: while a "standby" state may allow wakeup from several active domains, a "mem" (suspend-to-RAM) state may require a more wholesale shutdown of clocks derived from higher speed PLLs and oscillators, limiting the number of possible wakeup event sources. A driver's suspend method may need to be aware of system-specific clock constraints on the target sleep state. Some platforms support programmable clock generators. These can be used by external chips of various kinds, such as other CPUs, multimedia codecs, and devices with strict requirements for interface clocking. LINUX Kernel Hackers Manual July 2017 struct clk_notifier 9 4.1.27 struct clk_notifier associate a clk with a notifier Synopsis struct clk_notifier { struct clk * clk; struct srcu_notifier_head notifier_head; struct list_head node; }; Members clk struct clk * to associate the notifier with notifier_head a blocking_notifier_head for this clk node linked list pointers Description A list of struct clk_notifier is maintained by the notifier code. An entry is created whenever code registers the first notifier on a particular clk. Future notifiers on that clk are added to the notifier_head. LINUX Kernel Hackers Manual July 2017 struct clk_notifier_data 9 4.1.27 struct clk_notifier_data rate data to pass to the notifier callback Synopsis struct clk_notifier_data { struct clk * clk; unsigned long old_rate; unsigned long new_rate; }; Members clk struct clk * being changed old_rate previous rate of this clk new_rate new rate of this clk Description For a pre-notifier, old_rate is the clk's rate before this rate change, and new_rate is what the rate will be in the future. For a post-notifier, old_rate and new_rate are both set to the clk's current rate (this was done to optimize the implementation). LINUX Kernel Hackers Manual July 2017 clk_notifier_register 9 4.1.27 clk_notifier_register change notifier callback Synopsis int clk_notifier_register struct clk * clk struct notifier_block * nb Arguments clk clock whose rate we are interested in nb notifier block with callback function pointer ProTip debugging across notifier chains can be frustrating. Make sure that your notifier callback function prints a nice big warning in case of failure. LINUX Kernel Hackers Manual July 2017 clk_notifier_unregister 9 4.1.27 clk_notifier_unregister change notifier callback Synopsis int clk_notifier_unregister struct clk * clk struct notifier_block * nb Arguments clk clock whose rate we are no longer interested in nb notifier block which will be unregistered LINUX Kernel Hackers Manual July 2017 clk_get_accuracy 9 4.1.27 clk_get_accuracy obtain the clock accuracy in ppb (parts per billion) for a clock source. Synopsis long clk_get_accuracy struct clk * clk Arguments clk clock source Description This gets the clock source accuracy expressed in ppb. A perfect clock returns 0. LINUX Kernel Hackers Manual July 2017 clk_set_phase 9 4.1.27 clk_set_phase adjust the phase shift of a clock signal Synopsis int clk_set_phase struct clk * clk int degrees Arguments clk clock signal source degrees number of degrees the signal is shifted Description Shifts the phase of a clock signal by the specified degrees. Returns 0 on success, -EERROR otherwise. LINUX Kernel Hackers Manual July 2017 clk_get_phase 9 4.1.27 clk_get_phase return the phase shift of a clock signal Synopsis int clk_get_phase struct clk * clk Arguments clk clock signal source Description Returns the phase shift of a clock node in degrees, otherwise returns -EERROR. LINUX Kernel Hackers Manual July 2017 clk_is_match 9 4.1.27 clk_is_match check if two clk's point to the same hardware clock Synopsis bool clk_is_match const struct clk * p const struct clk * q Arguments p clk compared against q q clk compared against p Description Returns true if the two struct clk pointers both point to the same hardware clock node. Put differently, returns true if struct clk *p and struct clk *q share the same struct clk_core object. Returns false otherwise. Note that two NULL clks are treated as matching. LINUX Kernel Hackers Manual July 2017 clk_prepare 9 4.1.27 clk_prepare prepare a clock source Synopsis int clk_prepare struct clk * clk Arguments clk clock source Description This prepares the clock source for use. Must not be called from within atomic context. LINUX Kernel Hackers Manual July 2017 clk_unprepare 9 4.1.27 clk_unprepare undo preparation of a clock source Synopsis void clk_unprepare struct clk * clk Arguments clk clock source Description This undoes a previously prepared clock. The caller must balance the number of prepare and unprepare calls. Must not be called from within atomic context. LINUX Kernel Hackers Manual July 2017 clk_get 9 4.1.27 clk_get lookup and obtain a reference to a clock producer. Synopsis struct clk * clk_get struct device * dev const char * id Arguments dev device for clock consumer id clock consumer ID Description Returns a struct clk corresponding to the clock producer, or valid IS_ERR condition containing errno. The implementation uses dev and id to determine the clock consumer, and thereby the clock producer. (IOW, id may be identical strings, but clk_get may return different clock producers depending on dev.) Drivers must assume that the clock source is not enabled. clk_get should not be called from within interrupt context. LINUX Kernel Hackers Manual July 2017 devm_clk_get 9 4.1.27 devm_clk_get lookup and obtain a managed reference to a clock producer. Synopsis struct clk * devm_clk_get struct device * dev const char * id Arguments dev device for clock consumer id clock consumer ID Description Returns a struct clk corresponding to the clock producer, or valid IS_ERR condition containing errno. The implementation uses dev and id to determine the clock consumer, and thereby the clock producer. (IOW, id may be identical strings, but clk_get may return different clock producers depending on dev.) Drivers must assume that the clock source is not enabled. devm_clk_get should not be called from within interrupt context. The clock will automatically be freed when the device is unbound from the bus. LINUX Kernel Hackers Manual July 2017 clk_enable 9 4.1.27 clk_enable inform the system when the clock source should be running. Synopsis int clk_enable struct clk * clk Arguments clk clock source Description If the clock can not be enabled/disabled, this should return success. May be called from atomic contexts. Returns success (0) or negative errno. LINUX Kernel Hackers Manual July 2017 clk_disable 9 4.1.27 clk_disable inform the system when the clock source is no longer required. Synopsis void clk_disable struct clk * clk Arguments clk clock source Description Inform the system that a clock source is no longer required by a driver and may be shut down. May be called from atomic contexts. Implementation detail if the clock source is shared between multiple drivers, clk_enable calls must be balanced by the same number of clk_disable calls for the clock source to be disabled. LINUX Kernel Hackers Manual July 2017 clk_get_rate 9 4.1.27 clk_get_rate obtain the current clock rate (in Hz) for a clock source. This is only valid once the clock source has been enabled. Synopsis unsigned long clk_get_rate struct clk * clk Arguments clk clock source LINUX Kernel Hackers Manual July 2017 clk_put 9 4.1.27 clk_put "free" the clock source Synopsis void clk_put struct clk * clk Arguments clk clock source Note drivers must ensure that all clk_enable calls made on this clock source are balanced by clk_disable calls prior to calling this function. clk_put should not be called from within interrupt context. LINUX Kernel Hackers Manual July 2017 devm_clk_put 9 4.1.27 devm_clk_put "free" a managed clock source Synopsis void devm_clk_put struct device * dev struct clk * clk Arguments dev device used to acquire the clock clk clock source acquired with devm_clk_get Note drivers must ensure that all clk_enable calls made on this clock source are balanced by clk_disable calls prior to calling this function. clk_put should not be called from within interrupt context. LINUX Kernel Hackers Manual July 2017 clk_round_rate 9 4.1.27 clk_round_rate adjust a rate to the exact rate a clock can provide Synopsis long clk_round_rate struct clk * clk unsigned long rate Arguments clk clock source rate desired clock rate in Hz Description Returns rounded clock rate in Hz, or negative errno. LINUX Kernel Hackers Manual July 2017 clk_set_rate 9 4.1.27 clk_set_rate set the clock rate for a clock source Synopsis int clk_set_rate struct clk * clk unsigned long rate Arguments clk clock source rate desired clock rate in Hz Description Returns success (0) or negative errno. LINUX Kernel Hackers Manual July 2017 clk_has_parent 9 4.1.27 clk_has_parent check if a clock is a possible parent for another Synopsis bool clk_has_parent struct clk * clk struct clk * parent Arguments clk clock source parent parent clock source Description This function can be used in drivers that need to check that a clock can be the parent of another without actually changing the parent. Returns true if parent is a possible parent for clk, false otherwise. LINUX Kernel Hackers Manual July 2017 clk_set_rate_range 9 4.1.27 clk_set_rate_range set a rate range for a clock source Synopsis int clk_set_rate_range struct clk * clk unsigned long min unsigned long max Arguments clk clock source min desired minimum clock rate in Hz, inclusive max desired maximum clock rate in Hz, inclusive Description Returns success (0) or negative errno. LINUX Kernel Hackers Manual July 2017 clk_set_min_rate 9 4.1.27 clk_set_min_rate set a minimum clock rate for a clock source Synopsis int clk_set_min_rate struct clk * clk unsigned long rate Arguments clk clock source rate desired minimum clock rate in Hz, inclusive Description Returns success (0) or negative errno. LINUX Kernel Hackers Manual July 2017 clk_set_max_rate 9 4.1.27 clk_set_max_rate set a maximum clock rate for a clock source Synopsis int clk_set_max_rate struct clk * clk unsigned long rate Arguments clk clock source rate desired maximum clock rate in Hz, inclusive Description Returns success (0) or negative errno. LINUX Kernel Hackers Manual July 2017 clk_set_parent 9 4.1.27 clk_set_parent set the parent clock source for this clock Synopsis int clk_set_parent struct clk * clk struct clk * parent Arguments clk clock source parent parent clock source Description Returns success (0) or negative errno. LINUX Kernel Hackers Manual July 2017 clk_get_parent 9 4.1.27 clk_get_parent get the parent clock source for this clock Synopsis struct clk * clk_get_parent struct clk * clk Arguments clk clock source Description Returns struct clk corresponding to parent clock source, or valid IS_ERR condition containing errno. LINUX Kernel Hackers Manual July 2017 clk_get_sys 9 4.1.27 clk_get_sys get a clock based upon the device name Synopsis struct clk * clk_get_sys const char * dev_id const char * con_id Arguments dev_id device name con_id connection ID Description Returns a struct clk corresponding to the clock producer, or valid IS_ERR condition containing errno. The implementation uses dev_id and con_id to determine the clock consumer, and thereby the clock producer. In contrast to clk_get this function takes the device name instead of the device itself for identification. Drivers must assume that the clock source is not enabled. clk_get_sys should not be called from within interrupt context. LINUX Kernel Hackers Manual July 2017 clk_add_alias 9 4.1.27 clk_add_alias add a new clock alias Synopsis int clk_add_alias const char * alias const char * alias_dev_name char * id struct device * dev Arguments alias name for clock alias alias_dev_name device name id platform specific clock name dev device Description Allows using generic clock names for drivers by adding a new alias. Assumes clkdev, see clkdev.h for more info.