@@ -130,12 +130,6 @@ struct vchiq_pagelist_info {
130130};
131131
132132static void __iomem * g_regs ;
133- static unsigned int g_fragments_size ;
134- static char * g_fragments_base ;
135- static char * g_free_fragments ;
136- static struct semaphore g_free_fragments_sema ;
137-
138- static DEFINE_SEMAPHORE (g_free_fragments_mutex , 1 ) ;
139133
140134static int
141135vchiq_blocking_bulk_transfer (struct vchiq_instance * instance , unsigned int handle , void * data ,
@@ -414,20 +408,20 @@ create_pagelist(struct vchiq_instance *instance, char *buf, char __user *ubuf,
414408 (drv_mgmt -> info -> cache_line_size - 1 )))) {
415409 char * fragments ;
416410
417- if (down_interruptible (& g_free_fragments_sema )) {
411+ if (down_interruptible (& drv_mgmt -> free_fragments_sema )) {
418412 cleanup_pagelistinfo (instance , pagelistinfo );
419413 return NULL ;
420414 }
421415
422- WARN_ON (!g_free_fragments );
416+ WARN_ON (!drv_mgmt -> free_fragments );
423417
424- down (& g_free_fragments_mutex );
425- fragments = g_free_fragments ;
418+ down (& drv_mgmt -> free_fragments_mutex );
419+ fragments = drv_mgmt -> free_fragments ;
426420 WARN_ON (!fragments );
427- g_free_fragments = * (char * * )g_free_fragments ;
428- up (& g_free_fragments_mutex );
421+ drv_mgmt -> free_fragments = * (char * * )drv_mgmt -> free_fragments ;
422+ up (& drv_mgmt -> free_fragments_mutex );
429423 pagelist -> type = PAGELIST_READ_WITH_FRAGMENTS +
430- (fragments - g_fragments_base ) / g_fragments_size ;
424+ (fragments - drv_mgmt -> fragments_base ) / drv_mgmt -> fragments_size ;
431425 }
432426
433427 return pagelistinfo ;
@@ -455,10 +449,10 @@ free_pagelist(struct vchiq_instance *instance, struct vchiq_pagelist_info *pagel
455449 pagelistinfo -> scatterlist_mapped = 0 ;
456450
457451 /* Deal with any partial cache lines (fragments) */
458- if (pagelist -> type >= PAGELIST_READ_WITH_FRAGMENTS && g_fragments_base ) {
459- char * fragments = g_fragments_base +
452+ if (pagelist -> type >= PAGELIST_READ_WITH_FRAGMENTS && drv_mgmt -> fragments_base ) {
453+ char * fragments = drv_mgmt -> fragments_base +
460454 (pagelist -> type - PAGELIST_READ_WITH_FRAGMENTS ) *
461- g_fragments_size ;
455+ drv_mgmt -> fragments_size ;
462456 int head_bytes , tail_bytes ;
463457
464458 head_bytes = (drv_mgmt -> info -> cache_line_size - pagelist -> offset ) &
@@ -483,11 +477,11 @@ free_pagelist(struct vchiq_instance *instance, struct vchiq_pagelist_info *pagel
483477 fragments + drv_mgmt -> info -> cache_line_size ,
484478 tail_bytes );
485479
486- down (& g_free_fragments_mutex );
487- * (char * * )fragments = g_free_fragments ;
488- g_free_fragments = fragments ;
489- up (& g_free_fragments_mutex );
490- up (& g_free_fragments_sema );
480+ down (& drv_mgmt -> free_fragments_mutex );
481+ * (char * * )fragments = drv_mgmt -> free_fragments ;
482+ drv_mgmt -> free_fragments = fragments ;
483+ up (& drv_mgmt -> free_fragments_mutex );
484+ up (& drv_mgmt -> free_fragments_sema );
491485 }
492486
493487 /* Need to mark all the pages dirty. */
@@ -523,11 +517,11 @@ static int vchiq_platform_init(struct platform_device *pdev, struct vchiq_state
523517 if (err < 0 )
524518 return err ;
525519
526- g_fragments_size = 2 * drv_mgmt -> info -> cache_line_size ;
520+ drv_mgmt -> fragments_size = 2 * drv_mgmt -> info -> cache_line_size ;
527521
528522 /* Allocate space for the channels in coherent memory */
529523 slot_mem_size = PAGE_ALIGN (TOTAL_SLOTS * VCHIQ_SLOT_SIZE );
530- frag_mem_size = PAGE_ALIGN (g_fragments_size * MAX_FRAGMENTS );
524+ frag_mem_size = PAGE_ALIGN (drv_mgmt -> fragments_size * MAX_FRAGMENTS );
531525
532526 slot_mem = dmam_alloc_coherent (dev , slot_mem_size + frag_mem_size ,
533527 & slot_phys , GFP_KERNEL );
@@ -547,15 +541,16 @@ static int vchiq_platform_init(struct platform_device *pdev, struct vchiq_state
547541 vchiq_slot_zero -> platform_data [VCHIQ_PLATFORM_FRAGMENTS_COUNT_IDX ] =
548542 MAX_FRAGMENTS ;
549543
550- g_fragments_base = (char * )slot_mem + slot_mem_size ;
544+ drv_mgmt -> fragments_base = (char * )slot_mem + slot_mem_size ;
551545
552- g_free_fragments = g_fragments_base ;
546+ drv_mgmt -> free_fragments = drv_mgmt -> fragments_base ;
553547 for (i = 0 ; i < (MAX_FRAGMENTS - 1 ); i ++ ) {
554- * (char * * )& g_fragments_base [i * g_fragments_size ] =
555- & g_fragments_base [(i + 1 ) * g_fragments_size ];
548+ * (char * * )& drv_mgmt -> fragments_base [i * drv_mgmt -> fragments_size ] =
549+ & drv_mgmt -> fragments_base [(i + 1 ) * drv_mgmt -> fragments_size ];
556550 }
557- * (char * * )& g_fragments_base [i * g_fragments_size ] = NULL ;
558- sema_init (& g_free_fragments_sema , MAX_FRAGMENTS );
551+ * (char * * )& drv_mgmt -> fragments_base [i * drv_mgmt -> fragments_size ] = NULL ;
552+ sema_init (& drv_mgmt -> free_fragments_sema , MAX_FRAGMENTS );
553+ sema_init (& drv_mgmt -> free_fragments_mutex , 1 );
559554
560555 err = vchiq_init_state (state , vchiq_slot_zero , dev );
561556 if (err )
0 commit comments