Skip to content

Commit

Permalink
Merge tag 'v6.6.68' into 6.6-main
Browse files Browse the repository at this point in the history
This is the 6.6.68 stable release

# -----BEGIN PGP SIGNATURE-----
#
# iQIzBAABCAAdFiEEZH8oZUiU471FcZm+ONu9yGCSaT4FAmdupQIACgkQONu9yGCS
# aT4uGRAAl+8yvogXJRPH+ZUXzcRjaSKq2yOF4Gp1PtTYI5503KW6mLcNYOE05o7V
# BnISyRVO7zjs6edi8T2NfNdoXv8IsIqekka6h8h5qK9sY3eevT20iGLTifQwMraE
# IrOsZ21Hk7rcL/KTxXmiWY/LAwYpbnfOOAmdlxvzMfPAHJYv5dR5e2URWtAwnVI4
# VDUEtPAwjwNXBN4cuLe6bu1Bn5WrpD+QIfBwj6WHG2yhD8p2OPdMENlQDs95bEz+
# 2OkjS9G0qBrwgWAhoBScKArceM7yFwxMYYSeWpxoEqDNvowykrlM0FlKiaWI2hY1
# g9T++xM1DYnex5yY+lr5g1bzccVz765sDTCjvvV+buFgEDirgIBxXmD6K8dZ7FIx
# tTR4mJ5vubr/Yd9+nNx1EeJiGDjtei7D6PcqUqjol5IY7XRNPlyhm40EIFzcoKnV
# /WAzWseoj3WWSoqYXLp/pEF8MRvbFHsM7Ur8cCH8uuZz+QWusnhwjY24WkHFNKt2
# jezcn054y8Jr5ocpHJy9XirVRHaTugO+s2zwq0+VOicp5NdWUnVTscRZLrnh3n9g
# BdEtuyZWiuQStOsdVsV7zqpZFMkX+/xUY/q3jda1cbu1LKBRH4+saEqkDoNNzuiX
# nuOmvBk4h4+gF/GthG6A1nTZfCIA5aEiYeDWuiUioVOvxtZiQqw=
# =13FQ
# -----END PGP SIGNATURE-----
# gpg: Signature made Fri Dec 27 14:00:50 2024 CET
# gpg:                using RSA key 647F28654894E3BD457199BE38DBBDC86092693E
# gpg: Can't check signature: No public key
  • Loading branch information
frank-w committed Dec 29, 2024
2 parents 90f82e9 + 3ee19fb commit 596bfc8
Show file tree
Hide file tree
Showing 120 changed files with 1,231 additions and 442 deletions.
8 changes: 4 additions & 4 deletions Documentation/ABI/testing/sysfs-fs-xfs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
What: /sys/fs/xfs/<disk>/log/log_head_lsn
Date: July 2014
KernelVersion: 3.17
Contact: xfs@oss.sgi.com
Contact: linux-xfs@vger.kernel.org
Description:
The log sequence number (LSN) of the current head of the
log. The LSN is exported in "cycle:basic block" format.
Expand All @@ -10,15 +10,15 @@ Users: xfstests
What: /sys/fs/xfs/<disk>/log/log_tail_lsn
Date: July 2014
KernelVersion: 3.17
Contact: xfs@oss.sgi.com
Contact: linux-xfs@vger.kernel.org
Description:
The log sequence number (LSN) of the current tail of the
log. The LSN is exported in "cycle:basic block" format.

What: /sys/fs/xfs/<disk>/log/reserve_grant_head
Date: July 2014
KernelVersion: 3.17
Contact: xfs@oss.sgi.com
Contact: linux-xfs@vger.kernel.org
Description:
The current state of the log reserve grant head. It
represents the total log reservation of all currently
Expand All @@ -29,7 +29,7 @@ Users: xfstests
What: /sys/fs/xfs/<disk>/log/write_grant_head
Date: July 2014
KernelVersion: 3.17
Contact: xfs@oss.sgi.com
Contact: linux-xfs@vger.kernel.org
Description:
The current state of the log write grant head. It
represents the total log reservation of all currently
Expand Down
7 changes: 7 additions & 0 deletions Documentation/devicetree/bindings/net/fsl,fec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -182,6 +182,13 @@ properties:
description:
Register bits of stop mode control, the format is <&gpr req_gpr req_bit>.

fsl,pps-channel:
$ref: /schemas/types.yaml#/definitions/uint32
default: 0
description:
Specifies to which timer instance the PPS signal is routed.
enum: [0, 1, 2, 3]

mdio:
$ref: mdio.yaml#
unevaluatedProperties: false
Expand Down
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# SPDX-License-Identifier: GPL-2.0
VERSION = 6
PATCHLEVEL = 6
SUBLEVEL = 67
SUBLEVEL = 68
EXTRAVERSION =
NAME = Pinguïn Aangedreven

