Re: [PATCH net] docs: net: ena: Fix ena_start_xmit() function name typo

2021-03-16 Thread Shay Agroskin



Zenghui Yu  writes:

The ena.rst documentation referred to end_start_xmit() when it 
should refer

to ena_start_xmit(). Fix the typo.

Signed-off-by: Zenghui Yu 
---
 Documentation/networking/device_drivers/ethernet/amazon/ena.rst 
 | 2 +-

 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git 
a/Documentation/networking/device_drivers/ethernet/amazon/ena.rst 
b/Documentation/networking/device_drivers/ethernet/amazon/ena.rst

index 3561a8a29fd2..f8c6469f2bd2 100644
--- 
a/Documentation/networking/device_drivers/ethernet/amazon/ena.rst
+++ 
b/Documentation/networking/device_drivers/ethernet/amazon/ena.rst

@@ -267,7 +267,7 @@ DATA PATH
 Tx
 --
 
-end_start_xmit() is called by the stack. This function does the 
following:
+ena_start_xmit() is called by the stack. This function does the 
following:
 
 - Maps data buffers (skb->data and frags).
 - Populates ena_buf for the push buffer (if the driver and 
 device are


Acked-by: Shay Agroskin 

Thanks for this fix


Re: [PATCH] ethernet: amazon: ena: A typo fix in the file ena_com.h

2021-03-15 Thread Shay Agroskin



Bhaskar Chowdhury  writes:


Mundane typo fix.

Signed-off-by: Bhaskar Chowdhury 
---
 drivers/net/ethernet/amazon/ena/ena_com.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/amazon/ena/ena_com.h 
b/drivers/net/ethernet/amazon/ena/ena_com.h

index 343caf41e709..73b03ce59412 100644
--- a/drivers/net/ethernet/amazon/ena/ena_com.h
+++ b/drivers/net/ethernet/amazon/ena/ena_com.h
@@ -124,7 +124,7 @@ struct ena_com_io_cq {

/* holds the number of cdesc of the current packet */
u16 cur_rx_pkt_cdesc_count;
-   /* save the firt cdesc idx of the current packet */
+   /* save the first cdesc idx of the current packet */
u16 cur_rx_pkt_cdesc_start_idx;

u16 q_depth;


Acked-by: Shay Agroskin 

Thanks for your patch


Re: [PATCH 2/5] mm/page_alloc: Add a bulk page allocator

2021-03-10 Thread Shay Agroskin



Mel Gorman  writes:



diff --git a/include/linux/gfp.h b/include/linux/gfp.h
index 8572a1474e16..4903d1cc48dc 100644
--- a/include/linux/gfp.h
+++ b/include/linux/gfp.h
@@ -515,6 +515,10 @@ static inline int 
arch_make_page_accessible(struct page *page)

 }
 #endif
 
+int __alloc_pages_bulk_nodemask(gfp_t gfp_mask, int 
preferred_nid,
+nodemask_t *nodemask, int 
nr_pages,

+   struct list_head *list);
+
 struct page *
 __alloc_pages_nodemask(gfp_t gfp_mask, unsigned int order, int 
 preferred_nid,
 			nodemask_t 
 *nodemask);
@@ -525,6 +529,14 @@ __alloc_pages(gfp_t gfp_mask, unsigned int 
order, int preferred_nid)
 	return __alloc_pages_nodemask(gfp_mask, order, 
 preferred_nid, NULL);

 }
 
+/* Bulk allocate order-0 pages */

+static inline unsigned long
+alloc_pages_bulk(gfp_t gfp_mask, unsigned long nr_pages, struct 
list_head *list)

