* Re: LSF/MM 2017: Call for Proposals
From: James Bottomley @ 2016-12-08 15:30 UTC (permalink / raw)
To: Michal Hocko
Cc: Jeff Layton, linux-block, linux-btrfs, linux-cifs, linux-ext4,
linux-fsdevel, linux-ide, linux-kernel, linux-mm, linux-nfs,
linux-scsi, xfs@oss.sgi.com, ceph-devel, linux-nvme,
lsf-pc@lists.linux-foundation.org
In-Reply-To: <20161208122619.GA26535@dhcp22.suse.cz>
On Thu, 2016-12-08 at 13:26 +0100, Michal Hocko wrote:
> On Wed 07-12-16 06:57:06, James Bottomley wrote:
> [...]
> > Just on this point, since there seems to be a lot of confusion: lsf
> > -pc
> > is the list for contacting the programme committee, so you cannot
> > subscribe to it.
> >
> > There is no -discuss equivalent, like kernel summit has, because we
> > expect you to cc the relevant existing mailing list and have the
> > discussion there instead rather than expecting people to subscribe
> > to a
> > new list.
>
> There used to be lsf@lists.linux-foundation.org. Is it not active
> anymore?
Not until we get the list of invitees sorted out. And then it's only
for stuff actually to do with lsf (like logistics, bof or session
requests or other meetups). Any technical stuff should still be cc'd
to the relevant mailing list.
James
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
^ permalink raw reply
* Re: [RFC PATCH 00/19] ide: remove deprecated host drivers (part 1)
From: David Miller @ 2016-12-08 15:23 UTC (permalink / raw)
To: b.zolnierkie; +Cc: linux-ide, linux-kernel, tj, gnomes, sergei.shtylyov
In-Reply-To: <3280015.pSoKvQuVNQ@amdc3058>
From: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
Date: Thu, 08 Dec 2016 14:42:12 +0100
> Ping.. since there was no negative (or any other) feedback I think that
> this can be put into -next for some wider exposure..
I'm not going to apply this and break things on people, sorry.
^ permalink raw reply
* Re: [RFC PATCH 00/19] ide: remove deprecated host drivers (part 1)
From: Bartlomiej Zolnierkiewicz @ 2016-12-08 13:42 UTC (permalink / raw)
To: David S. Miller
Cc: linux-ide, linux-kernel, Tejun Heo, Alan Cox, Sergei Shtylyov
In-Reply-To: <3317462.LGzQYRpeb4@amdc1976>
Hi,
On Friday, July 08, 2016 07:07:46 PM Bartlomiej Zolnierkiewicz wrote:
>
> Hi Dave,
>
> What is your opinion on this patchset?
Ping.. since there was no negative (or any other) feedback I think that
this can be put into -next for some wider exposure..
Best regards,
--
Bartlomiej Zolnierkiewicz
Samsung R&D Institute Poland
Samsung Electronics
> Best regards,
> --
> Bartlomiej Zolnierkiewicz
> Samsung R&D Institute Poland
> Samsung Electronics
>
> On Thursday, February 04, 2016 02:43:57 PM Bartlomiej Zolnierkiewicz wrote:
> > Hi,
> >
> > IDE subsystem has been deprecated since 2009 and the majority
> > (if not all) of Linux distributions have switched to use
> > libata for ATA support exclusively.
> >
> > This patchset removes IDE host drivers that:
> > - have been replaced by their corresponding libata PATA host
> > drivers (which have been available since 2006/2007)
> > - are not used by any defconfig
> >
> > Having duplicated drivers for the same hardware doesn't seem
> > to be good thing in the long-term perspective for Linux as
> > - testing efforts are divided between two drivers/subsystems
> > (while there is less and less PATA systems left in use)
> > - having two drivers for the same hardware confuses users
> >
> > Please note that all the hardware supported by IDE host drivers
> > nominated for removal remains supported by correspoding libata
> > PATA host drivers.
> >
> > PS If this patchset is accepted I would like to continue
> > removal of IDE host drivers in part 2 which will happen after
> > remaining defconfigs which still are using IDE host drivers
> > get converted to use corresponding libata PATA host drivers.
> >
> > Best regards,
> > --
> > Bartlomiej Zolnierkiewicz
> > Samsung R&D Institute Poland
> > Samsung Electronics
> >
> >
> > Bartlomiej Zolnierkiewicz (19):
> > ide: remove deprecated atiixp host driver
> > ide: remove deprecated cs5520 host driver
> > ide: remove deprecated cs5530 host driver
> > ide: remove deprecated cs5535 host driver
> > ide: remove deprecated cs5536 host driver
> > ide: remove deprecated sc1200 host driver
> > ide: remove deprecated delkin_cb host driver
> > ide: remove deprecated it8213 host driver
> > ide: remove deprecated it821x host driver
> > ide: remove deprecated jmicron host driver
> > ide: remove deprecated opti621 host driver
> > ide: remove deprecated pdc202xx_old host driver
> > ide: remove deprecated rz1000 host driver
> > ide: remove deprecated serverworks host driver
> > ide: remove deprecated sis5513 host driver
> > ide: remove deprecated slc90e66 host driver
> > ide: remove deprecated triflex host driver
> > ide: remove deprecated ide-pnp host driver
> > ide: remove deprecated icside host driver
> >
> > drivers/ide/Kconfig | 200 +------------
> > drivers/ide/Makefile | 19 --
> > drivers/ide/atiixp.c | 211 -------------
> > drivers/ide/cs5520.c | 168 -----------
> > drivers/ide/cs5530.c | 295 -------------------
> > drivers/ide/cs5535.c | 219 --------------
> > drivers/ide/cs5536.c | 306 -------------------
> > drivers/ide/delkin_cb.c | 181 ------------
> > drivers/ide/icside.c | 691 -------------------------------------------
> > drivers/ide/ide-pnp.c | 100 -------
> > drivers/ide/it8213.c | 216 --------------
> > drivers/ide/it821x.c | 715 ---------------------------------------------
> > drivers/ide/jmicron.c | 176 -----------
> > drivers/ide/opti621.c | 178 -----------
> > drivers/ide/pdc202xx_old.c | 361 -----------------------
> > drivers/ide/rz1000.c | 99 -------
> > drivers/ide/sc1200.c | 355 ----------------------
> > drivers/ide/serverworks.c | 449 ----------------------------
> > drivers/ide/sis5513.c | 636 ----------------------------------------
> > drivers/ide/slc90e66.c | 181 ------------
> > drivers/ide/triflex.c | 155 ----------
> > 21 files changed, 2 insertions(+), 5909 deletions(-)
> > delete mode 100644 drivers/ide/atiixp.c
> > delete mode 100644 drivers/ide/cs5520.c
> > delete mode 100644 drivers/ide/cs5530.c
> > delete mode 100644 drivers/ide/cs5535.c
> > delete mode 100644 drivers/ide/cs5536.c
> > delete mode 100644 drivers/ide/delkin_cb.c
> > delete mode 100644 drivers/ide/icside.c
> > delete mode 100644 drivers/ide/ide-pnp.c
> > delete mode 100644 drivers/ide/it8213.c
> > delete mode 100644 drivers/ide/it821x.c
> > delete mode 100644 drivers/ide/jmicron.c
> > delete mode 100644 drivers/ide/opti621.c
> > delete mode 100644 drivers/ide/pdc202xx_old.c
> > delete mode 100644 drivers/ide/rz1000.c
> > delete mode 100644 drivers/ide/sc1200.c
> > delete mode 100644 drivers/ide/serverworks.c
> > delete mode 100644 drivers/ide/sis5513.c
> > delete mode 100644 drivers/ide/slc90e66.c
> > delete mode 100644 drivers/ide/triflex.c
^ permalink raw reply
* Re: [Lsf-pc] LSF/MM 2017: Call for Proposals
From: Jan Kara @ 2016-12-08 12:34 UTC (permalink / raw)
To: Michal Hocko
Cc: James Bottomley, linux-cifs, linux-nfs,
lsf-pc@lists.linux-foundation.org, linux-scsi, linux-mm,
linux-kernel, linux-nvme, xfs@oss.sgi.com, linux-block, linux-ide,
linux-fsdevel, Jeff Layton, linux-ext4, ceph-devel, linux-btrfs
In-Reply-To: <20161208122619.GA26535@dhcp22.suse.cz>
On Thu 08-12-16 13:26:19, Michal Hocko wrote:
> On Wed 07-12-16 06:57:06, James Bottomley wrote:
> [...]
> > Just on this point, since there seems to be a lot of confusion: lsf-pc
> > is the list for contacting the programme committee, so you cannot
> > subscribe to it.
> >
> > There is no -discuss equivalent, like kernel summit has, because we
> > expect you to cc the relevant existing mailing list and have the
> > discussion there instead rather than expecting people to subscribe to a
> > new list.
>
> There used to be lsf@lists.linux-foundation.org. Is it not active
> anymore?
No sure about the current state but usually it gets populated by the
selected attendees each year.
Honza
--
Jan Kara <jack@suse.com>
SUSE Labs, CR
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
^ permalink raw reply
* Re: LSF/MM 2017: Call for Proposals
From: Michal Hocko @ 2016-12-08 12:26 UTC (permalink / raw)
To: James Bottomley
Cc: Jeff Layton, linux-block, linux-btrfs, linux-cifs, linux-ext4,
linux-fsdevel, linux-ide, linux-kernel, linux-mm, linux-nfs,
linux-scsi, xfs@oss.sgi.com, ceph-devel, linux-nvme,
lsf-pc@lists.linux-foundation.org
In-Reply-To: <1481122626.2354.14.camel@HansenPartnership.com>
On Wed 07-12-16 06:57:06, James Bottomley wrote:
[...]
> Just on this point, since there seems to be a lot of confusion: lsf-pc
> is the list for contacting the programme committee, so you cannot
> subscribe to it.
>
> There is no -discuss equivalent, like kernel summit has, because we
> expect you to cc the relevant existing mailing list and have the
> discussion there instead rather than expecting people to subscribe to a
> new list.
There used to be lsf@lists.linux-foundation.org. Is it not active
anymore?
--
Michal Hocko
SUSE Labs
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
^ permalink raw reply
* Re: [PATCH] libata-scsi: disable SCT Write Same for the moment
From: Tejun Heo @ 2016-12-07 21:32 UTC (permalink / raw)
To: Nicolai Stange; +Cc: Shaun Tancheff, linux-ide, linux-kernel
In-Reply-To: <20161207212133.3463-1-nicstange@gmail.com>
On Wed, Dec 07, 2016 at 10:21:33PM +0100, Nicolai Stange wrote:
> It can certainly be fixed, but the final release is quite close -- so
> disable SCT Write Same for all ATA devices rather than introducing some
> SCT key buffer allocation schemes at this point.
Applied to libata/for-4.9-fixes. Will push out soon.
Thanks.
--
tejun
^ permalink raw reply
* [PATCH] libata-scsi: disable SCT Write Same for the moment
From: Nicolai Stange @ 2016-12-07 21:21 UTC (permalink / raw)
To: Tejun Heo; +Cc: Shaun Tancheff, linux-ide, linux-kernel, Nicolai Stange
SCT Write Same support had been introduced with
commit 7b2030942859 ("libata: Add support for SCT Write Same")
Some problems, namely excessive userspace segfaults, had been reported at
http://lkml.kernel.org/r/20160908192736.GA4356@gmail.com
This lead to commit 0ce1b18c42a5 ("libata: Some drives failing on
SCT Write Same") which strived to disable SCT Write Same on !ZAC devices.
Due to the way this was done and to the logic in sd_config_write_same(),
this didn't work for those devices that have
->max_ws_blocks > SD_MAX_WS10_BLOCKS: for these, ->no_write_same and
->max_write_same_sectors would still be non-zero,
but ->ws10 == ->ws16 == 0. This would cause sd_setup_write_same_cmnd() to
demultiplex REQ_OP_WRITE_SAME requests to WRITE_SAME, and these in turn
aren't supported by libata-scsi:
EXT4-fs (dm-1): Delayed block allocation failed for inode 2625094 at
logical offset 2032 with max blocks 2 with error 121
EXT4-fs (dm-1): This should not happen!! Data will be lost
121 == EREMOTEIO is what scsi_io_completion() asserts in case of
invalid opcodes.
Back to the original problem of userspace segfaults: this can be tracked
down to ata_format_sct_write_same() overwriting the input page. Sometimes,
this page is ZERO_PAGE(0) which ceases to be filled with zeros from that
point on. Since ZERO_PAGE(0) is used for userspace .bss mappings, code of
the following is doomed:
static char *a = NULL; /* .bss */
...
if (a)
*a = 'a';
This problem is not solved by disabling SCT Write Same for !ZAC devices
only.
It can certainly be fixed, but the final release is quite close -- so
disable SCT Write Same for all ATA devices rather than introducing some
SCT key buffer allocation schemes at this point.
Fixes: 7b2030942859 ("libata: Add support for SCT Write Same")
Signed-off-by: Nicolai Stange <nicstange@gmail.com>
---
drivers/ata/libata-scsi.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/drivers/ata/libata-scsi.c b/drivers/ata/libata-scsi.c
index 982bcfc..c9abb87 100644
--- a/drivers/ata/libata-scsi.c
+++ b/drivers/ata/libata-scsi.c
@@ -1234,6 +1234,7 @@ static void ata_scsi_sdev_config(struct scsi_device *sdev)
{
sdev->use_10_for_rw = 1;
sdev->use_10_for_ms = 1;
+ sdev->no_write_same = 1;
/* Schedule policy is determined by ->qc_defer() callback and
* it needs to see every deferred qc. Set dev_blocked to 1 to
--
2.10.2
^ permalink raw reply related
* Re: LSF/MM 2017: Call for Proposals
From: James Bottomley @ 2016-12-07 14:57 UTC (permalink / raw)
To: Jeff Layton, linux-block, linux-btrfs, linux-cifs, linux-ext4,
linux-fsdevel, linux-ide, linux-kernel, linux-mm, linux-nfs,
linux-scsi, xfs@oss.sgi.com, ceph-devel, linux-nvme
Cc: lsf-pc@lists.linux-foundation.org
In-Reply-To: <1480601506.2511.7.camel@poochiereds.net>
On Thu, 2016-12-01 at 09:11 -0500, Jeff Layton wrote:
> 1) Proposals for agenda topics should be sent before January 15th,
> 2016 to:
>
> lsf-pc@lists.linux-foundation.org
>
> and cc the Linux list or lists that are relevant for the topic in
> question:
>
> ATA: linux-ide@vger.kernel.org
> Block: linux-block@vger.kernel.org
> FS: linux-fsdevel@vger.kernel.org
> MM: linux-mm@kvack.org
> SCSI: linux-scsi@vger.kernel.org
> NVMe: linux-nvme@lists.infradead.org
>
> Please tag your proposal with [LSF/MM TOPIC] to make it easier to
> track.
Just on this point, since there seems to be a lot of confusion: lsf-pc
is the list for contacting the programme committee, so you cannot
subscribe to it.
There is no -discuss equivalent, like kernel summit has, because we
expect you to cc the relevant existing mailing list and have the
discussion there instead rather than expecting people to subscribe to a
new list.
James
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
^ permalink raw reply
* [PATCH v7 2/4] ata: Enabling ATA Command Priorities
From: Adam Manzanares @ 2016-12-06 17:18 UTC (permalink / raw)
To: axboe, hare, mchristi, dan.j.williams, martin.petersen,
toshi.kani, damien.lemoal, ming.lei, tj
Cc: linux-block, linux-kernel, linux-ide, Adam Manzanares
In-Reply-To: <1481044685-2803-1-git-send-email-adam.manzanares@hgst.com>
From: Adam Manzanares <adam.manzanares@wdc.com>
This patch checks to see if an ATA device supports NCQ command priorities.
If so and the user has specified an iocontext that indicates
IO_PRIO_CLASS_RT then we build a tf with a high priority command.
This is done to improve the tail latency of commands that are high
priority by passing priority to the device.
tj: Removed trivial ata_ncq_prio_enabled() and open-coded the test.
Signed-off-by: Adam Manzanares <adam.manzanares@wdc.com>
---
drivers/ata/libata-core.c | 33 ++++++++++++++++++++++++++++++++-
drivers/ata/libata-scsi.c | 6 +++++-
drivers/ata/libata.h | 3 ++-
include/linux/ata.h | 6 ++++++
include/linux/libata.h | 3 +++
5 files changed, 48 insertions(+), 3 deletions(-)
diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c
index 223a770..5d16363 100644
--- a/drivers/ata/libata-core.c
+++ b/drivers/ata/libata-core.c
@@ -739,6 +739,7 @@ u64 ata_tf_read_block(const struct ata_taskfile *tf, struct ata_device *dev)
* @n_block: Number of blocks
* @tf_flags: RW/FUA etc...
* @tag: tag
+ * @class: IO priority class
*
* LOCKING:
* None.
@@ -753,7 +754,7 @@ u64 ata_tf_read_block(const struct ata_taskfile *tf, struct ata_device *dev)
*/
int ata_build_rw_tf(struct ata_taskfile *tf, struct ata_device *dev,
u64 block, u32 n_block, unsigned int tf_flags,
- unsigned int tag)
+ unsigned int tag, int class)
{
tf->flags |= ATA_TFLAG_ISADDR | ATA_TFLAG_DEVICE;
tf->flags |= tf_flags;
@@ -785,6 +786,12 @@ int ata_build_rw_tf(struct ata_taskfile *tf, struct ata_device *dev,
tf->device = ATA_LBA;
if (tf->flags & ATA_TFLAG_FUA)
tf->device |= 1 << 7;
+
+ if (dev->flags & ATA_DFLAG_NCQ_PRIO) {
+ if (class == IOPRIO_CLASS_RT)
+ tf->hob_nsect |= ATA_PRIO_HIGH <<
+ ATA_SHIFT_PRIO;
+ }
} else if (dev->flags & ATA_DFLAG_LBA) {
tf->flags |= ATA_TFLAG_LBA;
@@ -2156,6 +2163,30 @@ static void ata_dev_config_ncq_non_data(struct ata_device *dev)
}
}
+void ata_dev_config_ncq_prio(struct ata_device *dev)
+{
+ struct ata_port *ap = dev->link->ap;
+ unsigned int err_mask;
+
+ err_mask = ata_read_log_page(dev,
+ ATA_LOG_SATA_ID_DEV_DATA,
+ ATA_LOG_SATA_SETTINGS,
+ ap->sector_buf,
+ 1);
+ if (err_mask) {
+ ata_dev_dbg(dev,
+ "failed to get Identify Device data, Emask 0x%x\n",
+ err_mask);
+ return;
+ }
+
+ if (ap->sector_buf[ATA_LOG_NCQ_PRIO_OFFSET] & BIT(3))
+ dev->flags |= ATA_DFLAG_NCQ_PRIO;
+ else
+ ata_dev_dbg(dev, "SATA page does not support priority\n");
+
+}
+
static int ata_dev_config_ncq(struct ata_device *dev,
char *desc, size_t desc_sz)
{
diff --git a/drivers/ata/libata-scsi.c b/drivers/ata/libata-scsi.c
index 9cceb4a..2bccc3c 100644
--- a/drivers/ata/libata-scsi.c
+++ b/drivers/ata/libata-scsi.c
@@ -50,6 +50,7 @@
#include <linux/uaccess.h>
#include <linux/suspend.h>
#include <asm/unaligned.h>
+#include <linux/ioprio.h>
#include "libata.h"
#include "libata-transport.h"
@@ -1755,6 +1756,8 @@ static unsigned int ata_scsi_rw_xlat(struct ata_queued_cmd *qc)
{
struct scsi_cmnd *scmd = qc->scsicmd;
const u8 *cdb = scmd->cmnd;
+ struct request *rq = scmd->request;
+ int class = IOPRIO_PRIO_CLASS(req_get_ioprio(rq));
unsigned int tf_flags = 0;
u64 block;
u32 n_block;
@@ -1821,7 +1824,8 @@ static unsigned int ata_scsi_rw_xlat(struct ata_queued_cmd *qc)
qc->nbytes = n_block * scmd->device->sector_size;
rc = ata_build_rw_tf(&qc->tf, qc->dev, block, n_block, tf_flags,
- qc->tag);
+ qc->tag, class);
+
if (likely(rc == 0))
return 0;
diff --git a/drivers/ata/libata.h b/drivers/ata/libata.h
index 3b301a4..03d0908 100644
--- a/drivers/ata/libata.h
+++ b/drivers/ata/libata.h
@@ -66,7 +66,7 @@ extern u64 ata_tf_to_lba48(const struct ata_taskfile *tf);
extern struct ata_queued_cmd *ata_qc_new_init(struct ata_device *dev, int tag);
extern int ata_build_rw_tf(struct ata_taskfile *tf, struct ata_device *dev,
u64 block, u32 n_block, unsigned int tf_flags,
- unsigned int tag);
+ unsigned int tag, int class);
extern u64 ata_tf_read_block(const struct ata_taskfile *tf,
struct ata_device *dev);
extern unsigned ata_exec_internal(struct ata_device *dev,
@@ -85,6 +85,7 @@ extern int ata_dev_reread_id(struct ata_device *dev, unsigned int readid_flags);
extern int ata_dev_revalidate(struct ata_device *dev, unsigned int new_class,
unsigned int readid_flags);
extern int ata_dev_configure(struct ata_device *dev);
+extern void ata_dev_config_ncq_prio(struct ata_device *dev);
extern int sata_down_spd_limit(struct ata_link *link, u32 spd_limit);
extern int ata_down_xfermask_limit(struct ata_device *dev, unsigned int sel);
extern unsigned int ata_dev_set_feature(struct ata_device *dev,
diff --git a/include/linux/ata.h b/include/linux/ata.h
index fdb1803..af6859b 100644
--- a/include/linux/ata.h
+++ b/include/linux/ata.h
@@ -348,6 +348,7 @@ enum {
ATA_LOG_DEVSLP_DETO = 0x01,
ATA_LOG_DEVSLP_VALID = 0x07,
ATA_LOG_DEVSLP_VALID_MASK = 0x80,
+ ATA_LOG_NCQ_PRIO_OFFSET = 0x09,
/* NCQ send and receive log */
ATA_LOG_NCQ_SEND_RECV_SUBCMDS_OFFSET = 0x00,
@@ -940,6 +941,11 @@ static inline bool ata_id_has_ncq_non_data(const u16 *id)
return id[ATA_ID_SATA_CAPABILITY_2] & BIT(5);
}
+static inline bool ata_id_has_ncq_prio(const u16 *id)
+{
+ return id[ATA_ID_SATA_CAPABILITY] & BIT(12);
+}
+
static inline bool ata_id_has_trim(const u16 *id)
{
if (ata_id_major_version(id) >= 7 &&
diff --git a/include/linux/libata.h b/include/linux/libata.h
index 616eef4..90b69a6 100644
--- a/include/linux/libata.h
+++ b/include/linux/libata.h
@@ -166,6 +166,7 @@ enum {
ATA_DFLAG_NO_UNLOAD = (1 << 17), /* device doesn't support unload */
ATA_DFLAG_UNLOCK_HPA = (1 << 18), /* unlock HPA */
ATA_DFLAG_NCQ_SEND_RECV = (1 << 19), /* device supports NCQ SEND and RECV */
+ ATA_DFLAG_NCQ_PRIO = (1 << 20), /* device supports NCQ priority */
ATA_DFLAG_INIT_MASK = (1 << 24) - 1,
ATA_DFLAG_DETACH = (1 << 24),
@@ -342,7 +343,9 @@ enum {
ATA_SHIFT_PIO = 0,
ATA_SHIFT_MWDMA = ATA_SHIFT_PIO + ATA_NR_PIO_MODES,
ATA_SHIFT_UDMA = ATA_SHIFT_MWDMA + ATA_NR_MWDMA_MODES,
+ ATA_SHIFT_PRIO = 6,
+ ATA_PRIO_HIGH = 2,
/* size of buffer to pad xfers ending on unaligned boundaries */
ATA_DMA_PAD_SZ = 4,
--
2.7.4
^ permalink raw reply related
* Re: [PATCH v7 0/4] Enabling ATA Command Priorities
From: Tejun Heo @ 2016-12-06 18:37 UTC (permalink / raw)
To: Adam Manzanares
Cc: axboe, hare, mchristi, dan.j.williams, martin.petersen,
toshi.kani, damien.lemoal, ming.lei, linux-block, linux-kernel,
linux-ide, Adam Manzanares
In-Reply-To: <1481044685-2803-1-git-send-email-adam.manzanares@hgst.com>
Adam,
On Tue, Dec 06, 2016 at 09:18:01AM -0800, Adam Manzanares wrote:
> From: Adam Manzanares <adam.manzanares@wdc.com>
>
> This patch builds ATA commands with high priority if the iocontext of a process
> is set to real time. The goal of the patch is to improve tail latencies of
> workloads that use higher queue depths. This requires setting the iocontext
> ioprio on the request when it is initialized
>
> This patch has been tested with an Ultrastar HE8 HDD and cuts the
> the p99.99 tail latency of foreground IO from 2s down to 72ms when
> using the deadline scheduler. This patch works independently of the
> scheduler so it can be used with all of the currently available
> request based schedulers.
>
> Foreground IO, for the previously described results, is an async fio job
> submitting 4K read requests at a QD of 1 to the HDD. The foreground IO is set
> with the iopriority class of real time. The background workload is another fio
> job submitting read requests at a QD of 32 to the same HDD with default
> iopriority.
>
> This feature is enabled for ATA devices by setting the ata ncq_prio_enable
> device attribute to 1. An ATA device is also checked to see if the device
> supports per command priority.
>
> v7:
> - Run ncq prio support check when sysfs variable set (zero day bug fix)
> - Fixes from TJ merged in
> - Merge fix for linux-next incorporated
The previous version has already been merged into libata/for-4.10.
Can you please send me an incremental patch on top of it? The tree
can be fetched from
git://git.kernel.org/pub/scm/linux/kernel/git/tj/libata.git for-4.10
Thanks.
--
tejun
^ permalink raw reply
* [PATCH v7 1/4] block: Add iocontext priority to request
From: Adam Manzanares @ 2016-12-06 17:18 UTC (permalink / raw)
To: axboe, hare, mchristi, dan.j.williams, martin.petersen,
toshi.kani, damien.lemoal, ming.lei, tj
Cc: linux-block, linux-kernel, linux-ide, Adam Manzanares
In-Reply-To: <1481044685-2803-1-git-send-email-adam.manzanares@hgst.com>
From: Adam Manzanares <adam.manzanares@wdc.com>
Patch adds an association between iocontext ioprio and the ioprio of a
request. This is done to enable request based drivers the ability to
act on priority information stored in the request. An example being
ATA devices that support command priorities. If the ATA driver discovers
that the device supports command priorities and the request has valid
priority information indicating the request is high priority, then a high
priority command can be sent to the device. This should improve tail
latencies for high priority IO on any device that queues requests
internally and can make use of the priority information stored in the
request.
The ioprio of the request is set in blk_rq_set_prio which takes the
request and the ioc as arguments. If the ioc is valid in blk_rq_set_prio
then the iopriority of the request is set as the iopriority of the ioc.
In init_request_from_bio a check is made to see if the ioprio of the bio
is valid and if so then the request prio comes from the bio.
Signed-off-by: Adam Manzananares <adam.manzanares@wdc.com>
---
block/blk-core.c | 4 +++-
include/linux/blkdev.h | 14 ++++++++++++++
2 files changed, 17 insertions(+), 1 deletion(-)
diff --git a/block/blk-core.c b/block/blk-core.c
index 6c4a425..4d1d1f9 100644
--- a/block/blk-core.c
+++ b/block/blk-core.c
@@ -1154,6 +1154,7 @@ static struct request *__get_request(struct request_list *rl, unsigned int op,
blk_rq_init(q, rq);
blk_rq_set_rl(rq, rl);
+ blk_rq_set_prio(rq, ioc);
rq->cmd_flags = op;
rq->rq_flags = rq_flags;
@@ -1658,7 +1659,8 @@ void init_request_from_bio(struct request *req, struct bio *bio)
req->errors = 0;
req->__sector = bio->bi_iter.bi_sector;
- req->ioprio = bio_prio(bio);
+ if (ioprio_valid(bio_prio(bio)))
+ req->ioprio = bio_prio(bio);
blk_rq_bio_prep(req->q, req, bio);
}
diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h
index 541fdd8..8c2a1ef 100644
--- a/include/linux/blkdev.h
+++ b/include/linux/blkdev.h
@@ -1050,6 +1050,20 @@ static inline unsigned int blk_rq_count_bios(struct request *rq)
}
/*
+ * blk_rq_set_prio - associate a request with prio from ioc
+ * @rq: request of interest
+ * @ioc: target iocontext
+ *
+ * Assocate request prio with ioc prio so request based drivers
+ * can leverage priority information.
+ */
+static inline void blk_rq_set_prio(struct request *rq, struct io_context *ioc)
+{
+ if (ioc)
+ rq->ioprio = ioc->ioprio;
+}
+
+/*
* Request issue related functions.
*/
extern struct request *blk_peek_request(struct request_queue *q);
--
2.7.4
^ permalink raw reply related
* [PATCH v7 3/4] ata: ATA Command Priority Disabled By Default
From: Adam Manzanares @ 2016-12-06 17:18 UTC (permalink / raw)
To: axboe, hare, mchristi, dan.j.williams, martin.petersen,
toshi.kani, damien.lemoal, ming.lei, tj
Cc: linux-block, linux-kernel, linux-ide, Adam Manzanares
In-Reply-To: <1481044685-2803-1-git-send-email-adam.manzanares@hgst.com>
From: Adam Manzanares <adam.manzanares@wdc.com>
Add a sysfs entry to turn on priority information being passed
to a ATA device. By default this feature is turned off.
This patch depends on ata: Enabling ATA Command Priorities
tj: Renamed ncq_prio_on to ncq_prio_enable and removed trivial
ata_ncq_prio_on() and open-coded the test.
Signed-off-by: Adam Manzanares <adam.manzanares@wdc.com>
---
drivers/ata/libahci.c | 1 +
drivers/ata/libata-core.c | 3 ++-
drivers/ata/libata-scsi.c | 69 +++++++++++++++++++++++++++++++++++++++++++++++
include/linux/libata.h | 2 ++
4 files changed, 74 insertions(+), 1 deletion(-)
diff --git a/drivers/ata/libahci.c b/drivers/ata/libahci.c
index 0d028ea..ee7db31 100644
--- a/drivers/ata/libahci.c
+++ b/drivers/ata/libahci.c
@@ -140,6 +140,7 @@ EXPORT_SYMBOL_GPL(ahci_shost_attrs);
struct device_attribute *ahci_sdev_attrs[] = {
&dev_attr_sw_activity,
&dev_attr_unload_heads,
+ &dev_attr_ncq_prio_enable,
NULL
};
EXPORT_SYMBOL_GPL(ahci_sdev_attrs);
diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c
index 5d16363..f6a631a 100644
--- a/drivers/ata/libata-core.c
+++ b/drivers/ata/libata-core.c
@@ -787,7 +787,8 @@ int ata_build_rw_tf(struct ata_taskfile *tf, struct ata_device *dev,
if (tf->flags & ATA_TFLAG_FUA)
tf->device |= 1 << 7;
- if (dev->flags & ATA_DFLAG_NCQ_PRIO) {
+ if ((dev->flags & ATA_DFLAG_NCQ_PRIO) &&
+ (dev->flags & ATA_DFLAG_NCQ_PRIO_ENABLE)) {
if (class == IOPRIO_CLASS_RT)
tf->hob_nsect |= ATA_PRIO_HIGH <<
ATA_SHIFT_PRIO;
diff --git a/drivers/ata/libata-scsi.c b/drivers/ata/libata-scsi.c
index 2bccc3c..328a601 100644
--- a/drivers/ata/libata-scsi.c
+++ b/drivers/ata/libata-scsi.c
@@ -271,6 +271,74 @@ DEVICE_ATTR(unload_heads, S_IRUGO | S_IWUSR,
ata_scsi_park_show, ata_scsi_park_store);
EXPORT_SYMBOL_GPL(dev_attr_unload_heads);
+static ssize_t ata_ncq_prio_enable_show(struct device *device,
+ struct device_attribute *attr,
+ char *buf)
+{
+ struct scsi_device *sdev = to_scsi_device(device);
+ struct ata_port *ap;
+ struct ata_device *dev;
+ bool ncq_prio_enable;
+ int rc = 0;
+
+ ap = ata_shost_to_port(sdev->host);
+
+ spin_lock_irq(ap->lock);
+ dev = ata_scsi_find_dev(ap, sdev);
+ if (!dev) {
+ rc = -ENODEV;
+ goto unlock;
+ }
+
+ ncq_prio_enable = dev->flags & ATA_DFLAG_NCQ_PRIO_ENABLE;
+
+unlock:
+ spin_unlock_irq(ap->lock);
+
+ return rc ? rc : snprintf(buf, 20, "%u\n", ncq_prio_enable);
+}
+
+static ssize_t ata_ncq_prio_enable_store(struct device *device,
+ struct device_attribute *attr,
+ const char *buf, size_t len)
+{
+ struct scsi_device *sdev = to_scsi_device(device);
+ struct ata_port *ap;
+ struct ata_device *dev;
+ long int input;
+ unsigned long flags;
+ int rc;
+
+ rc = kstrtol(buf, 10, &input);
+ if (rc)
+ return rc;
+ if ((input < 0) || (input > 1))
+ return -EINVAL;
+
+ ap = ata_shost_to_port(sdev->host);
+
+ spin_lock_irqsave(ap->lock, flags);
+ dev = ata_scsi_find_dev(ap, sdev);
+ if (unlikely(!dev)) {
+ rc = -ENODEV;
+ goto unlock;
+ }
+
+ if (input)
+ dev->flags |= ATA_DFLAG_NCQ_PRIO_ENABLE;
+ else
+ dev->flags &= ~ATA_DFLAG_NCQ_PRIO_ENABLE;
+
+unlock:
+ spin_unlock_irqrestore(ap->lock, flags);
+
+ return rc ? rc : len;
+}
+
+DEVICE_ATTR(ncq_prio_enable, S_IRUGO | S_IWUSR,
+ ata_ncq_prio_enable_show, ata_ncq_prio_enable_store);
+EXPORT_SYMBOL_GPL(dev_attr_ncq_prio_enable);
+
void ata_scsi_set_sense(struct ata_device *dev, struct scsi_cmnd *cmd,
u8 sk, u8 asc, u8 ascq)
{
@@ -402,6 +470,7 @@ EXPORT_SYMBOL_GPL(dev_attr_sw_activity);
struct device_attribute *ata_common_sdev_attrs[] = {
&dev_attr_unload_heads,
+ &dev_attr_ncq_prio_enable,
NULL
};
EXPORT_SYMBOL_GPL(ata_common_sdev_attrs);
diff --git a/include/linux/libata.h b/include/linux/libata.h
index 90b69a6..c170be5 100644
--- a/include/linux/libata.h
+++ b/include/linux/libata.h
@@ -167,6 +167,7 @@ enum {
ATA_DFLAG_UNLOCK_HPA = (1 << 18), /* unlock HPA */
ATA_DFLAG_NCQ_SEND_RECV = (1 << 19), /* device supports NCQ SEND and RECV */
ATA_DFLAG_NCQ_PRIO = (1 << 20), /* device supports NCQ priority */
+ ATA_DFLAG_NCQ_PRIO_ENABLE = (1 << 21), /* Priority cmds sent to dev */
ATA_DFLAG_INIT_MASK = (1 << 24) - 1,
ATA_DFLAG_DETACH = (1 << 24),
@@ -545,6 +546,7 @@ typedef void (*ata_postreset_fn_t)(struct ata_link *link, unsigned int *classes)
extern struct device_attribute dev_attr_link_power_management_policy;
extern struct device_attribute dev_attr_unload_heads;
+extern struct device_attribute dev_attr_ncq_prio_enable;
extern struct device_attribute dev_attr_em_message_type;
extern struct device_attribute dev_attr_em_message;
extern struct device_attribute dev_attr_sw_activity;
--
2.7.4
^ permalink raw reply related
* [PATCH v7 4/4] ata: set ncq_prio_enabled iff device has support
From: Adam Manzanares @ 2016-12-06 17:18 UTC (permalink / raw)
To: axboe, hare, mchristi, dan.j.williams, martin.petersen,
toshi.kani, damien.lemoal, ming.lei, tj
Cc: linux-block, linux-kernel, linux-ide, Adam Manzanares
In-Reply-To: <1481044685-2803-1-git-send-email-adam.manzanares@hgst.com>
From: Adam Manzanares <adam.manzanares@wdc.com>
We previously had a check to see if the device has support for
prioritized ncq commands and a check to see if a device flag
is set, through a sysfs variable, in order to send a prioritized
command.
This patch only allows the sysfs variable to be set if the device
supports prioritized commands enabling one check in ata_build_rw_tf
in order to determine whether or not to send a prioritized command.
This patch depends on ata: ATA Command Priority Disabled By Default
tj: Minor subject and formatting updates.
Signed-off-by: Adam Manzanares <adam.manzanares@wdc.com>
---
drivers/ata/libata-core.c | 3 +--
drivers/ata/libata-scsi.c | 21 +++++++++++++++------
2 files changed, 16 insertions(+), 8 deletions(-)
diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c
index f6a631a..324e76e 100644
--- a/drivers/ata/libata-core.c
+++ b/drivers/ata/libata-core.c
@@ -787,8 +787,7 @@ int ata_build_rw_tf(struct ata_taskfile *tf, struct ata_device *dev,
if (tf->flags & ATA_TFLAG_FUA)
tf->device |= 1 << 7;
- if ((dev->flags & ATA_DFLAG_NCQ_PRIO) &&
- (dev->flags & ATA_DFLAG_NCQ_PRIO_ENABLE)) {
+ if (dev->flags & ATA_DFLAG_NCQ_PRIO_ENABLE) {
if (class == IOPRIO_CLASS_RT)
tf->hob_nsect |= ATA_PRIO_HIGH <<
ATA_SHIFT_PRIO;
diff --git a/drivers/ata/libata-scsi.c b/drivers/ata/libata-scsi.c
index 328a601..c24cbf1 100644
--- a/drivers/ata/libata-scsi.c
+++ b/drivers/ata/libata-scsi.c
@@ -317,17 +317,26 @@ static ssize_t ata_ncq_prio_enable_store(struct device *device,
ap = ata_shost_to_port(sdev->host);
- spin_lock_irqsave(ap->lock, flags);
dev = ata_scsi_find_dev(ap, sdev);
- if (unlikely(!dev)) {
- rc = -ENODEV;
- goto unlock;
+ if (unlikely(!dev))
+ return -ENODEV;
+
+ if (!(dev->flags & ATA_DFLAG_NCQ_PRIO)) {
+ if (ata_id_has_ncq_prio(dev->id))
+ ata_dev_config_ncq_prio(dev);
}
- if (input)
+ spin_lock_irqsave(ap->lock, flags);
+ if (input) {
+ if (!(dev->flags & ATA_DFLAG_NCQ_PRIO)) {
+ rc = -EOPNOTSUPP;
+ goto unlock;
+ }
+
dev->flags |= ATA_DFLAG_NCQ_PRIO_ENABLE;
- else
+ } else {
dev->flags &= ~ATA_DFLAG_NCQ_PRIO_ENABLE;
+ }
unlock:
spin_unlock_irqrestore(ap->lock, flags);
--
2.7.4
^ permalink raw reply related
* [PATCH v7 0/4] Enabling ATA Command Priorities
From: Adam Manzanares @ 2016-12-06 17:18 UTC (permalink / raw)
To: axboe, hare, mchristi, dan.j.williams, martin.petersen,
toshi.kani, damien.lemoal, ming.lei, tj
Cc: linux-block, linux-kernel, linux-ide, Adam Manzanares
From: Adam Manzanares <adam.manzanares@wdc.com>
This patch builds ATA commands with high priority if the iocontext of a process
is set to real time. The goal of the patch is to improve tail latencies of
workloads that use higher queue depths. This requires setting the iocontext
ioprio on the request when it is initialized
This patch has been tested with an Ultrastar HE8 HDD and cuts the
the p99.99 tail latency of foreground IO from 2s down to 72ms when
using the deadline scheduler. This patch works independently of the
scheduler so it can be used with all of the currently available
request based schedulers.
Foreground IO, for the previously described results, is an async fio job
submitting 4K read requests at a QD of 1 to the HDD. The foreground IO is set
with the iopriority class of real time. The background workload is another fio
job submitting read requests at a QD of 32 to the same HDD with default
iopriority.
This feature is enabled for ATA devices by setting the ata ncq_prio_enable
device attribute to 1. An ATA device is also checked to see if the device
supports per command priority.
v7:
- Run ncq prio support check when sysfs variable set (zero day bug fix)
- Fixes from TJ merged in
- Merge fix for linux-next incorporated
v6:
- Removed fusion mpt sas prio related code deletion
- Renamed ata device attribute that enables priority cmds to the device
v5:
- Updated block patch commit message to indicate the why and not the how
v4:
- Added blk_rq_set_prio function to associate request prio with ioc prio
- In init_request_from_bio use bio_prio if it is valid
- Added ata enable_prio dev attribute to sysfs to enable prioritized commands
v3:
- Removed null dereference issue in blk-core
- Renamed queue sysfs entries for clarity
- Added documentation for sysfs queue entry
v2:
- Add queue flag to set iopriority going to the request
- If queue flag set, send iopriority class to ata_build_rw_tf
- Remove redundant code in ata_ncq_prio_enabled function.
Adam Manzanares (4):
block: Add iocontext priority to request
ata: Enabling ATA Command Priorities
ata: ATA Command Priority Disabled By Default
ata: set ncq_prio_enabled iff device has support
block/blk-core.c | 4 ++-
drivers/ata/libahci.c | 1 +
drivers/ata/libata-core.c | 33 ++++++++++++++++++-
drivers/ata/libata-scsi.c | 84 ++++++++++++++++++++++++++++++++++++++++++++++-
drivers/ata/libata.h | 3 +-
include/linux/ata.h | 6 ++++
include/linux/blkdev.h | 14 ++++++++
include/linux/libata.h | 5 +++
8 files changed, 146 insertions(+), 4 deletions(-)
--
2.7.4
^ permalink raw reply
* Re: detect and warn about ahci-remapped NVMe devices
From: Tejun Heo @ 2016-12-05 19:33 UTC (permalink / raw)
To: Christoph Hellwig; +Cc: dan.j.williams, linux-ide, linux-nvme
In-Reply-To: <1480703463-17489-1-git-send-email-hch@lst.de>
Hello,
On Fri, Dec 02, 2016 at 07:31:00PM +0100, Christoph Hellwig wrote:
> Just a small band-aid to detect the AHCI-remapped NVMe devices
> for now. Hopefully we'll eventually get a fake PCIe root port
> driver ala VMD for them.
Applied 1-3 to libata/for-4.10. Fixed the dup constant definition in
0002.
Thanks.
--
tejun
^ permalink raw reply
* Re: [PATCH] pata_legacy: Allow disabling of legacy PATA device probes on non-PCI systems
From: Tejun Heo @ 2016-12-05 19:23 UTC (permalink / raw)
To: whiteheadm; +Cc: One Thousand Gnomes, Sergei Shtylyov, linux-ide
In-Reply-To: <CAP8WD_bUW9cAAQpvenL73sxvpoxNYwZdRqpj92YWEyanK51+0g@mail.gmail.com>
Hello,
Hmm... I'm a bit confused. These resources are tied to the platform
device which is unregistered on probe failure which will invoke
devres_release_all().
Matthew, can you please apply the following patch and see whether
device_release() gets invoked?
Thanks.
diff --git a/drivers/ata/pata_legacy.c b/drivers/ata/pata_legacy.c
index bce2a8c..0dd72ce 100644
--- a/drivers/ata/pata_legacy.c
+++ b/drivers/ata/pata_legacy.c
@@ -1013,6 +1013,7 @@ static __init int legacy_init_one(struct legacy_probe *probe)
}
ata_host_detach(host);
fail:
+ printk("XXX pata_legacy: unregistering platform dev %p\n", pdev);
platform_device_unregister(pdev);
return ret;
}
diff --git a/drivers/base/core.c b/drivers/base/core.c
index ce057a5..a3d112d 100644
--- a/drivers/base/core.c
+++ b/drivers/base/core.c
@@ -237,6 +237,7 @@ static void device_release(struct kobject *kobj)
* is deleted but alive, so release devres here to avoid
* possible memory leak.
*/
+ printk("XXX device_release: invoking devres_release_all\n");
devres_release_all(dev);
if (dev->release)
^ permalink raw reply related
* Re: [PATCH 2/3] ahci-remap.h: add ahci remapping definitions
From: Christoph Hellwig @ 2016-12-05 15:31 UTC (permalink / raw)
To: Sergei Shtylyov
Cc: Christoph Hellwig, tj, dan.j.williams, linux-ide, linux-nvme
In-Reply-To: <aa6cba2c-6cf7-0222-b871-d98d1c8e4fe8@cogentembedded.com>
On Sat, Dec 03, 2016 at 01:57:01PM +0300, Sergei Shtylyov wrote:
>> +#ifndef _LINUX_AHCI_REMAP_H
>> +#define _LINUX_AHCI_REMAP_H
>> +
>> +#include <linux/sizes.h>
>> +
>> +#define AHCI_VSCAP 0xa4
>> +#define AHCI_REMAP_CAP 0x800
>> +#define AHCI_VSCAP 0xa4
>
> Why do it twice?
No good reason, probably just me messing up the move..
^ permalink raw reply
* Re: [PATCH] pata_legacy: Allow disabling of legacy PATA device probes on non-PCI systems
From: tedheadster @ 2016-12-05 14:19 UTC (permalink / raw)
To: Tejun Heo; +Cc: One Thousand Gnomes, Sergei Shtylyov, linux-ide
In-Reply-To: <20161202170705.GB6033@htj.duckdns.org>
Tejun,
that new patch worked better.
Here is the dmesg output:
[ 34.347350] scsi0 : pata_legacy
[ 34.367366] ata1: PATA max PIO4 cmd 0x1f0 ctl 0x3f6 irq 14
[ 34.523330] ata1.00: ATA-4: QUANTUM FIREBALL CR8.4A, A5U.1200, max UDMA/66
[ 34.524804] ata1.00: 16514064 sectors, multi 0: LBA
[ 34.525747] ata1.00: configured for PIO
[ 34.569330] scsi 0:0:0:0: Direct-Access ATA QUANTUM
FIREBALL A5U. PQ: 0 ANSI: 5
[ 34.655313] sd 0:0:0:0: [sda] 16514064 512-byte logical blocks:
(8.45 GB/7.87 GiB)
[ 34.674309] sd 0:0:0:0: [sda] Write Protect is off
[ 34.675683] sd 0:0:0:0: [sda] Mode Sense: 00 3a 00 00
[ 34.689347] sd 0:0:0:0: [sda] Write cache: enabled, read cache:
enabled, doesn't support DPO or FUA
[ 34.691283] sd 0:0:0:0: Attached scsi generic sg0 type 0
[ 34.800293] sda: sda1 sda2 sda3 sda4
[ 34.890325] sd 0:0:0:0: [sda] Attached SCSI disk
[ 34.976270] scsi1 : pata_legacy
[ 34.999263] ata2: PATA max PIO4 cmd 0x170 ctl 0x376 irq 15
[ 35.448191] scsi2 : pata_legacy
[ 35.486192] ata3: PATA max PIO4 cmd 0x1e8 ctl 0x3ee irq 11
[ 35.997114] scsi3 : pata_legacy
[ 36.051103] ata4: PATA max PIO4 cmd 0x168 ctl 0x36e irq 10
[ 36.384057] genirq: Flags mismatch irq 8. 00000000 (platform) vs.
00000000 (rtc0)
[ 36.571024] scsi4 : pata_legacy
[ 36.626014] ata5: PATA max PIO4 cmd 0x160 ctl 0x366 irq 12
[ 42.143223] EXT4-fs (sda4): mounting ext3 file system using the
ext4 subsystem
and /proc/interrupts looks good:
CPU0
0: 558552 XT-PIC-XT-PIC timer
1: 337 XT-PIC-XT-PIC i8042
2: 0 XT-PIC-XT-PIC cascade
4: 1 XT-PIC-XT-PIC
8: 0 XT-PIC-XT-PIC rtc0
14: 51538 XT-PIC-XT-PIC platform
I would still like to get my patch in. If you have a motherboard where
you cannot disable the secondary hard drive controllers, the
pata_legacy driver will detect them and allocate the interrupt. Some
way to disable this behavior is useful.
- Matthew
^ permalink raw reply
* Re: [PATCH 2/3] ahci-remap.h: add ahci remapping definitions
From: Sergei Shtylyov @ 2016-12-03 10:57 UTC (permalink / raw)
To: Christoph Hellwig, tj; +Cc: dan.j.williams, linux-ide, linux-nvme
In-Reply-To: <1480703463-17489-3-git-send-email-hch@lst.de>
Hello.
On 12/2/2016 9:31 PM, Christoph Hellwig wrote:
> From: Dan Williams <dan.j.williams@intel.com>
>
> Signed-off-by: Dan Williams <dan.j.williams@intel.com>
> [hch: split into a separate header and commit]
> Signed-off-by: Christoph Hellwig <hch@lst.de>
> ---
> include/linux/ahci-remap.h | 29 +++++++++++++++++++++++++++++
> 1 file changed, 29 insertions(+)
> create mode 100644 include/linux/ahci-remap.h
>
> diff --git a/include/linux/ahci-remap.h b/include/linux/ahci-remap.h
> new file mode 100644
> index 0000000..883d366
> --- /dev/null
> +++ b/include/linux/ahci-remap.h
> @@ -0,0 +1,29 @@
> +#ifndef _LINUX_AHCI_REMAP_H
> +#define _LINUX_AHCI_REMAP_H
> +
> +#include <linux/sizes.h>
> +
> +#define AHCI_VSCAP 0xa4
> +#define AHCI_REMAP_CAP 0x800
> +#define AHCI_VSCAP 0xa4
Why do it twice?
MBR, Sergei
^ permalink raw reply
* [PATCH 3/3] ahci: warn about remapped NVMe devices
From: Christoph Hellwig @ 2016-12-02 18:31 UTC (permalink / raw)
To: tj; +Cc: dan.j.williams, linux-ide, linux-nvme
In-Reply-To: <1480703463-17489-1-git-send-email-hch@lst.de>
Some Intel ahci implementations have a completely broken remapping mode
where they hide one or more NVMe devices behind the bar of an AHCI device.
Intel refuses to let the OS reprogram the BIOS to switch out of this
mode at runtime, and so far we're not come up with another good way
to undo the mess that the Chipset people created. So for now the only
thing we can do is to alert users about this situation and switch to the
faster and much saner so called "AHCI" mode insted of the RAID mode in
the BIOS so that the BIOS does not hide the NVMe devices from us.
The sitation is even worse as at least one vendor (thanks a lot Lenovo..)
has started hardcoding their BIOS into the "RAID" mode even for laptops
that don't use AHCI _at all_ and just have a single NVMe device. For now
there is an unspported Linux-only BIOS that undoes this braindamage,
but we'll have to see if things are getting better or worse from here.
Based on an earlier patch from Dan Williams <dan.j.williams@intel.com>.
Signed-off-by: Christoph Hellwig <hch@lst.de>
---
drivers/ata/ahci.c | 39 +++++++++++++++++++++++++++++++++++++++
1 file changed, 39 insertions(+)
diff --git a/drivers/ata/ahci.c b/drivers/ata/ahci.c
index ba5f11c..516a689 100644
--- a/drivers/ata/ahci.c
+++ b/drivers/ata/ahci.c
@@ -46,6 +46,8 @@
#include <scsi/scsi_host.h>
#include <scsi/scsi_cmnd.h>
#include <linux/libata.h>
+#include <linux/ahci-remap.h>
+#include <linux/io-64-nonatomic-lo-hi.h>
#include "ahci.h"
#define DRV_NAME "ahci"
@@ -1400,6 +1402,40 @@ static irqreturn_t ahci_thunderx_irq_handler(int irq, void *dev_instance)
}
#endif
+static void ahci_remap_check(struct pci_dev *pdev, int bar,
+ struct ahci_host_priv *hpriv)
+{
+ int i, count = 0;
+ u32 cap;
+
+ /*
+ * Check if this device might have remapped nvme devices.
+ */
+ if (pdev->vendor != PCI_VENDOR_ID_INTEL ||
+ pci_resource_len(pdev, bar) < SZ_512K ||
+ bar != AHCI_PCI_BAR_STANDARD ||
+ !(readl(hpriv->mmio + AHCI_VSCAP) & 1))
+ return;
+
+ cap = readq(hpriv->mmio + AHCI_REMAP_CAP);
+ for (i = 0; i < AHCI_MAX_REMAP; i++) {
+ if ((cap & (1 << i)) == 0)
+ continue;
+ if (readl(hpriv->mmio + ahci_remap_dcc(i))
+ != PCI_CLASS_STORAGE_EXPRESS)
+ continue;
+
+ /* We've found a remapped device */
+ count++;
+ }
+
+ if (!count)
+ return;
+
+ dev_warn(&pdev->dev, "Found %d remapped NVMe devices.\n", count);
+ dev_warn(&pdev->dev, "Switch your BIOS from RAID to AHCI mode to use them.\n");
+}
+
static int ahci_get_irq_vector(struct ata_host *host, int port)
{
return pci_irq_vector(to_pci_dev(host->dev), port);
@@ -1545,6 +1581,9 @@ static int ahci_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
hpriv->mmio = pcim_iomap_table(pdev)[ahci_pci_bar];
+ /* detect remapped nvme devices */
+ ahci_remap_check(pdev, ahci_pci_bar, hpriv);
+
/* must set flag prior to save config in order to take effect */
if (ahci_broken_devslp(pdev))
hpriv->flags |= AHCI_HFLAG_NO_DEVSLP;
--
2.1.4
^ permalink raw reply related
* [PATCH 2/3] ahci-remap.h: add ahci remapping definitions
From: Christoph Hellwig @ 2016-12-02 18:31 UTC (permalink / raw)
To: tj; +Cc: dan.j.williams, linux-ide, linux-nvme
In-Reply-To: <1480703463-17489-1-git-send-email-hch@lst.de>
From: Dan Williams <dan.j.williams@intel.com>
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
[hch: split into a separate header and commit]
Signed-off-by: Christoph Hellwig <hch@lst.de>
---
include/linux/ahci-remap.h | 29 +++++++++++++++++++++++++++++
1 file changed, 29 insertions(+)
create mode 100644 include/linux/ahci-remap.h
diff --git a/include/linux/ahci-remap.h b/include/linux/ahci-remap.h
new file mode 100644
index 0000000..883d366
--- /dev/null
+++ b/include/linux/ahci-remap.h
@@ -0,0 +1,29 @@
+#ifndef _LINUX_AHCI_REMAP_H
+#define _LINUX_AHCI_REMAP_H
+
+#include <linux/sizes.h>
+
+#define AHCI_VSCAP 0xa4
+#define AHCI_REMAP_CAP 0x800
+#define AHCI_VSCAP 0xa4
+
+/* device class code */
+#define AHCI_REMAP_N_DCC 0x880
+
+/* remap-device base relative to ahci-bar */
+#define AHCI_REMAP_N_OFFSET SZ_16K
+#define AHCI_REMAP_N_SIZE SZ_16K
+
+#define AHCI_MAX_REMAP 3
+
+static inline unsigned int ahci_remap_dcc(int i)
+{
+ return AHCI_REMAP_N_DCC + i * 0x80;
+}
+
+static inline unsigned int ahci_remap_base(int i)
+{
+ return AHCI_REMAP_N_OFFSET + i * AHCI_REMAP_N_SIZE;
+}
+
+#endif /* _LINUX_AHCI_REMAP_H */
--
2.1.4
^ permalink raw reply related
* [PATCH 1/3] nvme: move NVMe class code to pci_ids.h
From: Christoph Hellwig @ 2016-12-02 18:31 UTC (permalink / raw)
To: tj; +Cc: dan.j.williams, linux-ide, linux-nvme
In-Reply-To: <1480703463-17489-1-git-send-email-hch@lst.de>
We'll need to check for it in the AHCI drivers (yes, really) soon.
Signed-off-by: Christoph Hellwig <hch@lst.de>
---
drivers/nvme/host/pci.c | 3 ---
include/linux/pci_ids.h | 2 ++
2 files changed, 2 insertions(+), 3 deletions(-)
diff --git a/drivers/nvme/host/pci.c b/drivers/nvme/host/pci.c
index 0fc99f0..2c58f15 100644
--- a/drivers/nvme/host/pci.c
+++ b/drivers/nvme/host/pci.c
@@ -2064,9 +2064,6 @@ static const struct pci_error_handlers nvme_err_handler = {
.reset_notify = nvme_reset_notify,
};
-/* Move to pci_ids.h later */
-#define PCI_CLASS_STORAGE_EXPRESS 0x010802
-
static const struct pci_device_id nvme_id_table[] = {
{ PCI_VDEVICE(INTEL, 0x0953),
.driver_data = NVME_QUIRK_STRIPE_SIZE |
diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h
index c58752f..a5e6c7b 100644
--- a/include/linux/pci_ids.h
+++ b/include/linux/pci_ids.h
@@ -23,8 +23,10 @@
#define PCI_CLASS_STORAGE_SATA 0x0106
#define PCI_CLASS_STORAGE_SATA_AHCI 0x010601
#define PCI_CLASS_STORAGE_SAS 0x0107
+#define PCI_CLASS_STORAGE_EXPRESS 0x010802
#define PCI_CLASS_STORAGE_OTHER 0x0180
+
#define PCI_BASE_CLASS_NETWORK 0x02
#define PCI_CLASS_NETWORK_ETHERNET 0x0200
#define PCI_CLASS_NETWORK_TOKEN_RING 0x0201
--
2.1.4
^ permalink raw reply related
* detect and warn about ahci-remapped NVMe devices
From: Christoph Hellwig @ 2016-12-02 18:31 UTC (permalink / raw)
To: tj; +Cc: dan.j.williams, linux-ide, linux-nvme
Just a small band-aid to detect the AHCI-remapped NVMe devices
for now. Hopefully we'll eventually get a fake PCIe root port
driver ala VMD for them.
^ permalink raw reply
* Re: [PATCH] pata_legacy: Allow disabling of legacy PATA device probes on non-PCI systems
From: Tejun Heo @ 2016-12-02 17:07 UTC (permalink / raw)
To: whiteheadm; +Cc: One Thousand Gnomes, Sergei Shtylyov, linux-ide
In-Reply-To: <CAP8WD_bZWeLBhLXqJG5uDwBe+zBubw+A+ecSuaihOuwvw9QoCQ@mail.gmail.com>
Hello,
Sorry, I got the order of operation wrong. Can you please test this
one?
Thanks.
diff --git a/drivers/ata/pata_legacy.c b/drivers/ata/pata_legacy.c
index bce2a8c..3a0bb89 100644
--- a/drivers/ata/pata_legacy.c
+++ b/drivers/ata/pata_legacy.c
@@ -962,6 +962,9 @@ static __init int legacy_init_one(struct legacy_probe *probe)
if (IS_ERR(pdev))
return PTR_ERR(pdev);
+ if (!devres_open_group(&pdev->dev, legacy_init_one, GFP_KERNEL))
+ return -ENOMEM;
+
ret = -EBUSY;
if (devm_request_region(&pdev->dev, io, 8, "pata_legacy") == NULL ||
devm_request_region(&pdev->dev, io + 0x0206, 1,
@@ -1008,11 +1011,13 @@ static __init int legacy_init_one(struct legacy_probe *probe)
if (!ata_dev_absent(dev)) {
legacy_host[probe->slot] = host;
ld->platform_dev = pdev;
+ devres_remove_group(&pdev->dev, legacy_init_one);
return 0;
}
}
ata_host_detach(host);
fail:
+ devres_release_group(&pdev->dev, legacy_init_one);
platform_device_unregister(pdev);
return ret;
}
^ permalink raw reply related
* Re: [PATCH] pata_legacy: Allow disabling of legacy PATA device probes on non-PCI systems
From: One Thousand Gnomes @ 2016-12-02 16:24 UTC (permalink / raw)
To: tedheadster; +Cc: Tejun Heo, Sergei Shtylyov, linux-ide
In-Reply-To: <CAP8WD_bPns6hGPWUUGbRd_20+bHX460p5szrfCP4bKr9k76wsQ@mail.gmail.com>
On Fri, 2 Dec 2016 08:37:04 -0500
tedheadster <tedheadster@gmail.com> wrote:
> Alan,
>
> >> Alan,
> >> on my hardware it grabbed all those interrupts, showing up in
> >> /proc/interrupts very clearly.
> >
> > Do you have a dmesg of the boot ?
> >
>
> Here is the relevant dmesg information and also the /proc/interrupts results:
That's very strange. The legacy code should be seeing that no devices are
present and then dropping the controller
/* Nothing found means we drop the port as its probably not there */
ret = -ENODEV;
ata_for_each_dev(dev, &ap->link, ALL) {
if (!ata_dev_absent(dev)) {
legacy_host[probe->slot] = host;
ld->platform_dev = pdev;
return 0;
}
}
ata_host_detach(host);
so this ought to be triggered and free up the interface and the IRQ
Alan
^ permalink raw reply
page: next (older) | prev (newer) | latest
- recent:[subjects (threaded)|topics (new)|topics (active)]
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox