On Tue, 2020-07-28 at 16:42 +0800, wanghai (M) wrote:Thanks for your explanation. I got it.
å 2020/7/25 5:29, Joe Perches åé:Memory allocation failures without __GFP_NOWARN. already
On Fri, 2020-07-24 at 21:00 +0800, Wang Hai wrote:Thanks for your advice. It is indeed best to use kmalloc here.
Remove casting the values returned by memory allocation function.[]
Coccinelle emits WARNING:
./drivers/net/ethernet/cavium/liquidio/octeon_device.c:1155:14-36: WARNING:
casting value returned by memory allocation function to (struct octeon_dispatch *) is useless.
diff --git a/drivers/net/ethernet/cavium/liquidio/octeon_device.c b/drivers/net/ethernet/cavium/liquidio/octeon_device.c[]
@@ -1152,8 +1152,7 @@ octeon_register_dispatch_fn(struct octeon_device *oct,More the question is why this is vmalloc at all
dev_dbg(&oct->pci_dev->dev,
"Adding opcode to dispatch list linked list\n");
- dispatch = (struct octeon_dispatch *)
- vmalloc(sizeof(struct octeon_dispatch));
+ dispatch = vmalloc(sizeof(struct octeon_dispatch));
as the structure size is very small.
Likely this should just be kmalloc.
I don't understand why dev_err is not needed here. We can easily knowif (!dispatch) {And this dev_err is unnecessary.
dev_err(&oct->pci_dev->dev,
"No memory to add dispatch function\n");
that an error has occurred here through dev_err
do a dump_stack to show the location of the code that
could not successfully allocate memory.
.