Orange Pi5 kernel

Deprecated Linux kernel 5.10.110 for OrangePi 5/5B/5+ boards

3 Commits   0 Branches   0 Tags
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1) ===============================================
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2) Using swap files with software suspend (swsusp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3) ===============================================
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5) 	(C) 2006 Rafael J. Wysocki <rjw@sisk.pl>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7) The Linux kernel handles swap files almost in the same way as it handles swap
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8) partitions and there are only two differences between these two types of swap
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9) areas:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) (1) swap files need not be contiguous,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) (2) the header of a swap file is not in the first block of the partition that
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) holds it.  From the swsusp's point of view (1) is not a problem, because it is
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) already taken care of by the swap-handling code, but (2) has to be taken into
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) consideration.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) In principle the location of a swap file's header may be determined with the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) help of appropriate filesystem driver.  Unfortunately, however, it requires the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) filesystem holding the swap file to be mounted, and if this filesystem is
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) journaled, it cannot be mounted during resume from disk.  For this reason to
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) identify a swap file swsusp uses the name of the partition that holds the file
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) and the offset from the beginning of the partition at which the swap file's
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) header is located.  For convenience, this offset is expressed in <PAGE_SIZE>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) units.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) In order to use a swap file with swsusp, you need to:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) 1) Create the swap file and make it active, eg.::
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29)     # dd if=/dev/zero of=<swap_file_path> bs=1024 count=<swap_file_size_in_k>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30)     # mkswap <swap_file_path>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31)     # swapon <swap_file_path>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) 2) Use an application that will bmap the swap file with the help of the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) FIBMAP ioctl and determine the location of the file's swap header, as the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) offset, in <PAGE_SIZE> units, from the beginning of the partition which
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) holds the swap file.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) 3) Add the following parameters to the kernel command line::
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40)     resume=<swap_file_partition> resume_offset=<swap_file_offset>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) where <swap_file_partition> is the partition on which the swap file is located
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) and <swap_file_offset> is the offset of the swap header determined by the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) application in 2) (of course, this step may be carried out automatically
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) by the same application that determines the swap file's header offset using the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) FIBMAP ioctl)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) OR
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) Use a userland suspend application that will set the partition and offset
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) with the help of the SNAPSHOT_SET_SWAP_AREA ioctl described in
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) Documentation/power/userland-swsusp.rst (this is the only method to suspend
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) to a swap file allowing the resume to be initiated from an initrd or initramfs
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) image).
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) Now, swsusp will use the swap file in the same way in which it would use a swap
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) partition.  In particular, the swap file has to be active (ie. be present in
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) /proc/swaps) so that it can be used for suspending.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) Note that if the swap file used for suspending is deleted and recreated,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) the location of its header need not be the same as before.  Thus every time
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) this happens the value of the "resume_offset=" kernel command line parameter
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) has to be updated.