Message ID | ce9ab5790912020628n5e91f811haa56b6380a71ab32@mail.gmail.com |
---|---|
State | RFC |
Headers | show |
On Wed, 2009-12-02 at 19:58 +0530, Vimal Singh wrote: > This patch fixes the 'length' calculation. > Making it: > + mtdLockInfo.length = (num_sectors - 1) * mtdInfo.erasesize; > Rather: > - mtdLockInfo.length = num_sectors * mtdInfo.erasesize; > > Say there are 240 blocks present in the device. Then: > offset starts from: 0x0 > and full size of device: 0x1E00000 > > doing: 240 * 0x20000 gives -> 0x1E00000 > But last block address should be 0x1DE0000 (which spans for 0x20000 > bytes, adding upto size of 0x1E00000) > > Signed-off-by: Vimal Singh <vimalsingh@ti.com> > --- > > --- flash_lock.c.org 2009-11-24 19:33:18.000000000 +0530 > +++ flash_lock.c 2009-11-24 19:33:13.000000000 +0530 > @@ -71,7 +71,7 @@ int main(int argc, char *argv[]) > } > > mtdLockInfo.start = ofs; > - mtdLockInfo.length = num_sectors * mtdInfo.erasesize; > + mtdLockInfo.length = (num_sectors - 1) * mtdInfo.erasesize; > if(ioctl(fd, MEMLOCK, &mtdLockInfo)) > { > fprintf(stderr, "Could not lock MTD device: %s\n", argv[1]); > @@ -81,4 +81,3 @@ int main(int argc, char *argv[]) So if num_sectors is 1, mtdLockInfo.length is 0 - is it expected?
On Fri, Dec 4, 2009 at 2:11 PM, Artem Bityutskiy <dedekind1@gmail.com> wrote: > On Wed, 2009-12-02 at 19:58 +0530, Vimal Singh wrote: >> This patch fixes the 'length' calculation. >> Making it: >> + mtdLockInfo.length = (num_sectors - 1) * mtdInfo.erasesize; >> Rather: >> - mtdLockInfo.length = num_sectors * mtdInfo.erasesize; >> >> Say there are 240 blocks present in the device. Then: >> offset starts from: 0x0 >> and full size of device: 0x1E00000 >> >> doing: 240 * 0x20000 gives -> 0x1E00000 >> But last block address should be 0x1DE0000 (which spans for 0x20000 >> bytes, adding upto size of 0x1E00000) >> >> Signed-off-by: Vimal Singh <vimalsingh@ti.com> >> --- >> >> --- flash_lock.c.org 2009-11-24 19:33:18.000000000 +0530 >> +++ flash_lock.c 2009-11-24 19:33:13.000000000 +0530 >> @@ -71,7 +71,7 @@ int main(int argc, char *argv[]) >> } >> >> mtdLockInfo.start = ofs; >> - mtdLockInfo.length = num_sectors * mtdInfo.erasesize; >> + mtdLockInfo.length = (num_sectors - 1) * mtdInfo.erasesize; >> if(ioctl(fd, MEMLOCK, &mtdLockInfo)) >> { >> fprintf(stderr, "Could not lock MTD device: %s\n", argv[1]); >> @@ -81,4 +81,3 @@ int main(int argc, char *argv[]) > > So if num_sectors is 1, mtdLockInfo.length is 0 - is it expected? I think so. Suppose you want to lock 1st block: 'start' will be '0x0' and if you pass 'length' as one block size then boundaries will be: start: 0x0 ('0'th block) end: 0x20000 (1st block) if 0x20000 is the block size so you will lock 2 blocks here. While passing 'length' as '0' for this case will lock only 1st block (0th block).
On Wed, 2009-12-02 at 19:58 +0530, Vimal Singh wrote: > This patch fixes the 'length' calculation. > Making it: > + mtdLockInfo.length = (num_sectors - 1) * mtdInfo.erasesize; > Rather: > - mtdLockInfo.length = num_sectors * mtdInfo.erasesize; > > Say there are 240 blocks present in the device. Then: > offset starts from: 0x0 > and full size of device: 0x1E00000 > > doing: 240 * 0x20000 gives -> 0x1E00000 > But last block address should be 0x1DE0000 (which spans for 0x20000 > bytes, adding upto size of 0x1E00000) > > Signed-off-by: Vimal Singh <vimalsingh@ti.com> Pushed, thanks!
--- flash_lock.c.org 2009-11-24 19:33:18.000000000 +0530 +++ flash_lock.c 2009-11-24 19:33:13.000000000 +0530 @@ -71,7 +71,7 @@ int main(int argc, char *argv[]) } mtdLockInfo.start = ofs; - mtdLockInfo.length = num_sectors * mtdInfo.erasesize; + mtdLockInfo.length = (num_sectors - 1) * mtdInfo.erasesize; if(ioctl(fd, MEMLOCK, &mtdLockInfo)) { fprintf(stderr, "Could not lock MTD device: %s\n", argv[1]); @@ -81,4 +81,3 @@ int main(int argc, char *argv[]) return 0; } -
This patch fixes the 'length' calculation. Making it: + mtdLockInfo.length = (num_sectors - 1) * mtdInfo.erasesize; Rather: - mtdLockInfo.length = num_sectors * mtdInfo.erasesize; Say there are 240 blocks present in the device. Then: offset starts from: 0x0 and full size of device: 0x1E00000 doing: 240 * 0x20000 gives -> 0x1E00000 But last block address should be 0x1DE0000 (which spans for 0x20000 bytes, adding upto size of 0x1E00000) Signed-off-by: Vimal Singh <vimalsingh@ti.com> ---