All of lore.kernel.org
 help / color / mirror / Atom feed
* [Xenomai-core] [PATCH] rt_heap reminder
@ 2006-01-30 22:11 Stefan Kisdaroczi
  2006-01-31 14:22 ` Philippe Gerum
  0 siblings, 1 reply; 2+ messages in thread
From: Stefan Kisdaroczi @ 2006-01-30 22:11 UTC (permalink / raw)
  To: xenomai


[-- Attachment #1.1: Type: text/plain, Size: 770 bytes --]

Hi all,

as a reminder (userspace, native skin, shared heap) [1]:
API documentation: "If the heap is shared, this value can be either zero, or 
the same value given to rt_heap_create()."
This is not true. As the heapsize gets altered in rt_heap_create for page size 
alignment, the following call to rt_heap_alloc with the same value will fail.

Ex:
rt_heap_create( ..., ..., 10000, ... )
rt_heap_alloc( ..., 10000, ..., .... ) -> This call fails

I suggest only accepting zero as a valid size for shared heaps.

about attached patch:
1) not tested
2) there are possible better names than H_ALL
3) the comments could be in a better english
4) i hope you get the idea

thx
kisda

[1] https://mail.gna.org/public/xenomai-core/2006-01/msg00177.html

[-- Attachment #1.2: rt_heap.patch --]
[-- Type: text/x-diff, Size: 2136 bytes --]

Index: include/native/heap.h
===================================================================
--- include/native/heap.h	(Revision 465)
+++ include/native/heap.h	(Arbeitskopie)
@@ -32,6 +32,9 @@
 #define H_DMA    0x100		/* Use memory suitable for DMA. */
 #define H_SHARED 0x200		/* Use mappable shared memory. */
 
+/* Operation flags. */
+#define H_ALL    0x0	        /* Entire heap space. */
+
 typedef struct rt_heap_info {
 
     int nwaiters;		/* !< Number of pending tasks. */
Index: ksrc/skins/native/heap.c
===================================================================
--- ksrc/skins/native/heap.c	(Revision 465)
+++ ksrc/skins/native/heap.c	(Arbeitskopie)
@@ -410,10 +410,9 @@
  * from.
  *
  * @param size The requested size in bytes of the block. If the heap
- * is shared, this value can be either zero, or the same value given
- * to rt_heap_create(). In any case, the same block covering the
- * entire heap space will always be returned to all callers of this
- * service.
+ * is shared, H_ALL should be passed, as always the same block
+ * covering the entire heap space will be returned to all callers of
+ * this service.
  *
  * @param timeout The number of clock ticks to wait for a block of
  * sufficient size to be available from a local heap (see
@@ -432,8 +431,7 @@
  * @return 0 is returned upon success. Otherwise:
  *
  * - -EINVAL is returned if @a heap is not a heap descriptor, or @a
- * heap is shared (i.e. H_SHARED mode) and @a size is non-zero but
- * does not match the actual heap size passed to rt_heap_create().
+ * heap is shared (i.e. H_SHARED mode) and @a size is not H_ALL.
  *
  * - -EIDRM is returned if @a heap is a deleted heap descriptor.
  *
@@ -503,12 +501,7 @@
 
 	if (!block)
 	    {
-	    /* It's ok to pass zero for size here, since the requested
-	       size is implicitely the whole heap space; but if
-	       non-zero is given, it must match the actual heap
-	       size. */
-
-	    if (size > 0 && size != xnheap_size(&heap->heap_base))
+	    if (size != H_ALL)
 		{
 		err = -EINVAL;
 		goto unlock_and_exit;

[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]

^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: [Xenomai-core] [PATCH] rt_heap reminder
  2006-01-30 22:11 [Xenomai-core] [PATCH] rt_heap reminder Stefan Kisdaroczi
@ 2006-01-31 14:22 ` Philippe Gerum
  0 siblings, 0 replies; 2+ messages in thread
From: Philippe Gerum @ 2006-01-31 14:22 UTC (permalink / raw)
  To: Stefan Kisdaroczi; +Cc: xenomai


Hi,

