Import of kernel-5.14.0-611.26.1.el9_7
This commit is contained in:
parent
4b66a96be6
commit
d14941ba41
@ -182,26 +182,28 @@ is supported, it shall be provided with ``DPLL_A_PIN_PHASE_OFFSET``
|
||||
attribute for each parent dpll device.
|
||||
|
||||
Device may also provide ability to adjust a signal phase on a pin.
|
||||
If pin phase adjustment is supported, minimal and maximal values that pin
|
||||
handle shall be provide to the user on ``DPLL_CMD_PIN_GET`` respond
|
||||
with ``DPLL_A_PIN_PHASE_ADJUST_MIN`` and ``DPLL_A_PIN_PHASE_ADJUST_MAX``
|
||||
If pin phase adjustment is supported, minimal and maximal values and
|
||||
granularity that pin handle shall be provided to the user on
|
||||
``DPLL_CMD_PIN_GET`` respond with ``DPLL_A_PIN_PHASE_ADJUST_MIN``,
|
||||
``DPLL_A_PIN_PHASE_ADJUST_MAX`` and ``DPLL_A_PIN_PHASE_ADJUST_GRAN``
|
||||
attributes. Configured phase adjust value is provided with
|
||||
``DPLL_A_PIN_PHASE_ADJUST`` attribute of a pin, and value change can be
|
||||
requested with the same attribute with ``DPLL_CMD_PIN_SET`` command.
|
||||
|
||||
=============================== ======================================
|
||||
``DPLL_A_PIN_ID`` configured pin id
|
||||
``DPLL_A_PIN_PHASE_ADJUST_MIN`` attr minimum value of phase adjustment
|
||||
``DPLL_A_PIN_PHASE_ADJUST_MAX`` attr maximum value of phase adjustment
|
||||
``DPLL_A_PIN_PHASE_ADJUST`` attr configured value of phase
|
||||
adjustment on parent dpll device
|
||||
``DPLL_A_PIN_PARENT_DEVICE`` nested attribute for requesting
|
||||
configuration on given parent dpll
|
||||
device
|
||||
``DPLL_A_PIN_PARENT_ID`` parent dpll device id
|
||||
``DPLL_A_PIN_PHASE_OFFSET`` attr measured phase difference
|
||||
between a pin and parent dpll device
|
||||
=============================== ======================================
|
||||
================================ ==========================================
|
||||
``DPLL_A_PIN_ID`` configured pin id
|
||||
``DPLL_A_PIN_PHASE_ADJUST_GRAN`` attr granularity of phase adjustment value
|
||||
``DPLL_A_PIN_PHASE_ADJUST_MIN`` attr minimum value of phase adjustment
|
||||
``DPLL_A_PIN_PHASE_ADJUST_MAX`` attr maximum value of phase adjustment
|
||||
``DPLL_A_PIN_PHASE_ADJUST`` attr configured value of phase
|
||||
adjustment on parent dpll device
|
||||
``DPLL_A_PIN_PARENT_DEVICE`` nested attribute for requesting
|
||||
configuration on given parent dpll
|
||||
device
|
||||
``DPLL_A_PIN_PARENT_ID`` parent dpll device id
|
||||
``DPLL_A_PIN_PHASE_OFFSET`` attr measured phase difference
|
||||
between a pin and parent dpll device
|
||||
================================ ==========================================
|
||||
|
||||
All phase related values are provided in pico seconds, which represents
|
||||
time difference between signals phase. The negative value means that
|
||||
@ -343,6 +345,8 @@ according to attribute purpose.
|
||||
frequencies
|
||||
``DPLL_A_PIN_ANY_FREQUENCY_MIN`` attr minimum value of frequency
|
||||
``DPLL_A_PIN_ANY_FREQUENCY_MAX`` attr maximum value of frequency
|
||||
``DPLL_A_PIN_PHASE_ADJUST_GRAN`` attr granularity of phase
|
||||
adjustment value
|
||||
``DPLL_A_PIN_PHASE_ADJUST_MIN`` attr minimum value of phase
|
||||
adjustment
|
||||
``DPLL_A_PIN_PHASE_ADJUST_MAX`` attr maximum value of phase
|
||||
|
||||
@ -428,6 +428,13 @@ attribute-sets:
|
||||
doc: |
|
||||
A ratio of high to low state of a SYNC signal pulse embedded
|
||||
into base clock frequency. Value is in percents.
|
||||
-
|
||||
name: phase-adjust-gran
|
||||
type: u32
|
||||
doc: |
|
||||
Granularity of phase adjustment, in picoseconds. The value of
|
||||
phase adjustment must be a multiple of this granularity.
|
||||
|
||||
-
|
||||
name: pin-parent-device
|
||||
subset-of: pin
|
||||
@ -591,6 +598,7 @@ operations:
|
||||
- capabilities
|
||||
- parent-device
|
||||
- parent-pin
|
||||
- phase-adjust-gran
|
||||
- phase-adjust-min
|
||||
- phase-adjust-max
|
||||
- phase-adjust
|
||||
|
||||
@ -12,7 +12,7 @@ RHEL_MINOR = 7
|
||||
#
|
||||
# Use this spot to avoid future merge conflicts.
|
||||
# Do not trim this comment.
|
||||
RHEL_RELEASE = 611.24.1
|
||||
RHEL_RELEASE = 611.26.1
|
||||
|
||||
#
|
||||
# ZSTREAM
|
||||
|
||||
@ -1584,6 +1584,7 @@ static u64 __kvm_read_sanitised_id_reg(const struct kvm_vcpu *vcpu,
|
||||
break;
|
||||
case SYS_ID_AA64MMFR2_EL1:
|
||||
val &= ~ID_AA64MMFR2_EL1_CCIDX_MASK;
|
||||
val &= ~ID_AA64MMFR2_EL1_NV;
|
||||
break;
|
||||
case SYS_ID_MMFR4_EL1:
|
||||
val &= ~ARM64_FEATURE_MASK(ID_MMFR4_EL1_CCIDX);
|
||||
@ -1911,6 +1912,22 @@ static int set_id_aa64pfr1_el1(struct kvm_vcpu *vcpu,
|
||||
return set_id_reg(vcpu, rd, user_val);
|
||||
}
|
||||
|
||||
static int set_id_aa64mmfr2_el1(struct kvm_vcpu *vcpu,
|
||||
const struct sys_reg_desc *rd, u64 user_val)
|
||||
{
|
||||
u64 hw_val = read_sanitised_ftr_reg(SYS_ID_AA64MMFR2_EL1);
|
||||
u64 nv_mask = ID_AA64MMFR2_EL1_NV_MASK;
|
||||
|
||||
/*
|
||||
* We made the mistake to expose the now deprecated NV field,
|
||||
* so allow userspace to write it, but silently ignore it.
|
||||
*/
|
||||
if ((hw_val & nv_mask) == (user_val & nv_mask))
|
||||
user_val &= ~nv_mask;
|
||||
|
||||
return set_id_reg(vcpu, rd, user_val);
|
||||
}
|
||||
|
||||
/*
|
||||
* cpufeature ID register user accessors
|
||||
*
|
||||
@ -2673,7 +2690,8 @@ static const struct sys_reg_desc sys_reg_descs[] = {
|
||||
ID_AA64MMFR1_EL1_XNX |
|
||||
ID_AA64MMFR1_EL1_VH |
|
||||
ID_AA64MMFR1_EL1_VMIDBits)),
|
||||
ID_WRITABLE(ID_AA64MMFR2_EL1, ~(ID_AA64MMFR2_EL1_RES0 |
|
||||
ID_FILTERED(ID_AA64MMFR2_EL1,
|
||||
id_aa64mmfr2_el1, ~(ID_AA64MMFR2_EL1_RES0 |
|
||||
ID_AA64MMFR2_EL1_EVT |
|
||||
ID_AA64MMFR2_EL1_FWB |
|
||||
ID_AA64MMFR2_EL1_IDS |
|
||||
|
||||
@ -2567,3 +2567,6 @@ void __ref text_poke_bp(void *addr, const void *opcode, size_t len, const void *
|
||||
text_poke_loc_init(&tp, addr, opcode, len, emulate);
|
||||
text_poke_bp_batch(&tp, 1);
|
||||
}
|
||||
|
||||
struct alt_instr __kabi__alt_instr[0];
|
||||
EXPORT_SYMBOL_GPL(__kabi__alt_instr);
|
||||
|
||||
@ -710,7 +710,7 @@ queue_attr_store(struct kobject *kobj, struct attribute *attr,
|
||||
return res;
|
||||
}
|
||||
|
||||
res = queue_limits_commit_update_frozen(q, &lim);
|
||||
res = queue_limits_commit_update(q, &lim);
|
||||
if (res)
|
||||
return res;
|
||||
return length;
|
||||
|
||||
@ -557,6 +557,10 @@ dpll_cmd_pin_get_one(struct sk_buff *msg, struct dpll_pin *pin,
|
||||
ret = dpll_msg_add_pin_freq(msg, pin, ref, extack);
|
||||
if (ret)
|
||||
return ret;
|
||||
if (prop->phase_gran &&
|
||||
nla_put_u32(msg, DPLL_A_PIN_PHASE_ADJUST_GRAN,
|
||||
prop->phase_gran))
|
||||
return -EMSGSIZE;
|
||||
if (nla_put_s32(msg, DPLL_A_PIN_PHASE_ADJUST_MIN,
|
||||
prop->phase_range.min))
|
||||
return -EMSGSIZE;
|
||||
@ -1073,7 +1077,13 @@ dpll_pin_phase_adj_set(struct dpll_pin *pin, struct nlattr *phase_adj_attr,
|
||||
if (phase_adj > pin->prop.phase_range.max ||
|
||||
phase_adj < pin->prop.phase_range.min) {
|
||||
NL_SET_ERR_MSG_ATTR(extack, phase_adj_attr,
|
||||
"phase adjust value not supported");
|
||||
"phase adjust value of out range");
|
||||
return -EINVAL;
|
||||
}
|
||||
if (pin->prop.phase_gran && phase_adj % (s32)pin->prop.phase_gran) {
|
||||
NL_SET_ERR_MSG_ATTR_FMT(extack, phase_adj_attr,
|
||||
"phase adjust value not multiple of %u",
|
||||
pin->prop.phase_gran);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
|
||||
@ -35,6 +35,7 @@
|
||||
* @prio: pin priority <0, 14>
|
||||
* @selectable: pin is selectable in automatic mode
|
||||
* @esync_control: embedded sync is controllable
|
||||
* @phase_gran: phase adjustment granularity
|
||||
* @pin_state: last saved pin state
|
||||
* @phase_offset: last saved pin phase offset
|
||||
* @freq_offset: last saved fractional frequency offset
|
||||
@ -49,6 +50,7 @@ struct zl3073x_dpll_pin {
|
||||
u8 prio;
|
||||
bool selectable;
|
||||
bool esync_control;
|
||||
s32 phase_gran;
|
||||
enum dpll_pin_state pin_state;
|
||||
s64 phase_offset;
|
||||
s64 freq_offset;
|
||||
@ -1388,25 +1390,14 @@ zl3073x_dpll_output_pin_phase_adjust_get(const struct dpll_pin *dpll_pin,
|
||||
struct zl3073x_dpll *zldpll = dpll_priv;
|
||||
struct zl3073x_dev *zldev = zldpll->dev;
|
||||
struct zl3073x_dpll_pin *pin = pin_priv;
|
||||
u32 synth_freq;
|
||||
s32 phase_comp;
|
||||
u8 out, synth;
|
||||
u8 out;
|
||||
int rc;
|
||||
|
||||
out = zl3073x_output_pin_out_get(pin->id);
|
||||
synth = zl3073x_out_synth_get(zldev, out);
|
||||
synth_freq = zl3073x_synth_freq_get(zldev, synth);
|
||||
|
||||
/* Check synth freq for zero */
|
||||
if (!synth_freq) {
|
||||
dev_err(zldev->dev, "Got zero synth frequency for output %u\n",
|
||||
out);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
guard(mutex)(&zldev->multiop_lock);
|
||||
|
||||
/* Read output configuration */
|
||||
out = zl3073x_output_pin_out_get(pin->id);
|
||||
rc = zl3073x_mb_op(zldev, ZL_REG_OUTPUT_MB_SEM, ZL_OUTPUT_MB_SEM_RD,
|
||||
ZL_REG_OUTPUT_MB_MASK, BIT(out));
|
||||
if (rc)
|
||||
@ -1417,11 +1408,10 @@ zl3073x_dpll_output_pin_phase_adjust_get(const struct dpll_pin *dpll_pin,
|
||||
if (rc)
|
||||
return rc;
|
||||
|
||||
/* Value in register is expressed in half synth clock cycles */
|
||||
phase_comp *= (int)div_u64(PSEC_PER_SEC, 2 * synth_freq);
|
||||
|
||||
/* Reverse two's complement negation applied during 'set' */
|
||||
*phase_adjust = -phase_comp;
|
||||
/* Convert value to ps and reverse two's complement negation applied
|
||||
* during 'set'
|
||||
*/
|
||||
*phase_adjust = -phase_comp * pin->phase_gran;
|
||||
|
||||
return rc;
|
||||
}
|
||||
@ -1437,39 +1427,18 @@ zl3073x_dpll_output_pin_phase_adjust_set(const struct dpll_pin *dpll_pin,
|
||||
struct zl3073x_dpll *zldpll = dpll_priv;
|
||||
struct zl3073x_dev *zldev = zldpll->dev;
|
||||
struct zl3073x_dpll_pin *pin = pin_priv;
|
||||
int half_synth_cycle;
|
||||
u32 synth_freq;
|
||||
u8 out, synth;
|
||||
u8 out;
|
||||
int rc;
|
||||
|
||||
/* Get attached synth */
|
||||
out = zl3073x_output_pin_out_get(pin->id);
|
||||
synth = zl3073x_out_synth_get(zldev, out);
|
||||
|
||||
/* Get synth's frequency */
|
||||
synth_freq = zl3073x_synth_freq_get(zldev, synth);
|
||||
|
||||
/* Value in register is expressed in half synth clock cycles so
|
||||
* the given phase adjustment a multiple of half synth clock.
|
||||
*/
|
||||
half_synth_cycle = (int)div_u64(PSEC_PER_SEC, 2 * synth_freq);
|
||||
|
||||
if ((phase_adjust % half_synth_cycle) != 0) {
|
||||
NL_SET_ERR_MSG_FMT(extack,
|
||||
"Phase adjustment value has to be multiple of %d",
|
||||
half_synth_cycle);
|
||||
return -EINVAL;
|
||||
}
|
||||
phase_adjust /= half_synth_cycle;
|
||||
|
||||
/* The value in the register is stored as two's complement negation
|
||||
* of requested value.
|
||||
* of requested value and expressed in half synth clock cycles.
|
||||
*/
|
||||
phase_adjust = -phase_adjust;
|
||||
phase_adjust = -phase_adjust / pin->phase_gran;
|
||||
|
||||
guard(mutex)(&zldev->multiop_lock);
|
||||
|
||||
/* Read output configuration */
|
||||
out = zl3073x_output_pin_out_get(pin->id);
|
||||
rc = zl3073x_mb_op(zldev, ZL_REG_OUTPUT_MB_SEM, ZL_OUTPUT_MB_SEM_RD,
|
||||
ZL_REG_OUTPUT_MB_MASK, BIT(out));
|
||||
if (rc)
|
||||
@ -1703,9 +1672,10 @@ zl3073x_dpll_pin_register(struct zl3073x_dpll_pin *pin, u32 index)
|
||||
if (IS_ERR(props))
|
||||
return PTR_ERR(props);
|
||||
|
||||
/* Save package label & esync capability */
|
||||
/* Save package label, esync capability and phase adjust granularity */
|
||||
strscpy(pin->label, props->package_label);
|
||||
pin->esync_control = props->esync_control;
|
||||
pin->phase_gran = props->dpll_props.phase_gran;
|
||||
|
||||
if (zl3073x_dpll_is_input_pin(pin)) {
|
||||
rc = zl3073x_dpll_ref_prio_get(pin, &pin->prio);
|
||||
|
||||
@ -208,7 +208,18 @@ struct zl3073x_pin_props *zl3073x_pin_props_get(struct zl3073x_dev *zldev,
|
||||
DPLL_PIN_CAPABILITIES_PRIORITY_CAN_CHANGE |
|
||||
DPLL_PIN_CAPABILITIES_STATE_CAN_CHANGE;
|
||||
} else {
|
||||
u8 out, synth;
|
||||
u32 f;
|
||||
|
||||
props->dpll_props.type = DPLL_PIN_TYPE_GNSS;
|
||||
|
||||
/* The output pin phase adjustment granularity equals half of
|
||||
* the synth frequency count.
|
||||
*/
|
||||
out = zl3073x_output_pin_out_get(index);
|
||||
synth = zl3073x_out_synth_get(zldev, out);
|
||||
f = 2 * zl3073x_synth_freq_get(zldev, synth);
|
||||
props->dpll_props.phase_gran = f ? div_u64(PSEC_PER_SEC, f) : 1;
|
||||
}
|
||||
|
||||
props->dpll_props.phase_range.min = S32_MIN;
|
||||
|
||||
@ -3184,6 +3184,7 @@ static int vm_bind_ioctl_check_args(struct xe_device *xe, struct xe_vm *vm,
|
||||
free_bind_ops:
|
||||
if (args->num_binds > 1)
|
||||
kvfree(*bind_ops);
|
||||
*bind_ops = NULL;
|
||||
return err;
|
||||
}
|
||||
|
||||
@ -3289,7 +3290,7 @@ int xe_vm_bind_ioctl(struct drm_device *dev, void *data, struct drm_file *file)
|
||||
struct xe_exec_queue *q = NULL;
|
||||
u32 num_syncs, num_ufence = 0;
|
||||
struct xe_sync_entry *syncs = NULL;
|
||||
struct drm_xe_vm_bind_op *bind_ops;
|
||||
struct drm_xe_vm_bind_op *bind_ops = NULL;
|
||||
struct xe_vma_ops vops;
|
||||
struct dma_fence *fence;
|
||||
int err;
|
||||
|
||||
@ -141,6 +141,7 @@ struct mapped_device {
|
||||
#ifdef CONFIG_BLK_DEV_ZONED
|
||||
unsigned int nr_zones;
|
||||
void *zone_revalidate_map;
|
||||
struct task_struct *revalidate_map_task;
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_IMA
|
||||
|
||||
@ -56,24 +56,31 @@ int dm_blk_report_zones(struct gendisk *disk, sector_t sector,
|
||||
{
|
||||
struct mapped_device *md = disk->private_data;
|
||||
struct dm_table *map;
|
||||
int srcu_idx, ret;
|
||||
struct dm_table *zone_revalidate_map = md->zone_revalidate_map;
|
||||
int srcu_idx, ret = -EIO;
|
||||
bool put_table = false;
|
||||
|
||||
if (!md->zone_revalidate_map) {
|
||||
/* Regular user context */
|
||||
if (!zone_revalidate_map || md->revalidate_map_task != current) {
|
||||
/*
|
||||
* Regular user context or
|
||||
* Zone revalidation during __bind() is in progress, but this
|
||||
* call is from a different process
|
||||
*/
|
||||
if (dm_suspended_md(md))
|
||||
return -EAGAIN;
|
||||
|
||||
map = dm_get_live_table(md, &srcu_idx);
|
||||
if (!map)
|
||||
return -EIO;
|
||||
put_table = true;
|
||||
} else {
|
||||
/* Zone revalidation during __bind() */
|
||||
map = md->zone_revalidate_map;
|
||||
map = zone_revalidate_map;
|
||||
}
|
||||
|
||||
ret = dm_blk_do_report_zones(md, map, sector, nr_zones, cb, data);
|
||||
if (map)
|
||||
ret = dm_blk_do_report_zones(md, map, sector, nr_zones, cb,
|
||||
data);
|
||||
|
||||
if (!md->zone_revalidate_map)
|
||||
if (put_table)
|
||||
dm_put_live_table(md, srcu_idx);
|
||||
|
||||
return ret;
|
||||
@ -175,7 +182,9 @@ int dm_revalidate_zones(struct dm_table *t, struct request_queue *q)
|
||||
* our table for dm_blk_report_zones() to use directly.
|
||||
*/
|
||||
md->zone_revalidate_map = t;
|
||||
md->revalidate_map_task = current;
|
||||
ret = blk_revalidate_disk_zones(disk);
|
||||
md->revalidate_map_task = NULL;
|
||||
md->zone_revalidate_map = NULL;
|
||||
|
||||
if (ret) {
|
||||
|
||||
@ -547,6 +547,11 @@ static int __aq_ring_rx_clean(struct aq_ring_s *self, struct napi_struct *napi,
|
||||
|
||||
if (!buff->is_eop) {
|
||||
unsigned int frag_cnt = 0U;
|
||||
|
||||
/* There will be an extra fragment */
|
||||
if (buff->len > AQ_CFG_RX_HDR_SIZE)
|
||||
frag_cnt++;
|
||||
|
||||
buff_ = buff;
|
||||
do {
|
||||
bool is_rsc_completed = true;
|
||||
|
||||
@ -919,8 +919,10 @@ ice_get_rx_buf(struct ice_rx_ring *rx_ring, const unsigned int size,
|
||||
rx_buf = &rx_ring->rx_buf[ntc];
|
||||
prefetchw(rx_buf->page);
|
||||
|
||||
if (!size)
|
||||
if (!size) {
|
||||
rx_buf->pagecnt_bias--;
|
||||
return rx_buf;
|
||||
}
|
||||
/* we are reusing so sync this buffer for CPU use */
|
||||
dma_sync_single_range_for_cpu(rx_ring->dev, rx_buf->dma,
|
||||
rx_buf->page_offset, size,
|
||||
|
||||
@ -772,7 +772,7 @@ static bool __ep_remove(struct eventpoll *ep, struct epitem *epi, bool force)
|
||||
call_rcu(&epi->rcu, epi_rcu_free);
|
||||
|
||||
percpu_counter_dec(&ep->user->epoll_watches);
|
||||
return ep_refcount_dec_and_test(ep);
|
||||
return true;
|
||||
}
|
||||
|
||||
/*
|
||||
@ -780,14 +780,14 @@ static bool __ep_remove(struct eventpoll *ep, struct epitem *epi, bool force)
|
||||
*/
|
||||
static void ep_remove_safe(struct eventpoll *ep, struct epitem *epi)
|
||||
{
|
||||
WARN_ON_ONCE(__ep_remove(ep, epi, false));
|
||||
if (__ep_remove(ep, epi, false))
|
||||
WARN_ON_ONCE(ep_refcount_dec_and_test(ep));
|
||||
}
|
||||
|
||||
static void ep_clear_and_put(struct eventpoll *ep)
|
||||
{
|
||||
struct rb_node *rbp, *next;
|
||||
struct epitem *epi;
|
||||
bool dispose;
|
||||
|
||||
/* We need to release all tasks waiting for these file */
|
||||
if (waitqueue_active(&ep->poll_wait))
|
||||
@ -820,10 +820,8 @@ static void ep_clear_and_put(struct eventpoll *ep)
|
||||
cond_resched();
|
||||
}
|
||||
|
||||
dispose = ep_refcount_dec_and_test(ep);
|
||||
mutex_unlock(&ep->mtx);
|
||||
|
||||
if (dispose)
|
||||
if (ep_refcount_dec_and_test(ep))
|
||||
ep_free(ep);
|
||||
}
|
||||
|
||||
@ -1003,7 +1001,7 @@ again:
|
||||
dispose = __ep_remove(ep, epi, true);
|
||||
mutex_unlock(&ep->mtx);
|
||||
|
||||
if (dispose)
|
||||
if (dispose && ep_refcount_dec_and_test(ep))
|
||||
ep_free(ep);
|
||||
goto again;
|
||||
}
|
||||
|
||||
@ -173,6 +173,7 @@ struct dpll_pin_properties {
|
||||
const char *panel_label;
|
||||
const char *package_label;
|
||||
enum dpll_pin_type type;
|
||||
RH_KABI_FILL_HOLE(u32 phase_gran)
|
||||
unsigned long capabilities;
|
||||
u32 freq_supported_num;
|
||||
struct dpll_pin_frequency *freq_supported;
|
||||
|
||||
@ -775,7 +775,7 @@ struct mgmt_adv_pattern {
|
||||
__u8 ad_type;
|
||||
__u8 offset;
|
||||
__u8 length;
|
||||
__u8 value[31];
|
||||
__u8 value[HCI_MAX_AD_LENGTH];
|
||||
} __packed;
|
||||
|
||||
#define MGMT_OP_ADD_ADV_PATTERNS_MONITOR 0x0052
|
||||
|
||||
@ -249,6 +249,8 @@ enum dpll_a_pin {
|
||||
DPLL_A_PIN_ESYNC_FREQUENCY,
|
||||
DPLL_A_PIN_ESYNC_FREQUENCY_SUPPORTED,
|
||||
DPLL_A_PIN_ESYNC_PULSE,
|
||||
__RH_RESERVED_DPLL_A_PIN_REFERENCE_SYNC,
|
||||
DPLL_A_PIN_PHASE_ADJUST_GRAN,
|
||||
|
||||
__DPLL_A_PIN_MAX,
|
||||
DPLL_A_PIN_MAX = (__DPLL_A_PIN_MAX - 1)
|
||||
|
||||
@ -1720,6 +1720,7 @@ void uprobe_free_utask(struct task_struct *t)
|
||||
if (!utask)
|
||||
return;
|
||||
|
||||
t->utask = NULL;
|
||||
if (utask->active_uprobe)
|
||||
put_uprobe(utask->active_uprobe);
|
||||
|
||||
@ -1729,7 +1730,6 @@ void uprobe_free_utask(struct task_struct *t)
|
||||
|
||||
xol_free_insn_slot(t);
|
||||
kfree(utask);
|
||||
t->utask = NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
@ -1323,7 +1323,9 @@ static int hci_sock_bind(struct socket *sock, struct sockaddr *addr,
|
||||
goto done;
|
||||
}
|
||||
|
||||
hci_dev_lock(hdev);
|
||||
mgmt_index_removed(hdev);
|
||||
hci_dev_unlock(hdev);
|
||||
|
||||
err = hci_dev_open(hdev->id);
|
||||
if (err) {
|
||||
|
||||
@ -5395,9 +5395,9 @@ static u8 parse_adv_monitor_pattern(struct adv_monitor *m, u8 pattern_count,
|
||||
for (i = 0; i < pattern_count; i++) {
|
||||
offset = patterns[i].offset;
|
||||
length = patterns[i].length;
|
||||
if (offset >= HCI_MAX_EXT_AD_LENGTH ||
|
||||
length > HCI_MAX_EXT_AD_LENGTH ||
|
||||
(offset + length) > HCI_MAX_EXT_AD_LENGTH)
|
||||
if (offset >= HCI_MAX_AD_LENGTH ||
|
||||
length > HCI_MAX_AD_LENGTH ||
|
||||
(offset + length) > HCI_MAX_AD_LENGTH)
|
||||
return MGMT_STATUS_INVALID_PARAMS;
|
||||
|
||||
p = kmalloc(sizeof(*p), GFP_KERNEL);
|
||||
|
||||
@ -2790,6 +2790,7 @@ static int nh_create_ipv4(struct net *net, struct nexthop *nh,
|
||||
.fc_gw4 = cfg->gw.ipv4,
|
||||
.fc_gw_family = cfg->gw.ipv4 ? AF_INET : 0,
|
||||
.fc_flags = cfg->nh_flags,
|
||||
.fc_nlinfo = cfg->nlinfo,
|
||||
.fc_encap = cfg->nh_encap,
|
||||
.fc_encap_type = cfg->nh_encap_type,
|
||||
};
|
||||
@ -2828,6 +2829,7 @@ static int nh_create_ipv6(struct net *net, struct nexthop *nh,
|
||||
.fc_ifindex = cfg->nh_ifindex,
|
||||
.fc_gateway = cfg->gw.ipv6,
|
||||
.fc_flags = cfg->nh_flags,
|
||||
.fc_nlinfo = cfg->nlinfo,
|
||||
.fc_encap = cfg->nh_encap,
|
||||
.fc_encap_type = cfg->nh_encap_type,
|
||||
.fc_is_fdb = cfg->nh_fdb,
|
||||
|
||||
@ -936,14 +936,19 @@ static void mptcp_reset_rtx_timer(struct sock *sk)
|
||||
|
||||
bool mptcp_schedule_work(struct sock *sk)
|
||||
{
|
||||
if (inet_sk_state_load(sk) != TCP_CLOSE &&
|
||||
schedule_work(&mptcp_sk(sk)->work)) {
|
||||
/* each subflow already holds a reference to the sk, and the
|
||||
* workqueue is invoked by a subflow, so sk can't go away here.
|
||||
*/
|
||||
sock_hold(sk);
|
||||
if (inet_sk_state_load(sk) == TCP_CLOSE)
|
||||
return false;
|
||||
|
||||
/* Get a reference on this socket, mptcp_worker() will release it.
|
||||
* As mptcp_worker() might complete before us, we can not avoid
|
||||
* a sock_hold()/sock_put() if schedule_work() returns false.
|
||||
*/
|
||||
sock_hold(sk);
|
||||
|
||||
if (schedule_work(&mptcp_sk(sk)->work))
|
||||
return true;
|
||||
}
|
||||
|
||||
sock_put(sk);
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
@ -1505,18 +1505,40 @@ static int vsock_connect(struct socket *sock, struct sockaddr *addr,
|
||||
timeout = schedule_timeout(timeout);
|
||||
lock_sock(sk);
|
||||
|
||||
if (signal_pending(current)) {
|
||||
err = sock_intr_errno(timeout);
|
||||
sk->sk_state = sk->sk_state == TCP_ESTABLISHED ? TCP_CLOSING : TCP_CLOSE;
|
||||
sock->state = SS_UNCONNECTED;
|
||||
vsock_transport_cancel_pkt(vsk);
|
||||
vsock_remove_connected(vsk);
|
||||
goto out_wait;
|
||||
} else if ((sk->sk_state != TCP_ESTABLISHED) && (timeout == 0)) {
|
||||
err = -ETIMEDOUT;
|
||||
/* Connection established. Whatever happens to socket once we
|
||||
* release it, that's not connect()'s concern. No need to go
|
||||
* into signal and timeout handling. Call it a day.
|
||||
*
|
||||
* Note that allowing to "reset" an already established socket
|
||||
* here is racy and insecure.
|
||||
*/
|
||||
if (sk->sk_state == TCP_ESTABLISHED)
|
||||
break;
|
||||
|
||||
/* If connection was _not_ established and a signal/timeout came
|
||||
* to be, we want the socket's state reset. User space may want
|
||||
* to retry.
|
||||
*
|
||||
* sk_state != TCP_ESTABLISHED implies that socket is not on
|
||||
* vsock_connected_table. We keep the binding and the transport
|
||||
* assigned.
|
||||
*/
|
||||
if (signal_pending(current) || timeout == 0) {
|
||||
err = timeout == 0 ? -ETIMEDOUT : sock_intr_errno(timeout);
|
||||
|
||||
/* Listener might have already responded with
|
||||
* VIRTIO_VSOCK_OP_RESPONSE. Its handling expects our
|
||||
* sk_state == TCP_SYN_SENT, which hereby we break.
|
||||
* In such case VIRTIO_VSOCK_OP_RST will follow.
|
||||
*/
|
||||
sk->sk_state = TCP_CLOSE;
|
||||
sock->state = SS_UNCONNECTED;
|
||||
|
||||
/* Try to cancel VIRTIO_VSOCK_OP_REQUEST skb sent out by
|
||||
* transport->connect().
|
||||
*/
|
||||
vsock_transport_cancel_pkt(vsk);
|
||||
|
||||
goto out_wait;
|
||||
}
|
||||
|
||||
|
||||
2
redhat/kabi/kabi-module/kabi_x86_64/__kabi__alt_instr
Normal file
2
redhat/kabi/kabi-module/kabi_x86_64/__kabi__alt_instr
Normal file
@ -0,0 +1,2 @@
|
||||
#7-
|
||||
0xe08433f8 __kabi__alt_instr vmlinux EXPORT_SYMBOL_GPL
|
||||
@ -1,3 +1,24 @@
|
||||
* Sat Jan 17 2026 CKI KWF Bot <cki-ci-bot+kwf-gitlab-com@redhat.com> [5.14.0-611.26.1.el9_7]
|
||||
- Bluetooth: hci_sock: Prevent race in socket write iter and sock bind (CKI Backport Bot) [RHEL-139462] {CVE-2025-68305}
|
||||
- dm: fix dm_blk_report_zones (CKI Backport Bot) [RHEL-137949] {CVE-2025-38141}
|
||||
- Bluetooth: MGMT: Fix OOB access in parse_adv_monitor_pattern() (CKI Backport Bot) [RHEL-136964] {CVE-2025-40294}
|
||||
- drm/xe: Fix vm_bind_ioctl double free bug (CKI Backport Bot) [RHEL-122309] {CVE-2025-38731}
|
||||
Resolves: RHEL-122309, RHEL-136964, RHEL-137949, RHEL-139462
|
||||
|
||||
* Thu Jan 15 2026 CKI KWF Bot <cki-ci-bot+kwf-gitlab-com@redhat.com> [5.14.0-611.25.1.el9_7]
|
||||
- ice: Fix kernel panic due to page refcount underflow (Mohammad Heib) [RHEL-139731]
|
||||
- net: atlantic: fix fragment overflow handling in RX path (CKI Backport Bot) [RHEL-139487] {CVE-2025-68301}
|
||||
- KVM: arm64: Hide ID_AA64MMFR2_EL1.NV from guest and userspace (Donald Dutile) [RHEL-134767]
|
||||
- Set fc_nlinfo in nh_create_ipv4, nh_create_ipv6 (Guillaume Nault) [RHEL-138493]
|
||||
- vsock: Ignore signal/timeout on connect() if already established (CKI Backport Bot) [RHEL-139284] {CVE-2025-40248}
|
||||
- eventpoll: don't decrement ep refcount while still holding the ep mutex (CKI Backport Bot) [RHEL-138035] {CVE-2025-38349}
|
||||
- block: don't freeze queue for updating queue limits (Ming Lei) [RHEL-135268]
|
||||
- mptcp: fix race condition in mptcp_schedule_work() (CKI Backport Bot) [RHEL-134448] {CVE-2025-40258}
|
||||
- uprobes: Fix race in uprobe_free_utask (Jay Shin) [RHEL-133868]
|
||||
- dpll: zl3073x: Specify phase adjustment granularity for pins (Ivan Vecera) [RHEL-129504]
|
||||
- dpll: add phase-adjust-gran pin attribute (Ivan Vecera) [RHEL-129504]
|
||||
Resolves: RHEL-122757, RHEL-129504, RHEL-133868, RHEL-134448, RHEL-134767, RHEL-135268, RHEL-138035, RHEL-138493, RHEL-139284, RHEL-139487, RHEL-139731
|
||||
|
||||
* Sat Jan 10 2026 CKI KWF Bot <cki-ci-bot+kwf-gitlab-com@redhat.com> [5.14.0-611.24.1.el9_7]
|
||||
- gitlab-ci: use rhel9.7 builder image (Michael Hofmann)
|
||||
- smb: client: let recv_done verify data_offset, data_length and remaining_data_length (Paulo Alcantara) [RHEL-131388] {CVE-2025-39933}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user