memory: use sys_safememset() for /dev/zero
This commit is contained in:
parent
bf33a1c097
commit
362e4c37a1
@ -90,10 +90,6 @@ static struct blockdriver m_bdtab = {
|
|||||||
NULL /* no threading support */
|
NULL /* no threading support */
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Buffer for the /dev/zero null byte feed. */
|
|
||||||
#define ZERO_BUF_SIZE 1024
|
|
||||||
static char dev_zero[ZERO_BUF_SIZE];
|
|
||||||
|
|
||||||
#define click_to_round_k(n) \
|
#define click_to_round_k(n) \
|
||||||
((unsigned) ((((unsigned long) (n) << CLICK_SHIFT) + 512) / 1024))
|
((unsigned) ((((unsigned long) (n) << CLICK_SHIFT) + 512) / 1024))
|
||||||
|
|
||||||
@ -175,11 +171,6 @@ static int sef_cb_init_fresh(int UNUSED(type), sef_init_info_t *UNUSED(info))
|
|||||||
m_geom[IMGRD_DEV].dv_size= cvul64(imgrd_size);
|
m_geom[IMGRD_DEV].dv_size= cvul64(imgrd_size);
|
||||||
m_vaddrs[IMGRD_DEV] = (vir_bytes) imgrd;
|
m_vaddrs[IMGRD_DEV] = (vir_bytes) imgrd;
|
||||||
|
|
||||||
/* Initialize /dev/zero. Simply write zeros into the buffer. */
|
|
||||||
for (i=0; i<ZERO_BUF_SIZE; i++) {
|
|
||||||
dev_zero[i] = '\0';
|
|
||||||
}
|
|
||||||
|
|
||||||
for(i = 0; i < NR_DEVS; i++)
|
for(i = 0; i < NR_DEVS; i++)
|
||||||
openct[i] = 0;
|
openct[i] = 0;
|
||||||
|
|
||||||
@ -237,7 +228,7 @@ static int m_transfer(
|
|||||||
)
|
)
|
||||||
{
|
{
|
||||||
/* Read or write one the driver's character devices. */
|
/* Read or write one the driver's character devices. */
|
||||||
unsigned count, left, chunk;
|
unsigned count;
|
||||||
vir_bytes vir_offset = 0;
|
vir_bytes vir_offset = 0;
|
||||||
struct device *dv;
|
struct device *dv;
|
||||||
unsigned long dv_size;
|
unsigned long dv_size;
|
||||||
@ -354,19 +345,10 @@ static int m_transfer(
|
|||||||
|
|
||||||
/* Null byte stream generator. */
|
/* Null byte stream generator. */
|
||||||
case ZERO_DEV:
|
case ZERO_DEV:
|
||||||
if (opcode == DEV_GATHER_S) {
|
if (opcode == DEV_GATHER_S)
|
||||||
size_t suboffset = 0;
|
if ((s = sys_safememset(endpt, grant, 0, '\0', count)) != OK)
|
||||||
left = count;
|
return s;
|
||||||
while (left > 0) {
|
|
||||||
chunk = (left > ZERO_BUF_SIZE) ? ZERO_BUF_SIZE : left;
|
|
||||||
s=sys_safecopyto(endpt, grant,
|
|
||||||
vir_offset+suboffset, (vir_bytes) dev_zero, chunk);
|
|
||||||
if(s != OK)
|
|
||||||
return s;
|
|
||||||
left -= chunk;
|
|
||||||
suboffset += chunk;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user