Merge d5ca39d336 ("btrfs: fix two misuses of folio_shift()") into android16-6.12
Steps on the way to 6.12.20 Resolves merge conflicts in: fs/btrfs/extent_io.c kernel/futex/core.c Change-Id: If0d75c0d1a638c34dea1a88e09ef07feed5af130 Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
This commit is contained in:
@@ -74,7 +74,7 @@ typedef elf_fpreg_t elf_fpregset_t[ELF_NFPREG];
|
||||
/*
|
||||
* This is used to ensure we don't load something for the wrong architecture.
|
||||
*/
|
||||
#define elf_check_arch(x) ((x)->e_machine == EM_ALPHA)
|
||||
#define elf_check_arch(x) (((x)->e_machine == EM_ALPHA) && !((x)->e_flags & EF_ALPHA_32BIT))
|
||||
|
||||
/*
|
||||
* These are used to set parameters in the core dumps.
|
||||
@@ -137,10 +137,6 @@ extern int dump_elf_task(elf_greg_t *dest, struct task_struct *task);
|
||||
: amask (AMASK_CIX) ? "ev6" : "ev67"); \
|
||||
})
|
||||
|
||||
#define SET_PERSONALITY(EX) \
|
||||
set_personality(((EX).e_flags & EF_ALPHA_32BIT) \
|
||||
? PER_LINUX_32BIT : PER_LINUX)
|
||||
|
||||
extern int alpha_l1i_cacheshape;
|
||||
extern int alpha_l1d_cacheshape;
|
||||
extern int alpha_l2_cacheshape;
|
||||
|
||||
@@ -360,7 +360,7 @@ static inline pte_t pte_swp_clear_exclusive(pte_t pte)
|
||||
|
||||
extern void paging_init(void);
|
||||
|
||||
/* We have our own get_unmapped_area to cope with ADDR_LIMIT_32BIT. */
|
||||
/* We have our own get_unmapped_area */
|
||||
#define HAVE_ARCH_UNMAPPED_AREA
|
||||
|
||||
#endif /* _ALPHA_PGTABLE_H */
|
||||
|
||||
@@ -8,23 +8,19 @@
|
||||
#ifndef __ASM_ALPHA_PROCESSOR_H
|
||||
#define __ASM_ALPHA_PROCESSOR_H
|
||||
|
||||
#include <linux/personality.h> /* for ADDR_LIMIT_32BIT */
|
||||
|
||||
/*
|
||||
* We have a 42-bit user address space: 4TB user VM...
|
||||
*/
|
||||
#define TASK_SIZE (0x40000000000UL)
|
||||
|
||||
#define STACK_TOP \
|
||||
(current->personality & ADDR_LIMIT_32BIT ? 0x80000000 : 0x00120000000UL)
|
||||
#define STACK_TOP (0x00120000000UL)
|
||||
|
||||
#define STACK_TOP_MAX 0x00120000000UL
|
||||
|
||||
/* This decides where the kernel will search for a free chunk of vm
|
||||
* space during mmap's.
|
||||
*/
|
||||
#define TASK_UNMAPPED_BASE \
|
||||
((current->personality & ADDR_LIMIT_32BIT) ? 0x40000000 : TASK_SIZE / 2)
|
||||
#define TASK_UNMAPPED_BASE (TASK_SIZE / 2)
|
||||
|
||||
/* This is dead. Everything has been moved to thread_info. */
|
||||
struct thread_struct { };
|
||||
|
||||
@@ -1211,8 +1211,7 @@ SYSCALL_DEFINE1(old_adjtimex, struct timex32 __user *, txc_p)
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* Get an address range which is currently unmapped. Similar to the
|
||||
generic version except that we know how to honor ADDR_LIMIT_32BIT. */
|
||||
/* Get an address range which is currently unmapped. */
|
||||
|
||||
static unsigned long
|
||||
arch_get_unmapped_area_1(unsigned long addr, unsigned long len,
|
||||
@@ -1231,13 +1230,7 @@ arch_get_unmapped_area(struct file *filp, unsigned long addr,
|
||||
unsigned long len, unsigned long pgoff,
|
||||
unsigned long flags, vm_flags_t vm_flags)
|
||||
{
|
||||
unsigned long limit;
|
||||
|
||||
/* "32 bit" actually means 31 bit, since pointers sign extend. */
|
||||
if (current->personality & ADDR_LIMIT_32BIT)
|
||||
limit = 0x80000000;
|
||||
else
|
||||
limit = TASK_SIZE;
|
||||
unsigned long limit = TASK_SIZE;
|
||||
|
||||
if (len > limit)
|
||||
return -ENOMEM;
|
||||
|
||||
@@ -563,6 +563,12 @@ static const struct dmi_system_id irq1_edge_low_force_override[] = {
|
||||
DMI_MATCH(DMI_BOARD_NAME, "RP-15"),
|
||||
},
|
||||
},
|
||||
{
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Eluktronics Inc."),
|
||||
DMI_MATCH(DMI_BOARD_NAME, "MECH-17"),
|
||||
},
|
||||
},
|
||||
{
|
||||
/* TongFang GM6XGxX/TUXEDO Stellaris 16 Gen5 AMD */
|
||||
.matches = {
|
||||
|
||||
@@ -310,7 +310,10 @@ static ssize_t ibft_attr_show_nic(void *data, int type, char *buf)
|
||||
str += sprintf_ipaddr(str, nic->ip_addr);
|
||||
break;
|
||||
case ISCSI_BOOT_ETH_SUBNET_MASK:
|
||||
val = cpu_to_be32(~((1 << (32-nic->subnet_mask_prefix))-1));
|
||||
if (nic->subnet_mask_prefix > 32)
|
||||
val = cpu_to_be32(~0);
|
||||
else
|
||||
val = cpu_to_be32(~((1 << (32-nic->subnet_mask_prefix))-1));
|
||||
str += sprintf(str, "%pI4", &val);
|
||||
break;
|
||||
case ISCSI_BOOT_ETH_PREFIX_LEN:
|
||||
|
||||
@@ -994,7 +994,7 @@ bool dml21_map_dc_state_into_dml_display_cfg(const struct dc *in_dc, struct dc_s
|
||||
if (disp_cfg_stream_location < 0)
|
||||
disp_cfg_stream_location = dml_dispcfg->num_streams++;
|
||||
|
||||
ASSERT(disp_cfg_stream_location >= 0 && disp_cfg_stream_location <= __DML2_WRAPPER_MAX_STREAMS_PLANES__);
|
||||
ASSERT(disp_cfg_stream_location >= 0 && disp_cfg_stream_location < __DML2_WRAPPER_MAX_STREAMS_PLANES__);
|
||||
populate_dml21_timing_config_from_stream_state(&dml_dispcfg->stream_descriptors[disp_cfg_stream_location].timing, context->streams[stream_index], dml_ctx);
|
||||
populate_dml21_output_config_from_stream_state(&dml_dispcfg->stream_descriptors[disp_cfg_stream_location].output, context->streams[stream_index], &context->res_ctx.pipe_ctx[stream_index]);
|
||||
populate_dml21_stream_overrides_from_stream_state(&dml_dispcfg->stream_descriptors[disp_cfg_stream_location], context->streams[stream_index]);
|
||||
@@ -1018,7 +1018,7 @@ bool dml21_map_dc_state_into_dml_display_cfg(const struct dc *in_dc, struct dc_s
|
||||
if (disp_cfg_plane_location < 0)
|
||||
disp_cfg_plane_location = dml_dispcfg->num_planes++;
|
||||
|
||||
ASSERT(disp_cfg_plane_location >= 0 && disp_cfg_plane_location <= __DML2_WRAPPER_MAX_STREAMS_PLANES__);
|
||||
ASSERT(disp_cfg_plane_location >= 0 && disp_cfg_plane_location < __DML2_WRAPPER_MAX_STREAMS_PLANES__);
|
||||
|
||||
populate_dml21_surface_config_from_plane_state(in_dc, &dml_dispcfg->plane_descriptors[disp_cfg_plane_location].surface, context->stream_status[stream_index].plane_states[plane_index]);
|
||||
populate_dml21_plane_config_from_plane_state(dml_ctx, &dml_dispcfg->plane_descriptors[disp_cfg_plane_location], context->stream_status[stream_index].plane_states[plane_index], context, stream_index);
|
||||
|
||||
@@ -746,7 +746,7 @@ static void populate_dml_output_cfg_from_stream_state(struct dml_output_cfg_st *
|
||||
case SIGNAL_TYPE_DISPLAY_PORT_MST:
|
||||
case SIGNAL_TYPE_DISPLAY_PORT:
|
||||
out->OutputEncoder[location] = dml_dp;
|
||||
if (dml2->v20.scratch.hpo_stream_to_link_encoder_mapping[location] != -1)
|
||||
if (location < MAX_HPO_DP2_ENCODERS && dml2->v20.scratch.hpo_stream_to_link_encoder_mapping[location] != -1)
|
||||
out->OutputEncoder[dml2->v20.scratch.hpo_stream_to_link_encoder_mapping[location]] = dml_dp2p0;
|
||||
break;
|
||||
case SIGNAL_TYPE_EDP:
|
||||
@@ -1303,7 +1303,7 @@ void map_dc_state_into_dml_display_cfg(struct dml2_context *dml2, struct dc_stat
|
||||
if (disp_cfg_stream_location < 0)
|
||||
disp_cfg_stream_location = dml_dispcfg->num_timings++;
|
||||
|
||||
ASSERT(disp_cfg_stream_location >= 0 && disp_cfg_stream_location <= __DML2_WRAPPER_MAX_STREAMS_PLANES__);
|
||||
ASSERT(disp_cfg_stream_location >= 0 && disp_cfg_stream_location < __DML2_WRAPPER_MAX_STREAMS_PLANES__);
|
||||
|
||||
populate_dml_timing_cfg_from_stream_state(&dml_dispcfg->timing, disp_cfg_stream_location, context->streams[i]);
|
||||
populate_dml_output_cfg_from_stream_state(&dml_dispcfg->output, disp_cfg_stream_location, context->streams[i], current_pipe_context, dml2);
|
||||
@@ -1343,7 +1343,7 @@ void map_dc_state_into_dml_display_cfg(struct dml2_context *dml2, struct dc_stat
|
||||
if (disp_cfg_plane_location < 0)
|
||||
disp_cfg_plane_location = dml_dispcfg->num_surfaces++;
|
||||
|
||||
ASSERT(disp_cfg_plane_location >= 0 && disp_cfg_plane_location <= __DML2_WRAPPER_MAX_STREAMS_PLANES__);
|
||||
ASSERT(disp_cfg_plane_location >= 0 && disp_cfg_plane_location < __DML2_WRAPPER_MAX_STREAMS_PLANES__);
|
||||
|
||||
populate_dml_surface_cfg_from_plane_state(dml2->v20.dml_core_ctx.project, &dml_dispcfg->surface, disp_cfg_plane_location, context->stream_status[i].plane_states[j]);
|
||||
populate_dml_plane_cfg_from_plane_state(
|
||||
|
||||
+2
-1
@@ -1154,7 +1154,8 @@ config HID_TOPRE
|
||||
tristate "Topre REALFORCE keyboards"
|
||||
depends on HID
|
||||
help
|
||||
Say Y for N-key rollover support on Topre REALFORCE R2 108/87 key keyboards.
|
||||
Say Y for N-key rollover support on Topre REALFORCE R2 108/87 key and
|
||||
Topre REALFORCE R3S 87 key keyboards.
|
||||
|
||||
config HID_THINGM
|
||||
tristate "ThingM blink(1) USB RGB LED"
|
||||
|
||||
@@ -474,6 +474,7 @@ static int hidinput_apple_event(struct hid_device *hid, struct input_dev *input,
|
||||
hid->product == USB_DEVICE_ID_APPLE_MAGIC_KEYBOARD_NUMPAD_2015)
|
||||
table = magic_keyboard_2015_fn_keys;
|
||||
else if (hid->product == USB_DEVICE_ID_APPLE_MAGIC_KEYBOARD_2021 ||
|
||||
hid->product == USB_DEVICE_ID_APPLE_MAGIC_KEYBOARD_2024 ||
|
||||
hid->product == USB_DEVICE_ID_APPLE_MAGIC_KEYBOARD_FINGERPRINT_2021 ||
|
||||
hid->product == USB_DEVICE_ID_APPLE_MAGIC_KEYBOARD_NUMPAD_2021)
|
||||
table = apple2021_fn_keys;
|
||||
@@ -545,6 +546,9 @@ static int hidinput_apple_event(struct hid_device *hid, struct input_dev *input,
|
||||
}
|
||||
}
|
||||
|
||||
if (usage->hid == 0xc0301) /* Omoton KB066 quirk */
|
||||
code = KEY_F6;
|
||||
|
||||
if (usage->code != code) {
|
||||
input_event_with_scancode(input, usage->type, code, usage->hid, value);
|
||||
|
||||
@@ -1150,6 +1154,10 @@ static const struct hid_device_id apple_devices[] = {
|
||||
.driver_data = APPLE_HAS_FN | APPLE_ISO_TILDE_QUIRK | APPLE_RDESC_BATTERY },
|
||||
{ HID_BLUETOOTH_DEVICE(BT_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_MAGIC_KEYBOARD_2021),
|
||||
.driver_data = APPLE_HAS_FN | APPLE_ISO_TILDE_QUIRK },
|
||||
{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_MAGIC_KEYBOARD_2024),
|
||||
.driver_data = APPLE_HAS_FN | APPLE_ISO_TILDE_QUIRK | APPLE_RDESC_BATTERY },
|
||||
{ HID_BLUETOOTH_DEVICE(BT_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_MAGIC_KEYBOARD_2024),
|
||||
.driver_data = APPLE_HAS_FN | APPLE_ISO_TILDE_QUIRK },
|
||||
{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_MAGIC_KEYBOARD_FINGERPRINT_2021),
|
||||
.driver_data = APPLE_HAS_FN | APPLE_ISO_TILDE_QUIRK | APPLE_RDESC_BATTERY },
|
||||
{ HID_BLUETOOTH_DEVICE(BT_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_MAGIC_KEYBOARD_FINGERPRINT_2021),
|
||||
|
||||
@@ -184,6 +184,7 @@
|
||||
#define USB_DEVICE_ID_APPLE_IRCONTROL4 0x8242
|
||||
#define USB_DEVICE_ID_APPLE_IRCONTROL5 0x8243
|
||||
#define USB_DEVICE_ID_APPLE_MAGIC_KEYBOARD_2021 0x029c
|
||||
#define USB_DEVICE_ID_APPLE_MAGIC_KEYBOARD_2024 0x0320
|
||||
#define USB_DEVICE_ID_APPLE_MAGIC_KEYBOARD_FINGERPRINT_2021 0x029a
|
||||
#define USB_DEVICE_ID_APPLE_MAGIC_KEYBOARD_NUMPAD_2021 0x029f
|
||||
#define USB_DEVICE_ID_APPLE_TOUCHBAR_BACKLIGHT 0x8102
|
||||
@@ -1089,6 +1090,7 @@
|
||||
#define USB_DEVICE_ID_QUANTA_OPTICAL_TOUCH_3001 0x3001
|
||||
#define USB_DEVICE_ID_QUANTA_OPTICAL_TOUCH_3003 0x3003
|
||||
#define USB_DEVICE_ID_QUANTA_OPTICAL_TOUCH_3008 0x3008
|
||||
#define USB_DEVICE_ID_QUANTA_HP_5MP_CAMERA_5473 0x5473
|
||||
|
||||
#define I2C_VENDOR_ID_RAYDIUM 0x2386
|
||||
#define I2C_PRODUCT_ID_RAYDIUM_4B33 0x4b33
|
||||
@@ -1295,6 +1297,7 @@
|
||||
#define USB_VENDOR_ID_TOPRE 0x0853
|
||||
#define USB_DEVICE_ID_TOPRE_REALFORCE_R2_108 0x0148
|
||||
#define USB_DEVICE_ID_TOPRE_REALFORCE_R2_87 0x0146
|
||||
#define USB_DEVICE_ID_TOPRE_REALFORCE_R3S_87 0x0313
|
||||
|
||||
#define USB_VENDOR_ID_TOPSEED 0x0766
|
||||
#define USB_DEVICE_ID_TOPSEED_CYBERLINK 0x0204
|
||||
|
||||
@@ -891,6 +891,7 @@ static const struct hid_device_id hid_ignore_list[] = {
|
||||
{ HID_USB_DEVICE(USB_VENDOR_ID_SYNAPTICS, USB_DEVICE_ID_SYNAPTICS_DPAD) },
|
||||
#endif
|
||||
{ HID_USB_DEVICE(USB_VENDOR_ID_YEALINK, USB_DEVICE_ID_YEALINK_P1K_P4K_B2K) },
|
||||
{ HID_USB_DEVICE(USB_VENDOR_ID_QUANTA, USB_DEVICE_ID_QUANTA_HP_5MP_CAMERA_5473) },
|
||||
{ }
|
||||
};
|
||||
|
||||
|
||||
@@ -1051,10 +1051,10 @@ static void steam_mode_switch_cb(struct work_struct *work)
|
||||
struct steam_device, mode_switch);
|
||||
unsigned long flags;
|
||||
bool client_opened;
|
||||
steam->gamepad_mode = !steam->gamepad_mode;
|
||||
if (!lizard_mode)
|
||||
return;
|
||||
|
||||
steam->gamepad_mode = !steam->gamepad_mode;
|
||||
if (steam->gamepad_mode)
|
||||
steam_set_lizard_mode(steam, false);
|
||||
else {
|
||||
@@ -1623,7 +1623,7 @@ static void steam_do_deck_input_event(struct steam_device *steam,
|
||||
schedule_delayed_work(&steam->mode_switch, 45 * HZ / 100);
|
||||
}
|
||||
|
||||
if (!steam->gamepad_mode)
|
||||
if (!steam->gamepad_mode && lizard_mode)
|
||||
return;
|
||||
|
||||
lpad_touched = b10 & BIT(3);
|
||||
@@ -1693,7 +1693,7 @@ static void steam_do_deck_sensors_event(struct steam_device *steam,
|
||||
*/
|
||||
steam->sensor_timestamp_us += 4000;
|
||||
|
||||
if (!steam->gamepad_mode)
|
||||
if (!steam->gamepad_mode && lizard_mode)
|
||||
return;
|
||||
|
||||
input_event(sensors, EV_MSC, MSC_TIMESTAMP, steam->sensor_timestamp_us);
|
||||
|
||||
@@ -29,6 +29,11 @@ static const __u8 *topre_report_fixup(struct hid_device *hdev, __u8 *rdesc,
|
||||
hid_info(hdev,
|
||||
"fixing up Topre REALFORCE keyboard report descriptor\n");
|
||||
rdesc[72] = 0x02;
|
||||
} else if (*rsize >= 106 && rdesc[28] == 0x29 && rdesc[29] == 0xe7 &&
|
||||
rdesc[30] == 0x81 && rdesc[31] == 0x00) {
|
||||
hid_info(hdev,
|
||||
"fixing up Topre REALFORCE keyboard report descriptor\n");
|
||||
rdesc[31] = 0x02;
|
||||
}
|
||||
return rdesc;
|
||||
}
|
||||
@@ -38,6 +43,8 @@ static const struct hid_device_id topre_id_table[] = {
|
||||
USB_DEVICE_ID_TOPRE_REALFORCE_R2_108) },
|
||||
{ HID_USB_DEVICE(USB_VENDOR_ID_TOPRE,
|
||||
USB_DEVICE_ID_TOPRE_REALFORCE_R2_87) },
|
||||
{ HID_USB_DEVICE(USB_VENDOR_ID_TOPRE,
|
||||
USB_DEVICE_ID_TOPRE_REALFORCE_R3S_87) },
|
||||
{ }
|
||||
};
|
||||
MODULE_DEVICE_TABLE(hid, topre_id_table);
|
||||
|
||||
@@ -36,6 +36,8 @@
|
||||
#define PCI_DEVICE_ID_INTEL_ISH_ARL_H 0x7745
|
||||
#define PCI_DEVICE_ID_INTEL_ISH_ARL_S 0x7F78
|
||||
#define PCI_DEVICE_ID_INTEL_ISH_LNL_M 0xA845
|
||||
#define PCI_DEVICE_ID_INTEL_ISH_PTL_H 0xE345
|
||||
#define PCI_DEVICE_ID_INTEL_ISH_PTL_P 0xE445
|
||||
|
||||
#define REVISION_ID_CHT_A0 0x6
|
||||
#define REVISION_ID_CHT_Ax_SI 0x0
|
||||
|
||||
@@ -517,6 +517,10 @@ static int ish_fw_reset_handler(struct ishtp_device *dev)
|
||||
/* ISH FW is dead */
|
||||
if (!ish_is_input_ready(dev))
|
||||
return -EPIPE;
|
||||
|
||||
/* Send clock sync at once after reset */
|
||||
ishtp_dev->prev_sync = 0;
|
||||
|
||||
/*
|
||||
* Set HOST2ISH.ILUP. Apparently we need this BEFORE sending
|
||||
* RESET_NOTIFY_ACK - FW will be checking for it
|
||||
@@ -577,15 +581,14 @@ static void fw_reset_work_fn(struct work_struct *work)
|
||||
*/
|
||||
static void _ish_sync_fw_clock(struct ishtp_device *dev)
|
||||
{
|
||||
static unsigned long prev_sync;
|
||||
uint64_t usec;
|
||||
struct ipc_time_update_msg time = {};
|
||||
|
||||
if (prev_sync && time_before(jiffies, prev_sync + 20 * HZ))
|
||||
if (dev->prev_sync && time_before(jiffies, dev->prev_sync + 20 * HZ))
|
||||
return;
|
||||
|
||||
prev_sync = jiffies;
|
||||
usec = ktime_to_us(ktime_get_boottime());
|
||||
ipc_send_mng_msg(dev, MNG_SYNC_FW_CLOCK, &usec, sizeof(uint64_t));
|
||||
dev->prev_sync = jiffies;
|
||||
/* The fields of time would be updated while sending message */
|
||||
ipc_send_mng_msg(dev, MNG_SYNC_FW_CLOCK, &time, sizeof(time));
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -26,9 +26,11 @@
|
||||
enum ishtp_driver_data_index {
|
||||
ISHTP_DRIVER_DATA_NONE,
|
||||
ISHTP_DRIVER_DATA_LNL_M,
|
||||
ISHTP_DRIVER_DATA_PTL,
|
||||
};
|
||||
|
||||
#define ISH_FW_GEN_LNL_M "lnlm"
|
||||
#define ISH_FW_GEN_PTL "ptl"
|
||||
|
||||
#define ISH_FIRMWARE_PATH(gen) "intel/ish/ish_" gen ".bin"
|
||||
#define ISH_FIRMWARE_PATH_ALL "intel/ish/ish_*.bin"
|
||||
@@ -37,6 +39,9 @@ static struct ishtp_driver_data ishtp_driver_data[] = {
|
||||
[ISHTP_DRIVER_DATA_LNL_M] = {
|
||||
.fw_generation = ISH_FW_GEN_LNL_M,
|
||||
},
|
||||
[ISHTP_DRIVER_DATA_PTL] = {
|
||||
.fw_generation = ISH_FW_GEN_PTL,
|
||||
},
|
||||
};
|
||||
|
||||
static const struct pci_device_id ish_pci_tbl[] = {
|
||||
@@ -63,6 +68,8 @@ static const struct pci_device_id ish_pci_tbl[] = {
|
||||
{PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_ISH_ARL_H)},
|
||||
{PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_ISH_ARL_S)},
|
||||
{PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_ISH_LNL_M), .driver_data = ISHTP_DRIVER_DATA_LNL_M},
|
||||
{PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_ISH_PTL_H), .driver_data = ISHTP_DRIVER_DATA_PTL},
|
||||
{PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_ISH_PTL_P), .driver_data = ISHTP_DRIVER_DATA_PTL},
|
||||
{}
|
||||
};
|
||||
MODULE_DEVICE_TABLE(pci, ish_pci_tbl);
|
||||
|
||||
@@ -242,6 +242,8 @@ struct ishtp_device {
|
||||
unsigned int ipc_tx_cnt;
|
||||
unsigned long long ipc_tx_bytes_cnt;
|
||||
|
||||
/* Time of the last clock sync */
|
||||
unsigned long prev_sync;
|
||||
const struct ishtp_hw_ops *ops;
|
||||
size_t mtu;
|
||||
uint32_t ishtp_msg_hdr;
|
||||
|
||||
@@ -48,15 +48,10 @@ mlx5_esw_bridge_lag_rep_get(struct net_device *dev, struct mlx5_eswitch *esw)
|
||||
struct list_head *iter;
|
||||
|
||||
netdev_for_each_lower_dev(dev, lower, iter) {
|
||||
struct mlx5_core_dev *mdev;
|
||||
struct mlx5e_priv *priv;
|
||||
|
||||
if (!mlx5e_eswitch_rep(lower))
|
||||
continue;
|
||||
|
||||
priv = netdev_priv(lower);
|
||||
mdev = priv->mdev;
|
||||
if (mlx5_lag_is_shared_fdb(mdev) && mlx5_esw_bridge_dev_same_esw(lower, esw))
|
||||
if (mlx5_esw_bridge_dev_same_esw(lower, esw))
|
||||
return lower;
|
||||
}
|
||||
|
||||
@@ -125,7 +120,7 @@ static bool mlx5_esw_bridge_is_local(struct net_device *dev, struct net_device *
|
||||
priv = netdev_priv(rep);
|
||||
mdev = priv->mdev;
|
||||
if (netif_is_lag_master(dev))
|
||||
return mlx5_lag_is_shared_fdb(mdev) && mlx5_lag_is_master(mdev);
|
||||
return mlx5_lag_is_master(mdev);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -455,6 +450,9 @@ static int mlx5_esw_bridge_switchdev_event(struct notifier_block *nb,
|
||||
if (!rep)
|
||||
return NOTIFY_DONE;
|
||||
|
||||
if (netif_is_lag_master(dev) && !mlx5_lag_is_shared_fdb(esw->dev))
|
||||
return NOTIFY_DONE;
|
||||
|
||||
switch (event) {
|
||||
case SWITCHDEV_FDB_ADD_TO_BRIDGE:
|
||||
fdb_info = container_of(info,
|
||||
|
||||
@@ -5099,11 +5099,9 @@ static int mlx5e_bridge_getlink(struct sk_buff *skb, u32 pid, u32 seq,
|
||||
struct mlx5e_priv *priv = netdev_priv(dev);
|
||||
struct mlx5_core_dev *mdev = priv->mdev;
|
||||
u8 mode, setting;
|
||||
int err;
|
||||
|
||||
err = mlx5_eswitch_get_vepa(mdev->priv.eswitch, &setting);
|
||||
if (err)
|
||||
return err;
|
||||
if (mlx5_eswitch_get_vepa(mdev->priv.eswitch, &setting))
|
||||
return -EOPNOTSUPP;
|
||||
mode = setting ? BRIDGE_MODE_VEPA : BRIDGE_MODE_VEB;
|
||||
return ndo_dflt_bridge_getlink(skb, pid, seq, dev,
|
||||
mode,
|
||||
|
||||
@@ -887,8 +887,8 @@ static void comp_irq_release_sf(struct mlx5_core_dev *dev, u16 vecidx)
|
||||
|
||||
static int comp_irq_request_sf(struct mlx5_core_dev *dev, u16 vecidx)
|
||||
{
|
||||
struct mlx5_irq_pool *pool = mlx5_irq_table_get_comp_irq_pool(dev);
|
||||
struct mlx5_eq_table *table = dev->priv.eq_table;
|
||||
struct mlx5_irq_pool *pool = mlx5_irq_pool_get(dev);
|
||||
struct irq_affinity_desc af_desc = {};
|
||||
struct mlx5_irq *irq;
|
||||
|
||||
|
||||
@@ -175,7 +175,7 @@ unlock:
|
||||
|
||||
void mlx5_irq_affinity_irq_release(struct mlx5_core_dev *dev, struct mlx5_irq *irq)
|
||||
{
|
||||
struct mlx5_irq_pool *pool = mlx5_irq_pool_get(dev);
|
||||
struct mlx5_irq_pool *pool = mlx5_irq_get_pool(irq);
|
||||
int cpu;
|
||||
|
||||
cpu = cpumask_first(mlx5_irq_get_affinity_mask(irq));
|
||||
|
||||
@@ -859,7 +859,7 @@ void mlx5_disable_lag(struct mlx5_lag *ldev)
|
||||
mlx5_eswitch_reload_ib_reps(ldev->pf[i].dev->priv.eswitch);
|
||||
}
|
||||
|
||||
static bool mlx5_shared_fdb_supported(struct mlx5_lag *ldev)
|
||||
bool mlx5_lag_shared_fdb_supported(struct mlx5_lag *ldev)
|
||||
{
|
||||
struct mlx5_core_dev *dev;
|
||||
int i;
|
||||
@@ -937,7 +937,7 @@ static void mlx5_do_bond(struct mlx5_lag *ldev)
|
||||
}
|
||||
|
||||
if (do_bond && !__mlx5_lag_is_active(ldev)) {
|
||||
bool shared_fdb = mlx5_shared_fdb_supported(ldev);
|
||||
bool shared_fdb = mlx5_lag_shared_fdb_supported(ldev);
|
||||
|
||||
roce_lag = mlx5_lag_is_roce_lag(ldev);
|
||||
|
||||
|
||||
@@ -92,6 +92,7 @@ mlx5_lag_is_ready(struct mlx5_lag *ldev)
|
||||
return test_bit(MLX5_LAG_FLAG_NDEVS_READY, &ldev->state_flags);
|
||||
}
|
||||
|
||||
bool mlx5_lag_shared_fdb_supported(struct mlx5_lag *ldev);
|
||||
bool mlx5_lag_check_prereq(struct mlx5_lag *ldev);
|
||||
void mlx5_modify_lag(struct mlx5_lag *ldev,
|
||||
struct lag_tracker *tracker);
|
||||
|
||||
@@ -81,7 +81,8 @@ static int enable_mpesw(struct mlx5_lag *ldev)
|
||||
if (mlx5_eswitch_mode(dev0) != MLX5_ESWITCH_OFFLOADS ||
|
||||
!MLX5_CAP_PORT_SELECTION(dev0, port_select_flow_table) ||
|
||||
!MLX5_CAP_GEN(dev0, create_lag_when_not_master_up) ||
|
||||
!mlx5_lag_check_prereq(ldev))
|
||||
!mlx5_lag_check_prereq(ldev) ||
|
||||
!mlx5_lag_shared_fdb_supported(ldev))
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
err = mlx5_mpesw_metadata_set(ldev);
|
||||
|
||||
@@ -10,12 +10,15 @@
|
||||
|
||||
struct mlx5_irq;
|
||||
struct cpu_rmap;
|
||||
struct mlx5_irq_pool;
|
||||
|
||||
int mlx5_irq_table_init(struct mlx5_core_dev *dev);
|
||||
void mlx5_irq_table_cleanup(struct mlx5_core_dev *dev);
|
||||
int mlx5_irq_table_create(struct mlx5_core_dev *dev);
|
||||
void mlx5_irq_table_destroy(struct mlx5_core_dev *dev);
|
||||
void mlx5_irq_table_free_irqs(struct mlx5_core_dev *dev);
|
||||
struct mlx5_irq_pool *
|
||||
mlx5_irq_table_get_comp_irq_pool(struct mlx5_core_dev *dev);
|
||||
int mlx5_irq_table_get_num_comp(struct mlx5_irq_table *table);
|
||||
int mlx5_irq_table_get_sfs_vec(struct mlx5_irq_table *table);
|
||||
struct mlx5_irq_table *mlx5_irq_table_get(struct mlx5_core_dev *dev);
|
||||
@@ -38,7 +41,6 @@ struct cpumask *mlx5_irq_get_affinity_mask(struct mlx5_irq *irq);
|
||||
int mlx5_irq_get_index(struct mlx5_irq *irq);
|
||||
int mlx5_irq_get_irq(const struct mlx5_irq *irq);
|
||||
|
||||
struct mlx5_irq_pool;
|
||||
#ifdef CONFIG_MLX5_SF
|
||||
struct mlx5_irq *mlx5_irq_affinity_irq_request_auto(struct mlx5_core_dev *dev,
|
||||
struct cpumask *used_cpus, u16 vecidx);
|
||||
|
||||
@@ -378,6 +378,11 @@ int mlx5_irq_get_index(struct mlx5_irq *irq)
|
||||
return irq->map.index;
|
||||
}
|
||||
|
||||
struct mlx5_irq_pool *mlx5_irq_get_pool(struct mlx5_irq *irq)
|
||||
{
|
||||
return irq->pool;
|
||||
}
|
||||
|
||||
/* irq_pool API */
|
||||
|
||||
/* requesting an irq from a given pool according to given index */
|
||||
@@ -405,18 +410,20 @@ static struct mlx5_irq_pool *sf_ctrl_irq_pool_get(struct mlx5_irq_table *irq_tab
|
||||
return irq_table->sf_ctrl_pool;
|
||||
}
|
||||
|
||||
static struct mlx5_irq_pool *sf_irq_pool_get(struct mlx5_irq_table *irq_table)
|
||||
static struct mlx5_irq_pool *
|
||||
sf_comp_irq_pool_get(struct mlx5_irq_table *irq_table)
|
||||
{
|
||||
return irq_table->sf_comp_pool;
|
||||
}
|
||||
|
||||
struct mlx5_irq_pool *mlx5_irq_pool_get(struct mlx5_core_dev *dev)
|
||||
struct mlx5_irq_pool *
|
||||
mlx5_irq_table_get_comp_irq_pool(struct mlx5_core_dev *dev)
|
||||
{
|
||||
struct mlx5_irq_table *irq_table = mlx5_irq_table_get(dev);
|
||||
struct mlx5_irq_pool *pool = NULL;
|
||||
|
||||
if (mlx5_core_is_sf(dev))
|
||||
pool = sf_irq_pool_get(irq_table);
|
||||
pool = sf_comp_irq_pool_get(irq_table);
|
||||
|
||||
/* In some configs, there won't be a pool of SFs IRQs. Hence, returning
|
||||
* the PF IRQs pool in case the SF pool doesn't exist.
|
||||
|
||||
@@ -28,7 +28,6 @@ struct mlx5_irq_pool {
|
||||
struct mlx5_core_dev *dev;
|
||||
};
|
||||
|
||||
struct mlx5_irq_pool *mlx5_irq_pool_get(struct mlx5_core_dev *dev);
|
||||
static inline bool mlx5_irq_pool_is_sf_pool(struct mlx5_irq_pool *pool)
|
||||
{
|
||||
return !strncmp("mlx5_sf", pool->name, strlen("mlx5_sf"));
|
||||
@@ -40,5 +39,6 @@ struct mlx5_irq *mlx5_irq_alloc(struct mlx5_irq_pool *pool, int i,
|
||||
int mlx5_irq_get_locked(struct mlx5_irq *irq);
|
||||
int mlx5_irq_read_locked(struct mlx5_irq *irq);
|
||||
int mlx5_irq_put(struct mlx5_irq *irq);
|
||||
struct mlx5_irq_pool *mlx5_irq_get_pool(struct mlx5_irq *irq);
|
||||
|
||||
#endif /* __PCI_IRQ_H__ */
|
||||
|
||||
@@ -16,8 +16,8 @@ struct mlx5hws_bwc_matcher {
|
||||
struct mlx5hws_matcher *matcher;
|
||||
struct mlx5hws_match_template *mt;
|
||||
struct mlx5hws_action_template *at[MLX5HWS_BWC_MATCHER_ATTACH_AT_NUM];
|
||||
u32 priority;
|
||||
u8 num_of_at;
|
||||
u16 priority;
|
||||
u8 size_log;
|
||||
u32 num_of_rules; /* atomically accessed */
|
||||
struct list_head *rules;
|
||||
|
||||
+19
-7
@@ -782,11 +782,19 @@ restart:
|
||||
static void
|
||||
nvme_fc_ctrl_connectivity_loss(struct nvme_fc_ctrl *ctrl)
|
||||
{
|
||||
enum nvme_ctrl_state state;
|
||||
unsigned long flags;
|
||||
|
||||
dev_info(ctrl->ctrl.device,
|
||||
"NVME-FC{%d}: controller connectivity lost. Awaiting "
|
||||
"Reconnect", ctrl->cnum);
|
||||
|
||||
switch (nvme_ctrl_state(&ctrl->ctrl)) {
|
||||
spin_lock_irqsave(&ctrl->lock, flags);
|
||||
set_bit(ASSOC_FAILED, &ctrl->flags);
|
||||
state = nvme_ctrl_state(&ctrl->ctrl);
|
||||
spin_unlock_irqrestore(&ctrl->lock, flags);
|
||||
|
||||
switch (state) {
|
||||
case NVME_CTRL_NEW:
|
||||
case NVME_CTRL_LIVE:
|
||||
/*
|
||||
@@ -2546,7 +2554,6 @@ nvme_fc_error_recovery(struct nvme_fc_ctrl *ctrl, char *errmsg)
|
||||
*/
|
||||
if (state == NVME_CTRL_CONNECTING) {
|
||||
__nvme_fc_abort_outstanding_ios(ctrl, true);
|
||||
set_bit(ASSOC_FAILED, &ctrl->flags);
|
||||
dev_warn(ctrl->ctrl.device,
|
||||
"NVME-FC{%d}: transport error during (re)connect\n",
|
||||
ctrl->cnum);
|
||||
@@ -3171,12 +3178,18 @@ nvme_fc_create_association(struct nvme_fc_ctrl *ctrl)
|
||||
else
|
||||
ret = nvme_fc_recreate_io_queues(ctrl);
|
||||
}
|
||||
if (!ret && test_bit(ASSOC_FAILED, &ctrl->flags))
|
||||
ret = -EIO;
|
||||
if (ret)
|
||||
goto out_term_aen_ops;
|
||||
|
||||
changed = nvme_change_ctrl_state(&ctrl->ctrl, NVME_CTRL_LIVE);
|
||||
spin_lock_irqsave(&ctrl->lock, flags);
|
||||
if (!test_bit(ASSOC_FAILED, &ctrl->flags))
|
||||
changed = nvme_change_ctrl_state(&ctrl->ctrl, NVME_CTRL_LIVE);
|
||||
else
|
||||
ret = -EIO;
|
||||
spin_unlock_irqrestore(&ctrl->lock, flags);
|
||||
|
||||
if (ret)
|
||||
goto out_term_aen_ops;
|
||||
|
||||
ctrl->ctrl.nr_reconnects = 0;
|
||||
|
||||
@@ -3582,8 +3595,7 @@ nvme_fc_init_ctrl(struct device *dev, struct nvmf_ctrl_options *opts,
|
||||
list_add_tail(&ctrl->ctrl_list, &rport->ctrl_list);
|
||||
spin_unlock_irqrestore(&rport->lock, flags);
|
||||
|
||||
if (!nvme_change_ctrl_state(&ctrl->ctrl, NVME_CTRL_RESETTING) ||
|
||||
!nvme_change_ctrl_state(&ctrl->ctrl, NVME_CTRL_CONNECTING)) {
|
||||
if (!nvme_change_ctrl_state(&ctrl->ctrl, NVME_CTRL_CONNECTING)) {
|
||||
dev_err(ctrl->ctrl.device,
|
||||
"NVME-FC{%d}: failed to init ctrl state\n", ctrl->cnum);
|
||||
goto fail_ctrl;
|
||||
|
||||
@@ -625,8 +625,8 @@ static u32 convert_ltr_scale(u32 val)
|
||||
static int pmc_core_ltr_show(struct seq_file *s, void *unused)
|
||||
{
|
||||
struct pmc_dev *pmcdev = s->private;
|
||||
u64 decoded_snoop_ltr, decoded_non_snoop_ltr;
|
||||
u32 ltr_raw_data, scale, val;
|
||||
u64 decoded_snoop_ltr, decoded_non_snoop_ltr, val;
|
||||
u32 ltr_raw_data, scale;
|
||||
u16 snoop_ltr, nonsnoop_ltr;
|
||||
unsigned int i, index, ltr_index = 0;
|
||||
|
||||
|
||||
@@ -627,8 +627,7 @@ struct powercap_control_type *powercap_register_control_type(
|
||||
dev_set_name(&control_type->dev, "%s", name);
|
||||
result = device_register(&control_type->dev);
|
||||
if (result) {
|
||||
if (control_type->allocated)
|
||||
kfree(control_type);
|
||||
put_device(&control_type->dev);
|
||||
return ERR_PTR(result);
|
||||
}
|
||||
idr_init(&control_type->idr);
|
||||
|
||||
@@ -2867,7 +2867,7 @@ qla1280_64bit_start_scsi(struct scsi_qla_host *ha, struct srb * sp)
|
||||
dprintk(3, "S/G Segment phys_addr=%x %x, len=0x%x\n",
|
||||
cpu_to_le32(upper_32_bits(dma_handle)),
|
||||
cpu_to_le32(lower_32_bits(dma_handle)),
|
||||
cpu_to_le32(sg_dma_len(sg_next(s))));
|
||||
cpu_to_le32(sg_dma_len(s)));
|
||||
remseg--;
|
||||
}
|
||||
dprintk(5, "qla1280_64bit_start_scsi: Scatter/gather "
|
||||
|
||||
@@ -245,7 +245,7 @@ static int scsi_realloc_sdev_budget_map(struct scsi_device *sdev,
|
||||
}
|
||||
ret = sbitmap_init_node(&sdev->budget_map,
|
||||
scsi_device_max_queue_depth(sdev),
|
||||
new_shift, GFP_KERNEL,
|
||||
new_shift, GFP_NOIO,
|
||||
sdev->request_queue->node, false, true);
|
||||
if (!ret)
|
||||
sbitmap_resize(&sdev->budget_map, depth);
|
||||
|
||||
@@ -212,7 +212,7 @@ int usb_phy_gen_create_phy(struct device *dev, struct usb_phy_generic *nop)
|
||||
if (of_property_read_u32(node, "clock-frequency", &clk_rate))
|
||||
clk_rate = 0;
|
||||
|
||||
needs_clk = of_property_read_bool(node, "clocks");
|
||||
needs_clk = of_property_present(node, "clocks");
|
||||
}
|
||||
nop->gpiod_reset = devm_gpiod_get_optional(dev, "reset",
|
||||
GPIOD_ASIS);
|
||||
|
||||
@@ -527,8 +527,6 @@ static void end_bbio_data_read(struct btrfs_bio *bbio)
|
||||
u64 end;
|
||||
u32 len;
|
||||
|
||||
/* For now only order 0 folios are supported for data. */
|
||||
ASSERT(folio_order(folio) == 0);
|
||||
btrfs_debug(fs_info,
|
||||
"%s: bi_sector=%llu, err=%d, mirror=%u",
|
||||
__func__, bio->bi_iter.bi_sector, bio->bi_status,
|
||||
@@ -556,7 +554,6 @@ static void end_bbio_data_read(struct btrfs_bio *bbio)
|
||||
|
||||
if (likely(uptodate)) {
|
||||
loff_t i_size = i_size_read(inode);
|
||||
pgoff_t end_index = i_size >> folio_shift(folio);
|
||||
|
||||
/*
|
||||
* Zero out the remaining part if this range straddles
|
||||
@@ -565,9 +562,11 @@ static void end_bbio_data_read(struct btrfs_bio *bbio)
|
||||
* Here we should only zero the range inside the folio,
|
||||
* not touch anything else.
|
||||
*
|
||||
* NOTE: i_size is exclusive while end is inclusive.
|
||||
* NOTE: i_size is exclusive while end is inclusive and
|
||||
* folio_contains() takes PAGE_SIZE units.
|
||||
*/
|
||||
if (folio_index(folio) == end_index && i_size <= end) {
|
||||
if (folio_contains(folio, i_size >> PAGE_SHIFT) &&
|
||||
i_size <= end) {
|
||||
u32 zero_start = max(offset_in_folio(folio, i_size),
|
||||
offset_in_folio(folio, start));
|
||||
u32 zero_len = offset_in_folio(folio, end) + 1 -
|
||||
@@ -971,7 +970,7 @@ static int btrfs_do_readpage(struct folio *folio, struct extent_map **em_cached,
|
||||
}
|
||||
}
|
||||
|
||||
if (folio->index == last_byte >> folio_shift(folio)) {
|
||||
if (folio_contains(folio, last_byte >> PAGE_SHIFT)) {
|
||||
size_t zero_offset = offset_in_folio(folio, last_byte);
|
||||
|
||||
if (zero_offset) {
|
||||
|
||||
+1
-5
@@ -1899,11 +1899,7 @@ int btrfs_qgroup_cleanup_dropped_subvolume(struct btrfs_fs_info *fs_info, u64 su
|
||||
* Commit current transaction to make sure all the rfer/excl numbers
|
||||
* get updated.
|
||||
*/
|
||||
trans = btrfs_start_transaction(fs_info->quota_root, 0);
|
||||
if (IS_ERR(trans))
|
||||
return PTR_ERR(trans);
|
||||
|
||||
ret = btrfs_commit_transaction(trans);
|
||||
ret = btrfs_commit_current_transaction(fs_info->quota_root);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
|
||||
@@ -2175,7 +2175,7 @@ tcon_exit:
|
||||
|
||||
tcon_error_exit:
|
||||
if (rsp && rsp->hdr.Status == STATUS_BAD_NETWORK_NAME)
|
||||
cifs_tcon_dbg(VFS, "BAD_NETWORK_NAME: %s\n", tree);
|
||||
cifs_dbg(VFS | ONCE, "BAD_NETWORK_NAME: %s\n", tree);
|
||||
goto tcon_exit;
|
||||
}
|
||||
|
||||
|
||||
+2
-1
@@ -21,7 +21,8 @@
|
||||
|
||||
#define VBOXSF_SUPER_MAGIC 0x786f4256 /* 'VBox' little endian */
|
||||
|
||||
static const unsigned char VBSF_MOUNT_SIGNATURE[4] = "\000\377\376\375";
|
||||
static const unsigned char VBSF_MOUNT_SIGNATURE[4] = { '\000', '\377', '\376',
|
||||
'\375' };
|
||||
|
||||
static int follow_symlinks;
|
||||
module_param(follow_symlinks, int, 0444);
|
||||
|
||||
+1
-1
@@ -349,7 +349,7 @@ int io_futex_wait(struct io_kiocb *req, unsigned int issue_flags)
|
||||
hlist_add_head(&req->hash_node, &ctx->futex_list);
|
||||
io_ring_submit_unlock(ctx, issue_flags);
|
||||
|
||||
futex_queue(&ifd->q, hb);
|
||||
futex_queue(&ifd->q, hb, NULL);
|
||||
return IOU_ISSUE_SKIP_COMPLETE;
|
||||
}
|
||||
|
||||
|
||||
+3
-2
@@ -555,7 +555,8 @@ void futex_q_unlock(struct futex_hash_bucket *hb)
|
||||
futex_hb_waiters_dec(hb);
|
||||
}
|
||||
|
||||
void __futex_queue(struct futex_q *q, struct futex_hash_bucket *hb)
|
||||
void __futex_queue(struct futex_q *q, struct futex_hash_bucket *hb,
|
||||
struct task_struct *task)
|
||||
{
|
||||
int prio;
|
||||
bool already_on_hb = false;
|
||||
@@ -574,7 +575,7 @@ void __futex_queue(struct futex_q *q, struct futex_hash_bucket *hb)
|
||||
trace_android_vh_alter_futex_plist_add(&q->list, &hb->chain, &already_on_hb);
|
||||
if (!already_on_hb)
|
||||
plist_add(&q->list, &hb->chain);
|
||||
q->task = current;
|
||||
q->task = task;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -230,13 +230,15 @@ extern int futex_get_value_locked(u32 *dest, u32 __user *from);
|
||||
extern struct futex_q *futex_top_waiter(struct futex_hash_bucket *hb, union futex_key *key);
|
||||
|
||||
extern void __futex_unqueue(struct futex_q *q);
|
||||
extern void __futex_queue(struct futex_q *q, struct futex_hash_bucket *hb);
|
||||
extern void __futex_queue(struct futex_q *q, struct futex_hash_bucket *hb,
|
||||
struct task_struct *task);
|
||||
extern int futex_unqueue(struct futex_q *q);
|
||||
|
||||
/**
|
||||
* futex_queue() - Enqueue the futex_q on the futex_hash_bucket
|
||||
* @q: The futex_q to enqueue
|
||||
* @hb: The destination hash bucket
|
||||
* @task: Task queueing this futex
|
||||
*
|
||||
* The hb->lock must be held by the caller, and is released here. A call to
|
||||
* futex_queue() is typically paired with exactly one call to futex_unqueue(). The
|
||||
@@ -244,11 +246,14 @@ extern int futex_unqueue(struct futex_q *q);
|
||||
* or nothing if the unqueue is done as part of the wake process and the unqueue
|
||||
* state is implicit in the state of woken task (see futex_wait_requeue_pi() for
|
||||
* an example).
|
||||
*
|
||||
* Note that @task may be NULL, for async usage of futexes.
|
||||
*/
|
||||
static inline void futex_queue(struct futex_q *q, struct futex_hash_bucket *hb)
|
||||
static inline void futex_queue(struct futex_q *q, struct futex_hash_bucket *hb,
|
||||
struct task_struct *task)
|
||||
__releases(&hb->lock)
|
||||
{
|
||||
__futex_queue(q, hb);
|
||||
__futex_queue(q, hb, task);
|
||||
spin_unlock(&hb->lock);
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -982,7 +982,7 @@ retry_private:
|
||||
/*
|
||||
* Only actually queue now that the atomic ops are done:
|
||||
*/
|
||||
__futex_queue(&q, hb);
|
||||
__futex_queue(&q, hb, current);
|
||||
|
||||
if (trylock) {
|
||||
ret = rt_mutex_futex_trylock(&q.pi_state->pi_mutex);
|
||||
|
||||
@@ -355,7 +355,7 @@ void futex_wait_queue(struct futex_hash_bucket *hb, struct futex_q *q,
|
||||
* access to the hash list and forcing another memory barrier.
|
||||
*/
|
||||
set_current_state(TASK_INTERRUPTIBLE|TASK_FREEZABLE);
|
||||
futex_queue(q, hb);
|
||||
futex_queue(q, hb, current);
|
||||
|
||||
/* Arm the timer */
|
||||
if (timeout)
|
||||
@@ -468,7 +468,7 @@ retry:
|
||||
* next futex. Queue each futex at this moment so hb can
|
||||
* be unlocked.
|
||||
*/
|
||||
futex_queue(q, hb);
|
||||
futex_queue(q, hb, current);
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
@@ -1267,6 +1267,8 @@ void proc_sched_show_task(struct task_struct *p, struct pid_namespace *ns,
|
||||
if (task_has_dl_policy(p)) {
|
||||
P(dl.runtime);
|
||||
P(dl.deadline);
|
||||
} else if (fair_policy(p->policy)) {
|
||||
P(se.slice);
|
||||
}
|
||||
#ifdef CONFIG_SCHED_CLASS_EXT
|
||||
__PS("ext.enabled", task_on_scx(p));
|
||||
|
||||
+12
-10
@@ -160,11 +160,6 @@ static struct hrtimer_cpu_base migration_cpu_base = {
|
||||
|
||||
#define migration_base migration_cpu_base.clock_base[0]
|
||||
|
||||
static inline bool is_migration_base(struct hrtimer_clock_base *base)
|
||||
{
|
||||
return base == &migration_base;
|
||||
}
|
||||
|
||||
/*
|
||||
* We are using hashed locking: holding per_cpu(hrtimer_bases)[n].lock
|
||||
* means that all timers which are tied to this base via timer->base are
|
||||
@@ -316,11 +311,6 @@ again:
|
||||
|
||||
#else /* CONFIG_SMP */
|
||||
|
||||
static inline bool is_migration_base(struct hrtimer_clock_base *base)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
static inline struct hrtimer_clock_base *
|
||||
lock_hrtimer_base(const struct hrtimer *timer, unsigned long *flags)
|
||||
__acquires(&timer->base->cpu_base->lock)
|
||||
@@ -1445,6 +1435,18 @@ static void hrtimer_sync_wait_running(struct hrtimer_cpu_base *cpu_base,
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef CONFIG_SMP
|
||||
static __always_inline bool is_migration_base(struct hrtimer_clock_base *base)
|
||||
{
|
||||
return base == &migration_base;
|
||||
}
|
||||
#else
|
||||
static __always_inline bool is_migration_base(struct hrtimer_clock_base *base)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* This function is called on PREEMPT_RT kernels when the fast path
|
||||
* deletion of a timer failed because the timer callback function was
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
#!/bin/sh
|
||||
#!/bin/bash
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
#
|
||||
# Test the special cpuset v1 hotplug case where a cpuset become empty of
|
||||
|
||||
@@ -383,6 +383,10 @@ static void test_statmount_mnt_point(void)
|
||||
return;
|
||||
}
|
||||
|
||||
if (!(sm->mask & STATMOUNT_MNT_POINT)) {
|
||||
ksft_test_result_fail("missing STATMOUNT_MNT_POINT in mask\n");
|
||||
return;
|
||||
}
|
||||
if (strcmp(sm->str + sm->mnt_point, "/") != 0) {
|
||||
ksft_test_result_fail("unexpected mount point: '%s' != '/'\n",
|
||||
sm->str + sm->mnt_point);
|
||||
@@ -408,6 +412,10 @@ static void test_statmount_mnt_root(void)
|
||||
strerror(errno));
|
||||
return;
|
||||
}
|
||||
if (!(sm->mask & STATMOUNT_MNT_ROOT)) {
|
||||
ksft_test_result_fail("missing STATMOUNT_MNT_ROOT in mask\n");
|
||||
return;
|
||||
}
|
||||
mnt_root = sm->str + sm->mnt_root;
|
||||
last_root = strrchr(mnt_root, '/');
|
||||
if (last_root)
|
||||
@@ -437,6 +445,10 @@ static void test_statmount_fs_type(void)
|
||||
strerror(errno));
|
||||
return;
|
||||
}
|
||||
if (!(sm->mask & STATMOUNT_FS_TYPE)) {
|
||||
ksft_test_result_fail("missing STATMOUNT_FS_TYPE in mask\n");
|
||||
return;
|
||||
}
|
||||
fs_type = sm->str + sm->fs_type;
|
||||
for (s = known_fs; s != NULL; s++) {
|
||||
if (strcmp(fs_type, *s) == 0)
|
||||
@@ -464,6 +476,11 @@ static void test_statmount_mnt_opts(void)
|
||||
return;
|
||||
}
|
||||
|
||||
if (!(sm->mask & STATMOUNT_MNT_BASIC)) {
|
||||
ksft_test_result_fail("missing STATMOUNT_MNT_BASIC in mask\n");
|
||||
return;
|
||||
}
|
||||
|
||||
while (getline(&line, &len, f_mountinfo) != -1) {
|
||||
int i;
|
||||
char *p, *p2;
|
||||
@@ -514,7 +531,10 @@ static void test_statmount_mnt_opts(void)
|
||||
if (p2)
|
||||
*p2 = '\0';
|
||||
|
||||
statmount_opts = sm->str + sm->mnt_opts;
|
||||
if (sm->mask & STATMOUNT_MNT_OPTS)
|
||||
statmount_opts = sm->str + sm->mnt_opts;
|
||||
else
|
||||
statmount_opts = "";
|
||||
if (strcmp(statmount_opts, p) != 0)
|
||||
ksft_test_result_fail(
|
||||
"unexpected mount options: '%s' != '%s'\n",
|
||||
|
||||
@@ -43,7 +43,7 @@ void BPF_STRUCT_OPS(dsp_local_on_dispatch, s32 cpu, struct task_struct *prev)
|
||||
if (!p)
|
||||
return;
|
||||
|
||||
if (p->nr_cpus_allowed == nr_cpus)
|
||||
if (p->nr_cpus_allowed == nr_cpus && !p->migration_disabled)
|
||||
target = bpf_get_prandom_u32() % nr_cpus;
|
||||
else
|
||||
target = scx_bpf_task_cpu(p);
|
||||
|
||||
Reference in New Issue
Block a user