помогите понять макрос

У меня проблемы с пониманием некоторого фрагмента кода в драйвере MTD

#define ROUNDUP(x, y)       ((((x)+((y)-1))/(y))*(y))
...
static struct mtd_partition my_parts[] =
{
   {
      .name = "boot",
      .size = 0,
      .offset = 0,
      .mask_flags = MTD_WRITEABLE
   },
   {
      .name = "linux",
      .size = 0,
      .offset = 0
   },
   {
       .name = "rootfs",
       .size = 0,
       .offset = 0,
       .mask_flags = MTD_WRITEABLE
   },
   {
       .name = "nvram",
       .size = 0,
       .offset = 0
   },
   {
       .name = 0,
       .size = 0,
       .offset = 0
   }
}
...

i = (sizeof(bcm947xx_parts)/sizeof(struct mtd_partition)) - 2;

bcm947xx_parts[i].size = ROUNDUP(NVRAM_SPACE, mtd->erasesize);
bcm947xx_parts[i].offset = size - bcm947xx_parts[i].size;

Итак, вот мои вопросы: 1) зачем нужно округлять размер раздела? 2) не могли бы вы помочь понять, как работает округление? 3) флэш-драйвер в загрузчике на той же платформе не выполняет округление для этого конкретного раздела, поэтому макет флэш-памяти имеет разные смещения на стороне ядра и в загрузчике. В чем причина этого?

Заранее благодарим за ценные комментарии!

5
задан Mark 26 October 2010 в 00:52
поделиться