@@ -194,12 +194,19 @@ gve_process_device_options(struct gve_priv *priv,
194
194
195
195
int gve_adminq_alloc (struct device * dev , struct gve_priv * priv )
196
196
{
197
- priv -> adminq = dma_alloc_coherent ( dev , PAGE_SIZE ,
198
- & priv -> adminq_bus_addr , GFP_KERNEL );
199
- if (unlikely (!priv -> adminq ))
197
+ priv -> adminq_pool = dma_pool_create ( "adminq_pool" , dev ,
198
+ GVE_ADMINQ_BUFFER_SIZE , 0 , 0 );
199
+ if (unlikely (!priv -> adminq_pool ))
200
200
return - ENOMEM ;
201
+ priv -> adminq = dma_pool_alloc (priv -> adminq_pool , GFP_KERNEL ,
202
+ & priv -> adminq_bus_addr );
203
+ if (unlikely (!priv -> adminq )) {
204
+ dma_pool_destroy (priv -> adminq_pool );
205
+ return - ENOMEM ;
206
+ }
201
207
202
- priv -> adminq_mask = (PAGE_SIZE / sizeof (union gve_adminq_command )) - 1 ;
208
+ priv -> adminq_mask =
209
+ (GVE_ADMINQ_BUFFER_SIZE / sizeof (union gve_adminq_command )) - 1 ;
203
210
priv -> adminq_prod_cnt = 0 ;
204
211
priv -> adminq_cmd_fail = 0 ;
205
212
priv -> adminq_timeouts = 0 ;
@@ -251,7 +258,8 @@ void gve_adminq_free(struct device *dev, struct gve_priv *priv)
251
258
if (!gve_get_admin_queue_ok (priv ))
252
259
return ;
253
260
gve_adminq_release (priv );
254
- dma_free_coherent (dev , PAGE_SIZE , priv -> adminq , priv -> adminq_bus_addr );
261
+ dma_pool_free (priv -> adminq_pool , priv -> adminq , priv -> adminq_bus_addr );
262
+ dma_pool_destroy (priv -> adminq_pool );
255
263
gve_clear_admin_queue_ok (priv );
256
264
}
257
265
@@ -778,16 +786,17 @@ int gve_adminq_describe_device(struct gve_priv *priv)
778
786
u16 mtu ;
779
787
780
788
memset (& cmd , 0 , sizeof (cmd ));
781
- descriptor = dma_alloc_coherent ( & priv -> pdev -> dev , PAGE_SIZE ,
782
- & descriptor_bus , GFP_KERNEL );
789
+ descriptor = dma_pool_alloc ( priv -> adminq_pool , GFP_KERNEL ,
790
+ & descriptor_bus );
783
791
if (!descriptor )
784
792
return - ENOMEM ;
785
793
cmd .opcode = cpu_to_be32 (GVE_ADMINQ_DESCRIBE_DEVICE );
786
794
cmd .describe_device .device_descriptor_addr =
787
795
cpu_to_be64 (descriptor_bus );
788
796
cmd .describe_device .device_descriptor_version =
789
797
cpu_to_be32 (GVE_ADMINQ_DEVICE_DESCRIPTOR_VERSION );
790
- cmd .describe_device .available_length = cpu_to_be32 (PAGE_SIZE );
798
+ cmd .describe_device .available_length =
799
+ cpu_to_be32 (GVE_ADMINQ_BUFFER_SIZE );
791
800
792
801
err = gve_adminq_execute_cmd (priv , & cmd );
793
802
if (err )
@@ -868,8 +877,7 @@ int gve_adminq_describe_device(struct gve_priv *priv)
868
877
dev_op_jumbo_frames , dev_op_dqo_qpl );
869
878
870
879
free_device_descriptor :
871
- dma_free_coherent (& priv -> pdev -> dev , PAGE_SIZE , descriptor ,
872
- descriptor_bus );
880
+ dma_pool_free (priv -> adminq_pool , descriptor , descriptor_bus );
873
881
return err ;
874
882
}
875
883
0 commit comments