summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVille Syrjälä <ville.syrjala@linux.intel.com>2022-02-18 17:47:09 +0200
committerVille Syrjälä <ville.syrjala@linux.intel.com>2022-02-18 17:47:09 +0200
commite5088b2366d5b9791788fb4a24169b1d2303f664 (patch)
tree7c40d367026b23f2bf28057cc449c7bed03b7f9d
parent3c4bc522478def9883dff4c957574ddf6115c5c7 (diff)
parentb56d8d7bad86a9badc1d1b9ea2d1730fa1d3978b (diff)
Merge remote-tracking branch 'drm_intel_push/topic/core-for-CI' into drm-tip
# Conflicts: # drivers/gpu/drm/i915/i915_pci.c # drivers/gpu/drm/i915/intel_device_info.c # include/drm/i915_pciids.h # net/sched/sch_generic.c
-rw-r--r--arch/x86/events/rapl.c2
-rw-r--r--drivers/acpi/sleep.c21
-rw-r--r--drivers/ata/libata-core.c16
-rw-r--r--drivers/gpu/drm/i915/Kconfig.debug9
-rw-r--r--drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c21
-rw-r--r--drivers/gpu/drm/i915/i915_pci.c2
-rw-r--r--drivers/gpu/drm/i915/intel_device_info.c21
-rw-r--r--drivers/iommu/intel/iommu.c2
-rw-r--r--drivers/net/phy/phy.c7
-rw-r--r--drivers/pci/msi/msi.c4
-rw-r--r--drivers/thermal/intel/therm_throt.c8
-rw-r--r--drivers/usb/core/usb-acpi.c24
-rw-r--r--include/drm/i915_pciids.h27
-rw-r--r--include/linux/lockdep.h4
-rw-r--r--include/uapi/linux/perf_event.h5
-rw-r--r--kernel/events/core.c52
-rw-r--r--kernel/hung_task.c2
-rw-r--r--kernel/locking/lockdep.c11
-rw-r--r--kernel/panic.c15
-rw-r--r--kernel/sched/deadline.c2
-rw-r--r--kernel/sched/rt.c2
-rw-r--r--kernel/time/timer.c9
-rw-r--r--kernel/trace/Kconfig7
-rw-r--r--kernel/trace/trace.c4
-rw-r--r--kernel/watchdog.c2
-rw-r--r--kernel/watchdog_hld.c2
-rw-r--r--mm/slub.c2
-rw-r--r--net/sched/sch_generic.c7
-rw-r--r--sound/hda/hdac_i915.c23
-rw-r--r--sound/pci/hda/hda_intel.c2
30 files changed, 239 insertions, 76 deletions
diff --git a/arch/x86/events/rapl.c b/arch/x86/events/rapl.c
index 77e3a47af5ad..38533df331bb 100644
--- a/arch/x86/events/rapl.c
+++ b/arch/x86/events/rapl.c
@@ -807,6 +807,8 @@ static const struct x86_cpu_id rapl_model_match[] __initconst = {
X86_MATCH_INTEL_FAM6_MODEL(ALDERLAKE, &model_skl),
X86_MATCH_INTEL_FAM6_MODEL(ALDERLAKE_L, &model_skl),
X86_MATCH_INTEL_FAM6_MODEL(SAPPHIRERAPIDS_X, &model_spr),
+ X86_MATCH_INTEL_FAM6_MODEL(TIGERLAKE_L, &model_skl),
+ X86_MATCH_INTEL_FAM6_MODEL(TIGERLAKE, &model_skl),
{},
};
MODULE_DEVICE_TABLE(x86cpu, rapl_model_match);
diff --git a/drivers/acpi/sleep.c b/drivers/acpi/sleep.c
index d4fbea91ab6b..60c5f42626e9 100644
--- a/drivers/acpi/sleep.c
+++ b/drivers/acpi/sleep.c
@@ -80,11 +80,16 @@ static int acpi_sleep_prepare(u32 acpi_state)
return 0;
}
+static u8 max_sleep_state = -1;
+
bool acpi_sleep_state_supported(u8 sleep_state)
{
acpi_status status;
u8 type_a, type_b;
+ if (sleep_state > max_sleep_state)
+ return false;
+
status = acpi_get_sleep_type_data(sleep_state, &type_a, &type_b);
return ACPI_SUCCESS(status) && (!acpi_gbl_reduced_hardware
|| (acpi_gbl_FADT.sleep_control.address
@@ -161,6 +166,13 @@ static int __init init_nvs_nosave(const struct dmi_system_id *d)
return 0;
}
+static int __init init_nosleep(const struct dmi_system_id *d)
+{
+ pr_info("Disabling ACPI suspend\n");
+ max_sleep_state = 0;
+ return 0;
+}
+
bool acpi_sleep_default_s3;
static int __init init_default_s3(const struct dmi_system_id *d)
@@ -373,6 +385,15 @@ static const struct dmi_system_id acpisleep_dmi_table[] __initconst = {
DMI_MATCH(DMI_PRODUCT_NAME, "20GGA00L00"),
},
},
+
+ {
+ .callback = init_nosleep,
+ .ident = "samus",
+ .matches = {
+ DMI_MATCH(DMI_SYS_VENDOR, "GOOGLE"),
+ DMI_MATCH(DMI_PRODUCT_NAME, "Samus"),
+ },
+ },
{},
};
diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c
index 0c854aebfe0b..430898b62d64 100644
--- a/drivers/ata/libata-core.c
+++ b/drivers/ata/libata-core.c
@@ -2030,7 +2030,7 @@ static bool ata_identify_page_supported(struct ata_device *dev, u8 page)
* for drives which implement this ATA level or above.
*/
if (ata_id_major_version(dev->id) >= 10)
- ata_dev_warn(dev,
+ ata_dev_notice(dev,
"ATA Identify Device Log not supported\n");
dev->horkage |= ATA_HORKAGE_NO_ID_DEV_LOG;
return false;
@@ -2102,7 +2102,7 @@ static void ata_dev_config_ncq_send_recv(struct ata_device *dev)
unsigned int err_mask;
if (!ata_log_supported(dev, ATA_LOG_NCQ_SEND_RECV)) {
- ata_dev_warn(dev, "NCQ Send/Recv Log not supported\n");
+ ata_dev_notice(dev, "NCQ Send/Recv Log not supported\n");
return;
}
err_mask = ata_read_log_page(dev, ATA_LOG_NCQ_SEND_RECV,
@@ -2127,8 +2127,8 @@ static void ata_dev_config_ncq_non_data(struct ata_device *dev)
unsigned int err_mask;
if (!ata_log_supported(dev, ATA_LOG_NCQ_NON_DATA)) {
- ata_dev_warn(dev,
- "NCQ Send/Recv Log not supported\n");
+ ata_dev_notice(dev,
+ "NCQ Send/Recv Log not supported\n");
return;
}
err_mask = ata_read_log_page(dev, ATA_LOG_NCQ_NON_DATA,
@@ -2619,14 +2619,14 @@ int ata_dev_configure(struct ata_device *dev)
if (ata_id_is_cfa(id)) {
/* CPRM may make this media unusable */
if (id[ATA_ID_CFA_KEY_MGMT] & 1)
- ata_dev_warn(dev,
+ ata_dev_notice(dev,
"supports DRM functions and may not be fully accessible\n");
snprintf(revbuf, 7, "CFA");
} else {
snprintf(revbuf, 7, "ATA-%d", ata_id_major_version(id));
/* Warn the user if the device has TPM extensions */
if (ata_id_has_tpm(id))
- ata_dev_warn(dev,
+ ata_dev_notice(dev,
"supports DRM functions and may not be fully accessible\n");
}
@@ -2779,8 +2779,8 @@ int ata_dev_configure(struct ata_device *dev)
}
if ((dev->horkage & ATA_HORKAGE_FIRMWARE_WARN) && print_info) {
- ata_dev_warn(dev, "WARNING: device requires firmware update to be fully functional\n");
- ata_dev_warn(dev, " contact the vendor or visit http://ata.wiki.kernel.org\n");
+ ata_dev_notice(dev, "WARNING: device requires firmware update to be fully functional\n");
+ ata_dev_notice(dev, " contact the vendor or visit http://ata.wiki.kernel.org\n");
}
return 0;
diff --git a/drivers/gpu/drm/i915/Kconfig.debug b/drivers/gpu/drm/i915/Kconfig.debug
index 47e845353ffa..e7fd3e76f8a2 100644
--- a/drivers/gpu/drm/i915/Kconfig.debug
+++ b/drivers/gpu/drm/i915/Kconfig.debug
@@ -21,6 +21,14 @@ config DRM_I915_DEBUG
depends on DRM_I915
depends on EXPERT # only for developers
depends on !COMPILE_TEST # never built by robots
+ select PCI_MSI # ... for iommu enabled by default
+ select IOMMU_API
+ select IOMMU_IOVA
+ select IOMMU_SUPPORT
+ select NEED_DMA_MAP_STATE
+ select DMAR_TABLE
+ select INTEL_IOMMU
+ select INTEL_IOMMU_DEFAULT_ON
select DEBUG_FS
select PREEMPT_COUNT
select I2C_CHARDEV
@@ -40,6 +48,7 @@ config DRM_I915_DEBUG
select DRM_I915_DEBUG_RUNTIME_PM
select DRM_I915_SW_FENCE_DEBUG_OBJECTS
select DRM_I915_SELFTEST
+ select BROKEN # for prototype uAPI
default n
help
Choose this option to turn on extra driver debugging that may affect
diff --git a/drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c b/drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c
index d42f437149c9..13c975da7747 100644
--- a/drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c
+++ b/drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c
@@ -491,16 +491,27 @@ eb_unreserve_vma(struct eb_vma *ev)
ev->flags &= ~__EXEC_OBJECT_RESERVED;
}
+static bool platform_has_relocs_enabled(const struct i915_execbuffer *eb)
+{
+ /*
+ * Relocations are disallowed starting from gen12 with Tigerlake
+ * as an exception. To unblock CI, we are temporarily allowing it
+ * for Rocketlake and Alderlake.
+ */
+ if (GRAPHICS_VER(eb->i915) < 12 || IS_TIGERLAKE(eb->i915) ||
+ IS_ROCKETLAKE(eb->i915) || IS_ALDERLAKE_S(eb->i915) ||
+ IS_ALDERLAKE_P(eb->i915))
+ return true;
+
+ return false;
+}
+
static int
eb_validate_vma(struct i915_execbuffer *eb,
struct drm_i915_gem_exec_object2 *entry,
struct i915_vma *vma)
{
- /* Relocations are disallowed for all platforms after TGL-LP. This
- * also covers all platforms with local memory.
- */
- if (entry->relocation_count &&
- GRAPHICS_VER(eb->i915) >= 12 && !IS_TIGERLAKE(eb->i915))
+ if (entry->relocation_count && !platform_has_relocs_enabled(eb))
return -EINVAL;
if (unlikely(entry->flags & eb->invalid_flags))
diff --git a/drivers/gpu/drm/i915/i915_pci.c b/drivers/gpu/drm/i915/i915_pci.c
index 8246cbe9b01d..91677a9f330c 100644
--- a/drivers/gpu/drm/i915/i915_pci.c
+++ b/drivers/gpu/drm/i915/i915_pci.c
@@ -1038,7 +1038,6 @@ static const struct intel_device_info xehpsdv_info = {
.require_force_probe = 1,
};
-__maybe_unused
static const struct intel_device_info dg2_info = {
XE_HP_FEATURES,
XE_HPM_FEATURES,
@@ -1137,6 +1136,7 @@ static const struct pci_device_id pciidlist[] = {
INTEL_ADLN_IDS(&adl_p_info),
INTEL_DG1_IDS(&dg1_info),
INTEL_RPLS_IDS(&adl_s_info),
+ INTEL_DG2_IDS(&dg2_info),
{0, 0, 0}
};
MODULE_DEVICE_TABLE(pci, pciidlist);
diff --git a/drivers/gpu/drm/i915/intel_device_info.c b/drivers/gpu/drm/i915/intel_device_info.c
index 94da5aa37391..ae13bc3c7970 100644
--- a/drivers/gpu/drm/i915/intel_device_info.c
+++ b/drivers/gpu/drm/i915/intel_device_info.c
@@ -178,6 +178,18 @@ static const u16 subplatform_rpls_ids[] = {
INTEL_RPLS_IDS(0),
};
+static const u16 subplatform_g10_ids[] = {
+ INTEL_DG2_G10_IDS(0),
+};
+
+static const u16 subplatform_g11_ids[] = {
+ INTEL_DG2_G11_IDS(0),
+};
+
+static const u16 subplatform_g12_ids[] = {
+ INTEL_DG2_G12_IDS(0),
+};
+
static bool find_devid(u16 id, const u16 *p, unsigned int num)
{
for (; num; num--, p++) {
@@ -220,6 +232,15 @@ void intel_device_info_subplatform_init(struct drm_i915_private *i915)
} else if (find_devid(devid, subplatform_rpls_ids,
ARRAY_SIZE(subplatform_rpls_ids))) {
mask = BIT(INTEL_SUBPLATFORM_RPL_S);
+ } else if (find_devid(devid, subplatform_g10_ids,
+ ARRAY_SIZE(subplatform_g10_ids))) {
+ mask = BIT(INTEL_SUBPLATFORM_G10);
+ } else if (find_devid(devid, subplatform_g11_ids,
+ ARRAY_SIZE(subplatform_g11_ids))) {
+ mask = BIT(INTEL_SUBPLATFORM_G11);
+ } else if (find_devid(devid, subplatform_g12_ids,
+ ARRAY_SIZE(subplatform_g12_ids))) {
+ mask = BIT(INTEL_SUBPLATFORM_G12);
}
if (IS_TIGERLAKE(i915)) {
diff --git a/drivers/iommu/intel/iommu.c b/drivers/iommu/intel/iommu.c
index 92fea3fbbb11..639e4438827e 100644
--- a/drivers/iommu/intel/iommu.c
+++ b/drivers/iommu/intel/iommu.c
@@ -419,8 +419,6 @@ static int __init intel_iommu_setup(char *str)
no_platform_optin = 1;
pr_info("IOMMU disabled\n");
} else if (!strncmp(str, "igfx_off", 8)) {
- dmar_map_gfx = 0;
- pr_info("Disable GFX device mapping\n");
} else if (!strncmp(str, "forcedac", 8)) {
pr_warn("intel_iommu=forcedac deprecated; use iommu.forcedac instead\n");
iommu_dma_forcedac = true;
diff --git a/drivers/net/phy/phy.c b/drivers/net/phy/phy.c
index beb2b66da132..48977bae20dd 100644
--- a/drivers/net/phy/phy.c
+++ b/drivers/net/phy/phy.c
@@ -939,7 +939,7 @@ void phy_stop_machine(struct phy_device *phydev)
*/
void phy_error(struct phy_device *phydev)
{
- WARN_ON(1);
+ pr_notice_once("%s\n", __func__);
mutex_lock(&phydev->lock);
phydev->state = PHY_HALTED;
@@ -1034,11 +1034,8 @@ void phy_stop(struct phy_device *phydev)
{
struct net_device *dev = phydev->attached_dev;
- if (!phy_is_started(phydev) && phydev->state != PHY_DOWN) {
- WARN(1, "called from state %s\n",
- phy_state_to_str(phydev->state));
+ if (!phy_is_started(phydev) && phydev->state != PHY_DOWN)
return;
- }
mutex_lock(&phydev->lock);
diff --git a/drivers/pci/msi/msi.c b/drivers/pci/msi/msi.c
index 9037a7827eca..60d0c9176397 100644
--- a/drivers/pci/msi/msi.c
+++ b/drivers/pci/msi/msi.c
@@ -879,8 +879,10 @@ static int __pci_enable_msi_range(struct pci_dev *dev, int minvec, int maxvec,
if (maxvec < minvec)
return -ERANGE;
- if (WARN_ON_ONCE(dev->msi_enabled))
+ if (dev->msi_enabled) {
+ pci_info(dev, "can't enable MSI, already enabled\n");
return -EINVAL;
+ }
nvec = pci_msi_vec_count(dev);
if (nvec < 0)
diff --git a/drivers/thermal/intel/therm_throt.c b/drivers/thermal/intel/therm_throt.c
index dab7e8fb1059..11b06112b745 100644
--- a/drivers/thermal/intel/therm_throt.c
+++ b/drivers/thermal/intel/therm_throt.c
@@ -284,10 +284,10 @@ static void __maybe_unused throttle_active_work(struct work_struct *work)
avg /= ARRAY_SIZE(state->temp_samples);
if (state->average > avg) {
- pr_warn("CPU%d: %s temperature is above threshold, cpu clock is throttled (total events = %lu)\n",
- this_cpu,
- state->level == CORE_LEVEL ? "Core" : "Package",
- state->count);
+ pr_notice("CPU%d: %s temperature is above threshold, cpu clock is throttled (total events = %lu)\n",
+ this_cpu,
+ state->level == CORE_LEVEL ? "Core" : "Package",
+ state->count);
state->rate_control_active = true;
}
diff --git a/drivers/usb/core/usb-acpi.c b/drivers/usb/core/usb-acpi.c
index 50b2fc7fcc0e..f511b8bf23ca 100644
--- a/drivers/usb/core/usb-acpi.c
+++ b/drivers/usb/core/usb-acpi.c
@@ -12,6 +12,7 @@
#include <linux/acpi.h>
#include <linux/pci.h>
#include <linux/usb/hcd.h>
+#include <linux/dmi.h>
#include "hub.h"
@@ -81,6 +82,20 @@ int usb_acpi_set_power_state(struct usb_device *hdev, int index, bool enable)
}
EXPORT_SYMBOL_GPL(usb_acpi_set_power_state);
+static const struct dmi_system_id intel_icl_broken_acpi[] = {
+ {
+ .ident = "ICL RVP",
+ .matches = {
+ DMI_MATCH(DMI_SYS_VENDOR, "Intel Corporation"),
+ DMI_MATCH(DMI_PRODUCT_NAME, "Ice Lake Client Platform"),
+ },
+ },
+
+ { }
+};
+
+static bool acpi_connection_type_broken;
+
static enum usb_port_connect_type usb_acpi_get_connect_type(acpi_handle handle,
struct acpi_pld_info *pld)
{
@@ -89,6 +104,10 @@ static enum usb_port_connect_type usb_acpi_get_connect_type(acpi_handle handle,
union acpi_object *upc = NULL;
acpi_status status;
+ /* Work around unknown ACPI instruction error on ICL RVP BIOSes. */
+ if (acpi_connection_type_broken)
+ return USB_PORT_CONNECT_TYPE_UNKNOWN;
+
/*
* According to 9.14 in ACPI Spec 6.2. _PLD indicates whether usb port
* is user visible and _UPC indicates whether it is connectable. If
@@ -273,6 +292,11 @@ static struct acpi_bus_type usb_acpi_bus = {
int usb_acpi_register(void)
{
+ if (dmi_check_system(intel_icl_broken_acpi)) {
+ pr_info("USB ACPI connection type broken.\n");
+ acpi_connection_type_broken = true;
+ }
+
return register_acpi_bus_type(&usb_acpi_bus);
}
diff --git a/include/drm/i915_pciids.h b/include/drm/i915_pciids.h
index 533890dc9da1..3609f3254f24 100644
--- a/include/drm/i915_pciids.h
+++ b/include/drm/i915_pciids.h
@@ -681,4 +681,31 @@
INTEL_VGA_DEVICE(0xA788, info), \
INTEL_VGA_DEVICE(0xA789, info)
+/* DG2 */
+#define INTEL_DG2_G10_IDS(info) \
+ INTEL_VGA_DEVICE(0x5690, info), \
+ INTEL_VGA_DEVICE(0x5691, info), \
+ INTEL_VGA_DEVICE(0x5692, info), \
+ INTEL_VGA_DEVICE(0x56A0, info), \
+ INTEL_VGA_DEVICE(0x56A1, info), \
+ INTEL_VGA_DEVICE(0x56A2, info)
+
+#define INTEL_DG2_G11_IDS(info) \
+ INTEL_VGA_DEVICE(0x5693, info), \
+ INTEL_VGA_DEVICE(0x5694, info), \
+ INTEL_VGA_DEVICE(0x5695, info), \
+ INTEL_VGA_DEVICE(0x56A5, info), \
+ INTEL_VGA_DEVICE(0x56A6, info), \
+ INTEL_VGA_DEVICE(0x56B0, info), \
+ INTEL_VGA_DEVICE(0x56B1, info)
+
+#define INTEL_DG2_G12_IDS(info) \
+ INTEL_VGA_DEVICE(0x56A3, info), \
+ INTEL_VGA_DEVICE(0x56A4, info)
+
+#define INTEL_DG2_IDS(info) \
+ INTEL_DG2_G10_IDS(info), \
+ INTEL_DG2_G11_IDS(info), \
+ INTEL_DG2_G12_IDS(info)
+
#endif /* _I915_PCIIDS_H */
diff --git a/include/linux/lockdep.h b/include/linux/lockdep.h
index 467b94257105..9023ee07bf6a 100644
--- a/include/linux/lockdep.h
+++ b/include/linux/lockdep.h
@@ -138,8 +138,8 @@ struct held_lock {
unsigned int read:2; /* see lock_acquire() comment */
unsigned int check:1; /* see lock_acquire() comment */
unsigned int hardirqs_off:1;
- unsigned int references:12; /* 32 bits */
- unsigned int pin_count;
+ unsigned int pin_count:12; /* 32 bits */
+ unsigned int references;
};
/*
diff --git a/include/uapi/linux/perf_event.h b/include/uapi/linux/perf_event.h
index 82858b697c05..6fdf2a6cddc8 100644
--- a/include/uapi/linux/perf_event.h
+++ b/include/uapi/linux/perf_event.h
@@ -164,11 +164,12 @@ enum perf_event_sample_format {
PERF_SAMPLE_WEIGHT_STRUCT = 1U << 24,
PERF_SAMPLE_MAX = 1U << 25, /* non-ABI */
-
- __PERF_SAMPLE_CALLCHAIN_EARLY = 1ULL << 63, /* non-ABI; internal use */
};
#define PERF_SAMPLE_WEIGHT_TYPE (PERF_SAMPLE_WEIGHT | PERF_SAMPLE_WEIGHT_STRUCT)
+
+#define __PERF_SAMPLE_CALLCHAIN_EARLY (1ULL << 63) /* non-ABI; internal use */
+
/*
* values to program into branch_sample_type when PERF_SAMPLE_BRANCH is set
*
diff --git a/kernel/events/core.c b/kernel/events/core.c
index 6859229497b1..9167ab334cec 100644
--- a/kernel/events/core.c
+++ b/kernel/events/core.c
@@ -5378,20 +5378,16 @@ static int __perf_read_group_add(struct perf_event *leader,
}
static int perf_read_group(struct perf_event *event,
- u64 read_format, char __user *buf)
+ u64 read_format, char __user *buf,
+ u64 *values)
{
struct perf_event *leader = event->group_leader, *child;
struct perf_event_context *ctx = leader->ctx;
int ret;
- u64 *values;
lockdep_assert_held(&ctx->mutex);
- values = kzalloc(event->read_size, GFP_KERNEL);
- if (!values)
- return -ENOMEM;
-
- values[0] = 1 + leader->nr_siblings;
+ *values = 1 + leader->nr_siblings;
/*
* By locking the child_mutex of the leader we effectively
@@ -5409,25 +5405,17 @@ static int perf_read_group(struct perf_event *event,
goto unlock;
}
- mutex_unlock(&leader->child_mutex);
-
ret = event->read_size;
- if (copy_to_user(buf, values, event->read_size))
- ret = -EFAULT;
- goto out;
-
unlock:
mutex_unlock(&leader->child_mutex);
-out:
- kfree(values);
return ret;
}
static int perf_read_one(struct perf_event *event,
- u64 read_format, char __user *buf)
+ u64 read_format, char __user *buf,
+ u64 *values)
{
u64 enabled, running;
- u64 values[4];
int n = 0;
values[n++] = __perf_event_read_value(event, &enabled, &running);
@@ -5438,9 +5426,6 @@ static int perf_read_one(struct perf_event *event,
if (read_format & PERF_FORMAT_ID)
values[n++] = primary_event_id(event);
- if (copy_to_user(buf, values, n * sizeof(u64)))
- return -EFAULT;
-
return n * sizeof(u64);
}
@@ -5461,7 +5446,8 @@ static bool is_event_hup(struct perf_event *event)
* Read the performance event - simple non blocking version for now
*/
static ssize_t
-__perf_read(struct perf_event *event, char __user *buf, size_t count)
+__perf_read(struct perf_event *event, char __user *buf,
+ size_t count, u64 *values)
{
u64 read_format = event->attr.read_format;
int ret;
@@ -5479,9 +5465,9 @@ __perf_read(struct perf_event *event, char __user *buf, size_t count)
WARN_ON_ONCE(event->ctx->parent_ctx);
if (read_format & PERF_FORMAT_GROUP)
- ret = perf_read_group(event, read_format, buf);
+ ret = perf_read_group(event, read_format, buf, values);
else
- ret = perf_read_one(event, read_format, buf);
+ ret = perf_read_one(event, read_format, buf, values);
return ret;
}
@@ -5491,16 +5477,31 @@ perf_read(struct file *file, char __user *buf, size_t count, loff_t *ppos)
{
struct perf_event *event = file->private_data;
struct perf_event_context *ctx;
+ u64 stack_values[8];
+ u64 *values;
int ret;
ret = security_perf_event_read(event);
if (ret)
return ret;
+ if (event->read_size <= sizeof(stack_values))
+ values = memset(stack_values, 0, event->read_size);
+ else
+ values = kzalloc(event->read_size, GFP_KERNEL);
+ if (!values)
+ return -ENOMEM;
+
ctx = perf_event_ctx_lock(event);
- ret = __perf_read(event, buf, count);
+ ret = __perf_read(event, buf, count, values);
perf_event_ctx_unlock(event, ctx);
+ if (ret > 0 && copy_to_user(buf, values, ret))
+ ret = -EFAULT;
+
+ if (values != stack_values)
+ kfree(values);
+
return ret;
}
@@ -11311,7 +11312,8 @@ void perf_pmu_unregister(struct pmu *pmu)
device_del(pmu->dev);
put_device(pmu->dev);
}
- free_pmu_context(pmu);
+ if (!find_pmu_context(pmu->task_ctx_nr))
+ free_pmu_context(pmu);
mutex_unlock(&pmus_lock);
}
EXPORT_SYMBOL_GPL(perf_pmu_unregister);
diff --git a/kernel/hung_task.c b/kernel/hung_task.c
index 52501e5f7655..db59b6d4f0e7 100644
--- a/kernel/hung_task.c
+++ b/kernel/hung_task.c
@@ -120,6 +120,8 @@ static void check_hung_task(struct task_struct *t, unsigned long timeout)
console_verbose();
hung_task_show_lock = true;
hung_task_call_panic = true;
+ } else {
+ add_taint(TAINT_WARN, LOCKDEP_STILL_OK);
}
/*
diff --git a/kernel/locking/lockdep.c b/kernel/locking/lockdep.c
index 4a882f83aeb9..4d3aa3953cc5 100644
--- a/kernel/locking/lockdep.c
+++ b/kernel/locking/lockdep.c
@@ -5402,11 +5402,14 @@ static struct pin_cookie __lock_pin_lock(struct lockdep_map *lock)
if (match_held_lock(hlock, lock)) {
/*
- * Grab 16bits of randomness; this is sufficient to not
- * be guessable and still allows some pin nesting in
- * our u32 pin_count.
+ * Grab 6bits of randomness; this is barely sufficient
+ * to not be guessable and still allows some 32 levels
+ * of pin nesting in our u12 pin_count.
*/
- cookie.val = 1 + (prandom_u32() >> 16);
+ cookie.val = 1 + (prandom_u32() >> 26);
+ if (DEBUG_LOCKS_WARN_ON(hlock->pin_count + cookie.val >= 1 << 12))
+ return NIL_COOKIE;
+
hlock->pin_count += cookie.val;
return cookie;
}
diff --git a/kernel/panic.c b/kernel/panic.c
index 55b50e052ec3..99af2bc00bc3 100644
--- a/kernel/panic.c
+++ b/kernel/panic.c
@@ -225,13 +225,6 @@ void panic(const char *fmt, ...)
buf[len - 1] = '\0';
pr_emerg("Kernel panic - not syncing: %s\n", buf);
-#ifdef CONFIG_DEBUG_BUGVERBOSE
- /*
- * Avoid nested stack-dumping if a panic occurs during oops processing
- */
- if (!test_taint(TAINT_DIE) && oops_in_progress <= 1)
- dump_stack();
-#endif
/*
* If kgdb is enabled, give it a chance to run before we stop all
@@ -272,6 +265,14 @@ void panic(const char *fmt, ...)
*/
atomic_notifier_call_chain(&panic_notifier_list, 0, buf);
+#ifdef CONFIG_DEBUG_BUGVERBOSE
+ /*
+ * Avoid nested stack-dumping if a panic occurs during oops processing
+ */
+ if (!test_taint(TAINT_DIE) && oops_in_progress <= 1)
+ dump_stack();
+#endif
+
kmsg_dump(KMSG_DUMP_PANIC);
/*
diff --git a/kernel/sched/deadline.c b/kernel/sched/deadline.c
index d2c072b0ef01..db884d20ac2b 100644
--- a/kernel/sched/deadline.c
+++ b/kernel/sched/deadline.c
@@ -800,7 +800,7 @@ static void replenish_dl_entity(struct sched_dl_entity *dl_se)
* entity.
*/
if (dl_time_before(dl_se->deadline, rq_clock(rq))) {
- printk_deferred_once("sched: DL replenish lagged too much\n");
+ printk_deferred_once(KERN_NOTICE "sched: DL replenish lagged too much\n");
dl_se->deadline = rq_clock(rq) + pi_of(dl_se)->dl_deadline;
dl_se->runtime = pi_of(dl_se)->dl_runtime;
}
diff --git a/kernel/sched/rt.c b/kernel/sched/rt.c
index 7b4f4fbbb404..02ff60be7a5e 100644
--- a/kernel/sched/rt.c
+++ b/kernel/sched/rt.c
@@ -982,7 +982,7 @@ static int sched_rt_runtime_exceeded(struct rt_rq *rt_rq)
*/
if (likely(rt_b->rt_runtime)) {
rt_rq->rt_throttled = 1;
- printk_deferred_once("sched: RT throttling activated\n");
+ printk_deferred_once(KERN_NOTICE "sched: RT throttling activated\n");
} else {
/*
* In case we did anyway, make it go away,
diff --git a/kernel/time/timer.c b/kernel/time/timer.c
index 85f1021ad459..600b3ddbdf08 100644
--- a/kernel/time/timer.c
+++ b/kernel/time/timer.c
@@ -617,7 +617,14 @@ static const struct debug_obj_descr timer_debug_descr;
static void *timer_debug_hint(void *addr)
{
- return ((struct timer_list *) addr)->function;
+ struct timer_list *timer = addr;
+
+ if (timer->function == delayed_work_timer_fn) {
+ struct delayed_work *work = from_timer(work, timer, timer);
+ return work->work.func;
+ }
+
+ return timer->function;
}
static bool timer_is_static_object(void *addr)
diff --git a/kernel/trace/Kconfig b/kernel/trace/Kconfig
index a5eb5e7fd624..5728c4bd8a4a 100644
--- a/kernel/trace/Kconfig
+++ b/kernel/trace/Kconfig
@@ -134,6 +134,13 @@ config TRACING
select EVENT_TRACING
select TRACE_CLOCK
+config GLOBAL_TRACE_BUF_SIZE
+ int
+ prompt "Global ftrace buffer size (for trace_printk)" if EXPERT
+ range 0 4194034
+ default 1441792 # 16384 * 88 (sizeof(struct print_entry))
+ depends on TRACING
+
config GENERIC_TRACER
bool
select TRACING
diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c
index 7c2578efde26..364aa1007371 100644
--- a/kernel/trace/trace.c
+++ b/kernel/trace/trace.c
@@ -801,9 +801,7 @@ int tracing_is_enabled(void)
* to not have to wait for all that output. Anyway this can be
* boot time and run time configurable.
*/
-#define TRACE_BUF_SIZE_DEFAULT 1441792UL /* 16384 * 88 (sizeof(entry)) */
-
-static unsigned long trace_buf_size = TRACE_BUF_SIZE_DEFAULT;
+static unsigned long trace_buf_size = CONFIG_GLOBAL_TRACE_BUF_SIZE;
/* trace_types holds a link list of available tracers. */
static struct tracer *trace_types __read_mostly;
diff --git a/kernel/watchdog.c b/kernel/watchdog.c
index 99afb88d2e85..936517004fd2 100644
--- a/kernel/watchdog.c
+++ b/kernel/watchdog.c
@@ -442,6 +442,8 @@ static enum hrtimer_restart watchdog_timer_fn(struct hrtimer *hrtimer)
add_taint(TAINT_SOFTLOCKUP, LOCKDEP_STILL_OK);
if (softlockup_panic)
panic("softlockup: hung tasks");
+ else
+ add_taint(TAINT_WARN, LOCKDEP_STILL_OK);
}
return HRTIMER_RESTART;
diff --git a/kernel/watchdog_hld.c b/kernel/watchdog_hld.c
index 247bf0b1582c..cce46cf75d76 100644
--- a/kernel/watchdog_hld.c
+++ b/kernel/watchdog_hld.c
@@ -154,6 +154,8 @@ static void watchdog_overflow_callback(struct perf_event *event,
if (hardlockup_panic)
nmi_panic(regs, "Hard LOCKUP");
+ else
+ add_taint(TAINT_WARN, LOCKDEP_STILL_OK);
__this_cpu_write(hard_watchdog_warn, true);
return;
diff --git a/mm/slub.c b/mm/slub.c
index 261474092e43..7e0be2b400a1 100644
--- a/mm/slub.c
+++ b/mm/slub.c
@@ -689,7 +689,7 @@ static void print_section(char *level, char *text, u8 *addr,
unsigned int length)
{
metadata_access_enable();
- print_hex_dump(level, text, DUMP_PREFIX_ADDRESS,
+ print_hex_dump(level, text, DUMP_PREFIX_OFFSET,
16, 1, kasan_reset_tag((void *)addr), length, 1);
metadata_access_disable();
}
diff --git a/net/sched/sch_generic.c b/net/sched/sch_generic.c
index f893d9a81b01..69d14ee95f31 100644
--- a/net/sched/sch_generic.c
+++ b/net/sched/sch_generic.c
@@ -524,7 +524,12 @@ static void dev_watchdog(struct timer_list *t)
}
}
- if (unlikely(some_queue_timedout)) {
+ /* The noise is pissing off our CI and upstream doesn't
+ * move on the bug report:
+ *
+ * https://bugzilla.kernel.org/show_bug.cgi?id=196399
+ */
+ if (unlikely(some_queue_timedout) && 0) {
trace_net_dev_xmit_timeout(dev, i);
WARN_ONCE(1, KERN_INFO "NETDEV WATCHDOG: %s (%s): transmit queue %u timed out\n",
dev->name, netdev_drivername(dev), i);
diff --git a/sound/hda/hdac_i915.c b/sound/hda/hdac_i915.c
index 454474ac5716..fbca4bf53a47 100644
--- a/sound/hda/hdac_i915.c
+++ b/sound/hda/hdac_i915.c
@@ -128,6 +128,26 @@ static bool i915_gfx_present(void)
return pci_dev_present(ids);
}
+static bool dg1_gfx_present(void)
+{
+ static const struct pci_device_id ids[] = {
+ { PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x4905),
+ .class = PCI_BASE_CLASS_DISPLAY << 16,
+ .class_mask = 0xff << 16 },
+ { PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x4906),
+ .class = PCI_BASE_CLASS_DISPLAY << 16,
+ .class_mask = 0xff << 16 },
+ { PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x4907),
+ .class = PCI_BASE_CLASS_DISPLAY << 16,
+ .class_mask = 0xff << 16 },
+ { PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x4908),
+ .class = PCI_BASE_CLASS_DISPLAY << 16,
+ .class_mask = 0xff << 16 },
+ {}
+ };
+ return pci_dev_present(ids);
+}
+
/**
* snd_hdac_i915_init - Initialize i915 audio component
* @bus: HDA core bus
@@ -148,6 +168,9 @@ int snd_hdac_i915_init(struct hdac_bus *bus)
if (!i915_gfx_present())
return -ENODEV;
+ if (dg1_gfx_present())
+ return -ENODEV;
+
err = snd_hdac_acomp_init(bus, NULL,
i915_component_master_match,
sizeof(struct i915_audio_component) - sizeof(*acomp));
diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c
index 4b0338c4c543..5b5f004f6736 100644
--- a/sound/pci/hda/hda_intel.c
+++ b/sound/pci/hda/hda_intel.c
@@ -2251,8 +2251,6 @@ static int azx_probe_continue(struct azx *chip)
* codecs can be on the same link.
*/
if (CONTROLLER_IN_GPU(pci)) {
- dev_err(chip->card->dev,
- "HSW/BDW HD-audio HDMI/DP requires binding with gfx driver\n");
goto out_free;
} else {
/* don't bother any longer */