Patch from tito to replace shared memory usage with mlock(), slightly tweaked
by me.
This commit is contained in:
parent
cf89c37d08
commit
4ae2f511cf
@ -25,6 +25,7 @@
|
|||||||
#include <sys/time.h>
|
#include <sys/time.h>
|
||||||
#include <sys/times.h>
|
#include <sys/times.h>
|
||||||
#include <sys/mount.h>
|
#include <sys/mount.h>
|
||||||
|
#include <sys/mman.h>
|
||||||
#include <getopt.h>
|
#include <getopt.h>
|
||||||
#include "busybox.h"
|
#include "busybox.h"
|
||||||
#include <linux/types.h>
|
#include <linux/types.h>
|
||||||
@ -1406,37 +1407,21 @@ static void do_time(int flag, int fd)
|
|||||||
flag = 1 time_device
|
flag = 1 time_device
|
||||||
*/
|
*/
|
||||||
{
|
{
|
||||||
char *buf;
|
|
||||||
struct itimerval e1, e2;
|
struct itimerval e1, e2;
|
||||||
int shmid;
|
|
||||||
double elapsed, elapsed2;
|
double elapsed, elapsed2;
|
||||||
unsigned int max_iterations = 1024, total_MB, iterations;
|
unsigned int max_iterations = 1024, total_MB, iterations;
|
||||||
unsigned long long blksize;
|
unsigned long long blksize;
|
||||||
|
RESERVE_CONFIG_BUFFER(buf, TIMING_BUF_BYTES);
|
||||||
|
|
||||||
|
if (mlock(buf, TIMING_BUF_BYTES)) {
|
||||||
|
bb_perror_msg("mlock");
|
||||||
|
goto quit2;
|
||||||
|
}
|
||||||
|
|
||||||
if (0 == do_blkgetsize(fd, &blksize)) {
|
if (0 == do_blkgetsize(fd, &blksize)) {
|
||||||
max_iterations = blksize / (2 * 1024) / TIMING_BUF_MB;
|
max_iterations = blksize / (2 * 1024) / TIMING_BUF_MB;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((shmid = shmget(IPC_PRIVATE, TIMING_BUF_BYTES, 0600)) == -1)
|
|
||||||
{
|
|
||||||
bb_perror_msg("shmget"); /*"could not allocate sharedmem buf"*/
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (shmctl(shmid, SHM_LOCK, NULL) == -1)
|
|
||||||
{
|
|
||||||
bb_perror_msg("shmctl"); /*"could not lock sharedmem buf"*/
|
|
||||||
(void) shmctl(shmid, IPC_RMID, NULL);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if ((buf = shmat(shmid, (char *) 0, 0)) == (char *) -1)
|
|
||||||
{
|
|
||||||
bb_perror_msg("shmat"); /*"could not attach sharedmem buf"*/
|
|
||||||
(void) shmctl(shmid, IPC_RMID, NULL);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (shmctl(shmid, IPC_RMID, NULL) == -1)
|
|
||||||
bb_perror_msg("shmctl");
|
|
||||||
|
|
||||||
/* Clear out the device request queues & give them time to complete */
|
/* Clear out the device request queues & give them time to complete */
|
||||||
sync();
|
sync();
|
||||||
sleep(3);
|
sleep(3);
|
||||||
@ -1505,8 +1490,9 @@ static void do_time(int flag, int fd)
|
|||||||
print_timing(total_MB, elapsed);
|
print_timing(total_MB, elapsed);
|
||||||
}
|
}
|
||||||
quit:
|
quit:
|
||||||
if (-1 == shmdt(buf))
|
munlock(buf, TIMING_BUF_BYTES);
|
||||||
bb_perror_msg("shmdt"); /*"could not detach sharedmem buf"*/
|
quit2:
|
||||||
|
RELEASE_CONFIG_BUFFER(buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void on_off (unsigned int value)
|
static void on_off (unsigned int value)
|
||||||
|
Loading…
Reference in New Issue
Block a user