* [dpdk-dev] [PATCH] eal/bsd: enable contigmem blocks >1GB in size
@ 2015-03-02 16:34 Bruce Richardson
2015-03-10 15:20 ` Thomas Monjalon
0 siblings, 1 reply; 2+ messages in thread
From: Bruce Richardson @ 2015-03-02 16:34 UTC (permalink / raw)
To: dev
The contigmem module was using an "int" type for specifying the
size of blocks of memory to be reserved. A 2GB block was therefore
overflowing the signed 32-bit value, making 1GB the largest block
size that could be reserved as a single unit.
The fix is to change the type used for the buffer/block size to
an "int64_t" value.
Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
---
lib/librte_eal/bsdapp/contigmem/contigmem.c | 8 ++++----
lib/librte_eal/bsdapp/eal/eal_hugepage_info.c | 9 +++++----
2 files changed, 9 insertions(+), 8 deletions(-)
diff --git a/lib/librte_eal/bsdapp/contigmem/contigmem.c b/lib/librte_eal/bsdapp/contigmem/contigmem.c
index b1a23fa..6634daa 100644
--- a/lib/librte_eal/bsdapp/contigmem/contigmem.c
+++ b/lib/librte_eal/bsdapp/contigmem/contigmem.c
@@ -63,20 +63,20 @@ static d_mmap_single_t contigmem_mmap_single;
static d_open_t contigmem_open;
static int contigmem_num_buffers = RTE_CONTIGMEM_DEFAULT_NUM_BUFS;
-static int contigmem_buffer_size = RTE_CONTIGMEM_DEFAULT_BUF_SIZE;
+static int64_t contigmem_buffer_size = RTE_CONTIGMEM_DEFAULT_BUF_SIZE;
static eventhandler_tag contigmem_eh_tag;
static void *contigmem_buffers[RTE_CONTIGMEM_MAX_NUM_BUFS];
static struct cdev *contigmem_cdev = NULL;
TUNABLE_INT("hw.contigmem.num_buffers", &contigmem_num_buffers);
-TUNABLE_INT("hw.contigmem.buffer_size", &contigmem_buffer_size);
+TUNABLE_QUAD("hw.contigmem.buffer_size", &contigmem_buffer_size);
static SYSCTL_NODE(_hw, OID_AUTO, contigmem, CTLFLAG_RD, 0, "contigmem");
SYSCTL_INT(_hw_contigmem, OID_AUTO, num_buffers, CTLFLAG_RD,
&contigmem_num_buffers, 0, "Number of contigmem buffers allocated");
-SYSCTL_INT(_hw_contigmem, OID_AUTO, buffer_size, CTLFLAG_RD,
+SYSCTL_QUAD(_hw_contigmem, OID_AUTO, buffer_size, CTLFLAG_RD,
&contigmem_buffer_size, 0, "Size of each contiguous buffer");
static SYSCTL_NODE(_hw_contigmem, OID_AUTO, physaddr, CTLFLAG_RD, 0,
@@ -133,7 +133,7 @@ contigmem_load()
if (contigmem_buffer_size < PAGE_SIZE ||
(contigmem_buffer_size & (contigmem_buffer_size - 1)) != 0) {
- printf("buffer size 0x%x is not greater than PAGE_SIZE and "
+ printf("buffer size 0x%lx is not greater than PAGE_SIZE and "
"power of two\n", contigmem_buffer_size);
return (EINVAL);
}
diff --git a/lib/librte_eal/bsdapp/eal/eal_hugepage_info.c b/lib/librte_eal/bsdapp/eal/eal_hugepage_info.c
index 24248fb..8a33c30 100644
--- a/lib/librte_eal/bsdapp/eal/eal_hugepage_info.c
+++ b/lib/librte_eal/bsdapp/eal/eal_hugepage_info.c
@@ -70,7 +70,8 @@ int
eal_hugepage_info_init(void)
{
size_t sysctl_size;
- int buffer_size, num_buffers, fd, error;
+ int num_buffers, fd, error;
+ int64_t buffer_size;
/* re-use the linux "internal config" structure for our memory data */
struct hugepage_info *hpi = &internal_config.hugepage_info[0];
struct hugepage_info *tmp_hpi;
@@ -101,13 +102,13 @@ eal_hugepage_info_init(void)
if (buffer_size >= 1<<30)
RTE_LOG(INFO, EAL, "Contigmem driver has %d buffers, each of size %dGB\n",
- num_buffers, buffer_size>>30);
+ num_buffers, (int)(buffer_size>>30));
else if (buffer_size >= 1<<20)
RTE_LOG(INFO, EAL, "Contigmem driver has %d buffers, each of size %dMB\n",
- num_buffers, buffer_size>>20);
+ num_buffers, (int)(buffer_size>>20));
else
RTE_LOG(INFO, EAL, "Contigmem driver has %d buffers, each of size %dKB\n",
- num_buffers, buffer_size>>10);
+ num_buffers, (int)(buffer_size>>10));
internal_config.num_hugepage_sizes = 1;
hpi->hugedir = CONTIGMEM_DEV;
--
2.1.0
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: [dpdk-dev] [PATCH] eal/bsd: enable contigmem blocks >1GB in size
2015-03-02 16:34 [dpdk-dev] [PATCH] eal/bsd: enable contigmem blocks >1GB in size Bruce Richardson
@ 2015-03-10 15:20 ` Thomas Monjalon
0 siblings, 0 replies; 2+ messages in thread
From: Thomas Monjalon @ 2015-03-10 15:20 UTC (permalink / raw)
To: Bruce Richardson; +Cc: dev
> The contigmem module was using an "int" type for specifying the
> size of blocks of memory to be reserved. A 2GB block was therefore
> overflowing the signed 32-bit value, making 1GB the largest block
> size that could be reserved as a single unit.
> The fix is to change the type used for the buffer/block size to
> an "int64_t" value.
>
> Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
Applied, thanks
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2015-03-10 15:21 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-03-02 16:34 [dpdk-dev] [PATCH] eal/bsd: enable contigmem blocks >1GB in size Bruce Richardson
2015-03-10 15:20 ` Thomas Monjalon
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).