+{
+	return __alloc_pages_bulk_nodemask(gfp_mask, 
numa_mem_id(), NULL,
+			nr_pages, 
list);


Is the second line indentation intentional ? Why not align it to 
the first argument (gfp_mask) ?



+}
+
 /*
  * Allocate pages, preferring the node given as nid. The node 
  must be valid and

  * online. For more general interface, see alloc_pages_node().
@@ -594,6 +606,7 @@ void * __meminit alloc_pages_exact_nid(int 
nid, size_t size, gfp_t gfp_mask);
 
 extern void __free_pages(struct page *page, unsigned int 
 order);

 extern void free_pages(unsigned long addr, unsigned int order);
+extern void free_pages_bulk(struct list_head *list);
 
 struct page_frag_cache;
 extern void __page_frag_cache_drain(struct page *page, unsigned 
 int count);

diff --git a/mm/page_alloc.c b/mm/page_alloc.c
index 3e4b29ee2b1e..ff1e55793786 100644
--- a/mm/page_alloc.c
+++ b/mm/page_alloc.c
@@ -4436,6 +4436,21 @@ static void wake_all_kswapds(unsigned int 
order, gfp_t gfp_mask,

}
 }
...
 
+/*
+ * This is a batched version of the page allocator that 
attempts to
+ * allocate nr_pages quickly from the preferred zone and add 
them to list.

+ */
+int __alloc_pages_bulk_nodemask(gfp_t gfp_mask, int 
preferred_nid,

+   nodemask_t *nodemask, int nr_pages,
+   struct list_head *alloc_list)
+{
+   struct page *page;
+   unsigned long flags;
+   struct zone *zone;
+   struct zoneref *z;
+   struct per_cpu_pages *pcp;
+   struct list_head *pcp_list;
+   struct alloc_context ac;
+   gfp_t alloc_mask;
+   unsigned int alloc_flags;
+   int alloced = 0;


Does alloced count the number of allocated pages ? Do you mind 
renaming it to 'allocated' ?



+
+   if (nr_pages == 1)
+   goto failed;
+
+	/* May set ALLOC_NOFRAGMENT, fragmentation will return 1 
page. */
+	if (!prepare_alloc_pages(gfp_mask, 0, preferred_nid, 
nodemask, , _mask, _flags))

+   return 0;
+   gfp_mask = alloc_mask;
+
+	/* Find an allowed local zone that meets the high 
watermark. */
+	for_each_zone_zonelist_nodemask(zone, z, ac.zonelist, 
ac.highest_zoneidx, ac.nodemask) {

+   unsigned long mark;
+
+		if (cpusets_enabled() && (alloc_flags & 
ALLOC_CPUSET) &&

+   !__cpuset_zone_allowed(zone, gfp_mask)) {
+   continue;
+   }
+
+		if (nr_online_nodes > 1 && zone != 
ac.preferred_zoneref->zone &&
+		zone_to_nid(zone) != 
zone_to_nid(ac.preferred_zoneref->zone)) {

+   goto failed;
+   }
+
+		mark = wmark_pages(zone, alloc_flags & 
ALLOC_WMARK_MASK) + nr_pages;

+   if (zone_watermark_fast(zone, 0,  mark,
+ 
zonelist_zone_idx(ac.preferred_zoneref),

+   alloc_flags, gfp_mask)) {
+   break;
+   }
+   }
+   if (!zone)
+   return 0;
+
+   /* Attempt the batch allocation */
+   local_irq_save(flags);
+   pcp = _cpu_ptr(zone->pageset)->pcp;
+   pcp_list = >lists[ac.migratetype];
+
+   while (alloced < nr_pages) {
+		page = __rmqueue_pcplist(zone, ac.migratetype, 
alloc_flags,
+ 
pcp, pcp_list);


Same indentation comment as before


+   if (!page)
+   break;
+
+   prep_new_page(page, 0, gfp_mask, 0);
+   list_add(>lru, alloc_list);
+   alloced++;
+   }
+
+   if (!alloced)
+   goto failed_irq;
+
+   if (alloced) {
+		__count_zid_vm_events(PGALLOC, zone_idx(zone), 
alloced);

+   zone_statistics(zone, zone);
+   }
+
+   local_irq_restore(flags);
+
+   return alloced;
+
+failed_irq:
+   local_irq_restore(flags);
+
+failed:
+	page = __alloc_pages_nodemask(gfp_mask, 0, preferred_nid, 
nodemask);

+   if (page) {
+   alloced++;
+   list_add(>lru, alloc_list);
+   }
+
+   return alloced;
+}
+EXPORT_SYMBOL_GPL(__alloc_pages_bulk_nodemask);
+
 /*
  * This is the 'heart' of the zoned buddy allocator.
  */
@@ -4981,8 +5092,6 @@ 

Re: [PATCH net-next v3] net: ena: Fix using plain integer as NULL pointer in ena_init_napi_in_range

2020-07-20 Thread Shay Agroskin



Wang Hai  writes:


Fix sparse build warning:

drivers/net/ethernet/amazon/ena/ena_netdev.c:2193:34: warning:
 Using plain integer as NULL pointer

Reported-by: Hulk Robot 
Signed-off-by: Wang Hai 
Suggested-by: Joe Perches 
Acked-by: Shay Agroskin 
---
v1->v2:
 Improve code readability based on Joe Perches's suggestion 
v2->v3:

 Simplify code based on Joe Perches's suggestion
 drivers/net/ethernet/amazon/ena/ena_netdev.c | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/drivers/net/ethernet/amazon/ena/ena_netdev.c 