Expand Down
6 changes: 6 additions & 0 deletions arch/hexagon/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -32,3 +32,9 @@ KBUILD_LDFLAGS += $(ldflags-y)
TIR_NAME := r19
KBUILD_CFLAGS += -ffixed-$(TIR_NAME) -DTHREADINFO_REG=$(TIR_NAME) -D__linux__
KBUILD_AFLAGS += -DTHREADINFO_REG=$(TIR_NAME)

# Disable HexagonConstExtenders pass for LLVM versions prior to 19.1.0
# https://github.com/llvm/llvm-project/issues/99714
ifneq ($(call clang-min-version, 190100),y)
KBUILD_CFLAGS += -mllvm -hexagon-cext=false
endif
1 change: 1 addition & 0 deletions arch/mips/boot/dts/loongson/loongson64g_4core_ls7a.dts
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@
compatible = "loongson,pch-msi-1.0";
reg = <0 0x2ff00000 0 0x8>;
interrupt-controller;
#interrupt-cells = <1>;
msi-controller;
loongson,msi-base-vec = <64>;
loongson,msi-num-vecs = <192>;
Expand Down
31 changes: 26 additions & 5 deletions arch/x86/kvm/cpuid.c
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,26 @@
u32 kvm_cpu_caps[NR_KVM_CPU_CAPS] __read_mostly;
EXPORT_SYMBOL_GPL(kvm_cpu_caps);

struct cpuid_xstate_sizes {
u32 eax;
u32 ebx;
u32 ecx;
};

static struct cpuid_xstate_sizes xstate_sizes[XFEATURE_MAX] __ro_after_init;

void __init kvm_init_xstate_sizes(void)
{
u32 ign;
int i;

for (i = XFEATURE_YMM; i < ARRAY_SIZE(xstate_sizes); i++) {
struct cpuid_xstate_sizes *xs = &xstate_sizes[i];

cpuid_count(0xD, i, &xs->eax, &xs->ebx, &xs->ecx, &ign);
}
}

