Linux-m68k Archive on lore.kernel.org
 help / color / Atom feed
* [PATCH v2 00/26] ata: optimize core code size on PATA only setups
       [not found] <CGME20200207142751eucas1p2499d9a7ebbca93fff43c47629ba8b6ce@eucas1p2.samsung.com>
@ 2020-02-07 14:27 ` Bartlomiej Zolnierkiewicz
       [not found]   ` <CGME20200207142752eucas1p14ad96c1adf7508226cfdfa583bb442aa@eucas1p1.samsung.com>
  0 siblings, 1 reply; 2+ messages in thread
From: Bartlomiej Zolnierkiewicz @ 2020-02-07 14:27 UTC (permalink / raw)
  To: Jens Axboe
  Cc: Michael Schmitz, Geert Uytterhoeven, Christoph Hellwig,
	linux-ide, linux-m68k, linux-kernel, b.zolnierkie

Hi,

There have been reports in the past of libata core code size
being a problem in migration from deprecated IDE subsystem on
legacy PATA only systems, i.e.:

https://lore.kernel.org/linux-ide/db2838b7-4862-785b-3a1d-3bf09811340a@gmail.com/

This patchset re-organizes libata core code to exclude SATA
specific code from being built for PATA only setups.

The end result is up to 20% (by 20429 bytes, from 101787 bytes to
81358 bytes) smaller libata core code size (as measured for m68k
arch using modified atari_defconfig) on affected setups.

I've tested this patchset using pata_falcon driver under ARAnyM
emulator.


