Giter Club home page Giter Club logo

linux-kernel's People

Contributors

wmdlr avatar

Watchers

 avatar  avatar

linux-kernel's Issues

Рекомендации по доработке драйвера XGBE

Доработку предлагаю проводить поэтапно.

На начальном этапе (эксперимент №1) предлагаю:

  1. Для приема и передачи пакетов использовать единственную структуру struct napi на канал. Для этого в структуре struct xgbe_channel поля napi_rx и napi_tx заменить на struct napi_struct napi.
  2. Для каждого канала настраивать единственный обработчик прерываний DMA. Для этого в структуре struct xgbe_channel поля tx_dma_irq и rx_dma_irq заменить на int dma_irq. Обработчик прерываний DMA реализовать в виде:
static irqreturn_t xgbe_dma_isr(int irq, void *data) {
	struct xgbe_channel *channel = data;
	unsigned int dma_ch_isr;

	dma_ch_isr = XGMAC_DMA_IOREAD(channel, DMA_CH_SR);

	if (napi_schedule_prep(&channel->napi)) {
		disable_irq_nosync(channel->dma_irq);
		__napi_schedule(&channel->napi);
	}

	XGMAC_DMA_IOWRITE(channel, DMA_CH_SR, dma_ch_isr);

        return IRQ_HANDLED;
}
  1. Вместо функций xgbe_one_tx_poll() и xgbe_one_rx_poll() реализовать функцию xgbe_one_poll() следующего вида:
static int xgbe_one_poll(struct napi_struct *napi, int budget)
{
	struct xgbe_channel *channel = container_of(napi, struct xgbe_channel, napi);
	int processed = 0;

	xgbe_tx_poll(channel);

	processed = xgbe_rx_poll(channel, budget);

	if (processed < budget) {
		napi_complete(napi);
		enable_irq(channel->dma_irq);
	}

	return processed;
}
  1. Уменьшить значение XGBE_NAPI_POLL_WEIGHT до NAPI_POLL_WEIGHT. Адекватное значение установить экспериментально на основании измеренной частоты запусков функции xgbe_one_poll() под нагрузкой при установленном нулевом бюджете.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.