All of lore.kernel.org
 help / color / mirror / Atom feed
From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: linux-kernel@vger.kernel.org
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	stable@vger.kernel.org, Roger Quadros <rogerq@ti.com>,
	Boris Brezillon <boris.brezillon@free-electrons.com>
Subject: [PATCH 4.9 054/138] mtd: nand: omap2: Fix subpage write
Date: Tue, 28 Nov 2017 11:22:35 +0100	[thread overview]
Message-ID: <20171128100548.825991668@linuxfoundation.org> (raw)
In-Reply-To: <20171128100544.706504901@linuxfoundation.org>

4.9-stable 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>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/mtd/nand/omap2.c |  339 +++++++++++++++++++++++++++++++----------------
 1 file changed, 224 insertions(+), 115 deletions(-)

--- a/drivers/mtd/nand/omap2.c
+++ b/drivers/mtd/nand/omap2.c
@@ -1133,129 +1133,172 @@ 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 = mtd_to_omap(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 = mtd_to_omap(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;
@@ -1496,7 +1539,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]);
 
 	ret = mtd_ooblayout_set_eccbytes(mtd, ecc_calc, chip->oob_poi, 0,
 					 chip->ecc.total);
@@ -1509,6 +1552,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
@@ -1544,7 +1653,7 @@ static int omap_read_page_bch(struct mtd
 		       chip->ecc.total);
 
 	/* Calculate ecc bytes */
-	chip->ecc.calculate(mtd, buf, ecc_calc);
+	omap_calculate_ecc_bch_multi(mtd, buf, ecc_calc);
 
 	ret = mtd_ooblayout_get_eccbytes(mtd, ecc_code, chip->oob_poi, 0,
 					 chip->ecc.total);
@@ -2044,7 +2153,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;
 		mtd_set_ooblayout(mtd, &omap_sw_ooblayout_ops);
 		/* Reserve one byte for the OMAP marker */
 		oobbytes_per_step		= nand_chip->ecc.bytes + 1;
@@ -2066,9 +2175,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;
 		mtd_set_ooblayout(mtd, &omap_ooblayout_ops);
 		oobbytes_per_step		= nand_chip->ecc.bytes;
 
@@ -2087,7 +2196,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;
 		mtd_set_ooblayout(mtd, &omap_sw_ooblayout_ops);
 		/* Reserve one byte for the OMAP marker */
 		oobbytes_per_step		= nand_chip->ecc.bytes + 1;
@@ -2109,9 +2218,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;
 		mtd_set_ooblayout(mtd, &omap_ooblayout_ops);
 		oobbytes_per_step		= nand_chip->ecc.bytes;
 
@@ -2131,9 +2240,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;
 		mtd_set_ooblayout(mtd, &omap_ooblayout_ops);
 		oobbytes_per_step		= nand_chip->ecc.bytes;
 

  parent reply	other threads:[~2017-11-28 10:35 UTC|newest]

