Linux 5.15.92
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.15.92 kernel.
All users of the 5.15 kernel series must upgrade.
The updated 5.15.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.15.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/arm/boot/dts/imx53-ppd.dts | 2 - arch/arm/boot/dts/vf610-zii-dev-rev-b.dts | 2 - arch/arm/boot/dts/vf610-zii-dev-rev-c.dts | 2 - arch/arm64/boot/dts/freescale/fsl-ls1012a-qds.dts | 2 - arch/arm64/boot/dts/freescale/fsl-ls1043a-qds.dts | 2 - arch/arm64/boot/dts/freescale/fsl-ls1046a-qds.dts | 2 - arch/arm64/boot/dts/freescale/fsl-ls1088a-qds.dts | 2 - arch/arm64/boot/dts/freescale/fsl-ls1088a-rdb.dts | 2 - arch/arm64/boot/dts/freescale/fsl-ls1088a-ten64.dts | 2 - arch/arm64/boot/dts/freescale/fsl-ls208xa-qds.dtsi | 2 - arch/arm64/boot/dts/freescale/fsl-ls208xa-rdb.dtsi | 2 - arch/arm64/boot/dts/freescale/fsl-lx2160a-cex7.dtsi | 2 - arch/arm64/boot/dts/freescale/imx8mm-nitrogen-r2.dts | 2 - arch/arm64/boot/dts/freescale/imx8mq-nitrogen.dts | 4 +- arch/arm64/boot/dts/freescale/imx8mq-thor96.dts | 4 +- arch/arm64/boot/dts/freescale/imx8qxp-mek.dts | 2 - block/blk-cgroup.c | 4 ++ drivers/acpi/processor_idle.c | 23 +++++++++++-- drivers/dma/imx-sdma.c | 4 +- drivers/extcon/extcon-usbc-tusb320.c | 2 - drivers/firmware/arm_scmi/driver.c | 2 + drivers/hid/hid-playstation.c | 32 +++++++++++++++++++ fs/cifs/dfs_cache.c | 6 +-- fs/erofs/zmap.c | 10 ++++- fs/ext4/resize.c | 4 +- kernel/trace/bpf_trace.c | 3 + net/bluetooth/hci_event.c | 13 +++++++ net/core/skbuff.c | 5 +- net/mctp/af_mctp.c | 6 +++ tools/include/linux/kernel.h | 2 + tools/testing/selftests/kselftest.h | 19 +++++++++++ tools/testing/selftests/kselftest_harness.h | 2 + tools/testing/selftests/vm/mremap_test.c | 1 tools/testing/selftests/vm/pkey-helpers.h | 3 + tools/testing/selftests/vm/va_128TBswitch.c | 2 - 36 files changed, 143 insertions(+), 38 deletions(-)
Baokun Li (1):
ext4: fix bad checksum after online resize
Cristian Marussi (1):
firmware: arm_scmi: Clear stale xfer->hdr.status
Dave Hansen (1):
ACPI: processor idle: Practically limit "Dummy wait" workaround to old Intel systems
Geert Uytterhoeven (3):
ARM: dts: imx: Fix pca9547 i2c-mux node name
ARM: dts: vf610: Fix pca9548 i2c-mux node names
arm64: dts: freescale: Fix pca954x i2c-mux node names
Greg Kroah-Hartman (1):
Linux 5.15.92
Hao Sun (1):
bpf: Skip task with pid=1 in send_signal_common()
Hui Wang (1):
dmaengine: imx-sdma: Fix a possible memory leak in sdma_transfer_init
Jeremy Kerr (1):
net: mctp: purge receive queues on sk destruction
Krzysztof Kozlowski (1):
arm64: dts: imx8mq-thor96: fix no-mmc property for SDHCI
Paulo Alcantara (1):
cifs: fix return of uninitialized rc in dfs_cache_update_tgthint()
Reinette Chatre (1):
selftests: Provide local define of __cpuid_count()
Roderick Colenbrander (1):
HID: playstation: sanity check DualSense calibration data.
Rong Chen (1):
extcon: usbc-tusb320: fix kernel-doc warning
Shuah Khan (2):
tools: fix ARRAY_SIZE defines in tools and selftests hdrs selftests/vm: remove ARRAY_SIZE define from individual tests
Siddh Raman Pant (1):
erofs/zmap.c: Fix incorrect offset calculation
Soenke Huster (1):
Bluetooth: fix null ptr deref on hci_sync_conn_complete_evt
Yan Zhai (1):
net: fix NULL pointer in skb_segment_list
Yu Kuai (1):
blk-cgroup: fix missing pd_online_fn() while activating policy
Greg Kroah-Hartman
maintainerMakefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 15 -SUBLEVEL = 91 +SUBLEVEL = 92 EXTRAVERSION = NAME = Trick or Treat
arch/arm/boot/dts/imx53-ppd.dts +1 -1
@@ -488,7 +488,7 @@ &i2c1 { scl-gpios = <&gpio3 21 GPIO_ACTIVE_HIGH>; status = "okay"; - i2c-switch@70 { + i2c-mux@70 { compatible = "nxp,pca9547"; #address-cells = <1>; #size-cells = <0>;
arch/arm/boot/dts/vf610-zii-dev-rev-b.dts +1 -1
@@ -343,7 +343,7 @@ gpio6: io-expander@22 { }; &i2c2 { - tca9548@70 { + i2c-mux@70 { compatible = "nxp,pca9548"; pinctrl-0 = <&pinctrl_i2c_mux_reset>; pinctrl-names = "default";
arch/arm/boot/dts/vf610-zii-dev-rev-c.dts +1 -1
@@ -340,7 +340,7 @@ eeprom@50 { }; &i2c2 { - tca9548@70 { + i2c-mux@70 { compatible = "nxp,pca9548"; pinctrl-0 = <&pinctrl_i2c_mux_reset>; pinctrl-names = "default";
arch/arm64/boot/dts/freescale/fsl-ls1012a-qds.dts +1 -1
@@ -110,7 +110,7 @@ &esdhc1 { &i2c0 { status = "okay"; - pca9547@77 { + i2c-mux@77 { compatible = "nxp,pca9547"; reg = <0x77>; #address-cells = <1>;
arch/arm64/boot/dts/freescale/fsl-ls1043a-qds.dts +1 -1
@@ -70,7 +70,7 @@ fpga: board-control@2,0 { &i2c0 { status = "okay"; - pca9547@77 { + i2c-mux@77 { compatible = "nxp,pca9547"; reg = <0x77>; #address-cells = <1>;
arch/arm64/boot/dts/freescale/fsl-ls1046a-qds.dts +1 -1
@@ -76,7 +76,7 @@ &duart1 { &i2c0 { status = "okay"; - pca9547@77 { + i2c-mux@77 { compatible = "nxp,pca9547"; reg = <0x77>; #address-cells = <1>;
arch/arm64/boot/dts/freescale/fsl-ls1088a-qds.dts +1 -1
@@ -53,7 +53,7 @@ flash@2 { &i2c0 { status = "okay"; - i2c-switch@77 { + i2c-mux@77 { compatible = "nxp,pca9547"; reg = <0x77>; #address-cells = <1>;
arch/arm64/boot/dts/freescale/fsl-ls1088a-rdb.dts +1 -1
@@ -136,7 +136,7 @@ mdio2_aquantia_phy: ethernet-phy@0 { &i2c0 { status = "okay"; - i2c-switch@77 { + i2c-mux@77 { compatible = "nxp,pca9547"; reg = <0x77>; #address-cells = <1>;
arch/arm64/boot/dts/freescale/fsl-ls1088a-ten64.dts +1 -1
@@ -245,7 +245,7 @@ rx8035: rtc@32 { &i2c3 { status = "okay"; - i2c-switch@70 { + i2c-mux@70 { compatible = "nxp,pca9540"; #address-cells = <1>; #size-cells = <0>;
arch/arm64/boot/dts/freescale/fsl-ls208xa-qds.dtsi +1 -1
@@ -44,7 +44,7 @@ cpld@3,0 { &i2c0 { status = "okay"; - pca9547@77 { + i2c-mux@77 { compatible = "nxp,pca9547"; reg = <0x77>; #address-cells = <1>;
arch/arm64/boot/dts/freescale/fsl-ls208xa-rdb.dtsi +1 -1
@@ -44,7 +44,7 @@ cpld@3,0 { &i2c0 { status = "okay"; - pca9547@75 { + i2c-mux@75 { compatible = "nxp,pca9547"; reg = <0x75>; #address-cells = <1>;
arch/arm64/boot/dts/freescale/fsl-lx2160a-cex7.dtsi +1 -1
@@ -54,7 +54,7 @@ &esdhc1 { &i2c0 { status = "okay"; - i2c-switch@77 { + i2c-mux@77 { compatible = "nxp,pca9547"; #address-cells = <1>; #size-cells = <0>;
arch/arm64/boot/dts/freescale/imx8mm-nitrogen-r2.dts +1 -1
@@ -214,7 +214,7 @@ &i2c3 { pinctrl-0 = <&pinctrl_i2c3>; status = "okay"; - i2cmux@70 { + i2c-mux@70 { compatible = "nxp,pca9540"; reg = <0x70>; #address-cells = <1>;
arch/arm64/boot/dts/freescale/imx8mq-nitrogen.dts +2 -2
@@ -133,7 +133,7 @@ &i2c1 { pinctrl-0 = <&pinctrl_i2c1>; status = "okay"; - i2cmux@70 { + i2c-mux@70 { compatible = "nxp,pca9546"; pinctrl-names = "default"; pinctrl-0 = <&pinctrl_i2c1_pca9546>;
@@ -216,7 +216,7 @@ &i2c4 { pinctrl-0 = <&pinctrl_i2c4>; status = "okay"; - pca9546: i2cmux@70 { + pca9546: i2c-mux@70 { compatible = "nxp,pca9546"; reg = <0x70>; #address-cells = <1>;
arch/arm64/boot/dts/freescale/imx8mq-thor96.dts +2 -2
@@ -339,7 +339,7 @@ &usdhc1 { bus-width = <4>; non-removable; no-sd; - no-emmc; + no-mmc; status = "okay"; brcmf: wifi@1 {
@@ -359,7 +359,7 @@ &usdhc2 { cd-gpios = <&gpio2 12 GPIO_ACTIVE_LOW>; bus-width = <4>; no-sdio; - no-emmc; + no-mmc; disable-wp; status = "okay"; };
arch/arm64/boot/dts/freescale/imx8qxp-mek.dts +1 -1
@@ -61,7 +61,7 @@ &i2c1 { pinctrl-0 = <&pinctrl_lpi2c1 &pinctrl_ioexp_rst>; status = "okay"; - i2c-switch@71 { + i2c-mux@71 { compatible = "nxp,pca9646", "nxp,pca9546"; #address-cells = <1>; #size-cells = <0>;
block/blk-cgroup.c +4 -0
@@ -1360,6 +1360,10 @@ int blkcg_activate_policy(struct request_queue *q,list_for_each_entry_reverse (blkg, &q->blkg_list, q_node) pol->pd_init_fn (blkg->pd[pol->plid]); +if (pol->pd_online_fn) +list_for_each_entry_reverse (blkg, &q->blkg_list, q_node) + pol->pd_online_fn (blkg->pd[pol->plid]); +__set_bit (pol->plid, q->blkcg_pols); ret =0 ;
drivers/acpi/processor_idle.c +20 -3
@@ -531,10 +531,27 @@ static void wait_for_freeze(void)/* No delay is needed if we are in guest */ if (boot_cpu_has (X86_FEATURE_HYPERVISOR ))return ; +/* +* Modern (>=Nehalem) Intel systems use ACPI via intel_idle, +* not this code. Assume that any Intel systems using this +* are ancient and may need the dummy wait. This also assumes +* that the motivating chipset issue was Intel-only. +*/ +if (boot_cpu_data.x86_vendor !=X86_VENDOR_INTEL ) +return ;#endif -/* Dummy wait op - must do something useless after P_LVL2 read -because chipsets cannot guarantee that STPCLK# signal -gets asserted in time to freeze execution properly. */ +/* +* Dummy wait op - must do something useless after P_LVL2 read +* because chipsets cannot guarantee that STPCLK# signal gets +* asserted in time to freeze execution properly +* +* This workaround has been in place since the original ACPI +* implementation was merged, circa 2002. +* +* If a profile is pointing to this instruction, please first +* consider moving your system to a more modern idle +* mechanism. +*/ inl (acpi_gbl_FADT.xpm_timer_block.address); }
drivers/dma/imx-sdma.c +3 -1
@@ -1428,10 +1428,12 @@ static struct sdma_desc *sdma_transfer_init(struct sdma_channel *sdmac,sdma_config_ownership (sdmac, false, true, false);if (sdma_load_context (sdmac)) - goto err_desc_out; + goto err_bd_out;return desc; +err_bd_out: +sdma_free_bd (desc); err_desc_out:kfree (desc); err_out:
drivers/extcon/extcon-usbc-tusb320.c +1 -1
@@ -1,5 +1,5 @@// SPDX-License-Identifier: GPL-2.0 -/** +/* * drivers/extcon/extcon-tusb320.c - TUSB320 extcon driver * * Copyright (C) 2020 National Instruments Corporation
drivers/firmware/arm_scmi/driver.c +2 -0
@@ -783,6 +783,8 @@ static int do_xfer(const struct scmi_protocol_handle *ph, xfer->hdr.protocol_id, xfer->hdr.seq, xfer->hdr.poll_completion); +/* Clear any stale status */ + xfer->hdr.status =SCMI_SUCCESS ; xfer->state =SCMI_XFER_SENT_OK ;/* * Even though spinlocking is not needed here since no race is possible
drivers/hid/hid-playstation.c +32 -0
@@ -626,6 +626,7 @@ static const struct attribute_group ps_device_attribute_group = {static int dualsense_get_calibration_data (struct dualsense *ds) { +struct hid_device *hdev = ds->base.hdev;short gyro_pitch_bias, gyro_pitch_plus, gyro_pitch_minus;short gyro_yaw_bias, gyro_yaw_plus, gyro_yaw_minus;short gyro_roll_bias, gyro_roll_plus, gyro_roll_minus;
@@ -636,6 +637,7 @@ static int dualsense_get_calibration_data(struct dualsense *ds)int speed_2x;int range_2g;int ret =0 ; +int i;uint8_t *buf; buf =kzalloc (DS_FEATURE_REPORT_CALIBRATION_SIZE ,GFP_KERNEL );
@@ -687,6 +689,21 @@ static int dualsense_get_calibration_data(struct dualsense *ds) ds->gyro_calib_data[2 ].sens_numer = speed_2x*DS_GYRO_RES_PER_DEG_S ; ds->gyro_calib_data[2 ].sens_denom = gyro_roll_plus - gyro_roll_minus; +/* +* Sanity check gyro calibration data. This is needed to prevent crashes +* during report handling of virtual, clone or broken devices not implementing +* calibration data properly. +*/ +for (i =0 ; i <ARRAY_SIZE (ds->gyro_calib_data); i++) { +if (ds->gyro_calib_data[i].sens_denom ==0 ) { +hid_warn (hdev,"Invalid gyro calibration data for axis (%d), disabling calibration." , + ds->gyro_calib_data[i].abs_code); + ds->gyro_calib_data[i].bias =0 ; + ds->gyro_calib_data[i].sens_numer =DS_GYRO_RANGE ; + ds->gyro_calib_data[i].sens_denom =S16_MAX ; + } + } +/* * Set accelerometer calibration and normalization parameters. * Data values will be normalized to 1/DS_ACC_RES_PER_G g.
@@ -709,6 +726,21 @@ static int dualsense_get_calibration_data(struct dualsense *ds) ds->accel_calib_data[2 ].sens_numer =2 *DS_ACC_RES_PER_G ; ds->accel_calib_data[2 ].sens_denom = range_2g; +/* +* Sanity check accelerometer calibration data. This is needed to prevent crashes +* during report handling of virtual, clone or broken devices not implementing calibration +* data properly. +*/ +for (i =0 ; i <ARRAY_SIZE (ds->accel_calib_data); i++) { +if (ds->accel_calib_data[i].sens_denom ==0 ) { +hid_warn (hdev,"Invalid accelerometer calibration data for axis (%d), disabling calibration." , + ds->accel_calib_data[i].abs_code); + ds->accel_calib_data[i].bias =0 ; + ds->accel_calib_data[i].sens_numer =DS_ACC_RANGE ; + ds->accel_calib_data[i].sens_denom =S16_MAX ; + } + } + err_free:kfree (buf);return ret;
fs/cifs/dfs_cache.c +3 -3
@@ -1050,10 +1050,10 @@ int dfs_cache_update_tgthint(const unsigned int xid, struct cifs_ses *ses, const struct nls_table *cp, int remap, const char *path, const struct dfs_cache_tgt_iterator *it) { - int rc; -const char *npath; -struct cache_entry *ce; struct cache_dfs_tgt *t; +struct cache_entry *ce; +const char *npath; +int rc =0 ; npath =dfs_cache_canonical_path (path, cp, remap);if (IS_ERR (npath))
fs/erofs/zmap.c +7 -3
@@ -700,12 +700,16 @@ static int z_erofs_iomap_begin_report(struct inode *inode, loff_t offset, iomap->type =IOMAP_HOLE ; iomap->addr =IOMAP_NULL_ADDR ;/* -* No strict rule how to describe extents for post EOF, yet -* we need do like below. Otherwise, iomap itself will get +* No strict rule on how to describe extents for post EOF, yet +* we need to do like below. Otherwise, iomap itself will get * into an endless loop on post EOF. +* +* Calculate the effective offset by subtracting extent start +* (map.m_la) from the requested offset, and add it to length. +* (NB: offset >= map.m_la always) */ if (iomap->offset >= inode->i_size) - iomap->length = length + map.m_la - offset; + iomap->length = length + offset - map.m_la; } iomap->flags =0 ;return 0 ;
fs/ext4/resize.c +2 -2
@@ -1445,8 +1445,6 @@ static void ext4_update_super(struct super_block *sb,* active. */ ext4_r_blocks_count_set (es,ext4_r_blocks_count (es) + reserved_blocks); -ext4_superblock_csum_set (sb); -unlock_buffer (sbi->s_sbh);/* Update the free space counts */ percpu_counter_add(&sbi->s_freeclusters_counter,
@@ -1474,6 +1472,8 @@ static void ext4_update_super(struct super_block *sb,ext4_calculate_overhead (sb); es->s_overhead_clusters =cpu_to_le32 (sbi->s_overhead); +ext4_superblock_csum_set (sb); +unlock_buffer (sbi->s_sbh);if (test_opt (sb,DEBUG )) printk(KERN_DEBUG "EXT4-fs: added group %u:" "%llu blocks(%llu free %llu reserved)\n", flex_gd->count,
kernel/trace/bpf_trace.c +3 -0
@@ -793,6 +793,9 @@ static int bpf_send_signal_common(u32 sig, enum pid_type type)return -EPERM ;if (unlikely (!nmi_uaccess_okay ()))return -EPERM ; +/* Task should not be pid=1 to avoid kernel panic. */ +if (unlikely (is_global_init (current))) +return -EPERM ;if (irqs_disabled ()) {/* Do an early check on signal validity. Otherwise,
net/bluetooth/hci_event.c +13 -0
@@ -4415,6 +4415,19 @@ static void hci_sync_conn_complete_evt(struct hci_dev *hdev,struct hci_ev_sync_conn_complete *ev = (void *) skb->data;struct hci_conn *conn; +switch (ev->link_type) { +case SCO_LINK : +case ESCO_LINK : +break ; +default : +/* As per Core 5.3 Vol 4 Part E 7.7.35 (p.2219), Link_Type +* for HCI_Synchronous_Connection_Complete is limited to +* either SCO or eSCO +*/ +bt_dev_err (hdev,"Ignoring connect complete event for invalid link type" ); +return ; + } +BT_DBG ("%s status 0x%2.2x" , hdev->name, ev->status);hci_dev_lock (hdev);
net/core/skbuff.c +2 -3
@@ -3884,7 +3884,7 @@ struct sk_buff *skb_segment_list(struct sk_buff *skb,skb_shinfo (skb)->frag_list =NULL ; - do { +while (list_skb) { nskb = list_skb; list_skb = list_skb->next;
@@ -3930,8 +3930,7 @@ struct sk_buff *skb_segment_list(struct sk_buff *skb,if (skb_needs_linearize (nskb, features) &&__skb_linearize (nskb)) goto err_linearize; - - }while (list_skb); + } skb->truesize = skb->truesize - delta_truesize; skb->data_len = skb->data_len - delta_len;
net/mctp/af_mctp.c +6 -0
@@ -294,6 +294,11 @@ static void mctp_sk_unhash(struct sock *sk)synchronize_rcu (); } +static void mctp_sk_destruct (struct sock *sk) +{ +skb_queue_purge (&sk->sk_receive_queue); +} +static struct proto mctp_proto = { .name ="MCTP" , .owner =THIS_MODULE ,
@@ -330,6 +335,7 @@ static int mctp_pf_create(struct net *net, struct socket *sock,return -ENOMEM ;sock_init_data (sock, sk); + sk->sk_destruct = mctp_sk_destruct; rc =0 ;if (sk->sk_prot->init)
tools/include/linux/kernel.h +2 -0
@@ -108,7 +108,9 @@ int vscnprintf(char *buf, size_t size, const char *fmt, va_list args);int scnprintf (char * buf,size_t size,const char * fmt, ...);int scnprintf_pad (char * buf,size_t size,const char * fmt, ...); +#ifndef ARRAY_SIZE #define ARRAY_SIZE (arr) (sizeof(arr) / sizeof((arr)[0]) + __must_be_array(arr)) +#endif /* * This looks more complex than it should be. But we need to
tools/testing/selftests/kselftest.h +19 -0
@@ -48,6 +48,25 @@#include <stdarg.h> #include <stdio.h> +#ifndef ARRAY_SIZE +#define ARRAY_SIZE (arr) (sizeof(arr) / sizeof((arr)[0])) +#endif + +/* +* gcc cpuid.h provides __cpuid_count() since v4.4. +* Clang/LLVM cpuid.h provides __cpuid_count() since v3.4.0. +* +* Provide local define for tests needing __cpuid_count() because +* selftests need to work in older environments that do not yet +* have __cpuid_count(). +*/ +#ifndef __cpuid_count +#define __cpuid_count (level, count, a, b, c, d) \ + __asm__ __volatile__ ("cpuid\n\t" \ + : "=a" (a), "=b" (b), "=c" (c), "=d" (d) \ + : "0" (level), "2" (count)) +#endif +/* define kselftest exit codes */ #define KSFT_PASS 0#define KSFT_FAIL 1
tools/testing/selftests/kselftest_harness.h +2 -0
@@ -671,7 +671,9 @@#define EXPECT_STRNE (expected, seen) \ __EXPECT_STR(expected, seen, !=, 0) +#ifndef ARRAY_SIZE #define ARRAY_SIZE (a) (sizeof(a) / sizeof(a[0])) +#endif /* Support an optional handler after and ASSERT_* or EXPECT_*. The approach is * not thread-safe, but it should be fine in most sane test scenarios.
tools/testing/selftests/vm/mremap_test.c +0 -1
@@ -22,7 +22,6 @@#define VALIDATION_DEFAULT_THRESHOLD 4/* 4MB */ #define VALIDATION_NO_THRESHOLD 0/* Verify the entire region */ -#define ARRAY_SIZE (x) (sizeof(x) / sizeof((x)[0]))#define MIN (X ,Y ) ((X) < (Y) ? (X) : (Y))struct config {
tools/testing/selftests/vm/pkey-helpers.h +2 -1
@@ -13,6 +13,8 @@#include <ucontext.h> #include <sys/mman.h> +#include "../kselftest.h" +/* Define some kernel-like types */ #define u8 __u8#define u16 __u16
@@ -175,7 +177,6 @@ static inline void __pkey_write_allow(int pkey, int do_allow_write)dprintf4 ("pkey_reg now: %016llx\n" ,read_pkey_reg ()); } -#define ARRAY_SIZE (x) (sizeof(x) / sizeof(*(x)))#define ALIGN_UP (x, align_to) (((x) + ((align_to)-1)) & ~((align_to)-1))#define ALIGN_DOWN (x, align_to) ((x) & ~((align_to)-1))#define ALIGN_PTR_UP (p, ptr_align_to) \
tools/testing/selftests/vm/va_128TBswitch.c +1 -1
@@ -9,7 +9,7 @@#include <sys/mman.h> #include <string.h> -#define ARRAY_SIZE (arr) (sizeof(arr) / sizeof((arr)[0])) +#include "../kselftest.h" #ifdef __powerpc64__#define PAGE_SIZE (64 << 10)