Merge 2c08dfc99f
("ALSA: hda/realtek: Add quirk for Huawei MateBook 13 KLV-WX9") into android12-5.10-lts
Steps on the way to 5.10.227 Resolves merge conflicts in: fs/ext4/namei.c Change-Id: I7dfbf5a9d8837593f8e4a7ddb5ba34e256d94953 Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
This commit is contained in:
commit
6a00671aec
@ -1071,8 +1071,7 @@ ENTRY_CFI(intr_save) /* for os_hpmc */
|
||||
STREG %r16, PT_ISR(%r29)
|
||||
STREG %r17, PT_IOR(%r29)
|
||||
|
||||
#if 0 && defined(CONFIG_64BIT)
|
||||
/* Revisit when we have 64-bit code above 4Gb */
|
||||
#if defined(CONFIG_64BIT)
|
||||
b,n intr_save2
|
||||
|
||||
skip_save_ior:
|
||||
@ -1080,8 +1079,7 @@ skip_save_ior:
|
||||
* need to adjust iasq/iaoq here in the same way we adjusted isr/ior
|
||||
* above.
|
||||
*/
|
||||
extrd,u,* %r8,PSW_W_BIT,1,%r1
|
||||
cmpib,COND(=),n 1,%r1,intr_save2
|
||||
bb,COND(>=),n %r8,PSW_W_BIT,intr_save2
|
||||
LDREG PT_IASQ0(%r29), %r16
|
||||
LDREG PT_IAOQ0(%r29), %r17
|
||||
/* adjust iasq/iaoq */
|
||||
|
@ -128,7 +128,7 @@ static const struct pci_device_id sil_pci_tbl[] = {
|
||||
static const struct sil_drivelist {
|
||||
const char *product;
|
||||
unsigned int quirk;
|
||||
} sil_blacklist [] = {
|
||||
} sil_quirks[] = {
|
||||
{ "ST320012AS", SIL_QUIRK_MOD15WRITE },
|
||||
{ "ST330013AS", SIL_QUIRK_MOD15WRITE },
|
||||
{ "ST340017AS", SIL_QUIRK_MOD15WRITE },
|
||||
@ -601,8 +601,8 @@ static void sil_thaw(struct ata_port *ap)
|
||||
* list, and apply the fixups to only the specific
|
||||
* devices/hosts/firmwares that need it.
|
||||
*
|
||||
* 20040111 - Seagate drives affected by the Mod15Write bug are blacklisted
|
||||
* The Maxtor quirk is in the blacklist, but I'm keeping the original
|
||||
* 20040111 - Seagate drives affected by the Mod15Write bug are quirked
|
||||
* The Maxtor quirk is in sil_quirks, but I'm keeping the original
|
||||
* pessimistic fix for the following reasons...
|
||||
* - There seems to be less info on it, only one device gleaned off the
|
||||
* Windows driver, maybe only one is affected. More info would be greatly
|
||||
@ -621,9 +621,9 @@ static void sil_dev_config(struct ata_device *dev)
|
||||
|
||||
ata_id_c_string(dev->id, model_num, ATA_ID_PROD, sizeof(model_num));
|
||||
|
||||
for (n = 0; sil_blacklist[n].product; n++)
|
||||
if (!strcmp(sil_blacklist[n].product, model_num)) {
|
||||
quirks = sil_blacklist[n].quirk;
|
||||
for (n = 0; sil_quirks[n].product; n++)
|
||||
if (!strcmp(sil_quirks[n].product, model_num)) {
|
||||
quirks = sil_quirks[n].quirk;
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -25,12 +25,6 @@
|
||||
#define MSG_RING BIT(1)
|
||||
#define TAG_SZ 32
|
||||
|
||||
static inline struct tegra_bpmp *
|
||||
mbox_client_to_bpmp(struct mbox_client *client)
|
||||
{
|
||||
return container_of(client, struct tegra_bpmp, mbox.client);
|
||||
}
|
||||
|
||||
static inline const struct tegra_bpmp_ops *
|
||||
channel_to_ops(struct tegra_bpmp_channel *channel)
|
||||
{
|
||||
|
@ -1250,6 +1250,10 @@ static const struct amdgpu_gfxoff_quirk amdgpu_gfxoff_quirk_list[] = {
|
||||
{ 0x1002, 0x15dd, 0x1002, 0x15dd, 0xc6 },
|
||||
/* Apple MacBook Pro (15-inch, 2019) Radeon Pro Vega 20 4 GB */
|
||||
{ 0x1002, 0x69af, 0x106b, 0x019a, 0xc0 },
|
||||
/* https://bbs.openkylin.top/t/topic/171497 */
|
||||
{ 0x1002, 0x15d8, 0x19e5, 0x3e14, 0xc2 },
|
||||
/* HP 705G4 DM with R5 2400G */
|
||||
{ 0x1002, 0x15dd, 0x103c, 0x8464, 0xd6 },
|
||||
{ 0, 0, 0, 0, 0 },
|
||||
};
|
||||
|
||||
|
@ -3083,7 +3083,8 @@ void dc_allow_idle_optimizations(struct dc *dc, bool allow)
|
||||
if (allow == dc->idle_optimizations_allowed)
|
||||
return;
|
||||
|
||||
if (dc->hwss.apply_idle_power_optimizations && dc->hwss.apply_idle_power_optimizations(dc, allow))
|
||||
if (dc->hwss.apply_idle_power_optimizations && dc->clk_mgr != NULL &&
|
||||
dc->hwss.apply_idle_power_optimizations(dc, allow))
|
||||
dc->idle_optimizations_allowed = allow;
|
||||
}
|
||||
|
||||
|
@ -1697,6 +1697,8 @@ static bool are_stream_backends_same(
|
||||
bool dc_is_stream_unchanged(
|
||||
struct dc_stream_state *old_stream, struct dc_stream_state *stream)
|
||||
{
|
||||
if (!old_stream || !stream)
|
||||
return false;
|
||||
|
||||
if (!are_stream_backends_same(old_stream, stream))
|
||||
return false;
|
||||
|
@ -560,6 +560,8 @@ bool cm_helper_translate_curve_to_degamma_hw_format(
|
||||
i += increment) {
|
||||
if (j == hw_points - 1)
|
||||
break;
|
||||
if (i >= TRANSFER_FUNC_POINTS)
|
||||
return false;
|
||||
rgb_resulted[j].red = output_tf->tf_pts.red[i];
|
||||
rgb_resulted[j].green = output_tf->tf_pts.green[i];
|
||||
rgb_resulted[j].blue = output_tf->tf_pts.blue[i];
|
||||
|
@ -178,6 +178,8 @@ bool cm3_helper_translate_curve_to_hw_format(
|
||||
i += increment) {
|
||||
if (j == hw_points - 1)
|
||||
break;
|
||||
if (i >= TRANSFER_FUNC_POINTS)
|
||||
return false;
|
||||
rgb_resulted[j].red = output_tf->tf_pts.red[i];
|
||||
rgb_resulted[j].green = output_tf->tf_pts.green[i];
|
||||
rgb_resulted[j].blue = output_tf->tf_pts.blue[i];
|
||||
@ -355,6 +357,8 @@ bool cm3_helper_translate_curve_to_degamma_hw_format(
|
||||
i += increment) {
|
||||
if (j == hw_points - 1)
|
||||
break;
|
||||
if (i >= TRANSFER_FUNC_POINTS)
|
||||
return false;
|
||||
rgb_resulted[j].red = output_tf->tf_pts.red[i];
|
||||
rgb_resulted[j].green = output_tf->tf_pts.green[i];
|
||||
rgb_resulted[j].blue = output_tf->tf_pts.blue[i];
|
||||
|
@ -78,7 +78,7 @@ static void calculate_ttu_cursor(struct display_mode_lib *mode_lib,
|
||||
|
||||
static unsigned int get_bytes_per_element(enum source_format_class source_format, bool is_chroma)
|
||||
{
|
||||
unsigned int ret_val = 0;
|
||||
unsigned int ret_val = 1;
|
||||
|
||||
if (source_format == dm_444_16) {
|
||||
if (!is_chroma)
|
||||
|
@ -53,7 +53,7 @@ static void calculate_ttu_cursor(
|
||||
|
||||
static unsigned int get_bytes_per_element(enum source_format_class source_format, bool is_chroma)
|
||||
{
|
||||
unsigned int ret_val = 0;
|
||||
unsigned int ret_val = 1;
|
||||
|
||||
if (source_format == dm_444_16) {
|
||||
if (!is_chroma)
|
||||
|
@ -1189,6 +1189,8 @@ static int init_overdrive_limits(struct pp_hwmgr *hwmgr,
|
||||
fw_info = smu_atom_get_data_table(hwmgr->adev,
|
||||
GetIndexIntoMasterTable(DATA, FirmwareInfo),
|
||||
&size, &frev, &crev);
|
||||
PP_ASSERT_WITH_CODE(fw_info != NULL,
|
||||
"Missing firmware info!", return -EINVAL);
|
||||
|
||||
if ((fw_info->ucTableFormatRevision == 1)
|
||||
&& (le16_to_cpu(fw_info->usStructureSize) >= sizeof(ATOM_FIRMWARE_INFO_V1_4)))
|
||||
|
@ -584,7 +584,7 @@ static int drm_atomic_plane_set_property(struct drm_plane *plane,
|
||||
&state->fb_damage_clips,
|
||||
val,
|
||||
-1,
|
||||
sizeof(struct drm_rect),
|
||||
sizeof(struct drm_mode_rect),
|
||||
&replaced);
|
||||
return ret;
|
||||
} else if (plane->funcs->atomic_set_property) {
|
||||
|
@ -78,8 +78,9 @@ void __drm_puts_coredump(struct drm_printer *p, const char *str)
|
||||
copy = iterator->remain;
|
||||
|
||||
/* Copy out the bit of the string that we need */
|
||||
memcpy(iterator->data,
|
||||
str + (iterator->start - iterator->offset), copy);
|
||||
if (iterator->data)
|
||||
memcpy(iterator->data,
|
||||
str + (iterator->start - iterator->offset), copy);
|
||||
|
||||
iterator->offset = iterator->start + copy;
|
||||
iterator->remain -= copy;
|
||||
@ -88,7 +89,8 @@ void __drm_puts_coredump(struct drm_printer *p, const char *str)
|
||||
|
||||
len = min_t(ssize_t, strlen(str), iterator->remain);
|
||||
|
||||
memcpy(iterator->data + pos, str, len);
|
||||
if (iterator->data)
|
||||
memcpy(iterator->data + pos, str, len);
|
||||
|
||||
iterator->offset += len;
|
||||
iterator->remain -= len;
|
||||
@ -118,8 +120,9 @@ void __drm_printfn_coredump(struct drm_printer *p, struct va_format *vaf)
|
||||
if ((iterator->offset >= iterator->start) && (len < iterator->remain)) {
|
||||
ssize_t pos = iterator->offset - iterator->start;
|
||||
|
||||
snprintf(((char *) iterator->data) + pos,
|
||||
iterator->remain, "%pV", vaf);
|
||||
if (iterator->data)
|
||||
snprintf(((char *) iterator->data) + pos,
|
||||
iterator->remain, "%pV", vaf);
|
||||
|
||||
iterator->offset += len;
|
||||
iterator->remain -= len;
|
||||
|
@ -1005,45 +1005,65 @@ static int r100_cp_init_microcode(struct radeon_device *rdev)
|
||||
|
||||
DRM_DEBUG_KMS("\n");
|
||||
|
||||
if ((rdev->family == CHIP_R100) || (rdev->family == CHIP_RV100) ||
|
||||
(rdev->family == CHIP_RV200) || (rdev->family == CHIP_RS100) ||
|
||||
(rdev->family == CHIP_RS200)) {
|
||||
switch (rdev->family) {
|
||||
case CHIP_R100:
|
||||
case CHIP_RV100:
|
||||
case CHIP_RV200:
|
||||
case CHIP_RS100:
|
||||
case CHIP_RS200:
|
||||
DRM_INFO("Loading R100 Microcode\n");
|
||||
fw_name = FIRMWARE_R100;
|
||||
} else if ((rdev->family == CHIP_R200) ||
|
||||
(rdev->family == CHIP_RV250) ||
|
||||
(rdev->family == CHIP_RV280) ||
|
||||
(rdev->family == CHIP_RS300)) {
|
||||
break;
|
||||
|
||||
case CHIP_R200:
|
||||
case CHIP_RV250:
|
||||
case CHIP_RV280:
|
||||
case CHIP_RS300:
|
||||
DRM_INFO("Loading R200 Microcode\n");
|
||||
fw_name = FIRMWARE_R200;
|
||||
} else if ((rdev->family == CHIP_R300) ||
|
||||
(rdev->family == CHIP_R350) ||
|
||||
(rdev->family == CHIP_RV350) ||
|
||||
(rdev->family == CHIP_RV380) ||
|
||||
(rdev->family == CHIP_RS400) ||
|
||||
(rdev->family == CHIP_RS480)) {
|
||||
break;
|
||||
|
||||
case CHIP_R300:
|
||||
case CHIP_R350:
|
||||
case CHIP_RV350:
|
||||
case CHIP_RV380:
|
||||
case CHIP_RS400:
|
||||
case CHIP_RS480:
|
||||
DRM_INFO("Loading R300 Microcode\n");
|
||||
fw_name = FIRMWARE_R300;
|
||||
} else if ((rdev->family == CHIP_R420) ||
|
||||
(rdev->family == CHIP_R423) ||
|
||||
(rdev->family == CHIP_RV410)) {
|
||||
break;
|
||||
|
||||
case CHIP_R420:
|
||||
case CHIP_R423:
|
||||
case CHIP_RV410:
|
||||
DRM_INFO("Loading R400 Microcode\n");
|
||||
fw_name = FIRMWARE_R420;
|
||||
} else if ((rdev->family == CHIP_RS690) ||
|
||||
(rdev->family == CHIP_RS740)) {
|
||||
break;
|
||||
|
||||
case CHIP_RS690:
|
||||
case CHIP_RS740:
|
||||
DRM_INFO("Loading RS690/RS740 Microcode\n");
|
||||
fw_name = FIRMWARE_RS690;
|
||||
} else if (rdev->family == CHIP_RS600) {
|
||||
break;
|
||||
|
||||
case CHIP_RS600:
|
||||
DRM_INFO("Loading RS600 Microcode\n");
|
||||
fw_name = FIRMWARE_RS600;
|
||||
} else if ((rdev->family == CHIP_RV515) ||
|
||||
(rdev->family == CHIP_R520) ||
|
||||
(rdev->family == CHIP_RV530) ||
|
||||
(rdev->family == CHIP_R580) ||
|
||||
(rdev->family == CHIP_RV560) ||
|
||||
(rdev->family == CHIP_RV570)) {
|
||||
break;
|
||||
|
||||
case CHIP_RV515:
|
||||
case CHIP_R520:
|
||||
case CHIP_RV530:
|
||||
case CHIP_R580:
|
||||
case CHIP_RV560:
|
||||
case CHIP_RV570:
|
||||
DRM_INFO("Loading R500 Microcode\n");
|
||||
fw_name = FIRMWARE_R520;
|
||||
break;
|
||||
|
||||
default:
|
||||
DRM_ERROR("Unsupported Radeon family %u\n", rdev->family);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
err = request_firmware(&rdev->me_fw, fw_name, rdev->dev);
|
||||
|
@ -569,15 +569,13 @@ static int geni_i2c_probe(struct platform_device *pdev)
|
||||
init_completion(&gi2c->done);
|
||||
spin_lock_init(&gi2c->lock);
|
||||
platform_set_drvdata(pdev, gi2c);
|
||||
ret = devm_request_irq(dev, gi2c->irq, geni_i2c_irq, 0,
|
||||
ret = devm_request_irq(dev, gi2c->irq, geni_i2c_irq, IRQF_NO_AUTOEN,
|
||||
dev_name(dev), gi2c);
|
||||
if (ret) {
|
||||
dev_err(dev, "Request_irq failed:%d: err:%d\n",
|
||||
gi2c->irq, ret);
|
||||
return ret;
|
||||
}
|
||||
/* Disable the interrupt so that the system can enter low-power mode */
|
||||
disable_irq(gi2c->irq);
|
||||
i2c_set_adapdata(&gi2c->adap, gi2c);
|
||||
gi2c->adap.dev.parent = dev;
|
||||
gi2c->adap.dev.of_node = dev->of_node;
|
||||
|
@ -2278,7 +2278,7 @@ static int __maybe_unused stm32f7_i2c_runtime_suspend(struct device *dev)
|
||||
struct stm32f7_i2c_dev *i2c_dev = dev_get_drvdata(dev);
|
||||
|
||||
if (!stm32f7_i2c_is_slave_registered(i2c_dev))
|
||||
clk_disable_unprepare(i2c_dev->clk);
|
||||
clk_disable(i2c_dev->clk);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -2289,9 +2289,9 @@ static int __maybe_unused stm32f7_i2c_runtime_resume(struct device *dev)
|
||||
int ret;
|
||||
|
||||
if (!stm32f7_i2c_is_slave_registered(i2c_dev)) {
|
||||
ret = clk_prepare_enable(i2c_dev->clk);
|
||||
ret = clk_enable(i2c_dev->clk);
|
||||
if (ret) {
|
||||
dev_err(dev, "failed to prepare_enable clock\n");
|
||||
dev_err(dev, "failed to enable clock\n");
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
@ -494,14 +494,17 @@ static irqreturn_t xiic_process(int irq, void *dev_id)
|
||||
goto out;
|
||||
}
|
||||
|
||||
xiic_fill_tx_fifo(i2c);
|
||||
|
||||
/* current message sent and there is space in the fifo */
|
||||
if (!xiic_tx_space(i2c) && xiic_tx_fifo_space(i2c) >= 2) {
|
||||
if (xiic_tx_space(i2c)) {
|
||||
xiic_fill_tx_fifo(i2c);
|
||||
} else {
|
||||
/* current message fully written */
|
||||
dev_dbg(i2c->adap.dev.parent,
|
||||
"%s end of message sent, nmsgs: %d\n",
|
||||
__func__, i2c->nmsgs);
|
||||
if (i2c->nmsgs > 1) {
|
||||
/* Don't move onto the next message until the TX FIFO empties,
|
||||
* to ensure that a NAK is not missed.
|
||||
*/
|
||||
if (i2c->nmsgs > 1 && (pend & XIIC_INTR_TX_EMPTY_MASK)) {
|
||||
i2c->nmsgs--;
|
||||
i2c->tx_msg++;
|
||||
xfer_more = 1;
|
||||
@ -512,11 +515,7 @@ static irqreturn_t xiic_process(int irq, void *dev_id)
|
||||
"%s Got TX IRQ but no more to do...\n",
|
||||
__func__);
|
||||
}
|
||||
} else if (!xiic_tx_space(i2c) && (i2c->nmsgs == 1))
|
||||
/* current frame is sent and is last,
|
||||
* make sure to disable tx half
|
||||
*/
|
||||
xiic_irq_dis(i2c, XIIC_INTR_TX_HALF_MASK);
|
||||
}
|
||||
}
|
||||
out:
|
||||
dev_dbg(i2c->adap.dev.parent, "%s clr: 0x%x\n", __func__, clr);
|
||||
|
@ -301,8 +301,8 @@ int of_irq_parse_one(struct device_node *device, int index, struct of_phandle_ar
|
||||
addr = of_get_property(device, "reg", &addr_len);
|
||||
|
||||
/* Prevent out-of-bounds read in case of longer interrupt parent address size */
|
||||
if (addr_len > (3 * sizeof(__be32)))
|
||||
addr_len = 3 * sizeof(__be32);
|
||||
if (addr_len > sizeof(addr_buf))
|
||||
addr_len = sizeof(addr_buf);
|
||||
if (addr)
|
||||
memcpy(addr_buf, addr, addr_len);
|
||||
|
||||
|
@ -840,6 +840,21 @@ static const struct ts_dmi_data rwc_nanote_p8_data = {
|
||||
.properties = rwc_nanote_p8_props,
|
||||
};
|
||||
|
||||
static const struct property_entry rwc_nanote_next_props[] = {
|
||||
PROPERTY_ENTRY_U32("touchscreen-min-x", 5),
|
||||
PROPERTY_ENTRY_U32("touchscreen-min-y", 5),
|
||||
PROPERTY_ENTRY_U32("touchscreen-size-x", 1785),
|
||||
PROPERTY_ENTRY_U32("touchscreen-size-y", 1145),
|
||||
PROPERTY_ENTRY_BOOL("touchscreen-inverted-y"),
|
||||
PROPERTY_ENTRY_STRING("firmware-name", "gsl1680-rwc-nanote-next.fw"),
|
||||
{ }
|
||||
};
|
||||
|
||||
static const struct ts_dmi_data rwc_nanote_next_data = {
|
||||
.acpi_name = "MSSL1680:00",
|
||||
.properties = rwc_nanote_next_props,
|
||||
};
|
||||
|
||||
static const struct property_entry schneider_sct101ctm_props[] = {
|
||||
PROPERTY_ENTRY_U32("touchscreen-size-x", 1715),
|
||||
PROPERTY_ENTRY_U32("touchscreen-size-y", 1140),
|
||||
@ -1509,6 +1524,17 @@ const struct dmi_system_id touchscreen_dmi_table[] = {
|
||||
DMI_MATCH(DMI_PRODUCT_SKU, "0001")
|
||||
},
|
||||
},
|
||||
{
|
||||
/* RWC NANOTE NEXT */
|
||||
.driver_data = (void *)&rwc_nanote_next_data,
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "To be filled by O.E.M."),
|
||||
DMI_MATCH(DMI_BOARD_NAME, "To be filled by O.E.M."),
|
||||
DMI_MATCH(DMI_BOARD_VENDOR, "To be filled by O.E.M."),
|
||||
/* Above matches are too generic, add bios-version match */
|
||||
DMI_MATCH(DMI_BIOS_VERSION, "S8A70R100-V005"),
|
||||
},
|
||||
},
|
||||
{
|
||||
/* Schneider SCT101CTM */
|
||||
.driver_data = (void *)&schneider_sct101ctm_data,
|
||||
|
@ -2028,8 +2028,8 @@ struct aac_srb_reply
|
||||
};
|
||||
|
||||
struct aac_srb_unit {
|
||||
struct aac_srb srb;
|
||||
struct aac_srb_reply srb_reply;
|
||||
struct aac_srb srb;
|
||||
};
|
||||
|
||||
/*
|
||||
|
@ -476,6 +476,7 @@ static const struct platform_device_id bcm63xx_spi_dev_match[] = {
|
||||
{
|
||||
},
|
||||
};
|
||||
MODULE_DEVICE_TABLE(platform, bcm63xx_spi_dev_match);
|
||||
|
||||
static const struct of_device_id bcm63xx_spi_of_match[] = {
|
||||
{ .compatible = "brcm,bcm6348-spi", .data = &bcm6348_spi_reg_offsets },
|
||||
|
@ -1756,8 +1756,8 @@ static int spi_imx_probe(struct platform_device *pdev)
|
||||
spi_imx_sdma_exit(spi_imx);
|
||||
out_runtime_pm_put:
|
||||
pm_runtime_dont_use_autosuspend(spi_imx->dev);
|
||||
pm_runtime_set_suspended(&pdev->dev);
|
||||
pm_runtime_disable(spi_imx->dev);
|
||||
pm_runtime_set_suspended(&pdev->dev);
|
||||
|
||||
clk_disable_unprepare(spi_imx->clk_ipg);
|
||||
out_put_per:
|
||||
|
@ -215,7 +215,7 @@ static void s3c64xx_flush_fifo(struct s3c64xx_spi_driver_data *sdd)
|
||||
loops = msecs_to_loops(1);
|
||||
do {
|
||||
val = readl(regs + S3C64XX_SPI_STATUS);
|
||||
} while (TX_FIFO_LVL(val, sdd) && loops--);
|
||||
} while (TX_FIFO_LVL(val, sdd) && --loops);
|
||||
|
||||
if (loops == 0)
|
||||
dev_warn(&sdd->pdev->dev, "Timed out flushing TX FIFO\n");
|
||||
@ -228,7 +228,7 @@ static void s3c64xx_flush_fifo(struct s3c64xx_spi_driver_data *sdd)
|
||||
readl(regs + S3C64XX_SPI_RX_DATA);
|
||||
else
|
||||
break;
|
||||
} while (loops--);
|
||||
} while (--loops);
|
||||
|
||||
if (loops == 0)
|
||||
dev_warn(&sdd->pdev->dev, "Timed out flushing RX FIFO\n");
|
||||
|
@ -3283,7 +3283,7 @@ static int ext4_split_extent_at(handle_t *handle,
|
||||
}
|
||||
|
||||
/*
|
||||
* ext4_split_extents() splits an extent and mark extent which is covered
|
||||
* ext4_split_extent() splits an extent and mark extent which is covered
|
||||
* by @map as split_flags indicates
|
||||
*
|
||||
* It may result in splitting the extent into multiple extents (up to three)
|
||||
@ -3360,7 +3360,7 @@ static int ext4_split_extent(handle_t *handle,
|
||||
goto out;
|
||||
}
|
||||
|
||||
ext4_ext_show_leaf(inode, path);
|
||||
ext4_ext_show_leaf(inode, *ppath);
|
||||
out:
|
||||
return err ? err : allocated;
|
||||
}
|
||||
@ -3825,14 +3825,13 @@ ext4_ext_handle_unwritten_extents(handle_t *handle, struct inode *inode,
|
||||
struct ext4_ext_path **ppath, int flags,
|
||||
unsigned int allocated, ext4_fsblk_t newblock)
|
||||
{
|
||||
struct ext4_ext_path __maybe_unused *path = *ppath;
|
||||
int ret = 0;
|
||||
int err = 0;
|
||||
|
||||
ext_debug(inode, "logical block %llu, max_blocks %u, flags 0x%x, allocated %u\n",
|
||||
(unsigned long long)map->m_lblk, map->m_len, flags,
|
||||
allocated);
|
||||
ext4_ext_show_leaf(inode, path);
|
||||
ext4_ext_show_leaf(inode, *ppath);
|
||||
|
||||
/*
|
||||
* When writing into unwritten space, we should not fail to
|
||||
@ -3929,7 +3928,7 @@ ext4_ext_handle_unwritten_extents(handle_t *handle, struct inode *inode,
|
||||
if (allocated > map->m_len)
|
||||
allocated = map->m_len;
|
||||
map->m_len = allocated;
|
||||
ext4_ext_show_leaf(inode, path);
|
||||
ext4_ext_show_leaf(inode, *ppath);
|
||||
out2:
|
||||
return err ? err : allocated;
|
||||
}
|
||||
|
@ -663,8 +663,8 @@ int ext4_ind_migrate(struct inode *inode)
|
||||
if (unlikely(ret2 && !ret))
|
||||
ret = ret2;
|
||||
errout:
|
||||
ext4_journal_stop(handle);
|
||||
up_write(&EXT4_I(inode)->i_data_sem);
|
||||
ext4_journal_stop(handle);
|
||||
out_unlock:
|
||||
percpu_up_write(&sbi->s_writepages_rwsem);
|
||||
return ret;
|
||||
|
@ -1490,7 +1490,7 @@ static bool ext4_match(struct inode *parent,
|
||||
}
|
||||
|
||||
/*
|
||||
* Returns 0 if not found, -1 on failure, and 1 on success
|
||||
* Returns 0 if not found, -EFSCORRUPTED on failure, and 1 on success
|
||||
*/
|
||||
int ext4_search_dir(struct buffer_head *bh, char *search_buf, int buf_size,
|
||||
struct inode *dir, struct ext4_filename *fname,
|
||||
@ -1512,7 +1512,7 @@ int ext4_search_dir(struct buffer_head *bh, char *search_buf, int buf_size,
|
||||
* a full check */
|
||||
if (ext4_check_dir_entry(dir, NULL, de, bh, search_buf,
|
||||
buf_size, lblk, offset))
|
||||
return -1;
|
||||
return -EFSCORRUPTED;
|
||||
*res_dir = de;
|
||||
return 1;
|
||||
}
|
||||
@ -1520,7 +1520,7 @@ int ext4_search_dir(struct buffer_head *bh, char *search_buf, int buf_size,
|
||||
de_len = ext4_rec_len_from_disk(de->rec_len,
|
||||
dir->i_sb->s_blocksize);
|
||||
if (de_len <= 0)
|
||||
return -1;
|
||||
return -EFSCORRUPTED;
|
||||
offset += de_len;
|
||||
de = (struct ext4_dir_entry_2 *) ((char *) de + de_len);
|
||||
}
|
||||
@ -1676,8 +1676,10 @@ static struct buffer_head *__ext4_find_entry(struct inode *dir,
|
||||
goto cleanup_and_exit;
|
||||
} else {
|
||||
brelse(bh);
|
||||
if (i < 0)
|
||||
if (i < 0) {
|
||||
ret = ERR_PTR(i);
|
||||
goto cleanup_and_exit;
|
||||
}
|
||||
}
|
||||
next:
|
||||
if (++block >= nblocks)
|
||||
@ -1774,7 +1776,7 @@ static struct buffer_head * ext4_dx_find_entry(struct inode *dir,
|
||||
if (retval == 1)
|
||||
goto success;
|
||||
brelse(bh);
|
||||
if (retval == -1) {
|
||||
if (retval < 0) {
|
||||
bh = ERR_PTR(ERR_BAD_DX_DIR);
|
||||
goto errout;
|
||||
}
|
||||
|
@ -65,7 +65,7 @@ void jfs_issue_discard(struct inode *ip, u64 blkno, u64 nblocks)
|
||||
int jfs_ioc_trim(struct inode *ip, struct fstrim_range *range)
|
||||
{
|
||||
struct inode *ipbmap = JFS_SBI(ip->i_sb)->ipbmap;
|
||||
struct bmap *bmp = JFS_SBI(ip->i_sb)->bmap;
|
||||
struct bmap *bmp;
|
||||
struct super_block *sb = ipbmap->i_sb;
|
||||
int agno, agno_end;
|
||||
u64 start, end, minlen;
|
||||
@ -83,10 +83,15 @@ int jfs_ioc_trim(struct inode *ip, struct fstrim_range *range)
|
||||
if (minlen == 0)
|
||||
minlen = 1;
|
||||
|
||||
down_read(&sb->s_umount);
|
||||
bmp = JFS_SBI(ip->i_sb)->bmap;
|
||||
|
||||
if (minlen > bmp->db_agsize ||
|
||||
start >= bmp->db_mapsize ||
|
||||
range->len < sb->s_blocksize)
|
||||
range->len < sb->s_blocksize) {
|
||||
up_read(&sb->s_umount);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (end >= bmp->db_mapsize)
|
||||
end = bmp->db_mapsize - 1;
|
||||
@ -100,6 +105,8 @@ int jfs_ioc_trim(struct inode *ip, struct fstrim_range *range)
|
||||
trimmed += dbDiscardAG(ip, agno, minlen);
|
||||
agno++;
|
||||
}
|
||||
|
||||
up_read(&sb->s_umount);
|
||||
range->len = trimmed << sb->s_blocksize_bits;
|
||||
|
||||
return 0;
|
||||
|
@ -3006,9 +3006,10 @@ static void dbAdjTree(dmtree_t *tp, int leafno, int newval, bool is_ctl)
|
||||
static int dbFindLeaf(dmtree_t *tp, int l2nb, int *leafidx, bool is_ctl)
|
||||
{
|
||||
int ti, n = 0, k, x = 0;
|
||||
int max_size;
|
||||
int max_size, max_idx;
|
||||
|
||||
max_size = is_ctl ? CTLTREESIZE : TREESIZE;
|
||||
max_idx = is_ctl ? LPERCTL : LPERDMAP;
|
||||
|
||||
/* first check the root of the tree to see if there is
|
||||
* sufficient free space.
|
||||
@ -3040,6 +3041,8 @@ static int dbFindLeaf(dmtree_t *tp, int l2nb, int *leafidx, bool is_ctl)
|
||||
*/
|
||||
assert(n < 4);
|
||||
}
|
||||
if (le32_to_cpu(tp->dmt_leafidx) >= max_idx)
|
||||
return -ENOSPC;
|
||||
|
||||
/* set the return to the leftmost leaf describing sufficient
|
||||
* free space.
|
||||
@ -3084,7 +3087,7 @@ static int dbFindBits(u32 word, int l2nb)
|
||||
|
||||
/* scan the word for nb free bits at nb alignments.
|
||||
*/
|
||||
for (bitno = 0; mask != 0; bitno += nb, mask >>= nb) {
|
||||
for (bitno = 0; mask != 0; bitno += nb, mask = (mask >> nb)) {
|
||||
if ((mask & word) == mask)
|
||||
break;
|
||||
}
|
||||
|
@ -434,6 +434,8 @@ static int ea_get(struct inode *inode, struct ea_buffer *ea_buf, int min_size)
|
||||
int rc;
|
||||
int quota_allocation = 0;
|
||||
|
||||
memset(&ea_buf->new_ea, 0, sizeof(ea_buf->new_ea));
|
||||
|
||||
/* When fsck.jfs clears a bad ea, it doesn't clear the size */
|
||||
if (ji->ea.flag == 0)
|
||||
ea_size = 0;
|
||||
|
@ -121,7 +121,8 @@ drm_vprintf(struct drm_printer *p, const char *fmt, va_list *va)
|
||||
|
||||
/**
|
||||
* struct drm_print_iterator - local struct used with drm_printer_coredump
|
||||
* @data: Pointer to the devcoredump output buffer
|
||||
* @data: Pointer to the devcoredump output buffer, can be NULL if using
|
||||
* drm_printer_coredump to determine size of devcoredump
|
||||
* @start: The offset within the buffer to start writing
|
||||
* @remain: The number of bytes to write for this iteration
|
||||
*/
|
||||
@ -166,6 +167,57 @@ struct drm_print_iterator {
|
||||
* coredump_read, ...)
|
||||
* }
|
||||
*
|
||||
* The above example has a time complexity of O(N^2), where N is the size of the
|
||||
* devcoredump. This is acceptable for small devcoredumps but scales poorly for
|
||||
* larger ones.
|
||||
*
|
||||
* Another use case for drm_coredump_printer is to capture the devcoredump into
|
||||
* a saved buffer before the dev_coredump() callback. This involves two passes:
|
||||
* one to determine the size of the devcoredump and another to print it to a
|
||||
* buffer. Then, in dev_coredump(), copy from the saved buffer into the
|
||||
* devcoredump read buffer.
|
||||
*
|
||||
* For example::
|
||||
*
|
||||
* char *devcoredump_saved_buffer;
|
||||
*
|
||||
* ssize_t __coredump_print(char *buffer, ssize_t count, ...)
|
||||
* {
|
||||
* struct drm_print_iterator iter;
|
||||
* struct drm_printer p;
|
||||
*
|
||||
* iter.data = buffer;
|
||||
* iter.start = 0;
|
||||
* iter.remain = count;
|
||||
*
|
||||
* p = drm_coredump_printer(&iter);
|
||||
*
|
||||
* drm_printf(p, "foo=%d\n", foo);
|
||||
* ...
|
||||
* return count - iter.remain;
|
||||
* }
|
||||
*
|
||||
* void coredump_print(...)
|
||||
* {
|
||||
* ssize_t count;
|
||||
*
|
||||
* count = __coredump_print(NULL, INT_MAX, ...);
|
||||
* devcoredump_saved_buffer = kvmalloc(count, GFP_KERNEL);
|
||||
* __coredump_print(devcoredump_saved_buffer, count, ...);
|
||||
* }
|
||||
*
|
||||
* void coredump_read(char *buffer, loff_t offset, size_t count,
|
||||
* void *data, size_t datalen)
|
||||
* {
|
||||
* ...
|
||||
* memcpy(buffer, devcoredump_saved_buffer + offset, count);
|
||||
* ...
|
||||
* }
|
||||
*
|
||||
* The above example has a time complexity of O(N*2), where N is the size of the
|
||||
* devcoredump. This scales better than the previous example for larger
|
||||
* devcoredumps.
|
||||
*
|
||||
* RETURNS:
|
||||
* The &drm_printer object
|
||||
*/
|
||||
|
@ -4003,7 +4003,11 @@ static void perf_adjust_period(struct perf_event *event, u64 nsec, u64 count, bo
|
||||
period = perf_calculate_period(event, nsec, count);
|
||||
|
||||
delta = (s64)(period - hwc->sample_period);
|
||||
delta = (delta + 7) / 8; /* low pass filter */
|
||||
if (delta >= 0)
|
||||
delta += 7;
|
||||
else
|
||||
delta -= 7;
|
||||
delta /= 8; /* low pass filter */
|
||||
|
||||
sample_period = hwc->sample_period + delta;
|
||||
|
||||
|
@ -534,13 +534,19 @@ int snd_card_free(struct snd_card *card)
|
||||
}
|
||||
EXPORT_SYMBOL(snd_card_free);
|
||||
|
||||
/* check, if the character is in the valid ASCII range */
|
||||
static inline bool safe_ascii_char(char c)
|
||||
{
|
||||
return isascii(c) && isalnum(c);
|
||||
}
|
||||
|
||||
/* retrieve the last word of shortname or longname */
|
||||
static const char *retrieve_id_from_card_name(const char *name)
|
||||
{
|
||||
const char *spos = name;
|
||||
|
||||
while (*name) {
|
||||
if (isspace(*name) && isalnum(name[1]))
|
||||
if (isspace(*name) && safe_ascii_char(name[1]))
|
||||
spos = name + 1;
|
||||
name++;
|
||||
}
|
||||
@ -567,12 +573,12 @@ static void copy_valid_id_string(struct snd_card *card, const char *src,
|
||||
{
|
||||
char *id = card->id;
|
||||
|
||||
while (*nid && !isalnum(*nid))
|
||||
while (*nid && !safe_ascii_char(*nid))
|
||||
nid++;
|
||||
if (isdigit(*nid))
|
||||
*id++ = isalpha(*src) ? *src : 'D';
|
||||
while (*nid && (size_t)(id - card->id) < sizeof(card->id) - 1) {
|
||||
if (isalnum(*nid))
|
||||
if (safe_ascii_char(*nid))
|
||||
*id++ = *nid;
|
||||
nid++;
|
||||
}
|
||||
@ -670,7 +676,7 @@ card_id_store_attr(struct device *dev, struct device_attribute *attr,
|
||||
|
||||
for (idx = 0; idx < copy; idx++) {
|
||||
c = buf[idx];
|
||||
if (!isalnum(c) && c != '_' && c != '-')
|
||||
if (!safe_ascii_char(c) && c != '_' && c != '-')
|
||||
return -EINVAL;
|
||||
}
|
||||
memcpy(buf1, buf, copy);
|
||||
|
@ -9419,6 +9419,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
|
||||
SND_PCI_QUIRK(0x1849, 0xa233, "Positivo Master C6300", ALC269_FIXUP_HEADSET_MIC),
|
||||
SND_PCI_QUIRK(0x19e5, 0x3204, "Huawei MACH-WX9", ALC256_FIXUP_HUAWEI_MACH_WX9_PINS),
|
||||
SND_PCI_QUIRK(0x19e5, 0x320f, "Huawei WRT-WX9 ", ALC256_FIXUP_ASUS_MIC_NO_PRESENCE),
|
||||
SND_PCI_QUIRK(0x19e5, 0x3212, "Huawei KLV-WX9 ", ALC256_FIXUP_ACER_HEADSET_MIC),
|
||||
SND_PCI_QUIRK(0x1b35, 0x1235, "CZC B20", ALC269_FIXUP_CZC_B20),
|
||||
SND_PCI_QUIRK(0x1b35, 0x1236, "CZC TMI", ALC269_FIXUP_CZC_TMI),
|
||||
SND_PCI_QUIRK(0x1b35, 0x1237, "CZC L101", ALC269_FIXUP_CZC_L101),
|
||||
|
@ -507,7 +507,7 @@ static const struct line6_properties podhd_properties_table[] = {
|
||||
[LINE6_PODHD500X] = {
|
||||
.id = "PODHD500X",
|
||||
.name = "POD HD500X",
|
||||
.capabilities = LINE6_CAP_CONTROL
|
||||
.capabilities = LINE6_CAP_CONTROL | LINE6_CAP_HWMON_CTL
|
||||
| LINE6_CAP_PCM | LINE6_CAP_HWMON,
|
||||
.altsetting = 1,
|
||||
.ep_ctrl_r = 0x81,
|
||||
|
@ -153,7 +153,10 @@ void suspend(void)
|
||||
if (err < 0)
|
||||
ksft_exit_fail_msg("timerfd_settime() failed\n");
|
||||
|
||||
if (write(power_state_fd, "mem", strlen("mem")) != strlen("mem"))
|
||||
system("(echo mem > /sys/power/state) 2> /dev/null");
|
||||
|
||||
timerfd_gettime(timerfd, &spec);
|
||||
if (spec.it_value.tv_sec != 0 || spec.it_value.tv_nsec != 0)
|
||||
ksft_exit_fail_msg("Failed to enter Suspend state\n");
|
||||
|
||||
close(timerfd);
|
||||
|
@ -216,7 +216,8 @@ void *vdso_sym(const char *version, const char *name)
|
||||
ELF(Sym) *sym = &vdso_info.symtab[chain];
|
||||
|
||||
/* Check for a defined global or weak function w/ right name. */
|
||||
if (ELF64_ST_TYPE(sym->st_info) != STT_FUNC)
|
||||
if (ELF64_ST_TYPE(sym->st_info) != STT_FUNC &&
|
||||
ELF64_ST_TYPE(sym->st_info) != STT_NOTYPE)
|
||||
continue;
|
||||
if (ELF64_ST_BIND(sym->st_info) != STB_GLOBAL &&
|
||||
ELF64_ST_BIND(sym->st_info) != STB_WEAK)
|
||||
|
@ -249,7 +249,7 @@ function cleanup_hugetlb_memory() {
|
||||
local cgroup="$1"
|
||||
if [[ "$(pgrep -f write_to_hugetlbfs)" != "" ]]; then
|
||||
echo killing write_to_hugetlbfs
|
||||
killall -2 write_to_hugetlbfs
|
||||
killall -2 --wait write_to_hugetlbfs
|
||||
wait_for_hugetlb_memory_to_get_depleted $cgroup
|
||||
fi
|
||||
set -e
|
||||
|
@ -28,7 +28,7 @@ enum method {
|
||||
|
||||
/* Global variables. */
|
||||
static const char *self;
|
||||
static char *shmaddr;
|
||||
static int *shmaddr;
|
||||
static int shmid;
|
||||
|
||||
/*
|
||||
@ -47,15 +47,17 @@ void sig_handler(int signo)
|
||||
{
|
||||
printf("Received %d.\n", signo);
|
||||
if (signo == SIGINT) {
|
||||
printf("Deleting the memory\n");
|
||||
if (shmdt((const void *)shmaddr) != 0) {
|
||||
perror("Detach failure");
|
||||
shmctl(shmid, IPC_RMID, NULL);
|
||||
exit(4);
|
||||
}
|
||||
if (shmaddr) {
|
||||
printf("Deleting the memory\n");
|
||||
if (shmdt((const void *)shmaddr) != 0) {
|
||||
perror("Detach failure");
|
||||
shmctl(shmid, IPC_RMID, NULL);
|
||||
exit(4);
|
||||
}
|
||||
|
||||
shmctl(shmid, IPC_RMID, NULL);
|
||||
printf("Done deleting the memory\n");
|
||||
shmctl(shmid, IPC_RMID, NULL);
|
||||
printf("Done deleting the memory\n");
|
||||
}
|
||||
}
|
||||
exit(2);
|
||||
}
|
||||
@ -211,7 +213,8 @@ int main(int argc, char **argv)
|
||||
shmctl(shmid, IPC_RMID, NULL);
|
||||
exit(2);
|
||||
}
|
||||
printf("shmaddr: %p\n", ptr);
|
||||
shmaddr = ptr;
|
||||
printf("shmaddr: %p\n", shmaddr);
|
||||
|
||||
break;
|
||||
default:
|
||||
|
Loading…
Reference in New Issue
Block a user