patches #1-10 are general fixes/cleanups done in the process of
making the patchset (there should be no inter-dependencies between
them except patch #9 which depends on patch #8)

patch #11 separates PATA timings code to libata-pata-timings.c file

patches #12-14 let compiler optimize out SATA specific code on
non-SATA hosts by adding !IS_ENABLED(CONFIG_SATA_HOST) instances

patches #15-21 separate SATA only code from libata-core.c file to
libata-sata.c one

patches #22-23 separate SATA only code from libata-scsi.c file to
libata-sata.c one

patches #24-25 separate SATA only code from libata-eh.c file to
libata-sata.c one

patch #26 makes "libata.force" kernel parameter optional


Changes since v1
(https://lore.kernel.org/linux-ide/20200128133343.29905-1-b.zolnierkie@samsung.com/):
- added Acked-by: tag from Tejun to "ata: remove stale maintainership
  information from core code" patch
- added Reviewed-by: tag from Martin to "ata: make SATA_PMP option
  selectable only if any SATA host driver is enabled" patch
- added Reviewed-by: tag from Christoph to following patches:
  - "ata: simplify ata_scsiop_inq_89()"
  - "ata: use COMMAND_LINE_SIZE for ata_force_param_buf[] size"
  - "ata: optimize struct ata_force_param size"
  - "ata: move EXPORT_SYMBOL_GPL()s close to exported code"
  - "ata: remove EXPORT_SYMBOL_GPL()s not used by modules"
- converted "ata: add CONFIG_SATA_HOST=n version of ata_ncq_enabled()"
  patch to use IS_ENABLED()
- added "ata: let compiler optimize out ata_dev_config_ncq() on
  non-SATA hosts" and "ata: let compiler optimize out ata_eh_set_lpm()
  on non-SATA hosts" patches
- moved "ata: move sata_scr_*() to libata-core-sata.c" patch just
  after "ata: start separating SATA specific code from libata-core.c"
  one
- dropped no longer needed patches (code savings <= 8 bytes):
  - "ata: move ata_do_link_spd_horkage() to libata-core-sata.c"
  - "ata: move ata_dev_config_ncq*() to libata-core-sata.c"
  - "ata: move sata_print_link_status() to libata-core-sata.c"
  - "ata: move sata_down_spd_limit() to libata-core-sata.c"
  - "ata: move sata_link_init_spd() to libata-core-sata.c"
  - "ata: move ata_eh_set_lpm() to libata-core-sata.c"
- removed superfluos ifdefs
- dropped file names in top of file headers
- merged libata-scsi-sata.c and libata-eh-sata.c into libata-sata.c
- emphasised in patch descriptions that atari_defconfig used for
  measurements has been modified (original one is still using
  deprecated IDE subsystem)
- added "ata: make "libata.force" kernel parameter optional" patch

Best regards,
--
Bartlomiej Zolnierkiewicz
Samsung R&D Institute Poland
Samsung Electronics

Bartlomiej Zolnierkiewicz (26):
  ata: remove stale maintainership information from core code
  ata: expose ncq_enable_prio sysfs attribute only on NCQ capable hosts
  ata: make SATA_PMP option selectable only if any SATA host driver is
    enabled
  sata_promise: use ata_cable_sata()
  ata: simplify ata_scsiop_inq_89()
  ata: use COMMAND_LINE_SIZE for ata_force_param_buf[] size
  ata: optimize struct ata_force_param size
  ata: move EXPORT_SYMBOL_GPL()s close to exported code
  ata: remove EXPORT_SYMBOL_GPL()s not used by modules
  ata: fix CodingStyle issues in PATA timings code
  ata: separate PATA timings code from libata-core.c
  ata: add CONFIG_SATA_HOST=n version of ata_ncq_enabled()
  ata: let compiler optimize out ata_dev_config_ncq() on non-SATA hosts
  ata: let compiler optimize out ata_eh_set_lpm() on non-SATA hosts
  ata: start separating SATA specific code from libata-core.c
  ata: move sata_scr_*() to libata-sata.c
  ata: move *sata_set_spd*() to libata-sata.c
  ata: move sata_link_{debounce,resume}() to libata-sata.c
  ata: move sata_link_hardreset() to libata-sata.c
  ata: move ata_qc_complete_multiple() to libata-sata.c
  ata: move sata_deb_timing_*() to libata-sata.c
  ata: start separating SATA specific code from libata-scsi.c
  ata: move ata_sas_*() to libata-sata.c
  ata: start separating SATA specific code from libata-eh.c
  ata: move ata_eh_analyze_ncq_error() & co. to libata-sata.c
  ata: make "libata.force" kernel parameter optional

 drivers/ata/Kconfig               |   77 ++
 drivers/ata/Makefile              |    2 +
 drivers/ata/libata-core.c         | 1124 ++--------------------
 drivers/ata/libata-eh.c           |  224 +----
 drivers/ata/libata-pata-timings.c |  192 ++++
 drivers/ata/libata-sata.c         | 1483 +++++++++++++++++++++++++++++
 drivers/ata/libata-scsi.c         |  542 +----------
 drivers/ata/libata-sff.c          |    4 -
 drivers/ata/libata.h              |   25 +-
 drivers/ata/sata_promise.c        |    8 +-
 drivers/scsi/Kconfig              |    1 +
 drivers/scsi/libsas/Kconfig       |    1 +
 include/linux/libata.h            |  163 ++--
 13 files changed, 2007 insertions(+), 1839 deletions(-)
 create mode 100644 drivers/ata/libata-pata-timings.c
 create mode 100644 drivers/ata/libata-sata.c

-- 
2.24.1


^ permalink raw reply	[flat|nested] 2+ messages in thread

* [PATCH v2 02/26] ata: expose ncq_enable_prio sysfs attribute only on NCQ capable hosts
       [not found]   ` <CGME20200207142752eucas1p14ad96c1adf7508226cfdfa583bb442aa@eucas1p1.samsung.com>
@ 2020-02-07 14:27     ` Bartlomiej Zolnierkiewicz
  0 siblings, 0 replies; 2+ messages in thread
From: Bartlomiej Zolnierkiewicz @ 2020-02-07 14:27 UTC (permalink / raw)
  To: Jens Axboe
  Cc: Michael Schmitz, Geert Uytterhoeven, Christoph Hellwig,
	linux-ide, linux-m68k, linux-kernel, b.zolnierkie

There is no point in exposing ncq_enable_prio sysfs attribute for
devices on PATA and non-NCQ capable SATA hosts so:

* remove dev_attr_ncq_prio_enable from ata_common_sdev_attrs[]

* add ata_ncq_sdev_attrs[]

* update ATA_NCQ_SHT() macro to use ata_ncq_sdev_attrs[]

Signed-off-by: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
---
 drivers/ata/libata-scsi.c | 8 +++++++-
 include/linux/libata.h    | 2 ++
 2 files changed, 9 insertions(+), 1 deletion(-)

diff --git a/drivers/ata/libata-scsi.c b/drivers/ata/libata-scsi.c
index 11eb25b6e2cd..161e5d84bd82 100644
--- a/drivers/ata/libata-scsi.c
+++ b/drivers/ata/libata-scsi.c
@@ -462,11 +462,17 @@ 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);
 
+struct device_attribute *ata_ncq_sdev_attrs[] = {
+	&dev_attr_unload_heads,
+	&dev_attr_ncq_prio_enable,
+	NULL
+};
+EXPORT_SYMBOL_GPL(ata_ncq_sdev_attrs);
+
 /**
  *	ata_std_bios_param - generic bios head/sector/cylinder calculator used by sd.
  *	@sdev: SCSI device for which BIOS geometry is to be determined
diff --git a/include/linux/libata.h b/include/linux/libata.h
index a36bdcb8d9e9..86f4022c9b17 100644
--- a/include/linux/libata.h
+++ b/include/linux/libata.h
@@ -1335,6 +1335,7 @@ extern int ata_link_nr_enabled(struct ata_link *link);
 extern const struct ata_port_operations ata_base_port_ops;
 extern const struct ata_port_operations sata_port_ops;
 extern struct device_attribute *ata_common_sdev_attrs[];
+extern struct device_attribute *ata_ncq_sdev_attrs[];
 
 /*
  * All sht initializers (BASE, PIO, BMDMA, NCQ) must be instantiated
@@ -1361,6 +1362,7 @@ extern struct device_attribute *ata_common_sdev_attrs[];
 
 #define ATA_NCQ_SHT(drv_name)					\
 	ATA_BASE_SHT(drv_name),					\
+	.sdev_attrs		= ata_ncq_sdev_attrs,		\
 	.change_queue_depth	= ata_scsi_change_queue_depth
 
 /*
-- 
2.24.1


^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, back to index

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <CGME20200207142751eucas1p2499d9a7ebbca93fff43c47629ba8b6ce@eucas1p2.samsung.com>
2020-02-07 14:27 ` [PATCH v2 00/26] ata: optimize core code size on PATA only setups Bartlomiej Zolnierkiewicz
     [not found]   ` <CGME20200207142752eucas1p14ad96c1adf7508226cfdfa583bb442aa@eucas1p1.samsung.com>
2020-02-07 14:27     ` [PATCH v2 02/26] ata: expose ncq_enable_prio sysfs attribute only on NCQ capable hosts Bartlomiej Zolnierkiewicz

Linux-m68k Archive on lore.kernel.org

Archives are clonable:
	git clone --mirror https://lore.kernel.org/linux-m68k/0 linux-m68k/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 linux-m68k linux-m68k/ https://lore.kernel.org/linux-m68k \
		linux-m68k@vger.kernel.org linux-m68k@lists.linux-m68k.org
	public-inbox-index linux-m68k

Example config snippet for mirrors

Newsgroup available over NNTP:
	nntp://nntp.lore.kernel.org/org.kernel.vger.linux-m68k


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git