Linux 5.10.81
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.10.81 kernel.
All users of the 5.10 kernel series must upgrade.
The updated 5.10.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.10.y
and can be browsed at the normal kernel.org git web browser:
https://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
thanks,
greg k-h
------------
Makefile | 2 arch/parisc/kernel/entry.S | 2 arch/x86/include/asm/insn-eval.h | 1 arch/x86/include/asm/processor.h | 1 arch/x86/kernel/process.c | 1 arch/x86/kernel/traps.c | 34 +++++ arch/x86/lib/insn-eval.c | 2 drivers/block/loop.c | 17 -- drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c | 9 - drivers/net/ethernet/stmicro/stmmac/stmmac.h | 1 drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 87 ++++++++++++-- drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c | 111 +++++++++++++----- drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c | 30 +++- drivers/pci/msi.c | 27 ++-- drivers/pci/quirks.c | 6 drivers/thermal/thermal_of.c | 9 - fs/erofs/zdata.c | 15 +- fs/erofs/zpvec.h | 14 +- include/linux/blkdev.h | 8 + include/linux/pci.h | 2 init/main.c | 1 kernel/events/core.c | 10 - scripts/lld-version.sh | 35 ++++- security/Kconfig | 3 tools/testing/selftests/x86/iopl.c | 78 +++++++++--- 25 files changed, 375 insertions(+), 131 deletions(-)
Borislav Petkov (1):
selftests/x86/iopl: Adjust to the faked iopl CLI/STI usage
Gao Xiang (1):
erofs: fix unsafe pagevec reuse of hooked pclusters
Greg Kroah-Hartman (1):
Linux 5.10.81
Greg Thelen (1):
perf/core: Avoid put_page() when GUP fails
Joakim Zhang (2):
net: stmmac: add clocks management for gmac driver
net: stmmac: fix system hang if change mac address after interface ifdown
Kees Cook (1):
fortify: Explicitly disable Clang support
Marc Zyngier (2):
PCI/MSI: Deal with devices lying about their MSI mask capability
PCI: Add MSI masking quirk for Nvidia ION AHCI
Masami Hiramatsu (1):
bootconfig: init: Fix memblock leak in xbc_make_cmdline()
Michael Riesch (1):
net: stmmac: dwmac-rk: fix unbalanced pm_runtime_enable warnings
Nathan Chancellor (1):
scripts/lld-version.sh: Rewrite based on upstream ld-version.sh
Peter Zijlstra (1):
x86/iopl: Fake iopl(3) CLI/STI usage
Subbaraman Narayanamurthy (1):
thermal: Fix NULL pointer dereferences in of_thermal_ functions
Sven Schnelle (1):
parisc/entry: fix trace test in syscall exit path
Thomas Gleixner (1):
PCI/MSI: Destroy sysfs before freeing entries
Wei Yongjun (1):
net: stmmac: platform: fix build error with !CONFIG_PM_SLEEP
Wong Vee Khee (1):
net: stmmac: fix issue where clk is being unprepared twice
Xie Yongji (2):
block: Add a helper to validate the block size
loop: Use blk_validate_block_size() to validate block size
Yang Yingliang (1):
net: stmmac: fix missing unlock on error in stmmac_suspend()
Yue Hu (1):
erofs: remove the occupied parameter from z_erofs_pagevec_enqueue()
Greg Kroah-Hartman
maintainerMakefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 10 -SUBLEVEL = 80 +SUBLEVEL = 81 EXTRAVERSION = NAME = Dare mighty things
arch/parisc/kernel/entry.S +1 -1
@@ -1849,7 +1849,7 @@ syscall_restore: /* Are we being ptraced? */ LDREG TI_FLAGS-THREAD_SZ_ALGN-FRAME_SIZE(%r30),%r19 - ldi _TIF_SYSCALL_TRACE_MASK,%r2 + ldi _TIF_SINGLESTEP|_TIF_BLOCKSTEP,%r2 and,COND(=) %r19,%r2,%r0 b,n syscall_restore_rfi
arch/x86/include/asm/insn-eval.h +1 -0
@@ -21,6 +21,7 @@ int insn_get_modrm_rm_off(struct insn *insn, struct pt_regs *regs);int insn_get_modrm_reg_off (struct insn *insn,struct pt_regs *regs);unsigned long insn_get_seg_base (struct pt_regs *regs,int seg_reg_idx);int insn_get_code_seg_params (struct pt_regs *regs); +unsigned long insn_get_effective_ip (struct pt_regs *regs);int insn_fetch_from_user (struct pt_regs *regs,unsigned char buf[MAX_INSN_SIZE ]); int insn_fetch_from_user_inatomic(struct pt_regs *regs,
arch/x86/include/asm/processor.h +1 -0
@@ -534,6 +534,7 @@ struct thread_struct {*/ unsigned long iopl_emul; + unsigned int iopl_warn:1; unsigned int sig_on_uaccess_err:1;/* Floating point and extended processor state */
arch/x86/kernel/process.c +1 -0
@@ -138,6 +138,7 @@ int copy_thread(unsigned long clone_flags, unsigned long sp, unsigned long arg, frame->ret_addr = (unsigned long ) ret_from_fork; p->thread.sp = (unsigned long ) fork_frame; p->thread.io_bitmap =NULL ; + p->thread.iopl_warn =0 ;memset (p->thread.ptrace_bps,0 ,sizeof (p->thread.ptrace_bps));#ifdef CONFIG_X86_64
arch/x86/kernel/traps.c +34 -0
@@ -523,6 +523,37 @@ static enum kernel_gp_hint get_kernel_gp_address(struct pt_regs *regs,#define GPFSTR "general protection fault" +static bool fixup_iopl_exception (struct pt_regs *regs) +{ +struct thread_struct *t = ¤t->thread; +unsigned char byte; +unsigned long ip; + +if (!IS_ENABLED (CONFIG_X86_IOPL_IOPERM ) || t->iopl_emul !=3 ) +return false; + + ip =insn_get_effective_ip (regs); +if (!ip) +return false; + +if (get_user (byte, (const char __user *)ip)) +return false; + +if (byte !=0xfa && byte !=0xfb ) +return false; + +if (!t->iopl_warn &&printk_ratelimit ()) { +pr_err ("%s[%d] attempts to use CLI/STI, pretending it's a NOP, ip:%lx" , + current->comm,task_pid_nr (current), ip); +print_vma_addr (KERN_CONT " in " , ip); +pr_cont ("\n" ); + t->iopl_warn =1 ; + } + + regs->ip +=1 ; +return true; +} +DEFINE_IDTENTRY_ERRORCODE (exc_general_protection) {char desc[sizeof (GPFSTR ) +50 +2 *sizeof (unsigned long ) +1 ] =GPFSTR ;
@@ -548,6 +579,9 @@ DEFINE_IDTENTRY_ERRORCODE(exc_general_protection) tsk = current;if (user_mode (regs)) { +if (fixup_iopl_exception (regs)) + goto exit; + tsk->thread.error_code = error_code; tsk->thread.trap_nr =X86_TRAP_GP ;
arch/x86/lib/insn-eval.c +1 -1
@@ -1415,7 +1415,7 @@ void __user *insn_get_addr_ref(struct insn *insn, struct pt_regs *regs) } } -static unsigned long insn_get_effective_ip (struct pt_regs *regs) +unsigned long insn_get_effective_ip (struct pt_regs *regs) {unsigned long seg_base =0 ;
drivers/block/loop.c +2 -15
@@ -228,19 +228,6 @@ static void __loop_update_dio(struct loop_device *lo, bool dio)blk_mq_unfreeze_queue (lo->lo_queue); } -/** -* loop_validate_block_size() - validates the passed in block size -* @bsize: size to validate -*/ -static int -loop_validate_block_size (unsigned short bsize) -{ -if (bsize <512 || bsize >PAGE_SIZE || !is_power_of_2 (bsize)) -return -EINVAL ; - -return 0 ; -} -/** * loop_set_size() - sets device size and notifies userspace * @lo: struct loop_device to set the size for
@@ -1121,7 +1108,7 @@ static int loop_configure(struct loop_device *lo, fmode_t mode, }if (config->block_size) { - error =loop_validate_block_size (config->block_size); + error =blk_validate_block_size (config->block_size);if (error) goto out_unlock; }
@@ -1617,7 +1604,7 @@ static int loop_set_block_size(struct loop_device *lo, unsigned long arg)if (lo->lo_state != Lo_bound)return -ENXIO ; - err =loop_validate_block_size (arg); + err =blk_validate_block_size (arg);if (err)return err;
drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c +0 -9
@@ -21,7 +21,6 @@#include <linux/delay.h> #include <linux/mfd/syscon.h> #include <linux/regmap.h> -#include <linux/pm_runtime.h> #include "stmmac_platform.h"
@@ -1336,9 +1335,6 @@ static int rk_gmac_powerup(struct rk_priv_data *bsp_priv)return ret; } -pm_runtime_enable (dev); -pm_runtime_get_sync (dev); -if (bsp_priv->integrated_phy)rk_gmac_integrated_phy_powerup (bsp_priv);
@@ -1347,14 +1343,9 @@ static int rk_gmac_powerup(struct rk_priv_data *bsp_priv)static void rk_gmac_powerdown (struct rk_priv_data *gmac) { -struct device *dev = &gmac->pdev->dev; -if (gmac->integrated_phy)rk_gmac_integrated_phy_powerdown (gmac); -pm_runtime_put_sync (dev); -pm_runtime_disable (dev); -phy_power_on (gmac, false);gmac_clk_enable (gmac, false); }
drivers/net/ethernet/stmicro/stmmac/stmmac.h +1 -0
@@ -270,6 +270,7 @@ void stmmac_disable_eee_mode(struct stmmac_priv *priv);bool stmmac_eee_init (struct stmmac_priv *priv);int stmmac_reinit_queues (struct net_device *dev,u32 rx_cnt,u32 tx_cnt);int stmmac_reinit_ringparam (struct net_device *dev,u32 rx_size,u32 tx_size); +int stmmac_bus_clks_config (struct stmmac_priv *priv,bool enabled);#if IS_ENABLED (CONFIG_STMMAC_SELFTESTS ) void stmmac_selftest_run(struct net_device *dev,
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c +77 -10
184 lines not on this page · raw message
drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c +85 -26
219 lines not on this page · raw message
drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c +24 -6
@@ -720,7 +720,6 @@ int stmmac_pltfr_remove(struct platform_device *pdev) }EXPORT_SYMBOL_GPL (stmmac_pltfr_remove); -#ifdef CONFIG_PM_SLEEP /** * stmmac_pltfr_suspend * @dev: device pointer
@@ -728,7 +727,7 @@ EXPORT_SYMBOL_GPL(stmmac_pltfr_remove);* call the main suspend function and then, if required, on some platform, it * can call an exit helper. */ -static int stmmac_pltfr_suspend (struct device *dev) +static int __maybe_unused stmmac_pltfr_suspend (struct device *dev) {int ret;struct net_device *ndev =dev_get_drvdata (dev);
@@ -749,7 +748,7 @@ static int stmmac_pltfr_suspend(struct device *dev)* the main resume function, on some platforms, it can call own init helper * if required. */ -static int stmmac_pltfr_resume (struct device *dev) +static int __maybe_unused stmmac_pltfr_resume (struct device *dev) {struct net_device *ndev =dev_get_drvdata (dev);struct stmmac_priv *priv =netdev_priv (ndev);
@@ -760,10 +759,29 @@ static int stmmac_pltfr_resume(struct device *dev)return stmmac_resume (dev); } -#endif /* CONFIG_PM_SLEEP */ -SIMPLE_DEV_PM_OPS (stmmac_pltfr_pm_ops, stmmac_pltfr_suspend, - stmmac_pltfr_resume); +static int __maybe_unused stmmac_runtime_suspend (struct device *dev) +{ +struct net_device *ndev =dev_get_drvdata (dev); +struct stmmac_priv *priv =netdev_priv (ndev); + +stmmac_bus_clks_config (priv, false); + +return 0 ; +} + +static int __maybe_unused stmmac_runtime_resume (struct device *dev) +{ +struct net_device *ndev =dev_get_drvdata (dev); +struct stmmac_priv *priv =netdev_priv (ndev); + +return stmmac_bus_clks_config (priv, true); +} + +const struct dev_pm_ops stmmac_pltfr_pm_ops = { + SET_SYSTEM_SLEEP_PM_OPS(stmmac_pltfr_suspend, stmmac_pltfr_resume) +SET_RUNTIME_PM_OPS (stmmac_runtime_suspend, stmmac_runtime_resume,NULL ) +};EXPORT_SYMBOL_GPL (stmmac_pltfr_pm_ops);MODULE_DESCRIPTION ("STMMAC 10/100/1000 Ethernet platform support" );
drivers/pci/msi.c +15 -12
@@ -396,18 +396,6 @@ static void free_msi_irqs(struct pci_dev *dev)for (i =0 ; i < entry->nvec_used; i++)BUG_ON (irq_has_action (entry->irq + i)); -pci_msi_teardown_msi_irqs (dev); - -list_for_each_entry_safe (entry, tmp, msi_list, list) { -if (entry->msi_attrib.is_msix) { -if (list_is_last (&entry->list, msi_list)) -iounmap (entry->mask_base); - } - -list_del (&entry->list); -free_msi_entry (entry); - } -if (dev->msi_irq_groups) {sysfs_remove_groups (&dev->dev.kobj, dev->msi_irq_groups); msi_attrs = dev->msi_irq_groups[0 ]->attrs;
@@ -423,6 +411,18 @@ static void free_msi_irqs(struct pci_dev *dev)kfree (dev->msi_irq_groups); dev->msi_irq_groups =NULL ; } + +pci_msi_teardown_msi_irqs (dev); + +list_for_each_entry_safe (entry, tmp, msi_list, list) { +if (entry->msi_attrib.is_msix) { +if (list_is_last (&entry->list, msi_list)) +iounmap (entry->mask_base); + } + +list_del (&entry->list); +free_msi_entry (entry); + } }static void pci_intx_for_msi (struct pci_dev *dev,int enable)
@@ -592,6 +592,9 @@ msi_setup_entry(struct pci_dev *dev, int nvec, struct irq_affinity *affd) goto out;pci_read_config_word (dev, dev->msi_cap +PCI_MSI_FLAGS , &control); +/* Lies, damned lies, and MSIs */ +if (dev->dev_flags &PCI_DEV_FLAGS_HAS_MSI_MASKING ) + control |=PCI_MSI_FLAGS_MASKBIT ; entry->msi_attrib.is_msix =0 ; entry->msi_attrib.is_64 = !!(control &PCI_MSI_FLAGS_64BIT );
drivers/pci/quirks.c +6 -0
@@ -5756,3 +5756,9 @@ static void apex_pci_fixup_class(struct pci_dev *pdev) }DECLARE_PCI_FIXUP_CLASS_HEADER (0x1ac1 ,0x089a ,PCI_CLASS_NOT_DEFINED ,8 , apex_pci_fixup_class); + +static void nvidia_ion_ahci_fixup (struct pci_dev *pdev) +{ + pdev->dev_flags |=PCI_DEV_FLAGS_HAS_MSI_MASKING ; +} +DECLARE_PCI_FIXUP_FINAL (PCI_VENDOR_ID_NVIDIA ,0x0ab8 , nvidia_ion_ahci_fixup);
drivers/thermal/thermal_of.c +6 -3
@@ -89,7 +89,7 @@ static int of_thermal_get_temp(struct thermal_zone_device *tz, {struct __thermal_zone *data = tz->devdata; -if (!data->ops->get_temp) +if (!data->ops || !data->ops->get_temp)return -EINVAL ;return data->ops->get_temp (data->sensor_data, temp);
@@ -186,6 +186,9 @@ static int of_thermal_set_emul_temp(struct thermal_zone_device *tz, {struct __thermal_zone *data = tz->devdata; +if (!data->ops || !data->ops->set_emul_temp) +return -EINVAL ; +return data->ops->set_emul_temp (data->sensor_data, temp); }
@@ -194,7 +197,7 @@ static int of_thermal_get_trend(struct thermal_zone_device *tz, int trip, {struct __thermal_zone *data = tz->devdata; -if (!data->ops->get_trend) +if (!data->ops || !data->ops->get_trend)return -EINVAL ;return data->ops->get_trend (data->sensor_data, trip, trend);
@@ -301,7 +304,7 @@ static int of_thermal_set_trip_temp(struct thermal_zone_device *tz, int trip,if (trip >= data->ntrips || trip <0 )return -EDOM ; -if (data->ops->set_trip_temp) { +if (data->ops && data->ops->set_trip_temp) {int ret; ret = data->ops->set_trip_temp (data->sensor_data, trip, temp);
fs/erofs/zdata.c +7 -8
@@ -278,11 +278,10 @@ static inline bool z_erofs_try_inplace_io(struct z_erofs_collector *clt,/* callers must be with collection lock held */ static int z_erofs_attach_page (struct z_erofs_collector *clt, -struct page *page, -enum z_erofs_page_type type) +struct page *page,enum z_erofs_page_type type, +bool pvec_safereuse) {int ret; -bool occupied;/* give priority for inplaceio */ if (clt->mode >= COLLECT_PRIMARY &&
@@ -290,10 +289,9 @@ static int z_erofs_attach_page(struct z_erofs_collector *clt, z_erofs_try_inplace_io(clt, page))return 0 ; - ret =z_erofs_pagevec_enqueue (&clt->vector, - page, type, &occupied); + ret =z_erofs_pagevec_enqueue (&clt->vector, page, type, + pvec_safereuse); clt->cl->vcnt += (unsigned int )ret; -return ret ?0 : -EAGAIN ; }
@@ -647,7 +645,8 @@ static int z_erofs_do_read_page(struct z_erofs_decompress_frontend *fe, tight &= (clt->mode >=COLLECT_PRIMARY_FOLLOWED ); retry: - err =z_erofs_attach_page (clt, page, page_type); + err =z_erofs_attach_page (clt, page, page_type, + clt->mode >=COLLECT_PRIMARY_FOLLOWED );/* should allocate an additional staging page for pagevec */ if (err == -EAGAIN ) { struct page *const newpage =
@@ -655,7 +654,7 @@ static int z_erofs_do_read_page(struct z_erofs_decompress_frontend *fe, newpage->mapping =Z_EROFS_MAPPING_STAGING ; err =z_erofs_attach_page (clt, newpage, -Z_EROFS_PAGE_TYPE_EXCLUSIVE ); +Z_EROFS_PAGE_TYPE_EXCLUSIVE , true);if (!err) goto retry; }
fs/erofs/zpvec.h +9 -5
@@ -108,12 +108,17 @@ static inline void z_erofs_pagevec_ctor_init(struct z_erofs_pagevec_ctor *ctor,static inline bool z_erofs_pagevec_enqueue (struct z_erofs_pagevec_ctor *ctor,struct page *page,enum z_erofs_page_type type, -bool *occupied) +bool pvec_safereuse) { - *occupied = false; -if (!ctor->next && type) -if (ctor->index +1 == ctor->nr) +if (!ctor->next) { +/* some pages cannot be reused as pvec safely without I/O */ +if (type ==Z_EROFS_PAGE_TYPE_EXCLUSIVE && !pvec_safereuse) + type =Z_EROFS_VLE_PAGE_TYPE_TAIL_SHARED ; + +if (type !=Z_EROFS_PAGE_TYPE_EXCLUSIVE && + ctor->index +1 == ctor->nr)return false; + }if (ctor->index >= ctor->nr)z_erofs_pagevec_ctor_pagedown (ctor, false);
@@ -125,7 +130,6 @@ static inline bool z_erofs_pagevec_enqueue(struct z_erofs_pagevec_ctor *ctor,/* should remind that collector->next never equal to 1, 2 */ if (type == (uintptr_t )ctor->next) { ctor->next = page; - *occupied = true; } ctor->pages[ctor->index++] =tagptr_fold (erofs_vtptr_t, page, type);return true;
include/linux/blkdev.h +8 -0
@@ -59,6 +59,14 @@ struct blk_keyslot_manager;*/ #define BLKCG_MAX_POLS 5 +static inline int blk_validate_block_size (unsigned int bsize) +{ +if (bsize <512 || bsize >PAGE_SIZE || !is_power_of_2 (bsize)) +return -EINVAL ; + +return 0 ; +} +typedef void (rq_end_io_fn )(struct request *,blk_status_t );/*
include/linux/pci.h +2 -0
@@ -227,6 +227,8 @@ enum pci_dev_flags {PCI_DEV_FLAGS_NO_FLR_RESET = (__force pci_dev_flags_t) (1 <<10 ),/* Don't use Relaxed Ordering for TLPs directed at this device */ PCI_DEV_FLAGS_NO_RELAXED_ORDERING = (__force pci_dev_flags_t) (1 <<11 ), +/* Device does honor MSI masking despite saying otherwise */ + PCI_DEV_FLAGS_HAS_MSI_MASKING = (__force pci_dev_flags_t) (1 << 12), }; enum pci_irq_reroute_variant {
init/main.c +1 -0
@@ -380,6 +380,7 @@ static char * __init xbc_make_cmdline(const char *key) ret =xbc_snprint_cmdline (new_cmdline, len +1 , root);if (ret <0 || ret > len) {pr_err ("Failed to print extra kernel cmdline.\n" ); +memblock_free (__pa (new_cmdline), len +1 );return NULL ; }
kernel/events/core.c +5 -5
@@ -7036,7 +7036,6 @@ void perf_output_sample(struct perf_output_handle *handle,static u64 perf_virt_to_phys (u64 virt) {u64 phys_addr =0 ; -struct page *p =NULL ;if (!virt)return 0 ;
@@ -7055,14 +7054,15 @@ static u64 perf_virt_to_phys(u64 virt)* If failed, leave phys_addr as 0. */ if (current->mm !=NULL ) { +struct page *p; +pagefault_disable (); -if (get_user_page_fast_only (virt,0 , &p)) +if (get_user_page_fast_only (virt,0 , &p)) { phys_addr =page_to_phys (p) + virt %PAGE_SIZE ; +put_page (p); + }pagefault_enable (); } - -if (p) -put_page (p); }return phys_addr;
scripts/lld-version.sh +26 -9
@@ -6,15 +6,32 @@ # Print the linker version of `ld.lld' in a 5 or 6-digit form # such as `100001' for ld.lld 10.0.1 etc. -linker_string="$($* --version)" +set -e -if ! ( echo $linker_string | grep -q LLD ); then +# Convert the version string x.y.z to a canonical 5 or 6-digit form. +get_canonical_version() +{ + IFS=. + set -- $1 + + # If the 2nd or 3rd field is missing, fill it with a zero. + echo $((10000 * $1 + 100 * ${2:-0} + ${3:-0})) +} + +# Get the first line of the --version output. +IFS=' +' +set -- $(LC_ALL=C "$@" --version) + +# Split the line on spaces. +IFS=' ' +set -- $1 + +while [ $# -gt 1 -a "$1" != "LLD" ]; do + shift +done +if [ "$1" = LLD ]; then + echo $(get_canonical_version ${2%-*}) +else echo 0 - exit 1 fi - -VERSION=$(echo $linker_string | cut -d ' ' -f 2) -MAJOR=$(echo $VERSION | cut -d . -f 1) -MINOR=$(echo $VERSION | cut -d . -f 2) -PATCHLEVEL=$(echo $VERSION | cut -d . -f 3) -printf "%d%02d%02d\\n" $MAJOR $MINOR $PATCHLEVEL
security/Kconfig +3 -0
@@ -191,6 +191,9 @@ config HARDENED_USERCOPY_PAGESPAN config FORTIFY_SOURCE bool "Harden common str/mem functions against buffer overflows" depends on ARCH_HAS_FORTIFY_SOURCE + # https://bugs.llvm.org/show_bug.cgi?id=50322 + # https://bugs.llvm.org/show_bug.cgi?id=41459 + depends on !CC_IS_CLANG help Detect overflows of buffers in common string and memory functions where the compiler can determine and validate the buffer sizes.
tools/testing/selftests/x86/iopl.c +58 -20
122 lines not on this page · raw message