u32 xstate_required_size(u64 xstate_bv, bool compacted)
{
int feature_bit = 0;
Expand All @@ -44,14 +64,15 @@ u32 xstate_required_size(u64 xstate_bv, bool compacted)
xstate_bv &= XFEATURE_MASK_EXTEND;
while (xstate_bv) {
if (xstate_bv & 0x1) {
u32 eax, ebx, ecx, edx, offset;
cpuid_count(0xD, feature_bit, &eax, &ebx, &ecx, &edx);
struct cpuid_xstate_sizes *xs = &xstate_sizes[feature_bit];
u32 offset;

/* ECX[1]: 64B alignment in compacted form */
if (compacted)
offset = (ecx & 0x2) ? ALIGN(ret, 64) : ret;
offset = (xs->ecx & 0x2) ? ALIGN(ret, 64) : ret;
else
offset = ebx;
ret = max(ret, offset + eax);
offset = xs->ebx;
ret = max(ret, offset + xs->eax);
}

xstate_bv >>= 1;
Expand Down
1 change: 1 addition & 0 deletions arch/x86/kvm/cpuid.h
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ int kvm_vcpu_ioctl_get_cpuid2(struct kvm_vcpu *vcpu,
bool kvm_cpuid(struct kvm_vcpu *vcpu, u32 *eax, u32 *ebx,
u32 *ecx, u32 *edx, bool exact_only);

void __init kvm_init_xstate_sizes(void);
u32 xstate_required_size(u64 xstate_bv, bool compacted);

int cpuid_query_maxphyaddr(struct kvm_vcpu *vcpu);
Expand Down
4 changes: 3 additions & 1 deletion arch/x86/kvm/x86.c
Original file line number Diff line number Diff line change
Expand Up @@ -9825,7 +9825,7 @@ static int complete_hypercall_exit(struct kvm_vcpu *vcpu)
{
u64 ret = vcpu->run->hypercall.ret;

if (!is_64_bit_mode(vcpu))
if (!is_64_bit_hypercall(vcpu))
ret = (u32)ret;
kvm_rax_write(vcpu, ret);
++vcpu->stat.hypercalls;
Expand Down Expand Up @@ -13694,6 +13694,8 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(kvm_vmgexit_msr_protocol_exit);

static int __init kvm_x86_init(void)
{
kvm_init_xstate_sizes();

kvm_mmu_x86_module_init();
mitigate_smt_rsb &= boot_cpu_has_bug(X86_BUG_SMT_RSB) && cpu_smt_possible();
return 0;
Expand Down
15 changes: 10 additions & 5 deletions drivers/block/zram/zram_drv.c
Original file line number Diff line number Diff line change
Expand Up @@ -538,6 +538,12 @@ static ssize_t backing_dev_store(struct device *dev,
}

nr_pages = i_size_read(inode) >> PAGE_SHIFT;
/* Refuse to use zero sized device (also prevents self reference) */
if (!nr_pages) {
err = -EINVAL;
goto out;
}

bitmap_sz = BITS_TO_LONGS(nr_pages) * sizeof(long);
bitmap = kvzalloc(bitmap_sz, GFP_KERNEL);
if (!bitmap) {
Expand Down Expand Up @@ -1232,12 +1238,16 @@ static void zram_meta_free(struct zram *zram, u64 disksize)
size_t num_pages = disksize >> PAGE_SHIFT;
size_t index;

if (!zram->table)
return;

/* Free all pages that are still in this zram device */
for (index = 0; index < num_pages; index++)
zram_free_page(zram, index);

zs_destroy_pool(zram->mem_pool);
vfree(zram->table);
zram->table = NULL;
}

static bool zram_meta_alloc(struct zram *zram, u64 disksize)
Expand Down Expand Up @@ -2017,11 +2027,6 @@ static void zram_reset_device(struct zram *zram)

zram->limit_pages = 0;

if (!init_done(zram)) {
up_write(&zram->init_lock);
return;
}

set_capacity_and_notify(zram->disk, 0);
part_stat_set_all(zram->disk->part0, 0);

Expand Down
25 changes: 18 additions & 7 deletions drivers/cxl/core/region.c
Original file line number Diff line number Diff line change
Expand Up @@ -1167,6 +1167,7 @@ static int cxl_port_setup_targets(struct cxl_port *port,
struct cxl_region_params *p = &cxlr->params;
struct cxl_decoder *cxld = cxl_rr->decoder;
struct cxl_switch_decoder *cxlsd;
struct cxl_port *iter = port;
u16 eig, peig;
u8 eiw, peiw;

Expand All @@ -1183,16 +1184,26 @@ static int cxl_port_setup_targets(struct cxl_port *port,

cxlsd = to_cxl_switch_decoder(&cxld->dev);
if (cxl_rr->nr_targets_set) {
int i, distance;
int i, distance = 1;
struct cxl_region_ref *cxl_rr_iter;

/*
* Passthrough decoders impose no distance requirements between
* peers
* The "distance" between peer downstream ports represents which
* endpoint positions in the region interleave a given port can
* host.
*
* For example, at the root of a hierarchy the distance is
* always 1 as every index targets a different host-bridge. At
* each subsequent switch level those ports map every Nth region
* position where N is the width of the switch == distance.
*/
if (cxl_rr->nr_targets == 1)
distance = 0;
else
distance = p->nr_targets / cxl_rr->nr_targets;
do {
cxl_rr_iter = cxl_rr_load(iter, cxlr);
distance *= cxl_rr_iter->nr_targets;
iter = to_cxl_port(iter->dev.parent);
} while (!is_cxl_root(iter));
distance *= cxlrd->cxlsd.cxld.interleave_ways;

for (i = 0; i < cxl_rr->nr_targets_set; i++)
if (ep->dport == cxlsd->target[i]) {
rc = check_last_peer(cxled, ep, cxl_rr,
Expand Down
3 changes: 1 addition & 2 deletions drivers/cxl/pci.c
Original file line number Diff line number Diff line change
Expand Up @@ -911,8 +911,7 @@ static int cxl_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id)
if (rc)
return rc;

rc = cxl_pci_ras_unmask(pdev);
if (rc)
if (cxl_pci_ras_unmask(pdev))
dev_dbg(&pdev->dev, "No RAS reporting unmasked\n");

pci_save_state(pdev);
Expand Down
2 changes: 1 addition & 1 deletion drivers/dma-buf/udmabuf.c
Original file line number Diff line number Diff line change
Expand Up @@ -194,7 +194,7 @@ static const struct dma_buf_ops udmabuf_ops = {
};

#define SEALS_WANTED (F_SEAL_SHRINK)
#define SEALS_DENIED (F_SEAL_WRITE)
#define SEALS_DENIED (F_SEAL_WRITE|F_SEAL_FUTURE_WRITE)

static long udmabuf_create(struct miscdevice *device,
struct udmabuf_create_list *head,
Expand Down
32 changes: 10 additions & 22 deletions drivers/edac/amd64_edac.c
Original file line number Diff line number Diff line change
Expand Up @@ -3620,36 +3620,24 @@ static bool dct_ecc_enabled(struct amd64_pvt *pvt)

static bool umc_ecc_enabled(struct amd64_pvt *pvt)
{
u8 umc_en_mask = 0, ecc_en_mask = 0;
u16 nid = pvt->mc_node_id;
struct amd64_umc *umc;
u8 ecc_en = 0, i;
bool ecc_en = false;
int i;

/* Check whether at least one UMC is enabled: */
for_each_umc(i) {
umc = &pvt->umc[i];

/* Only check enabled UMCs. */
if (!(umc->sdp_ctrl & UMC_SDP_INIT))
continue;

umc_en_mask |= BIT(i);

if (umc->umc_cap_hi & UMC_ECC_ENABLED)
ecc_en_mask |= BIT(i);
if (umc->sdp_ctrl & UMC_SDP_INIT &&
umc->umc_cap_hi & UMC_ECC_ENABLED) {
ecc_en = true;
break;
}
}

/* Check whether at least one UMC is enabled: */
if (umc_en_mask)
ecc_en = umc_en_mask == ecc_en_mask;
else
edac_dbg(0, "Node %d: No enabled UMCs.\n", nid);

edac_dbg(3, "Node %d: DRAM ECC %s.\n", nid, (ecc_en ? "enabled" : "disabled"));
edac_dbg(3, "Node %d: DRAM ECC %s.\n", pvt->mc_node_id, (ecc_en ? "enabled" : "disabled"));

if (!ecc_en)
return false;
else
return true;
return ecc_en;
}

static inline void
Expand Down
3 changes: 1 addition & 2 deletions drivers/gpu/drm/amd/amdgpu/amdgpu_job.c
Original file line number Diff line number Diff line change
Expand Up @@ -159,7 +159,6 @@ void amdgpu_job_set_resources(struct amdgpu_job *job, struct amdgpu_bo *gds,

void amdgpu_job_free_resources(struct amdgpu_job *job)
{
struct amdgpu_ring *ring = to_amdgpu_ring(job->base.sched);
struct dma_fence *f;
unsigned i;

Expand All @@ -172,7 +171,7 @@ void amdgpu_job_free_resources(struct amdgpu_job *job)
f = NULL;

for (i = 0; i < job->num_ibs; ++i)
amdgpu_ib_free(ring->adev, &job->ibs[i], f);
amdgpu_ib_free(NULL, &job->ibs[i], f);
}

static void amdgpu_job_free_cb(struct drm_sched_job *s_job)
Expand Down
7 changes: 3 additions & 4 deletions drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
Original file line number Diff line number Diff line change
Expand Up @@ -1161,10 +1161,9 @@ int amdgpu_vm_bo_update(struct amdgpu_device *adev, struct amdgpu_bo_va *bo_va,
* next command submission.
*/
if (bo && bo->tbo.base.resv == vm->root.bo->tbo.base.resv) {
uint32_t mem_type = bo->tbo.resource->mem_type;

if (!(bo->preferred_domains &
amdgpu_mem_type_to_domain(mem_type)))
if (bo->tbo.resource &&
!(bo->preferred_domains &
amdgpu_mem_type_to_domain(bo->tbo.resource->mem_type)))
amdgpu_vm_bo_evicted(&bo_va->base);
else
amdgpu_vm_bo_idle(&bo_va->base);
Expand Down
11 changes: 7 additions & 4 deletions drivers/gpu/drm/drm_modes.c
Original file line number Diff line number Diff line change
Expand Up @@ -1285,21 +1285,24 @@ EXPORT_SYMBOL(drm_mode_set_name);
*/
int drm_mode_vrefresh(const struct drm_display_mode *mode)
{
unsigned int num, den;
unsigned int num = 1, den = 1;

if (mode->htotal == 0 || mode->vtotal == 0)
return 0;

num = mode->clock;
den = mode->htotal * mode->vtotal;

if (mode->flags & DRM_MODE_FLAG_INTERLACE)
num *= 2;
if (mode->flags & DRM_MODE_FLAG_DBLSCAN)
den *= 2;
if (mode->vscan > 1)
den *= mode->vscan;

if (check_mul_overflow(mode->clock, num, &num))
return 0;

if (check_mul_overflow(mode->htotal * mode->vtotal, den, &den))
return 0;

return DIV_ROUND_CLOSEST_ULL(mul_u32_u32(num, 1000), den);
}
EXPORT_SYMBOL(drm_mode_vrefresh);
Expand Down
5 changes: 5 additions & 0 deletions drivers/gpu/drm/i915/gt/intel_engine_types.h
Original file line number Diff line number Diff line change
Expand Up @@ -343,6 +343,11 @@ struct intel_engine_guc_stats {
* @start_gt_clk: GT clock time of last idle to active transition.
*/
u64 start_gt_clk;

/**
* @total: The last value of total returned
*/
u64 total;
};

union intel_engine_tlb_inv_reg {
Expand Down
Loading

0 comments on commit 596bfc8

Please sign in to comment.