Thread overview: 146+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-11-28 10:21 [PATCH 4.9 000/138] 4.9.66-stable review Greg Kroah-Hartman
2017-11-28 10:21 ` [PATCH 4.9 002/138] s390/runtime instrumention: fix possible memory corruption Greg Kroah-Hartman
2017-11-28 10:21 ` [PATCH 4.9 003/138] s390/disassembler: add missing end marker for e7 table Greg Kroah-Hartman
2017-11-28 10:21 ` [PATCH 4.9 004/138] s390/disassembler: increase show_code buffer size Greg Kroah-Hartman
2017-11-28 10:21 ` [PATCH 4.9 005/138] ACPI / EC: Fix regression related to triggering source of EC event handling Greg Kroah-Hartman
2017-11-28 10:21 ` [PATCH 4.9 006/138] x86/mm: fix use-after-free of vma during userfaultfd fault Greg Kroah-Hartman
2017-11-28 10:21   ` Greg Kroah-Hartman
2017-11-28 10:21 ` [PATCH 4.9 007/138] ipv6: only call ip6_route_dev_notify() once for NETDEV_UNREGISTER Greg Kroah-Hartman
2017-11-28 10:21 ` [PATCH 4.9 008/138] vsock: use new wait API for vsock_stream_sendmsg() Greg Kroah-Hartman
2017-11-28 10:21 ` [PATCH 4.9 009/138] sched: Make resched_cpu() unconditional Greg Kroah-Hartman
2017-11-28 10:21 ` [PATCH 4.9 010/138] lib/mpi: call cond_resched() from mpi_powm() loop Greg Kroah-Hartman
2017-11-28 10:21 ` [PATCH 4.9 011/138] x86/decoder: Add new TEST instruction pattern Greg Kroah-Hartman
2017-11-28 10:21 ` [PATCH 4.9 012/138] x86/entry/64: Add missing irqflags tracing to native_load_gs_index() Greg Kroah-Hartman
2017-11-28 10:21 ` [PATCH 4.9 013/138] arm64: Implement arch-specific pte_access_permitted() Greg Kroah-Hartman
2017-11-28 10:21 ` [PATCH 4.9 014/138] ARM: 8722/1: mm: make STRICT_KERNEL_RWX effective for LPAE Greg Kroah-Hartman
2017-11-28 10:21 ` [PATCH 4.9 015/138] ARM: 8721/1: mm: dump: check hardware RO bit " Greg Kroah-Hartman
2017-11-28 10:21 ` [PATCH 4.9 016/138] MIPS: ralink: Fix MT7628 pinmux Greg Kroah-Hartman
2017-11-28 10:21 ` [PATCH 4.9 017/138] MIPS: ralink: Fix typo in mt7628 pinmux function Greg Kroah-Hartman
2017-11-28 10:21 ` [PATCH 4.9 018/138] PCI: Set Cavium ACS capability quirk flags to assert RR/CR/SV/UF Greg Kroah-Hartman
2017-11-28 10:22 ` [PATCH 4.9 019/138] ALSA: hda: Add Raven PCI ID Greg Kroah-Hartman
2017-11-28 10:22 ` [PATCH 4.9 020/138] dm bufio: fix integer overflow when limiting maximum cache size Greg Kroah-Hartman
2017-11-28 10:22 ` [PATCH 4.9 021/138] dm: allocate struct mapped_device with kvzalloc Greg Kroah-Hartman
2017-11-28 10:22 ` [PATCH 4.9 022/138] MIPS: pci: Remove KERN_WARN instance inside the mt7620 driver Greg Kroah-Hartman
2017-11-28 10:22 ` [PATCH 4.9 023/138] dm: fix race between dm_get_from_kobject() and __dm_destroy() Greg Kroah-Hartman
2017-11-28 10:22 ` [PATCH 4.9 024/138] MIPS: Fix odd fp register warnings with MIPS64r2 Greg Kroah-Hartman
2017-11-28 10:22 ` [PATCH 4.9 025/138] MIPS: dts: remove bogus bcm96358nb4ser.dtb from dtb-y entry Greg Kroah-Hartman
2017-11-28 10:22 ` [PATCH 4.9 026/138] MIPS: Fix an n32 core file generation regset support regression Greg Kroah-Hartman
2017-11-28 10:22 ` [PATCH 4.9 027/138] MIPS: BCM47XX: Fix LED inversion for WRT54GSv1 Greg Kroah-Hartman
2017-11-28 10:22 ` [PATCH 4.9 028/138] rt2x00usb: mark device removed when get ENOENT usb error Greg Kroah-Hartman
2017-11-28 10:22 ` [PATCH 4.9 029/138] autofs: dont fail mount for transient error Greg Kroah-Hartman
2017-11-28 10:22 ` [PATCH 4.9 030/138] nilfs2: fix race condition that causes file system corruption Greg Kroah-Hartman
2017-11-28 10:22 ` [PATCH 4.9 031/138] eCryptfs: use after free in ecryptfs_release_messaging() Greg Kroah-Hartman
2017-11-28 10:22 ` [PATCH 4.9 032/138] libceph: dont WARN() if user tries to add invalid key Greg Kroah-Hartman
2017-11-28 10:22 ` [PATCH 4.9 033/138] bcache: check ca->alloc_thread initialized before wake up it Greg Kroah-Hartman
2017-11-28 10:22 ` [PATCH 4.9 034/138] isofs: fix timestamps beyond 2027 Greg Kroah-Hartman
2017-11-28 10:22 ` [PATCH 4.9 035/138] NFS: Fix typo in nomigration mount option Greg Kroah-Hartman
2017-11-28 10:22 ` [PATCH 4.9 036/138] nfs: Fix ugly referral attributes Greg Kroah-Hartman
2017-11-28 10:22 ` [PATCH 4.9 037/138] NFS: Avoid RCU usage in tracepoints Greg Kroah-Hartman
2017-11-28 10:22 ` [PATCH 4.9 038/138] nfsd: deal with revoked delegations appropriately Greg Kroah-Hartman
2017-11-28 10:22 ` [PATCH 4.9 039/138] rtlwifi: rtl8192ee: Fix memory leak when loading firmware Greg Kroah-Hartman
2017-11-28 10:22 ` [PATCH 4.9 040/138] rtlwifi: fix uninitialized rtlhal->last_suspend_sec time Greg Kroah-Hartman
2017-11-28 10:22 ` [PATCH 4.9 041/138] ata: fixes kernel crash while tracing ata_eh_link_autopsy event Greg Kroah-Hartman
2017-11-28 10:22 ` [PATCH 4.9 042/138] ext4: fix interaction between i_size, fallocate, and delalloc after a crash Greg Kroah-Hartman
2017-11-28 10:22 ` [PATCH 4.9 043/138] ALSA: pcm: update tstamp only if audio_tstamp changed Greg Kroah-Hartman
2017-11-28 10:22 ` [PATCH 4.9 044/138] ALSA: usb-audio: Add sanity checks to FE parser Greg Kroah-Hartman
2017-11-28 10:22 ` [PATCH 4.9 045/138] ALSA: usb-audio: Fix potential out-of-bound access at parsing SU Greg Kroah-Hartman
2017-11-28 10:22 ` [PATCH 4.9 046/138] ALSA: usb-audio: Add sanity checks in v2 clock parsers Greg Kroah-Hartman
2017-11-28 10:22 ` [PATCH 4.9 047/138] ALSA: timer: Remove kernel warning at compat ioctl error paths Greg Kroah-Hartman
2017-11-28 10:22 ` [PATCH 4.9 048/138] ALSA: hda: Fix too short HDMI/DP chmap reporting Greg Kroah-Hartman
2017-11-28 10:22 ` [PATCH 4.9 049/138] ALSA: hda/realtek - Fix ALC700 family no sound issue Greg Kroah-Hartman
2017-11-28 10:22 ` [PATCH 4.9 050/138] fix a page leak in vhost_scsi_iov_to_sgl() error recovery Greg Kroah-Hartman
2017-11-28 10:22 ` [PATCH 4.9 051/138] fs/9p: Compare qid.path in v9fs_test_inode Greg Kroah-Hartman
2017-11-28 10:22 ` [PATCH 4.9 052/138] iscsi-target: Fix non-immediate TMR reference leak Greg Kroah-Hartman
2017-11-28 10:22 ` [PATCH 4.9 053/138] target: Fix QUEUE_FULL + SCSI task attribute handling Greg Kroah-Hartman
2017-11-28 10:22 ` Greg Kroah-Hartman [this message]
2017-11-28 10:22 ` [PATCH 4.9 055/138] mtd: nand: Fix writing mtdoops to nand flash Greg Kroah-Hartman
2017-11-28 10:22 ` [PATCH 4.9 056/138] mtd: nand: mtk: fix infinite ECC decode IRQ issue Greg Kroah-Hartman
2017-11-28 10:22 ` [PATCH 4.9 057/138] p54: dont unregister leds when they are not initialized Greg Kroah-Hartman
2017-11-28 10:22 ` [PATCH 4.9 058/138] block: Fix a race between blk_cleanup_queue() and timeout handling Greg Kroah-Hartman
2017-11-28 10:22 ` [PATCH 4.9 059/138] irqchip/gic-v3: Fix ppi-partitions lookup Greg Kroah-Hartman
2017-11-28 10:22 ` [PATCH 4.9 060/138] lockd: double unregister of inetaddr notifiers Greg Kroah-Hartman
2017-11-28 10:22 ` [PATCH 4.9 061/138] KVM: nVMX: set IDTR and GDTR limits when loading L1 host state Greg Kroah-Hartman
2017-11-28 10:22 ` [PATCH 4.9 063/138] SUNRPC: Fix tracepoint storage issues with svc_recv and svc_rqst_status Greg Kroah-Hartman
2017-11-28 10:22 ` [PATCH 4.9 064/138] clk: ti: dra7-atl-clock: fix child-node lookups Greg Kroah-Hartman
2017-11-28 10:22 ` [PATCH 4.9 065/138] libnvdimm, pfn: make resource attribute only readable by root Greg Kroah-Hartman
2017-11-28 10:22 ` [PATCH 4.9 066/138] libnvdimm, namespace: fix label initialization to use valid seq numbers Greg Kroah-Hartman
2017-11-28 10:22 ` [PATCH 4.9 067/138] libnvdimm, namespace: make resource attribute only readable by root Greg Kroah-Hartman
2017-11-28 10:22 ` [PATCH 4.9 068/138] IB/srpt: Do not accept invalid initiator port names Greg Kroah-Hartman
2017-11-28 10:22 ` [PATCH 4.9 069/138] IB/srp: Avoid that a cable pull can trigger a kernel crash Greg Kroah-Hartman
2017-11-28 10:22 ` [PATCH 4.9 070/138] NFC: fix device-allocation error return Greg Kroah-Hartman
2017-11-28 10:22 ` [PATCH 4.9 071/138] i40e: Use smp_rmb rather than read_barrier_depends Greg Kroah-Hartman
2017-11-28 10:22 ` [PATCH 4.9 072/138] igb: " Greg Kroah-Hartman
2017-11-28 10:22 ` [PATCH 4.9 073/138] igbvf: " Greg Kroah-Hartman
2017-11-28 10:22 ` [PATCH 4.9 074/138] ixgbevf: " Greg Kroah-Hartman
2017-11-28 10:22 ` [PATCH 4.9 075/138] i40evf: " Greg Kroah-Hartman
2017-11-28 10:22 ` [PATCH 4.9 076/138] fm10k: " Greg Kroah-Hartman
2017-11-28 10:22 ` [PATCH 4.9 077/138] ixgbe: Fix skb list corruption on Power systems Greg Kroah-Hartman
2017-11-28 10:22 ` [PATCH 4.9 078/138] parisc: Fix validity check of pointer size argument in new CAS implementation Greg Kroah-Hartman
2017-11-28 10:23 ` [PATCH 4.9 079/138] powerpc/signal: Properly handle return value from uprobe_deny_signal() Greg Kroah-Hartman
2017-11-28 10:23 ` [PATCH 4.9 080/138] media: Dont do DMA on stack for firmware upload in the AS102 driver Greg Kroah-Hartman
2017-11-28 10:23 ` [PATCH 4.9 081/138] media: rc: check for integer overflow Greg Kroah-Hartman
2017-11-28 10:23 ` [PATCH 4.9 082/138] [media] cx231xx-cards: fix NULL-deref on missing association descriptor Greg Kroah-Hartman
2017-11-28 10:23 ` [PATCH 4.9 083/138] media: v4l2-ctrl: Fix flags field on Control events Greg Kroah-Hartman
2017-11-28 10:23 ` [PATCH 4.9 084/138] sched/rt: Simplify the IPI based RT balancing logic Greg Kroah-Hartman
2017-11-28 10:23 ` [PATCH 4.9 085/138] fscrypt: lock mutex before checking for bounce page pool Greg Kroah-Hartman
2017-11-28 10:23 ` [PATCH 4.9 086/138] net/9p: Switch to wait_event_killable() Greg Kroah-Hartman
2017-11-28 10:23 ` [PATCH 4.9 087/138] PM / OPP: Add missing of_node_put(np) Greg Kroah-Hartman
2017-11-28 10:23 ` [PATCH 4.9 089/138] e1000e: Fix error path in link detection Greg Kroah-Hartman
2017-11-28 10:23 ` [PATCH 4.9 090/138] e1000e: Fix return value test Greg Kroah-Hartman
2017-11-28 10:23 ` [PATCH 4.9 091/138] e1000e: Separate signaling for link check/link up Greg Kroah-Hartman
2017-11-28 10:23 ` [PATCH 4.9 092/138] e1000e: Avoid receiver overrun interrupt bursts Greg Kroah-Hartman
2017-11-28 10:23 ` [PATCH 4.9 093/138] RDS: make message size limit compliant with spec Greg Kroah-Hartman
2017-11-28 10:23 ` [PATCH 4.9 094/138] RDS: RDMA: return appropriate error on rdma map failures Greg Kroah-Hartman
2017-11-28 10:23 ` [PATCH 4.9 095/138] RDS: RDMA: fix the ib_map_mr_sg_zbva() argument Greg Kroah-Hartman
2017-11-28 10:23 ` [PATCH 4.9 096/138] PCI: Apply _HPX settings only to relevant devices Greg Kroah-Hartman
2017-11-28 10:23 ` [PATCH 4.9 097/138] drm/sun4i: Fix a return value in case of error Greg Kroah-Hartman
2017-11-28 10:23 ` [PATCH 4.9 098/138] clk: sunxi-ng: A31: Fix spdif clock register Greg Kroah-Hartman
2017-11-28 10:23 ` [PATCH 4.9 099/138] clk: sunxi-ng: fix PLL_CPUX adjusting on A33 Greg Kroah-Hartman
2017-11-28 10:23 ` [PATCH 4.9 100/138] dmaengine: zx: set DMA_CYCLIC cap_mask bit Greg Kroah-Hartman
2017-11-28 10:23 ` [PATCH 4.9 101/138] fscrypt: use ENOKEY when file cannot be created w/o key Greg Kroah-Hartman
2017-11-28 10:23 ` [PATCH 4.9 102/138] fscrypt: use ENOTDIR when setting encryption policy on nondirectory Greg Kroah-Hartman
2017-11-28 10:23 ` [PATCH 4.9 103/138] net: Allow IP_MULTICAST_IF to set index to L3 slave Greg Kroah-Hartman
2017-11-28 10:23 ` [PATCH 4.9 104/138] net: 3com: typhoon: typhoon_init_one: make return values more specific Greg Kroah-Hartman
2017-11-28 10:23 ` [PATCH 4.9 105/138] net: 3com: typhoon: typhoon_init_one: fix incorrect return values Greg Kroah-Hartman
2017-11-28 10:23 ` [PATCH 4.9 106/138] drm/armada: Fix compile fail Greg Kroah-Hartman
2017-11-28 10:23 ` [PATCH 4.9 107/138] rt2800: set minimum MPDU and PSDU lengths to sane values Greg Kroah-Hartman
2017-11-28 10:23 ` [PATCH 4.9 108/138] adm80211: return an error if adm8211_alloc_rings() fails Greg Kroah-Hartman
2017-11-28 10:23 ` [PATCH 4.9 109/138] mwifiex: sdio: fix use after free issue for save_adapter Greg Kroah-Hartman
2017-11-28 10:23 ` [PATCH 4.9 110/138] ath10k: fix incorrect txpower set by P2P_DEVICE interface Greg Kroah-Hartman
2017-11-28 10:23 ` [PATCH 4.9 111/138] ath10k: ignore configuring the incorrect board_id Greg Kroah-Hartman
2017-11-28 10:23 ` [PATCH 4.9 112/138] ath10k: fix potential memory leak in ath10k_wmi_tlv_op_pull_fw_stats() Greg Kroah-Hartman
2017-11-28 10:23 ` [PATCH 4.9 113/138] pinctrl: sirf: atlas7: Add missing of_node_put() Greg Kroah-Hartman
2017-11-28 10:23 ` [PATCH 4.9 114/138] bnxt_en: Set default completion ring for async events Greg Kroah-Hartman
2017-11-28 10:23 ` [PATCH 4.9 115/138] ath10k: set CTS protection VDEV param only if VDEV is up Greg Kroah-Hartman
2017-11-28 10:23 ` [PATCH 4.9 116/138] ALSA: hda - Apply ALC269_FIXUP_NO_SHUTUP on HDA_FIXUP_ACT_PROBE Greg Kroah-Hartman
2017-11-28 10:23 ` [PATCH 4.9 117/138] gpio: mockup: dynamically allocate memory for chip name Greg Kroah-Hartman
2017-11-28 10:23 ` [PATCH 4.9 118/138] drm: Apply range restriction after color adjustment when allocation Greg Kroah-Hartman
2017-11-28 10:23 ` [PATCH 4.9 119/138] clk: qcom: ipq4019: Add all the frequencies for apss cpu Greg Kroah-Hartman
2017-11-28 10:23 ` [PATCH 4.9 120/138] drm/mediatek: dont use drm_put_dev Greg Kroah-Hartman
2017-11-28 10:23 ` [PATCH 4.9 121/138] mac80211: Remove invalid flag operations in mesh TSF synchronization Greg Kroah-Hartman
2017-11-28 10:23 ` [PATCH 4.9 122/138] mac80211: Suppress NEW_PEER_CANDIDATE event if no room Greg Kroah-Hartman
2017-11-28 10:23 ` [PATCH 4.9 123/138] adm80211: add checks for dma mapping errors Greg Kroah-Hartman
2017-11-28 10:23 ` [PATCH 4.9 124/138] iio: light: fix improper return value Greg Kroah-Hartman
2017-11-28 10:23 ` [PATCH 4.9 125/138] staging: iio: cdc: " Greg Kroah-Hartman
2017-11-28 10:23 ` [PATCH 4.9 126/138] spi: SPI_FSL_DSPI should depend on HAS_DMA Greg Kroah-Hartman
2017-11-28 10:23 ` [PATCH 4.9 127/138] netfilter: nft_queue: use raw_smp_processor_id() Greg Kroah-Hartman
2017-11-28 10:23 ` [PATCH 4.9 128/138] netfilter: nf_tables: fix oob access Greg Kroah-Hartman
2017-11-28 10:23 ` [PATCH 4.9 129/138] ASoC: rsnd: dont double free kctrl Greg Kroah-Hartman
2017-11-28 10:23 ` [PATCH 4.9 130/138] crypto: marvell - Copy IVDIG before launching partial DMA ahash requests Greg Kroah-Hartman
2017-11-28 10:23 ` [PATCH 4.9 131/138] btrfs: return the actual error value from from btrfs_uuid_tree_iterate Greg Kroah-Hartman
2017-11-28 10:23 ` [PATCH 4.9 132/138] ASoC: wm_adsp: Dont overrun firmware file buffer when reading region data Greg Kroah-Hartman
2017-11-28 10:23 ` [PATCH 4.9 133/138] s390/kbuild: enable modversions for symbols exported from asm Greg Kroah-Hartman
2017-11-28 10:23 ` [PATCH 4.9 134/138] [media] cec: when canceling a message, dont overwrite old status info Greg Kroah-Hartman
2017-11-28 10:23 ` [PATCH 4.9 135/138] [media] cec: CEC_MSG_GIVE_FEATURES should abort for CEC version < 2 Greg Kroah-Hartman
2017-11-28 10:23 ` [PATCH 4.9 136/138] [media] cec: update log_addr[] before finishing configuration Greg Kroah-Hartman
2017-11-28 10:23 ` [PATCH 4.9 137/138] nvmet: fix KATO offset in Set Features Greg Kroah-Hartman
2017-11-28 10:23 ` [PATCH 4.9 138/138] xen: xenbus driver must not accept invalid transaction ids Greg Kroah-Hartman
     [not found] ` <20171128100551.657694618@linuxfoundation.org>
2017-11-28 10:45   ` [PATCH 4.9 088/138] Revert "drm/i915: Do not rely on wm preservation for ILK watermarks" Rainer Fiebig
2017-11-28 17:37 ` [Lkft-triage] [PATCH 4.9 000/138] 4.9.66-stable review Naresh Kamboju
2017-11-29  8:07   ` Greg Kroah-Hartman
2017-11-29 10:07     ` Mark Brown
2017-11-29 10:35       ` Greg Kroah-Hartman
2017-11-29 10:44         ` Mark Brown
2017-11-29 14:52         ` Dan Rue
2017-11-28 19:47 ` Shuah Khan
2017-11-28 21:51 ` Guenter Roeck

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=20171128100548.825991668@linuxfoundation.org \
    --to=gregkh@linuxfoundation.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.