Pay especially attention to your netif driver, it must not call netif->input() from IRQ context! See example code on the page of the second link above.
Also note you need a separate thread for lwIP, which needs to periodically poll the packet queue that is filled by netif driver from IRQ context and periodically call sys_check_timeouts() to make lwIP timers work.
If you do it the simple way, this creates continuous CPU load. If you put work in it, you can block the lwIP thread on packet queue AND on the expiry time of the next timeout (= you need to implement the timeout mechanism by yourself).