* [PATCH 1/2] kernel.h: Add DIV_ROUND_UP_ULL usage
@ 2011-07-26 7:10 Nicholas A. Bellinger
2011-07-26 7:10 ` [PATCH 2/2] target: Convert to DIV_ROUND_UP_ULL usage for sectors / dev_max_sectors Nicholas A. Bellinger
` (2 more replies)
0 siblings, 3 replies; 6+ messages in thread
From: Nicholas A. Bellinger @ 2011-07-26 7:10 UTC (permalink / raw)
To: target-devel, linux-scsi, linux-kernel
Cc: Christoph Hellwig, Andy Grover, Hannes Reinecke, Roland Dreier,
James Bottomley, Andrew Morton, Linus Torvalds,
Nicholas Bellinger
From: Nicholas Bellinger <nab@linux-iscsi.org>
Add new DIV_ROUND_UP_ULL macro usage for 32-bit architectures requiring
unsigned long long division of sectors * dev_max_sectors.
Reported-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Nicholas A. Bellinger <nab@linux-iscsi.org>
---
include/linux/kernel.h | 2 ++
1 files changed, 2 insertions(+), 0 deletions(-)
diff --git a/include/linux/kernel.h b/include/linux/kernel.h
index 953352a..016dcc9 100644
--- a/include/linux/kernel.h
+++ b/include/linux/kernel.h
@@ -56,6 +56,8 @@
#define FIELD_SIZEOF(t, f) (sizeof(((t*)0)->f))
#define DIV_ROUND_UP(n,d) (((n) + (d) - 1) / (d))
+#define DIV_ROUND_UP_ULL(ll,d) \
+ ({ unsigned long long _tmp = (ll)+(d)-1; do_div(_tmp, d); _tmp; })
/* The `const' in roundup() prevents gcc-3.3 from calling __divdi3 */
#define roundup(x, y) ( \
--
1.7.2.5
^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH 2/2] target: Convert to DIV_ROUND_UP_ULL usage for sectors / dev_max_sectors
2011-07-26 7:10 [PATCH 1/2] kernel.h: Add DIV_ROUND_UP_ULL usage Nicholas A. Bellinger
@ 2011-07-26 7:10 ` Nicholas A. Bellinger
2011-07-26 7:36 ` [PATCH 1/2] kernel.h: Add DIV_ROUND_UP_ULL usage Nicholas A. Bellinger
2011-07-26 7:53 ` Joe Perches
2 siblings, 0 replies; 6+ messages in thread
From: Nicholas A. Bellinger @ 2011-07-26 7:10 UTC (permalink / raw)
To: target-devel, linux-scsi, linux-kernel
Cc: Christoph Hellwig, Andy Grover, Hannes Reinecke, Roland Dreier,
James Bottomley, Andrew Morton, Linus Torvalds,
Nicholas Bellinger
From: Nicholas Bellinger <nab@linux-iscsi.org>
This patch adds the new macro usage of include/linux/kernel.h:DIV_ROUND_UP_ULL
for transport_allocate_data_tasks() usage in target_core_mod v4.1
Reported-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Nicholas A. Bellinger <nab@linux-iscsi.org>
---
drivers/target/target_core_transport.c | 7 +++----
1 files changed, 3 insertions(+), 4 deletions(-)
diff --git a/drivers/target/target_core_transport.c b/drivers/target/target_core_transport.c
index a244c90..8032e1e 100644
--- a/drivers/target/target_core_transport.c
+++ b/drivers/target/target_core_transport.c
@@ -4054,17 +4054,16 @@ static int transport_allocate_data_tasks(
struct se_task *task;
struct se_device *dev = cmd->se_dev;
unsigned long flags;
- sector_t sectors;
int task_count, i, ret;
- sector_t dev_max_sectors = dev->se_sub_dev->se_dev_attrib.max_sectors;
+ sector_t sectors, dev_max_sectors = dev->se_sub_dev->se_dev_attrib.max_sectors;
u32 sector_size = dev->se_sub_dev->se_dev_attrib.block_size;
struct scatterlist *sg;
struct scatterlist *cmd_sg;
WARN_ON(cmd->data_length % sector_size);
sectors = DIV_ROUND_UP(cmd->data_length, sector_size);
- task_count = DIV_ROUND_UP(sectors, dev_max_sectors);
-
+ task_count = DIV_ROUND_UP_ULL(sectors, dev_max_sectors);
+
cmd_sg = sgl;
for (i = 0; i < task_count; i++) {
unsigned int task_size;
--
1.7.2.5
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH 1/2] kernel.h: Add DIV_ROUND_UP_ULL usage
2011-07-26 7:10 [PATCH 1/2] kernel.h: Add DIV_ROUND_UP_ULL usage Nicholas A. Bellinger
2011-07-26 7:10 ` [PATCH 2/2] target: Convert to DIV_ROUND_UP_ULL usage for sectors / dev_max_sectors Nicholas A. Bellinger
@ 2011-07-26 7:36 ` Nicholas A. Bellinger
2011-07-26 7:53 ` Joe Perches
2 siblings, 0 replies; 6+ messages in thread
From: Nicholas A. Bellinger @ 2011-07-26 7:36 UTC (permalink / raw)
To: target-devel
Cc: linux-scsi, linux-kernel, Christoph Hellwig, Andy Grover,
Hannes Reinecke, Roland Dreier, James Bottomley, Andrew Morton,
Linus Torvalds
On Tue, 2011-07-26 at 07:10 +0000, Nicholas A. Bellinger wrote:
> From: Nicholas Bellinger <nab@linux-iscsi.org>
>
> Add new DIV_ROUND_UP_ULL macro usage for 32-bit architectures requiring
> unsigned long long division of sectors * dev_max_sectors.
>
Rebasing to fix the incorrect change log here before pushing.
Thanks,
--nab
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH 1/2] kernel.h: Add DIV_ROUND_UP_ULL usage
2011-07-26 7:10 [PATCH 1/2] kernel.h: Add DIV_ROUND_UP_ULL usage Nicholas A. Bellinger
2011-07-26 7:10 ` [PATCH 2/2] target: Convert to DIV_ROUND_UP_ULL usage for sectors / dev_max_sectors Nicholas A. Bellinger
2011-07-26 7:36 ` [PATCH 1/2] kernel.h: Add DIV_ROUND_UP_ULL usage Nicholas A. Bellinger
@ 2011-07-26 7:53 ` Joe Perches
2011-07-26 8:07 ` Nicholas A. Bellinger
2 siblings, 1 reply; 6+ messages in thread
From: Joe Perches @ 2011-07-26 7:53 UTC (permalink / raw)
To: Nicholas A. Bellinger
Cc: target-devel, linux-scsi, linux-kernel, Christoph Hellwig,
Andy Grover, Hannes Reinecke, Roland Dreier, James Bottomley,
Andrew Morton, Linus Torvalds
On Tue, 2011-07-26 at 07:10 +0000, Nicholas A. Bellinger wrote:
> Add new DIV_ROUND_UP_ULL macro usage for 32-bit architectures requiring
> unsigned long long division of sectors * dev_max_sectors.
[]
> diff --git a/include/linux/kernel.h b/include/linux/kernel.h
[]
> +#define DIV_ROUND_UP_ULL(ll,d) \
> + ({ unsigned long long _tmp = (ll)+(d)-1; do_div(_tmp, d); _tmp; })
Maybe use uint64_t and a temporary for d?
#define DIV_ROUND_UP_ULL(ll, d) \
({ \
typeof(d) _d = d; \
uint64_t _tmp = (uint64_t)(ll) + _d - 1; \
do_div(_tmp, _d); \
_tmp; \
})
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH 1/2] kernel.h: Add DIV_ROUND_UP_ULL usage
2011-07-26 7:53 ` Joe Perches
@ 2011-07-26 8:07 ` Nicholas A. Bellinger
2011-07-26 16:54 ` Joe Perches
0 siblings, 1 reply; 6+ messages in thread
From: Nicholas A. Bellinger @ 2011-07-26 8:07 UTC (permalink / raw)
To: Joe Perches
Cc: target-devel, linux-scsi, linux-kernel, Christoph Hellwig,
Andy Grover, Hannes Reinecke, Roland Dreier, James Bottomley,
Andrew Morton, Linus Torvalds
On Tue, 2011-07-26 at 00:53 -0700, Joe Perches wrote:
> On Tue, 2011-07-26 at 07:10 +0000, Nicholas A. Bellinger wrote:
> > Add new DIV_ROUND_UP_ULL macro usage for 32-bit architectures requiring
> > unsigned long long division of sectors * dev_max_sectors.
> []
> > diff --git a/include/linux/kernel.h b/include/linux/kernel.h
> []
> > +#define DIV_ROUND_UP_ULL(ll,d) \
> > + ({ unsigned long long _tmp = (ll)+(d)-1; do_div(_tmp, d); _tmp; })
>
> Maybe use uint64_t and a temporary for d?
>
> #define DIV_ROUND_UP_ULL(ll, d) \
> ({ \
> typeof(d) _d = d; \
> uint64_t _tmp = (uint64_t)(ll) + _d - 1; \
> do_div(_tmp, _d); \
> _tmp; \
> })
>
>
Hi Joe,
Not sure on this one myself.. Would this case ever be strictly required
for proper 32-bit operation with unsigned long long division with
sector_t..?
--nab
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH 1/2] kernel.h: Add DIV_ROUND_UP_ULL usage
2011-07-26 8:07 ` Nicholas A. Bellinger
@ 2011-07-26 16:54 ` Joe Perches
0 siblings, 0 replies; 6+ messages in thread
From: Joe Perches @ 2011-07-26 16:54 UTC (permalink / raw)
To: Nicholas A. Bellinger
Cc: target-devel, linux-scsi, linux-kernel, Christoph Hellwig,
Andy Grover, Hannes Reinecke, Roland Dreier, James Bottomley,
Andrew Morton, Linus Torvalds
On Tue, 2011-07-26 at 01:07 -0700, Nicholas A. Bellinger wrote:
> On Tue, 2011-07-26 at 00:53 -0700, Joe Perches wrote:
> > On Tue, 2011-07-26 at 07:10 +0000, Nicholas A. Bellinger wrote:
> > > Add new DIV_ROUND_UP_ULL macro usage for 32-bit architectures requiring
> > > unsigned long long division of sectors * dev_max_sectors.
> > []
> > > diff --git a/include/linux/kernel.h b/include/linux/kernel.h
> > []
> > > +#define DIV_ROUND_UP_ULL(ll,d) \
> > > + ({ unsigned long long _tmp = (ll)+(d)-1; do_div(_tmp, d); _tmp; })
> > Maybe use uint64_t and a temporary for d?
> > #define DIV_ROUND_UP_ULL(ll, d) \
> > ({ \
> > typeof(d) _d = d; \
> > uint64_t _tmp = (uint64_t)(ll) + _d - 1; \
> > do_div(_tmp, _d); \
> > _tmp; \
> > })
> Hi Joe,
Hi Nicholas.
> Not sure on this one myself.. Would this case ever be strictly required
> for proper 32-bit operation with unsigned long long division with
> sector_t..?
It's just for correctness.
For 32 bit uses, if ll is a unsigned long and not an
unsigned long long then without the cast the addition
will be done as a 32 bit value.
e.g.:
$ cat t.c
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char** argv)
{
unsigned long l = 0xFFFFFFFFUL;
unsigned long long ull = l + 1;
unsigned long long ull2 = (unsigned long long)l + 1;
printf("l: %lu, ull:%llu, ull2: %llu\n", l, ull, ull2);
}
$ gcc t.c
$ ./a.out
l: 4294967295, ull:0, ull2: 4294967296
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2011-07-26 16:54 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-07-26 7:10 [PATCH 1/2] kernel.h: Add DIV_ROUND_UP_ULL usage Nicholas A. Bellinger
2011-07-26 7:10 ` [PATCH 2/2] target: Convert to DIV_ROUND_UP_ULL usage for sectors / dev_max_sectors Nicholas A. Bellinger
2011-07-26 7:36 ` [PATCH 1/2] kernel.h: Add DIV_ROUND_UP_ULL usage Nicholas A. Bellinger
2011-07-26 7:53 ` Joe Perches
2011-07-26 8:07 ` Nicholas A. Bellinger
2011-07-26 16:54 ` Joe Perches
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Powered by JetHome