From: Ben Hutchings <ben@decadent.org.uk>
To: linux-kernel@vger.kernel.org, stable@vger.kernel.org
Cc: akpm@linux-foundation.org,
"Boris Brezillon" <boris.brezillon@free-electrons.com>,
"Roger Quadros" <rogerq@ti.com>
Subject: [PATCH 3.16 031/136] mtd: nand: omap2: Fix subpage write
Date: Sun, 11 Feb 2018 04:31:11 +0000 [thread overview]
Message-ID: <lsq.1518323471.256003166@decadent.org.uk> (raw)
In-Reply-To: <lsq.1518323469.348919605@decadent.org.uk>
3.16.54-rc1 review patch. If anyone has any objections, please let me know.
------------------
From: Roger Quadros <rogerq@ti.com>
commit 739c64414f01748a36e7d82c8e0611dea94412bd upstream.
Since v4.12, NAND subpage writes were causing a NULL pointer
dereference on OMAP platforms (omap2-nand) using OMAP_ECC_BCH4_CODE_HW,
OMAP_ECC_BCH8_CODE_HW and OMAP_ECC_BCH16_CODE_HW.
This is because for those ECC modes, omap_calculate_ecc_bch()
generates ECC bytes for the entire (multi-sector) page and this can
overflow the ECC buffer provided by nand_write_subpage_hwecc()
as it expects ecc.calculate() to return ECC bytes for just one sector.
However, the root cause of the problem is present since v3.9
but was not seen then as NAND buffers were being allocated
as one big chunk prior to commit 3deb9979c731 ("mtd: nand: allocate
aligned buffers if NAND_OWN_BUFFERS is unset").
Fix the issue by providing a OMAP optimized write_subpage()
implementation.
Fixes: 62116e5171e0 ("mtd: nand: omap2: Support for hardware BCH error correction.")
Signed-off-by: Roger Quadros <rogerq@ti.com>
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
[bwh: Backported to 3.16:
- Open-code mtd_to_omap()
- Adjust context]
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
--- a/drivers/mtd/nand/omap2.c
+++ b/drivers/mtd/nand/omap2.c
@@ -1163,130 +1163,174 @@ static u8 bch8_polynomial[] = {0xef, 0x
0x97, 0x79, 0xe5, 0x24, 0xb5};
/**
- * omap_calculate_ecc_bch - Generate bytes of ECC bytes
+ * _omap_calculate_ecc_bch - Generate ECC bytes for one sector
* @mtd: MTD device structure
* @dat: The pointer to data on which ecc is computed
* @ecc_code: The ecc_code buffer
+ * @i: The sector number (for a multi sector page)
*
- * Support calculating of BCH4/8 ecc vectors for the page
+ * Support calculating of BCH4/8/16 ECC vectors for one sector
+ * within a page. Sector number is in @i.
*/
-static int __maybe_unused omap_calculate_ecc_bch(struct mtd_info *mtd,
- const u_char *dat, u_char *ecc_calc)
+static int _omap_calculate_ecc_bch(struct mtd_info *mtd,
+ const u_char *dat, u_char *ecc_calc, int i)
{
struct omap_nand_info *info = container_of(mtd, struct omap_nand_info,
mtd);
int eccbytes = info->nand.ecc.bytes;
struct gpmc_nand_regs *gpmc_regs = &info->reg;
u8 *ecc_code;
- unsigned long nsectors, bch_val1, bch_val2, bch_val3, bch_val4;
+ unsigned long bch_val1, bch_val2, bch_val3, bch_val4;
u32 val;
- int i, j;
+ int j;
+
+ ecc_code = ecc_calc;
+ switch (info->ecc_opt) {
+ case OMAP_ECC_BCH8_CODE_HW_DETECTION_SW:
+ case OMAP_ECC_BCH8_CODE_HW:
+ bch_val1 = readl(gpmc_regs->gpmc_bch_result0[i]);
+ bch_val2 = readl(gpmc_regs->gpmc_bch_result1[i]);
+ bch_val3 = readl(gpmc_regs->gpmc_bch_result2[i]);
+ bch_val4 = readl(gpmc_regs->gpmc_bch_result3[i]);
+ *ecc_code++ = (bch_val4 & 0xFF);
+ *ecc_code++ = ((bch_val3 >> 24) & 0xFF);
+ *ecc_code++ = ((bch_val3 >> 16) & 0xFF);
+ *ecc_code++ = ((bch_val3 >> 8) & 0xFF);
+ *ecc_code++ = (bch_val3 & 0xFF);
+ *ecc_code++ = ((bch_val2 >> 24) & 0xFF);
+ *ecc_code++ = ((bch_val2 >> 16) & 0xFF);
+ *ecc_code++ = ((bch_val2 >> 8) & 0xFF);
+ *ecc_code++ = (bch_val2 & 0xFF);
+ *ecc_code++ = ((bch_val1 >> 24) & 0xFF);
+ *ecc_code++ = ((bch_val1 >> 16) & 0xFF);
+ *ecc_code++ = ((bch_val1 >> 8) & 0xFF);
+ *ecc_code++ = (bch_val1 & 0xFF);
+ break;
+ case OMAP_ECC_BCH4_CODE_HW_DETECTION_SW:
+ case OMAP_ECC_BCH4_CODE_HW:
+ bch_val1 = readl(gpmc_regs->gpmc_bch_result0[i]);
+ bch_val2 = readl(gpmc_regs->gpmc_bch_result1[i]);
+ *ecc_code++ = ((bch_val2 >> 12) & 0xFF);
+ *ecc_code++ = ((bch_val2 >> 4) & 0xFF);
+ *ecc_code++ = ((bch_val2 & 0xF) << 4) |
+ ((bch_val1 >> 28) & 0xF);
+ *ecc_code++ = ((bch_val1 >> 20) & 0xFF);
+ *ecc_code++ = ((bch_val1 >> 12) & 0xFF);
+ *ecc_code++ = ((bch_val1 >> 4) & 0xFF);
+ *ecc_code++ = ((bch_val1 & 0xF) << 4);
+ break;
+ case OMAP_ECC_BCH16_CODE_HW:
+ val = readl(gpmc_regs->gpmc_bch_result6[i]);
+ ecc_code[0] = ((val >> 8) & 0xFF);
+ ecc_code[1] = ((val >> 0) & 0xFF);
+ val = readl(gpmc_regs->gpmc_bch_result5[i]);
+ ecc_code[2] = ((val >> 24) & 0xFF);
+ ecc_code[3] = ((val >> 16) & 0xFF);
+ ecc_code[4] = ((val >> 8) & 0xFF);
+ ecc_code[5] = ((val >> 0) & 0xFF);
+ val = readl(gpmc_regs->gpmc_bch_result4[i]);
+ ecc_code[6] = ((val >> 24) & 0xFF);
+ ecc_code[7] = ((val >> 16) & 0xFF);
+ ecc_code[8] = ((val >> 8) & 0xFF);
+ ecc_code[9] = ((val >> 0) & 0xFF);
+ val = readl(gpmc_regs->gpmc_bch_result3[i]);
+ ecc_code[10] = ((val >> 24) & 0xFF);
+ ecc_code[11] = ((val >> 16) & 0xFF);
+ ecc_code[12] = ((val >> 8) & 0xFF);
+ ecc_code[13] = ((val >> 0) & 0xFF);
+ val = readl(gpmc_regs->gpmc_bch_result2[i]);
+ ecc_code[14] = ((val >> 24) & 0xFF);
+ ecc_code[15] = ((val >> 16) & 0xFF);
+ ecc_code[16] = ((val >> 8) & 0xFF);
+ ecc_code[17] = ((val >> 0) & 0xFF);
+ val = readl(gpmc_regs->gpmc_bch_result1[i]);
+ ecc_code[18] = ((val >> 24) & 0xFF);
+ ecc_code[19] = ((val >> 16) & 0xFF);
+ ecc_code[20] = ((val >> 8) & 0xFF);
+ ecc_code[21] = ((val >> 0) & 0xFF);
+ val = readl(gpmc_regs->gpmc_bch_result0[i]);
+ ecc_code[22] = ((val >> 24) & 0xFF);
+ ecc_code[23] = ((val >> 16) & 0xFF);
+ ecc_code[24] = ((val >> 8) & 0xFF);
+ ecc_code[25] = ((val >> 0) & 0xFF);
+ break;
+ default:
+ return -EINVAL;
+ }
+
+ /* ECC scheme specific syndrome customizations */
+ switch (info->ecc_opt) {
+ case OMAP_ECC_BCH4_CODE_HW_DETECTION_SW:
+ /* Add constant polynomial to remainder, so that
+ * ECC of blank pages results in 0x0 on reading back
+ */
+ for (j = 0; j < eccbytes; j++)
+ ecc_calc[j] ^= bch4_polynomial[j];
+ break;
+ case OMAP_ECC_BCH4_CODE_HW:
+ /* Set 8th ECC byte as 0x0 for ROM compatibility */
+ ecc_calc[eccbytes - 1] = 0x0;
+ break;
+ case OMAP_ECC_BCH8_CODE_HW_DETECTION_SW:
+ /* Add constant polynomial to remainder, so that
+ * ECC of blank pages results in 0x0 on reading back
+ */
+ for (j = 0; j < eccbytes; j++)
+ ecc_calc[j] ^= bch8_polynomial[j];
+ break;
+ case OMAP_ECC_BCH8_CODE_HW:
+ /* Set 14th ECC byte as 0x0 for ROM compatibility */
+ ecc_calc[eccbytes - 1] = 0x0;
+ break;
+ case OMAP_ECC_BCH16_CODE_HW:
+ break;
+ default:
+ return -EINVAL;
+ }
+
+ return 0;
+}
+
+/**
+ * omap_calculate_ecc_bch_sw - ECC generator for sector for SW based correction
+ * @mtd: MTD device structure
+ * @dat: The pointer to data on which ecc is computed
+ * @ecc_code: The ecc_code buffer
+ *
+ * Support calculating of BCH4/8/16 ECC vectors for one sector. This is used
+ * when SW based correction is required as ECC is required for one sector
+ * at a time.
+ */
+static int omap_calculate_ecc_bch_sw(struct mtd_info *mtd,
+ const u_char *dat, u_char *ecc_calc)
+{
+ return _omap_calculate_ecc_bch(mtd, dat, ecc_calc, 0);
+}
+
+/**
+ * omap_calculate_ecc_bch_multi - Generate ECC for multiple sectors
+ * @mtd: MTD device structure
+ * @dat: The pointer to data on which ecc is computed
+ * @ecc_code: The ecc_code buffer
+ *
+ * Support calculating of BCH4/8/16 ecc vectors for the entire page in one go.
+ */
+static int omap_calculate_ecc_bch_multi(struct mtd_info *mtd,
+ const u_char *dat, u_char *ecc_calc)
+{
+ struct omap_nand_info *info = container_of(mtd, struct omap_nand_info,
+ mtd);
+ int eccbytes = info->nand.ecc.bytes;
+ unsigned long nsectors;
+ int i, ret;
nsectors = ((readl(info->reg.gpmc_ecc_config) >> 4) & 0x7) + 1;
for (i = 0; i < nsectors; i++) {
- ecc_code = ecc_calc;
- switch (info->ecc_opt) {
- case OMAP_ECC_BCH8_CODE_HW_DETECTION_SW:
- case OMAP_ECC_BCH8_CODE_HW:
- bch_val1 = readl(gpmc_regs->gpmc_bch_result0[i]);
- bch_val2 = readl(gpmc_regs->gpmc_bch_result1[i]);
- bch_val3 = readl(gpmc_regs->gpmc_bch_result2[i]);
- bch_val4 = readl(gpmc_regs->gpmc_bch_result3[i]);
- *ecc_code++ = (bch_val4 & 0xFF);
- *ecc_code++ = ((bch_val3 >> 24) & 0xFF);
- *ecc_code++ = ((bch_val3 >> 16) & 0xFF);
- *ecc_code++ = ((bch_val3 >> 8) & 0xFF);
- *ecc_code++ = (bch_val3 & 0xFF);
- *ecc_code++ = ((bch_val2 >> 24) & 0xFF);
- *ecc_code++ = ((bch_val2 >> 16) & 0xFF);
- *ecc_code++ = ((bch_val2 >> 8) & 0xFF);
- *ecc_code++ = (bch_val2 & 0xFF);
- *ecc_code++ = ((bch_val1 >> 24) & 0xFF);
- *ecc_code++ = ((bch_val1 >> 16) & 0xFF);
- *ecc_code++ = ((bch_val1 >> 8) & 0xFF);
- *ecc_code++ = (bch_val1 & 0xFF);
- break;
- case OMAP_ECC_BCH4_CODE_HW_DETECTION_SW:
- case OMAP_ECC_BCH4_CODE_HW:
- bch_val1 = readl(gpmc_regs->gpmc_bch_result0[i]);
- bch_val2 = readl(gpmc_regs->gpmc_bch_result1[i]);
- *ecc_code++ = ((bch_val2 >> 12) & 0xFF);
- *ecc_code++ = ((bch_val2 >> 4) & 0xFF);
- *ecc_code++ = ((bch_val2 & 0xF) << 4) |
- ((bch_val1 >> 28) & 0xF);
- *ecc_code++ = ((bch_val1 >> 20) & 0xFF);
- *ecc_code++ = ((bch_val1 >> 12) & 0xFF);
- *ecc_code++ = ((bch_val1 >> 4) & 0xFF);
- *ecc_code++ = ((bch_val1 & 0xF) << 4);
- break;
- case OMAP_ECC_BCH16_CODE_HW:
- val = readl(gpmc_regs->gpmc_bch_result6[i]);
- ecc_code[0] = ((val >> 8) & 0xFF);
- ecc_code[1] = ((val >> 0) & 0xFF);
- val = readl(gpmc_regs->gpmc_bch_result5[i]);
- ecc_code[2] = ((val >> 24) & 0xFF);
- ecc_code[3] = ((val >> 16) & 0xFF);
- ecc_code[4] = ((val >> 8) & 0xFF);
- ecc_code[5] = ((val >> 0) & 0xFF);
- val = readl(gpmc_regs->gpmc_bch_result4[i]);
- ecc_code[6] = ((val >> 24) & 0xFF);
- ecc_code[7] = ((val >> 16) & 0xFF);
- ecc_code[8] = ((val >> 8) & 0xFF);
- ecc_code[9] = ((val >> 0) & 0xFF);
- val = readl(gpmc_regs->gpmc_bch_result3[i]);
- ecc_code[10] = ((val >> 24) & 0xFF);
- ecc_code[11] = ((val >> 16) & 0xFF);
- ecc_code[12] = ((val >> 8) & 0xFF);
- ecc_code[13] = ((val >> 0) & 0xFF);
- val = readl(gpmc_regs->gpmc_bch_result2[i]);
- ecc_code[14] = ((val >> 24) & 0xFF);
- ecc_code[15] = ((val >> 16) & 0xFF);
- ecc_code[16] = ((val >> 8) & 0xFF);
- ecc_code[17] = ((val >> 0) & 0xFF);
- val = readl(gpmc_regs->gpmc_bch_result1[i]);
- ecc_code[18] = ((val >> 24) & 0xFF);
- ecc_code[19] = ((val >> 16) & 0xFF);
- ecc_code[20] = ((val >> 8) & 0xFF);
- ecc_code[21] = ((val >> 0) & 0xFF);
- val = readl(gpmc_regs->gpmc_bch_result0[i]);
- ecc_code[22] = ((val >> 24) & 0xFF);
- ecc_code[23] = ((val >> 16) & 0xFF);
- ecc_code[24] = ((val >> 8) & 0xFF);
- ecc_code[25] = ((val >> 0) & 0xFF);
- break;
- default:
- return -EINVAL;
- }
-
- /* ECC scheme specific syndrome customizations */
- switch (info->ecc_opt) {
- case OMAP_ECC_BCH4_CODE_HW_DETECTION_SW:
- /* Add constant polynomial to remainder, so that
- * ECC of blank pages results in 0x0 on reading back */
- for (j = 0; j < eccbytes; j++)
- ecc_calc[j] ^= bch4_polynomial[j];
- break;
- case OMAP_ECC_BCH4_CODE_HW:
- /* Set 8th ECC byte as 0x0 for ROM compatibility */
- ecc_calc[eccbytes - 1] = 0x0;
- break;
- case OMAP_ECC_BCH8_CODE_HW_DETECTION_SW:
- /* Add constant polynomial to remainder, so that
- * ECC of blank pages results in 0x0 on reading back */
- for (j = 0; j < eccbytes; j++)
- ecc_calc[j] ^= bch8_polynomial[j];
- break;
- case OMAP_ECC_BCH8_CODE_HW:
- /* Set 14th ECC byte as 0x0 for ROM compatibility */
- ecc_calc[eccbytes - 1] = 0x0;
- break;
- case OMAP_ECC_BCH16_CODE_HW:
- break;
- default:
- return -EINVAL;
- }
+ ret = _omap_calculate_ecc_bch(mtd, dat, ecc_calc, i);
+ if (ret)
+ return ret;
- ecc_calc += eccbytes;
+ ecc_calc += eccbytes;
}
return 0;
@@ -1527,7 +1571,7 @@ static int omap_write_page_bch(struct mt
chip->write_buf(mtd, buf, mtd->writesize);
/* Update ecc vector from GPMC result registers */
- chip->ecc.calculate(mtd, buf, &ecc_calc[0]);
+ omap_calculate_ecc_bch_multi(mtd, buf, &ecc_calc[0]);
for (i = 0; i < chip->ecc.total; i++)
chip->oob_poi[eccpos[i]] = ecc_calc[i];
@@ -1538,6 +1582,72 @@ static int omap_write_page_bch(struct mt
}
/**
+ * omap_write_subpage_bch - BCH hardware ECC based subpage write
+ * @mtd: mtd info structure
+ * @chip: nand chip info structure
+ * @offset: column address of subpage within the page
+ * @data_len: data length
+ * @buf: data buffer
+ * @oob_required: must write chip->oob_poi to OOB
+ * @page: page number to write
+ *
+ * OMAP optimized subpage write method.
+ */
+static int omap_write_subpage_bch(struct mtd_info *mtd,
+ struct nand_chip *chip, u32 offset,
+ u32 data_len, const u8 *buf,
+ int oob_required, int page)
+{
+ u8 *ecc_calc = chip->buffers->ecccalc;
+ int ecc_size = chip->ecc.size;
+ int ecc_bytes = chip->ecc.bytes;
+ int ecc_steps = chip->ecc.steps;
+ u32 start_step = offset / ecc_size;
+ u32 end_step = (offset + data_len - 1) / ecc_size;
+ int step, ret = 0;
+
+ /*
+ * Write entire page at one go as it would be optimal
+ * as ECC is calculated by hardware.
+ * ECC is calculated for all subpages but we choose
+ * only what we want.
+ */
+
+ /* Enable GPMC ECC engine */
+ chip->ecc.hwctl(mtd, NAND_ECC_WRITE);
+
+ /* Write data */
+ chip->write_buf(mtd, buf, mtd->writesize);
+
+ for (step = 0; step < ecc_steps; step++) {
+ /* mask ECC of un-touched subpages by padding 0xFF */
+ if (step < start_step || step > end_step)
+ memset(ecc_calc, 0xff, ecc_bytes);
+ else
+ ret = _omap_calculate_ecc_bch(mtd, buf, ecc_calc, step);
+
+ if (ret)
+ return ret;
+
+ buf += ecc_size;
+ ecc_calc += ecc_bytes;
+ }
+
+ /* copy calculated ECC for whole page to chip->buffer->oob */
+ /* this include masked-value(0xFF) for unwritten subpages */
+ ecc_calc = chip->buffers->ecccalc;
+ ret = mtd_ooblayout_set_eccbytes(mtd, ecc_calc, chip->oob_poi, 0,
+ chip->ecc.total);
+ if (ret)
+ return ret;
+
+ /* write OOB buffer to NAND device */
+ chip->write_buf(mtd, chip->oob_poi, mtd->oobsize);
+
+ return 0;
+}
+
+/**
* omap_read_page_bch - BCH ecc based page read function for entire page
* @mtd: mtd info structure
* @chip: nand chip info structure
@@ -1574,7 +1684,7 @@ static int omap_read_page_bch(struct mtd
chip->read_buf(mtd, oob, chip->ecc.total);
/* Calculate ecc bytes */
- chip->ecc.calculate(mtd, buf, ecc_calc);
+ omap_calculate_ecc_bch_multi(mtd, buf, ecc_calc);
memcpy(ecc_code, &chip->oob_poi[eccpos[0]], chip->ecc.total);
@@ -1823,7 +1933,7 @@ static int omap_nand_probe(struct platfo
nand_chip->ecc.strength = 4;
nand_chip->ecc.hwctl = omap_enable_hwecc_bch;
nand_chip->ecc.correct = nand_bch_correct_data;
- nand_chip->ecc.calculate = omap_calculate_ecc_bch;
+ nand_chip->ecc.calculate = omap_calculate_ecc_bch_sw;
/* define ECC layout */
ecclayout->eccbytes = nand_chip->ecc.bytes *
(mtd->writesize /
@@ -1863,9 +1973,9 @@ static int omap_nand_probe(struct platfo
nand_chip->ecc.strength = 4;
nand_chip->ecc.hwctl = omap_enable_hwecc_bch;
nand_chip->ecc.correct = omap_elm_correct_data;
- nand_chip->ecc.calculate = omap_calculate_ecc_bch;
nand_chip->ecc.read_page = omap_read_page_bch;
nand_chip->ecc.write_page = omap_write_page_bch;
+ nand_chip->ecc.write_subpage = omap_write_subpage_bch;
/* define ECC layout */
ecclayout->eccbytes = nand_chip->ecc.bytes *
(mtd->writesize /
@@ -1898,7 +2008,7 @@ static int omap_nand_probe(struct platfo
nand_chip->ecc.strength = 8;
nand_chip->ecc.hwctl = omap_enable_hwecc_bch;
nand_chip->ecc.correct = nand_bch_correct_data;
- nand_chip->ecc.calculate = omap_calculate_ecc_bch;
+ nand_chip->ecc.calculate = omap_calculate_ecc_bch_sw;
/* define ECC layout */
ecclayout->eccbytes = nand_chip->ecc.bytes *
(mtd->writesize /
@@ -1939,9 +2049,9 @@ static int omap_nand_probe(struct platfo
nand_chip->ecc.strength = 8;
nand_chip->ecc.hwctl = omap_enable_hwecc_bch;
nand_chip->ecc.correct = omap_elm_correct_data;
- nand_chip->ecc.calculate = omap_calculate_ecc_bch;
nand_chip->ecc.read_page = omap_read_page_bch;
nand_chip->ecc.write_page = omap_write_page_bch;
+ nand_chip->ecc.write_subpage = omap_write_subpage_bch;
/* This ECC scheme requires ELM H/W block */
err = is_elm_present(info, pdata->elm_of_node, BCH8_ECC);
if (err < 0) {
@@ -1974,9 +2084,9 @@ static int omap_nand_probe(struct platfo
nand_chip->ecc.strength = 16;
nand_chip->ecc.hwctl = omap_enable_hwecc_bch;
nand_chip->ecc.correct = omap_elm_correct_data;
- nand_chip->ecc.calculate = omap_calculate_ecc_bch;
nand_chip->ecc.read_page = omap_read_page_bch;
nand_chip->ecc.write_page = omap_write_page_bch;
+ nand_chip->ecc.write_subpage = omap_write_subpage_bch;
/* This ECC scheme requires ELM H/W block */
err = is_elm_present(info, pdata->elm_of_node, BCH16_ECC);
if (err < 0) {
next prev parent reply other threads:[~2018-02-11 4:40 UTC|newest]
Thread overview: 140+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-02-11 4:31 [PATCH 3.16 000/136] 3.16.54-rc1 review Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 008/136] usbip: tools: Install all headers needed for libusbip development Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 038/136] bcache: only permit to recovery read error when cache device is clean Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 131/136] x86/vdso: Get pvclock data from the vvar VMA instead of the fixmap Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 126/136] usbip: fix stub_send_ret_submit() vulnerability to null transfer_buffer Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 074/136] dm: fix race between dm_get_from_kobject() and __dm_destroy() Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 095/136] autofs: don't fail mount for transient error Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 114/136] ALSA: hda: Add Raven PCI ID Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 048/136] staging: rtl8188eu: avoid a null dereference on pmlmepriv Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 045/136] drm/ttm: once more fix ttm_buffer_object_transfer Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 110/136] ixgbevf: Use smp_rmb rather than read_barrier_depends Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 030/136] f2fs: expose some sectors to user in inline data or dentry case Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 075/136] blktrace: Fix potential deadlock between delete & sysfs ops Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 080/136] clk: ti: dra7-atl-clock: fix child-node lookups Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 012/136] ext4: fix interaction between i_size, fallocate, and delalloc after a crash Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 036/136] l2tp: initialise PPP sessions before registering them Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 121/136] ALSA: seq: Make ioctls race-free Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 084/136] sctp: fully initialize the IPv6 address in sctp_v6_to_addr() Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 065/136] iscsi-target: Make TASK_REASSIGN use proper se_cmd->cmd_kref Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 019/136] KVM: nVMX: set IDTR and GDTR limits when loading L1 host state Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 104/136] ALSA: usb-audio: Add sanity checks to FE parser Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 072/136] rt2x00usb: mark device removed when get ENOENT usb error Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 026/136] tpm-dev-common: Reject too short writes Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 068/136] ASoC: cs42l56: Fix reset GPIO name in example DT binding Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 082/136] s390/disassembler: increase show_code buffer size Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 029/136] net: bcmgenet: enable loopback during UniMAC sw_reset Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 015/136] p54: don't unregister leds when they are not initialized Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 017/136] USB: serial: garmin_gps: fix memory leak on probe errors Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 035/136] l2tp: protect sock pointer of struct pppol2tp_session with RCU Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 054/136] f2fs: remove redundant lines in allocate_data_block Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 089/136] KVM: SVM: obey guest PAT Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 119/136] RDS: Heap OOB write in rds_message_alloc_sgs() Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 105/136] ALSA: usb-audio: Fix potential out-of-bound access at parsing SU Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 106/136] ALSA: usb-audio: Fix potential zero-division at parsing FU Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 060/136] ACPI / APEI: Replace ioremap_page_range() with fixmap Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 078/136] IB/mlx4: Increase maximal message size under UD QP Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 056/136] powerpc/pseries/vio: Dispose of virq mapping on vdevice unregister Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 096/136] autofs: fix careless error in recent commit Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 066/136] iscsi-target: Fix non-immediate TMR reference leak Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 033/136] l2tp: don't register sessions in l2tp_session_create() Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 067/136] ima: fix hash algorithm initialization Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 090/136] parisc: Fix validity check of pointer size argument in new CAS implementation Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 044/136] isofs: fix timestamps beyond 2027 Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 013/136] drm/i915: Read timings from the correct transcoder in intel_crtc_mode_get() Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 097/136] nilfs2: fix race condition that causes file system corruption Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 113/136] i40evf: Use smp_rmb rather than read_barrier_depends Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 134/136] x86/vdso: Remove pvclock fixmap machinery Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 125/136] usbip: prevent vhci_hcd driver from leaking a socket pointer address Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 087/136] dm bufio: fix integer overflow when limiting maximum cache size Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 115/136] x86/decoder: Add new TEST instruction pattern Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 103/136] ALSA: timer: Remove kernel warning at compat ioctl error paths Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 040/136] arm64: vdso: minor ABI fix for clock_getres Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 122/136] usbip: fix NULL pointer dereference on errors Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 130/136] x86, vdso, pvclock: Simplify and speed up the vdso pvclock reader Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 076/136] blktrace: fix unlocked access to init/start-stop/teardown Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 003/136] Input: adxl34x - do not treat FIFO_MODE() as boolean Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 057/136] powerpc/opal: Fix EBUSY bug in acquiring tokens Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 051/136] platform/x86: sony-laptop: Fix error handling in sony_nc_setup_rfkill() Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 023/136] scsi: bfa: integer overflow in debugfs Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 116/136] staging: android: ashmem: fix a race condition in ASHMEM_SET_SIZE ioctl Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 132/136] Revert "x86: kvmclock: Disable use from vDSO if KPTI is enabled" Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 064/136] target/iscsi: Fix iSCSI task reassignment handling Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 099/136] route: also update fnhe_genid when updating a route cache Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 032/136] l2tp: ensure sessions are freed after their PPPOL2TP socket Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 071/136] video: udlfb: Fix read EDID timeout Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 070/136] MIPS: Fix an n32 core file generation regset support regression Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 014/136] drm/i915/bios: parse DDI ports also for CHV for HDMI DDC pin and DP AUX channel Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 027/136] fs/9p: Compare qid.path in v9fs_test_inode Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 009/136] drm/i915/edp: Get the Panel Power Off timestamp after panel is off Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 086/136] dm: discard support requires all targets in a table support discards Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 100/136] nl80211: don't expose wdev->ssid for most interfaces Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 010/136] PCI/AER: Report non-fatal errors only to the affected endpoint Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 028/136] net/9p: Switch to wait_event_killable() Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 093/136] NFS: Fix typo in nomigration mount option Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 117/136] netfilter: xt_TCPMSS: add more sanity tests on tcph->doff Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 069/136] USB: usbfs: compute urb->actual_length for isochronous Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 063/136] target: Avoid early CMD_T_PRE_EXECUTE failures during ABORT_TASK Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 006/136] rtc: interface: ignore expired timers when enqueuing new timers Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 101/136] apparmor: ensure that undecidable profile attachments fail Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 020/136] elf_fdpic: fix unused variable warning Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 129/136] x86: pvclock: Really remove the sched notifier for cross-cpu migrations Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 133/136] x86/platform/uv: Include clocksource.h for clocksource_touch_watchdog() Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 049/136] crypto: caam - fix incorrect define Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 092/136] nfs: Fix ugly referral attributes Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 042/136] media: omap_vout: Fix a possible null pointer dereference in omap_vout_open() Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 073/136] s390: fix transactional execution control register handling Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 081/136] ocfs2: should wait dio before inode lock in ocfs2_setattr() Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 043/136] mtd: nand: Fix writing mtdoops to nand flash Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 025/136] IB/srp: Avoid that a cable pull can trigger a kernel crash Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 034/136] l2tp: initialise l2tp_eth sessions before registering them Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 083/136] sctp: Fixup v4mapped behaviour to comply with Sock API Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 102/136] ARM: 8721/1: mm: dump: check hardware RO bit for LPAE Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 098/136] route: update fnhe_expires for redirect when the fnhe exists Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 041/136] arm64: vdso: fix clock_getres for 4GiB-aligned res Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 053/136] NFC: fix device-allocation error return Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 094/136] lib/int_sqrt: optimize small argument Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 079/136] clk: ti: dra7-atl-clock: Fix of_node reference counting Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 123/136] usbip: fix stub_rx: get_pipe() to validate endpoint number Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 135/136] kaiser: Set _PAGE_NX only if supported Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 052/136] coda: fix 'kernel memory exposure attempt' in fsync Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 127/136] [media] cx231xx: Fix the max number of interfaces Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 112/136] igb: Use smp_rmb rather than read_barrier_depends Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 085/136] net/sctp: Always set scope_id in sctp_inet6_skb_msgname Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 111/136] igbvf: Use smp_rmb rather than read_barrier_depends Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 128/136] x86, vdso: Move the vvar area before the vdso text Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 002/136] staging: lustre: ptlrpc: kfree used instead of kvfree Ben Hutchings
2018-02-11 21:35 ` James Simmons
2018-02-11 4:31 ` [PATCH 3.16 109/136] i40e: Use smp_rmb rather than read_barrier_depends Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 055/136] Revert "f2fs: handle dirty segments inside refresh_sit_entry" Ben Hutchings
2018-02-11 4:31 ` Ben Hutchings [this message]
2018-02-11 4:31 ` [PATCH 3.16 077/136] IB/mlx5: Assign send CQ and recv CQ of UMR QP Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 024/136] IB/srpt: Do not accept invalid initiator port names Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 050/136] USB: Add delay-init quirk for Corsair K70 LUX keyboards Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 061/136] ACPI / APEI: Remove ghes_ioremap_area Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 007/136] rtc: set the alarm to the next expiring timer Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 021/136] USB: serial: metro-usb: stop I/O after failed open Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 136/136] kaiser: Set _PAGE_NX only if supported Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 120/136] RDS: null pointer dereference in rds_atomic_free_op Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 091/136] NFS: Avoid RCU usage in tracepoints Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 022/136] bcache: check ca->alloc_thread initialized before wake up it Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 059/136] powerpc/powernv/cpufreq: Fix the frequency read by /proc/cpuinfo Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 039/136] USB: serial: qcserial: add pid/vid for Sierra Wireless EM7355 fw update Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 004/136] ipmi: fix unsigned long underflow Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 118/136] Bluetooth: Prevent stack info leak from the EFS element Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 107/136] ALSA: usb-audio: Add sanity checks in v2 clock parsers Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 018/136] media: rc: check for integer overflow Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 005/136] s390/runtime instrumention: fix possible memory corruption Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 016/136] USB: serial: garmin_gps: fix I/O after failed probe and remove Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 011/136] iommu/vt-d: Don't register bus-notifier under dmar_global_lock Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 124/136] usbip: fix stub_rx: harden CMD_SUBMIT path to handle malicious input Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 058/136] eCryptfs: use after free in ecryptfs_release_messaging() Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 046/136] drm/radeon: fix atombios on big endian Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 088/136] KVM: vmx: Inject #GP on invalid PAT CR Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 108/136] ixgbe: Fix skb list corruption on Power systems Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 001/136] drm: gma500: fix logic error Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 062/136] kprobes, x86/alternatives: Use text_mutex to protect smp_alt_modules Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 037/136] btrfs: avoid null pointer dereference on fs_info when calling btrfs_crit Ben Hutchings
2018-02-11 4:31 ` [PATCH 3.16 047/136] clk: tegra: Fix cclk_lp divisor register Ben Hutchings
2018-02-11 11:19 ` [PATCH 3.16 000/136] 3.16.54-rc1 review Guenter Roeck
2018-02-11 17:57 ` Ben Hutchings
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=lsq.1518323471.256003166@decadent.org.uk \
--to=ben@decadent.org.uk \
--cc=akpm@linux-foundation.org \
--cc=boris.brezillon@free-electrons.com \
--cc=linux-kernel@vger.kernel.org \
--cc=rogerq@ti.com \
--cc=stable@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®