NAK: [SRU][F][PATCH 1/1] s390/qeth: use memory reserves to back RX buffers
Thadeu Lima de Souza Cascardo
cascardo at canonical.com
Fri Feb 4 13:49:04 UTC 2022
On Fri, Feb 04, 2022 at 10:29:21AM +0100, Krzysztof Kozlowski wrote:
> On 04/02/2022 07:47, frank.heimes at canonical.com wrote:
> > From: Julian Wiedmann <jwi at linux.ibm.com>
> >
> > BugLink: https://bugs.launchpad.net/bugs/1959529
> >
> > Use dev_alloc_page() for backing the RX buffers with pages. This way we
> > pick up __GFP_MEMALLOC.
> >
> > Signed-off-by: Julian Wiedmann <jwi at linux.ibm.com>
> > Signed-off-by: David S. Miller <davem at davemloft.net>
> > (backported from commit 714c9108851743bb718fbc1bfb81290f12a53854)
> > Signed-off-by: Alexandra Winter <wintera at linux.ibm.com>
> > Signed-off-by: Frank Heimes <frank.heimes at canonical.com>
> > ---
> > drivers/s390/net/qeth_core_main.c | 4 ++--
> > 1 file changed, 2 insertions(+), 2 deletions(-)
> >
> > diff --git a/drivers/s390/net/qeth_core_main.c b/drivers/s390/net/qeth_core_main.c
> > index ec8c7a640d9e..61372e5c279b 100644
> > --- a/drivers/s390/net/qeth_core_main.c
> > +++ b/drivers/s390/net/qeth_core_main.c
> > @@ -227,7 +227,7 @@ static int qeth_alloc_buffer_pool(struct qeth_card *card)
> > return -ENOMEM;
> > }
> > for (j = 0; j < QETH_MAX_BUFFER_ELEMENTS(card); ++j) {
> > - ptr = (void *) __get_free_page(GFP_KERNEL);
> > + ptr = (void *) __dev_alloc_page(GFP_KERNEL);
>
Or since the whole point is to use __GPF_MEMALLOC, simply do:
+ ptr = (void *) __get_free_page(GFP_KERNEL|__GFP_MEMALLOC);
> This does not look correct. New API returns "struct page*", previous
> returns mapped page address. These are not the same.
>
> Either we need to backport f81649dfa5343eef7e579eb6f8dd8bd6d300ec31
> first or a page_address dance like:
>
> struct page *page = __dev_alloc_page(GFP_KERNEL);
> if (!page)
> // handle -ENOMEM
> ptr = page_address(page);
>
>
> > if (!ptr) {
> > while (j > 0)
> > free_page((unsigned long)
> > @@ -2612,7 +2612,7 @@ static struct qeth_buffer_pool_entry *qeth_find_free_buffer_pool_entry(
> > struct qeth_buffer_pool_entry, list);
> > for (i = 0; i < QETH_MAX_BUFFER_ELEMENTS(card); ++i) {
> > if (page_count(virt_to_page(entry->elements[i])) > 1) {
> > - page = alloc_page(GFP_ATOMIC);
> > + page = dev_alloc_page();
> > if (!page) {
> > return NULL;
> > } else {
>
>
> Best regards,
> Krzysztof
>
> --
> kernel-team mailing list
> kernel-team at lists.ubuntu.com
> https://lists.ubuntu.com/mailman/listinfo/kernel-team
More information about the kernel-team
mailing list