b/drivers/net/ethernet/amazon/ena/ena_netdev.c

index 91be3ffa1c5c..3eb63b12dd68 100644
--- a/drivers/net/ethernet/amazon/ena/ena_netdev.c
+++ b/drivers/net/ethernet/amazon/ena/ena_netdev.c
@@ -2190,14 +2190,13 @@ static void ena_del_napi_in_range(struct 
ena_adapter *adapter,

 static void ena_init_napi_in_range(struct ena_adapter *adapter,
   int first_index, int count)
 {
-   struct ena_napi *napi = {0};
int i;
 
 	for (i = first_index; i < first_index + count; i++) {

-   napi = >ena_napi[i];
+   struct ena_napi *napi = >ena_napi[i];
 
 		netif_napi_add(adapter->netdev,

-  >ena_napi[i].napi,
+  >napi,
 			   ENA_IS_XDP_INDEX(adapter, i) ? 
 ena_xdp_io_poll : ena_io_poll,

   ENA_NAPI_BUDGET);


Acked-by: Shay Agroskin 

Thanks a lot for your work


Re: [PATCH net-next v2] net: ena: Fix using plain integer as NULL pointer in ena_init_napi_in_range

2020-07-20 Thread Shay Agroskin



Joe Perches  writes:


On Mon, 2020-07-20 at 10:53 +0800, Wang Hai wrote:

Fix sparse build warning:

drivers/net/ethernet/amazon/ena/ena_netdev.c:2193:34: warning:
 Using plain integer as NULL pointer

[]
diff --git a/drivers/net/ethernet/amazon/ena/ena_netdev.c 
b/drivers/net/ethernet/amazon/ena/ena_netdev.c

[]
@@ -2190,11 +2190,10 @@ static void 
ena_del_napi_in_range(struct ena_adapter *adapter,
 static void ena_init_napi_in_range(struct ena_adapter 
 *adapter,

   int first_index, int count)
 {
-   struct ena_napi *napi = {0};
int i;
 
 	for (i = first_index; i < first_index + count; i++) {

-   napi = >ena_napi[i];
+   struct ena_napi *napi = >ena_napi[i];
 
 		netif_napi_add(adapter->netdev,

   >ena_napi[i].napi,


Another possible change is to this statement:

netif_napi_add(adapter->netdev,
   >napi,
   etc...);


Yup, missed that myself. Wang, if you don't mind please apply 
Joe's change as well.


Thanks, Shay


Re: [PATCH -next] net: ena: use NULL instead of zero

2020-07-19 Thread Shay Agroskin



Joe Perches  writes:


On Sat, 2020-07-18 at 19:56 +0800, Wang Hai wrote:

Fix sparse build warning:

drivers/net/ethernet/amazon/ena/ena_netdev.c:2193:34: warning:
 Using plain integer as NULL pointer


Better to remove the initialization altogether and
move the declaration into the loop.

diff --git a/drivers/net/ethernet/amazon/ena/ena_netdev.c 
b/drivers/net/ethernet/amazon/ena/ena_netdev.c

[]
@@ -2190,7 +2190,7 @@ static void ena_del_napi_in_range(struct 
ena_adapter *adapter,
 static void ena_init_napi_in_range(struct ena_adapter 
 *adapter,

   int first_index, int count)
 {
-   struct ena_napi *napi = {0};
+   struct ena_napi *napi = NULL;
int i;
 
 	for (i = first_index; i < first_index + count; i++) {


---
 drivers/net/ethernet/amazon/ena/ena_netdev.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/drivers/net/ethernet/amazon/ena/ena_netdev.c 
b/drivers/net/ethernet/amazon/ena/ena_netdev.c

index 91be3ffa1c5c..470d8f38b824 100644
--- a/drivers/net/ethernet/amazon/ena/ena_netdev.c
+++ b/drivers/net/ethernet/amazon/ena/ena_netdev.c
@@ -2190,11 +2190,10 @@ static void ena_del_napi_in_range(struct 
ena_adapter *adapter,

 static void ena_init_napi_in_range(struct ena_adapter *adapter,
   int first_index, int count)
 {
-   struct ena_napi *napi = {0};
int i;
 
 	for (i = first_index; i < first_index + count; i++) {

-   napi = >ena_napi[i];
+   struct ena_napi *napi = >ena_napi[i];
 
 		netif_napi_add(adapter->netdev,

   >ena_napi[i].napi,


We prefer the second variant as it improves code readability imo.
Thank you both for the time you invested in it (:

Acked-by: Shay Agroskin