Stefan Kisdaroczi wrote:
> Hi all,
> 
> as a reminder (userspace, native skin, shared heap) [1]:
> API documentation: "If the heap is shared, this value can be either zero, or 
> the same value given to rt_heap_create()."
> This is not true. As the heapsize gets altered in rt_heap_create for page size 
> alignment, the following call to rt_heap_alloc with the same value will fail.
> 
> Ex:
> rt_heap_create( ..., ..., 10000, ... )
> rt_heap_alloc( ..., 10000, ..., .... ) -> This call fails
> 
> I suggest only accepting zero as a valid size for shared heaps.
> 
> about attached patch:
> 1) not tested
> 2) there are possible better names than H_ALL
> 3) the comments could be in a better english
> 4) i hope you get the idea
>

The heap support is currently reworked in the native API so that we can access it 
from user-space without necessarily asking for a single common block, to obtain a 
shared memory segment, like in the present situation (i.e. the H_ALL mode in your 
patch). The idea is to decouple the mappable and single-block properties of heaps. 
Therefore, your patch is actually going to be a subset of this larger update. 
Thanks for your contribution to this.

> thx
> kisda
> 
> [1] https://mail.gna.org/public/xenomai-core/2006-01/msg00177.html
> 
> 
> ------------------------------------------------------------------------
> 
> Index: include/native/heap.h
> ===================================================================
> --- include/native/heap.h	(Revision 465)
> +++ include/native/heap.h	(Arbeitskopie)
> @@ -32,6 +32,9 @@
>  #define H_DMA    0x100		/* Use memory suitable for DMA. */
>  #define H_SHARED 0x200		/* Use mappable shared memory. */
>  
> +/* Operation flags. */
> +#define H_ALL    0x0	        /* Entire heap space. */
> +
>  typedef struct rt_heap_info {
>  
>      int nwaiters;		/* !< Number of pending tasks. */
> Index: ksrc/skins/native/heap.c
> ===================================================================
> --- ksrc/skins/native/heap.c	(Revision 465)
> +++ ksrc/skins/native/heap.c	(Arbeitskopie)
> @@ -410,10 +410,9 @@
>   * from.
>   *
>   * @param size The requested size in bytes of the block. If the heap
> - * is shared, this value can be either zero, or the same value given
> - * to rt_heap_create(). In any case, the same block covering the
> - * entire heap space will always be returned to all callers of this
> - * service.
> + * is shared, H_ALL should be passed, as always the same block
> + * covering the entire heap space will be returned to all callers of
> + * this service.
>   *
>   * @param timeout The number of clock ticks to wait for a block of
>   * sufficient size to be available from a local heap (see
> @@ -432,8 +431,7 @@
>   * @return 0 is returned upon success. Otherwise:
>   *
>   * - -EINVAL is returned if @a heap is not a heap descriptor, or @a
> - * heap is shared (i.e. H_SHARED mode) and @a size is non-zero but
> - * does not match the actual heap size passed to rt_heap_create().
> + * heap is shared (i.e. H_SHARED mode) and @a size is not H_ALL.
>   *
>   * - -EIDRM is returned if @a heap is a deleted heap descriptor.
>   *
> @@ -503,12 +501,7 @@
>  
>  	if (!block)
>  	    {
> -	    /* It's ok to pass zero for size here, since the requested
> -	       size is implicitely the whole heap space; but if
> -	       non-zero is given, it must match the actual heap
> -	       size. */
> -
> -	    if (size > 0 && size != xnheap_size(&heap->heap_base))
> +	    if (size != H_ALL)
>  		{
>  		err = -EINVAL;
>  		goto unlock_and_exit;
> 
> 
> ------------------------------------------------------------------------
> 
> _______________________________________________
> Xenomai-core mailing list
> Xenomai-core@domain.hid
> https://mail.gna.org/listinfo/xenomai-core


-- 

Philippe.


^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2006-01-31 14:22 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-01-30 22:11 [Xenomai-core] [PATCH] rt_heap reminder Stefan Kisdaroczi
2006-01-31 14:22 ` Philippe Gerum

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.