Skip to contentSkip to conversation

drivers/target/target_core_transport.c breakage on i386

DISCUSSION Al Viro 2 participants 2 messages Aug 8, 2011

lore
Share & tools
lore

Al Viro

author
#0 lore raw

In commit ec98f7825c6eaa4a9afb0eb518826efc8a2ed4a2

Author: Andy Grover <[email protected]>
Date:   Wed Jul 20 19:28:46 2011 +0000

target: Eliminate usage of struct se_mem

we got
+ task_count = DIV_ROUND_UP(sectors, dev_max_sectors);
and that's sector_t/sector_t. 64bit division on i386 is no-no in the kernel - it emits __udivdi3 call and it's not there. Can sectors really reach 2^32 here?

#1 lore raw
Quoted 4 lines · Al Viro

In commit ec98f7825c6eaa4a9afb0eb518826efc8a2ed4a2

Author: Andy Grover <[email protected]>
Date:   Wed Jul 20 19:28:46 2011 +0000
Quoted 8 lines

target: Eliminate usage of struct se_mem

we got
+ task_count = DIV_ROUND_UP(sectors, dev_max_sectors);
and that's sector_t/sector_t. 64bit division on i386 is no-no in the kernel - it emits __udivdi3 call and it's not there. Can sectors really reach 2^32 here?

Hi Al,

Just a heads up that this was caught this before -rc1, and we ended up adding DIV_ROUND_UP_ULL using do_div() for the 32-bit case here, and another DIV_ROUND_UP_SECTOR_T macro that target_core_transport.c is now using to address this for i386.

kernel.h: Add DIV_ROUND_UP_ULL and DIV_ROUND_UP_SECTOR_T macro usage
http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commitdiff_plain;h=36a26c69b4c70396ef569c3452690fba0c1dec08

Thanks,

--nab