Merge branch 'x86-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull x86 fixes from Thomas Gleixner: "A small set of fixes: - UAPI data type correction for hyperv - correct the cpu cores field in /proc/cpuinfo on CPU hotplug - return proper error code in the resctrl file system failure path to avoid silent subsequent failures - correct a subtle accounting issue in the new vector allocation code which went unnoticed for a while and caused suspend/resume failures" * 'x86-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: x86/topology: Update the 'cpu cores' field in /proc/cpuinfo correctly across CPU hotplug operations x86/topology: Fix function name in documentation x86/intel_rdt: Fix incorrect returned value when creating rdgroup sub-directory in resctrl file system x86/apic/vector: Handle vector release on CPU unplug correctly genirq/matrix: Handle CPU offlining proper x86/headers/UAPI: Use __u64 instead of u64 in <uapi/asm/hyperv.h>
This commit is contained in:
@@ -134,21 +134,40 @@ static void apic_update_vector(struct irq_data *irqd, unsigned int newvec,
|
||||
{
|
||||
struct apic_chip_data *apicd = apic_chip_data(irqd);
|
||||
struct irq_desc *desc = irq_data_to_desc(irqd);
|
||||
bool managed = irqd_affinity_is_managed(irqd);
|
||||
|
||||
lockdep_assert_held(&vector_lock);
|
||||
|
||||
trace_vector_update(irqd->irq, newvec, newcpu, apicd->vector,
|
||||
apicd->cpu);
|
||||
|
||||
/* Setup the vector move, if required */
|
||||
if (apicd->vector && cpu_online(apicd->cpu)) {
|
||||
/*
|
||||
* If there is no vector associated or if the associated vector is
|
||||
* the shutdown vector, which is associated to make PCI/MSI
|
||||
* shutdown mode work, then there is nothing to release. Clear out
|
||||
* prev_vector for this and the offlined target case.
|
||||
*/
|
||||
apicd->prev_vector = 0;
|
||||
if (!apicd->vector || apicd->vector == MANAGED_IRQ_SHUTDOWN_VECTOR)
|
||||
goto setnew;
|
||||
/*
|
||||
* If the target CPU of the previous vector is online, then mark
|
||||
* the vector as move in progress and store it for cleanup when the
|
||||
* first interrupt on the new vector arrives. If the target CPU is
|
||||
* offline then the regular release mechanism via the cleanup
|
||||
* vector is not possible and the vector can be immediately freed
|
||||
* in the underlying matrix allocator.
|
||||
*/
|
||||
if (cpu_online(apicd->cpu)) {
|
||||
apicd->move_in_progress = true;
|
||||
apicd->prev_vector = apicd->vector;
|
||||
apicd->prev_cpu = apicd->cpu;
|
||||
} else {
|
||||
apicd->prev_vector = 0;
|
||||
irq_matrix_free(vector_matrix, apicd->cpu, apicd->vector,
|
||||
managed);
|
||||
}
|
||||
|
||||
setnew:
|
||||
apicd->vector = newvec;
|
||||
apicd->cpu = newcpu;
|
||||
BUG_ON(!IS_ERR_OR_NULL(per_cpu(vector_irq, newcpu)[newvec]));
|
||||
|
@@ -1804,6 +1804,7 @@ static int rdtgroup_mkdir_ctrl_mon(struct kernfs_node *parent_kn,
|
||||
goto out_common_fail;
|
||||
}
|
||||
closid = ret;
|
||||
ret = 0;
|
||||
|
||||
rdtgrp->closid = closid;
|
||||
list_add(&rdtgrp->rdtgroup_list, &rdt_all_groups);
|
||||
|
@@ -1437,6 +1437,7 @@ static void remove_siblinginfo(int cpu)
|
||||
cpumask_clear(topology_sibling_cpumask(cpu));
|
||||
cpumask_clear(topology_core_cpumask(cpu));
|
||||
c->cpu_core_id = 0;
|
||||
c->booted_cores = 0;
|
||||
cpumask_clear_cpu(cpu, cpu_sibling_setup_mask);
|
||||
recompute_smt_state();
|
||||
}
|
||||
|
Reference in New Issue
Block a user