/* * Freescale QUICC Engine USB Host Controller Driver * * Copyright (c) Freescale Semicondutor, Inc. 2006. * Shlomi Gridish * Jerry Huang * Copyright (c) Logic Product Development, Inc. 2007 * Peter Barada * Copyright (c) MontaVista Software, Inc. 2008. * Anton Vorontsov * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation; either version 2 of the License, or (at your * option) any later version. */ #include #include #include #include #include #include #include #include "fhci.h" static void init_td(struct td *td) { memset(td, 0, sizeof(*td)); INIT_LIST_HEAD(&td->node); INIT_LIST_HEAD(&td->frame_lh); } static void init_ed(struct ed *ed) { memset(ed, 0, sizeof(*ed)); INIT_LIST_HEAD(&ed->td_list); INIT_LIST_HEAD(&ed->node); } static struct td *get_empty_td(struct fhci_hcd *fhci) { struct td *td; if (!list_empty(&fhci->empty_tds)) { td = list_entry(fhci->empty_tds.next, struct td, node); list_del(fhci->empty_tds.next); } else { td = kmalloc(sizeof(*td), GFP_ATOMIC); if (!td) fhci_err(fhci, "No memory to allocate to TD\n"); else init_td(td); } return td; } void fhci_recycle_empty_td(struct fhci_hcd *fhci, struct td *td) { init_td(td); list_add(&td->node, &fhci->empty_tds); } struct ed *fhci_get_empty_ed(struct fhci_hcd *fhci) { struct ed *ed; if (!list_empty(&fhci->empty_eds)) { ed = list_entry(fhci->empty_eds.next, struct ed, node); list_del(fhci->empty_eds.next); } else { ed = kmalloc(sizeof(*ed), GFP_ATOMIC); if (!ed) fhci_err(fhci, "No memory to allocate to ED\n"); else init_ed(ed); } return ed; } void fhci_recycle_empty_ed(struct fhci_hcd *fhci, struct ed *ed) { init_ed(ed); list_add(&ed->node, &fhci->empty_eds); } struct td *fhci_td_fill(struct fhci_hcd *fhci, struct urb *urb, struct urb_priv *urb_priv, struct ed *ed, u16 index, enum fhci_ta_type type, int toggle, u8 *data, u32 len, u16 interval, u16 start_frame, bool ioc) { struct td *td = get_empty_td(fhci); if (!td) return NULL; td->urb = urb; td->ed = ed; td->type = type; td->toggle = toggle; td->data = data; td->len = len; td->iso_index = index; td->interval = interval; td->start_frame = start_frame; td->ioc = ioc; td->status = USB_TD_OK; urb_priv->tds[index] = td; return td; } f='/cgit.cgi/linux/net-next.git/commit/?id=10435c1192d06bdb0bac7666452d8219d7e7c477'>root/include/net/xfrm.h
diff options
context:
space:
mode:
authorFeng <fgao@ikuai8.com>2017-01-20 21:40:43 +0800
committerPablo Neira Ayuso <pablo@netfilter.org>2017-02-02 14:30:19 +0100
commit10435c1192d06bdb0bac7666452d8219d7e7c477 (patch)
tree93b76419142fe17b1d162d062c663297a3e8a965 /include/net/xfrm.h
parent1a28ad74ebd8f9d3c7eae0d781f72a6d30545e17 (diff)
netfilter: nf_tables: Eliminate duplicated code in nf_tables_table_enable()
If something fails in nf_tables_table_enable(), it unregisters the chains. But the rollback code is the same as nf_tables_table_disable() almostly, except there is one counter check. Now create one wrapper function to eliminate the duplicated codes. Signed-off-by: Feng <fgao@ikuai8.com> Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Diffstat (limited to 'include/net/xfrm.h')