Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1761345AbcJSUDL (ORCPT ); Wed, 19 Oct 2016 16:03:11 -0400 Received: from esa2.hgst.iphmx.com ([68.232.143.124]:40982 "EHLO esa2.hgst.iphmx.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1761278AbcJSUDG (ORCPT ); Wed, 19 Oct 2016 16:03:06 -0400 X-IronPort-AV: E=Sophos;i="5.31,367,1473091200"; d="scan'208";a="23199693" Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Adam.Manzanares@wdc.com; Date: Wed, 19 Oct 2016 13:02:45 -0700 From: Adam Manzanares To: Tejun Heo CC: Adam Manzanares , , , , , , , , , , , , , , , Subject: Re: [PATCH v6 3/3] ata: ATA Command Priority Disabled By Default Message-ID: <20161019200244.GB2506@hgst.com> References: <1476728850-2309-1-git-send-email-adam.manzanares@hgst.com> <1476728850-2309-4-git-send-email-adam.manzanares@hgst.com> <20161019183829.GK18532@htj.duckdns.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Disposition: inline In-Reply-To: <20161019183829.GK18532@htj.duckdns.org> User-Agent: Mutt/1.5.23 (2014-03-12) X-Originating-IP: [199.255.44.5] X-ClientProxiedBy: MWHPR18CA0024.namprd18.prod.outlook.com (10.173.238.162) To SN1PR0401MB1725.namprd04.prod.outlook.com (10.162.131.15) X-MS-Office365-Filtering-Correlation-Id: 984b66ca-5db1-4ee2-a860-08d3f85aec43 X-Microsoft-Exchange-Diagnostics: 1;SN1PR0401MB1725;2:8XteZboo3KiffdpIQIIdQEga9Kx1nsN8YV0q/b9R7q7oZRCxToRZco1Quq5lFbtFXtOzjOVpZzXsDX5jGt6/h3boVUB4JMT25Ekj5wPIyp7Ub3g23AyVUrBlArCPBbc6AoUujJi23Rv1IViz6Z4Mq6eXDoy4FD1q+ASqFvhStX/QMTm1p6kPNBc8ECKtlWW5puf7pZnllvlgkLPScryI6g==;3:z+cclDZMP6lbY25Wc9BiU+1ACzMyDhpA84M3TBI1d9dqiQv33dOnkjlna0VVdUOj2CrGaYGoOJp+1oX9FJjATSA6ZLNgVUTf05IsZTGlVlWag47qrblaGqwEsPVeXUo+Ky5q86GUm1kEJKMr671rMQ== X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:SN1PR0401MB1725; X-Microsoft-Exchange-Diagnostics: 1;SN1PR0401MB1725;25:hYfczx8IUfCHoCAmK1XxIHSIvUqF7uH/4A1cStqJCpDdKrYAwQQZzSvWC8iBfMqNeqaFO8GLxxrGpnsKbxxBC/zcdrRVV71tU23aQl/1dxmSpP2jZNpGw5KWdf8pP3dYAIKgNCOLeS3THK/GbOfBrNLuES9c/jKsGwACJzoXHZ5gkMOGYnycxGRqhbToQBPwNfZ0eim7EtVQ52sI4Cxjndv4U3DovmyVVgjHrVJLnc+hLhSvUSE3QEG7H9s3vUKNh8fncZddAOr/g+zrBtFPX5A65fSB2yJb+cMj/eGjW1vrbRnaDItf8G9G5lfnjopYMFf0drnK6S/d497B6gMJgqIJxpqKjeXTZqcuI8lZE+vD7/DM0PMDCVLvy9LU6OaagazSRmZMXlfCoYT5kjOUk3Sq4Kqn0phFAarEEaui1dOdXwAvOCEFAA/zyxkD1B1n9590NbZeiL7fTtyIr2WZysjCnvb+GxcqNZyq0u6UKQaSK5Y0mfXPJ2aXEwePDlJ9bRdIfM4W1Pf24piQf0f815zRwg0cwJ6vdq/CedKkxb/DWfGnarXEdznV8SuLnWCrUDg6S8ZmWzFv4HHz8+3YgYjTj6wpNl23+f9buoZOB9zULXcVv+4wgtlncpAceudYmEedJZ52Fppc1CqUXpVbW+njwKUdbIosN5ydrz9/wtCz4tr7A6zCz3NkXGDLsrHtfP077SJ8sRXoWpVDoFW+Mw== X-Microsoft-Exchange-Diagnostics: 1;SN1PR0401MB1725;31:FSfg0z5nqjjPoz7u33CmgWg6L7EpUD36j9SKiDoM3dcHFZDD8m7FT65vY3ReFOEO51S0saNDLJc5Vs09JEPkYAHlIbplHt5CqbqGQWuD6Ze37cyiWwQB1byktSqEGJ9I4RmEjOadEUctFC4mp8YOjCCpcSosGsvKwKHEmLHukSOs6Z3y8he8qw5Ua1sTNqaNZMcYI19jUfme6C1n21hXUtZYogREF3SMoV2JJL/fCt7O5XzDZt7sBSe70IjJalKe;20:oiY4FQupdV2JrKxDSdHPVKi7NEU03Q6cqx3UFbVy9dEmcVF7KDOWz6nceqI5utErojweiFKilj8/prHlT5mXU7zWB5HDnboErfJRwVhiWfnrvCydIrcRpv98DE+gk7p8lfojO+dOpeI1Ne0sDACgqK9YIfOpDl9Shhz3S80RIzBhE2GMo0pC0a22hWYtwwjdZPNC3p0PIax7IrFqUATud1b86B3Fx2Rff9mqCHNNTLOIAYuvsPZPk2GjiQA1ktphFzuA8NtpdVctBOwJnhQFSmetrtuU551ErPabppYSRpHx8imrEqPuMPx7Js8GNA0e6R/CsVg3pRAghFFXhsmO6+fGzMketeyfsYV+bQXwkQCx8G1Vl/xf6xj0icSXlUW4Xgs9cNjphdMQnMQKUh4HfXUBXixxXJRa+vEpjQytz1kgjRZOlB2T2mjsAnt3VweaTMf+HUmz6Buo9l0KRsRVF9bCRiP4q8x44d0A7hfWf0vo+yCpVycIa6qz5rxXFKCZ X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(79135771888625); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6040176)(601004)(2401047)(8121501046)(5005006)(3002001)(10201501046)(6055026);SRVR:SN1PR0401MB1725;BCL:0;PCL:0;RULEID:;SRVR:SN1PR0401MB1725; X-Microsoft-Exchange-Diagnostics: 1;SN1PR0401MB1725;4:S9SCI2PgffQFXDGWGRzbhXq50AjYuFidTNGajt/YTwwekMGJT0Xl8jY6KCndsyBCBOQDIfJpg5GaDC3bkUzUfIdSJ/HBui0SY+iMzHEBrT6GElA0QAvhg8Alw7QrbigJRjLQ0I21DHz8O3v8gskDmhFxN7MhoAalluP+DLEsmqGe4gfQ+oEPGP5bdPdU8Efk4cYddn6+R++jdIMiX+McKV7jqbXk5BsAAAImbnfw52sxVRECGr+rK320Rxxj9Bz25l20wwDUExX7O+QIDXvYUag7Gg9K7YnogjQ7eUstgRByQLPpuefc8a38VYdgRIc9B6lfnyrAEGVH43XKcaFqCIlsrVE1fVMuXZ2TQEb5g9+YMqSwfAkA8Q+RyqhonEz55JFUIClWDdl7tN18jfGFAGIwPwnBimdDurQBY9iWpNuYeBHjyQ6WMuffk5o8m5ropeMozZSQzDhPxgMP9ezs6A== X-Forefront-PRVS: 0100732B76 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(4630300001)(6009001)(7916002)(199003)(43544003)(189002)(24454002)(6916009)(68736007)(305945005)(4001350100001)(77096005)(50466002)(21086003)(9686002)(23676002)(97736004)(69596002)(5660300001)(47776003)(19580395003)(110136003)(7736002)(86362001)(19580405001)(2950100002)(106356001)(33656002)(105586002)(81156014)(8676002)(6666003)(92566002)(101416001)(83506001)(76176999)(36756003)(54356999)(586003)(2906002)(7416002)(1076002)(6116002)(3846002)(42186005)(81166006)(66066001)(50986999)(7846002)(189998001)(4326007)(7099028)(18370500001)(5005270100013);DIR:OUT;SFP:1102;SCL:1;SRVR:SN1PR0401MB1725;H:hgst.com;FPR:;SPF:None;PTR:InfoNoRecords;A:1;MX:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtTTjFQUjA0MDFNQjE3MjU7MjM6M2ZKTFB6enI4ZW5PZDdXbStjWUUyUWlG?= =?utf-8?B?RVFSM3dINWk3eEFSV3YwZ0FWTUdFMjFzVkJsVlIzanJ3RG9Qck1pNUhpVmlJ?= =?utf-8?B?aWJ2Tm9yUjF3SHh6UENPd2xHL2dteWU3ckEvbXRtUzZaaitwQzdJNHhUeEha?= =?utf-8?B?ZHdoZjRnYUhQUmY2SHZCdTlEWk5kSFRPL2lyOU1EbFJTakRiRmtFS2wzdlVS?= =?utf-8?B?UE9hV0NucE9wa0ZjQTNZaXI3NkFMbHZxZCtUTkd5c095MVdGZjd6RHlkdlhT?= =?utf-8?B?aDhXdVVZcHlBd2VlTFkrQm1RcXprMDFqanNuNml1RnpRU0tWWHorNitEc2Fw?= =?utf-8?B?cHpZL2U4SXZrSW5mby9ucmtUOWtTby96NDJnUzc1Q0IrVFh6bmxqM1F0OUpp?= =?utf-8?B?a214djN5ejV2RGQ5WG9meTN1SHZkNjlvWFpqWnVJTVJBTU45M3MrRXowdXRI?= =?utf-8?B?K1RzaUF2WHdablZockJGS2ZjNnM2cm1NM0Q3RXVUM3lWMHhNaUxaWFN2UnBI?= =?utf-8?B?Ri80U3ZOVERBdkdZS21BSGN2TFVyZzJTV0JRb2JWcHdVWXFtRU5mZVF3RDVU?= =?utf-8?B?bG1qcm1lVmxDc01KS04zVFVsUFVoT05oZXk2dnoycDhkNmdXNEdqRFZod2Ux?= =?utf-8?B?ZzgzMDlkUkI3aHloV09wamMvYW4xb3g1T00yamgxUktWOUszMlNEQXFud1hu?= =?utf-8?B?dWZOZlhTZ1IvbE9ac3YrZ3dvSzMrcXVQTlRFalBRa1h3L2xxNUFBMjVLN2NF?= =?utf-8?B?M2gwamVtR2lJVzkyQmY1R0NjcnlvUGtzRjNPemhNMWs2MDk3RklKTWhqbGVS?= =?utf-8?B?bWtEOUlIRThMc0tEdUxmcmlwaThsSWRHMXhXczZ2bXF0dkFpMitvOTd4SGp6?= =?utf-8?B?WVVFNXNpZjI1TjRiMEpCWlRYaU5UQ1krZHcza2pFS1ZjbnBpckFpWStYTklv?= =?utf-8?B?SjhVMzZweWhnd1UwNHhZL1RXUGNMcEh4SHBIUm5Vd0FTcUY1M1I3dlpxbEVq?= =?utf-8?B?U1YyTEV0VFUrWmE0NUZtOTdTU3lvUGg2blRueWtvem9NQXJPdk1RV3BqYnVP?= =?utf-8?B?TFhlTDdNczJZNlNpZE1yR0RqOTE1N1pUakxaV3hxcldqRTdmaks4ajdGNmts?= =?utf-8?B?aUhhOUdVV0tITG9QaVROZG9NbWJyTmdhMlRSMFEya0VmRGFMQTBrVk9hTVJv?= =?utf-8?B?WWdDMWVITWoxblF2VXp5WW9SbzJneXU1a0xuK294a1krUi91cnFQU25oQmVj?= =?utf-8?B?YkJ2d21SME1KK0d0RzhZT05HSmVXQ1FEY3htRHRZSHJuei9wN2cyS3VjVjlt?= =?utf-8?B?bzkydnFSbnVVWW9BYjZRTFh0eVRTQXhDenV5aU0vbktlRys4RjFlbjJVNkdF?= =?utf-8?B?UFo3ME1oMVZ0NGlTd0RhcGorMGtzdzFvUk82bE5pc2I5Q05lZnhlM2NPOERx?= =?utf-8?B?ZnFLZzcvWXBFZXgzQlNiUWpkMHhLQkJCcHU2QkNSR2Vra2kwcE9tV1ZuS01H?= =?utf-8?B?MkVOa3ROMjNwOHNyZVAvRlA3ZzRybEd3SGJtZ2NGc01mNGtCaTFXNzBaNXE3?= =?utf-8?B?THlPM0xGemtIREk5bGFoWkJPMENwVXNCQ0Uvd1JLajZ6enVtRko0YkhNVXZW?= =?utf-8?B?VWEyTGxCdlRtS1VLcVFSR3dERHErTDRiZENDcWs0QWE0dFpsMVlGRlo4QUtq?= =?utf-8?B?MmhEZ3RMTk5QWG5yUW5jbkV2UnhRQmhQOVVOdDhjWnpoODdmMGNDZk9vaGt1?= =?utf-8?B?WTdMbGxuS0cvdEt0djVEWlhBPT0=?= X-Microsoft-Exchange-Diagnostics: 1;SN1PR0401MB1725;6:IdOqbxl2YbOLMcecrHJFw4rbcIWqrlW/S3wauMkX+et48vP3keDFrqe7bqVZ7f0ccTXCemh1QKWFPrqAzciHmZykX6mPlhB0cVTRyw2KQYx8EOehULUiec9f/95muNq/epKn1AMpUblbwuzQ1WxBD2yCLMNpzNtrhZziVshuVJbEg0lL1IarZm5TJEi5wLeMSyqrSPZFV5ITzaQWYap3y41EHrfYiEfwxJCpU/IzGvuApRM15e1E1YkYye3ED35K7wmaIImtCgafemIuK9q0o6HeCBO9POmj41OCT246tITAx3uVIDO72W4XOsUk5QJajIdHh3chP4LMqbnikrn1m2IQF6xcqJ/qVMKbe+XLp6s=;5:ejM5R94jMp5Ru8YIoHzESkfvbw38VTn8EyZaoBzmGgZBY9fCFm2wmMRAedCPfpK+jaEcrWnpDFyOY7h6hL5nCPfJcZdUTDm1djbAIxucYe60lOijKVLZhpyBGz6VKXuH7EGkmDqqdOa8TU//snnq5A==;24:UYIPJm1KnyHCc7TCFM0S2Yh333ctqj6ma1to3k/rBxlEot7icStSN8q+hREqXgAk3kN7evmvbJV2+XNoZv1iNARbOf+4tJbPE6p2XdHaz1I= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;SN1PR0401MB1725;7:xCCAkQm000WBZJ8G/NeHoMk6MLTDsV4hJV9UMq1lDJQkySeBoiaM5cI3u4Nlr6T2eHHWsqEZ5v/YS/GFbo1APmUmUT9NSr07zG7vPltBUQ1+5oCGoU9ffCYSoLRsVS9btz7NbBwHmTOAFrcprpXvKkQd/aQ48UObYNcCUNRC1GMRIeQek3x6g/NfyU+JMnZ34df/SG7bx9a00PFqBVQyAQL05GPJvK76BIylxoH3mSOfoYkJwaM2u6Z9hZPqvEsGS7BzT3Rh/glc8pj5NapoUmPtHCI9dya3RSQ/L1LcsQC1R/P5hERNCM7qK/59NpAzd5a197rw7IMHHQ1sMeaXft4eBPHnGA1RkGHTS65SFqk=;20:uMn1wQywpfZ7mfePlW6VBQ6m3Q5wTyjNck/4L//ncxfE364n9nBg0O/rqNqxocqTr3dvjNWdKQNRO/gCXqwDaX82DHieeckubgst9o5STUpUcjnlgjRgkI+1gdGwUchB21sKPPXv6V/pdqYKCjwPkHpy+kBpZ7XyrCH8WWFoJVxyA7Pm8IKIkW7roOx948btZXKYV7/UB0fix5q3Ii8a9miiLuZC6lZjs3JQODbpRu8A+lhY/vfV/etbWu6DMJGy X-OriginatorOrg: wdc.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 Oct 2016 20:02:56.6169 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN1PR0401MB1725 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 5676 Lines: 178 The 10/19/2016 14:38, Tejun Heo wrote: > Hello, > > Removed ata_ncq_prio_on() and renamed _on to _enable. If I messed up > anything, please let me know. > Works as expected. Thanks for cleaning this up. > Also, can you please send a follow-up patch to make the store function > reject prio enabling if the device doesn't support it? > I'll send something out shortly. Take care, Adam > Thanks. > > ------ 8< ------ > From 84f95243b5439a20c33837075b88926bfa00c4ec Mon Sep 17 00:00:00 2001 > From: Adam Manzanares > Date: Mon, 17 Oct 2016 11:27:30 -0700 > Subject: [PATCH 2/2] ata: ATA Command Priority Disabled By Default > > 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 > Signed-off-by: Tejun Heo > --- > drivers/ata/libahci.c | 1 + > drivers/ata/libata-core.c | 3 ++- > drivers/ata/libata-scsi.c | 68 +++++++++++++++++++++++++++++++++++++++++++++++ > include/linux/libata.h | 2 ++ > 4 files changed, 73 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 8346faf..b294339 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..87597a3 100644 > --- a/drivers/ata/libata-scsi.c > +++ b/drivers/ata/libata-scsi.c > @@ -271,6 +271,73 @@ 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 +469,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 >