[staging:staging-testing 83/83] drivers/staging//pi433/pi433_if.c:645:1: warning: the frame size of 1036 bytes is larger than 1024 bytes

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



tree:   https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging.git staging-testing
head:   874bcba65f9a3a2a304b5f520529c046887c3cdc
commit: 874bcba65f9a3a2a304b5f520529c046887c3cdc [83/83] staging: pi433: New driver
config: sh-allmodconfig (attached as .config)
compiler: sh4-linux-gnu-gcc (Debian 6.3.0-18) 6.3.0 20170516
reproduce:
        wget https://raw.githubusercontent.com/01org/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        git checkout 874bcba65f9a3a2a304b5f520529c046887c3cdc
        # save the attached .config to linux build tree
        make.cross ARCH=sh 

All warnings (new ones prefixed by >>):

   drivers/staging//pi433/pi433_if.c: In function 'pi433_tx_thread':
>> drivers/staging//pi433/pi433_if.c:645:1: warning: the frame size of 1036 bytes is larger than 1024 bytes [-Wframe-larger-than=]
    }
    ^

vim +645 drivers/staging//pi433/pi433_if.c

   465	
   466	int
   467	pi433_tx_thread(void *data)
   468	{
   469		struct pi433_device *device = data;
   470		struct spi_device *spi = device->spi; /* needed for SET_CHECKED */
   471		struct pi433_tx_cfg tx_cfg;
   472		u8     buffer[MAX_MSG_SIZE];
   473		size_t size;
   474		bool   rx_interrupted = false;
   475		int    position, repetitions;
   476		int    retval;
   477	
   478		while (1)
   479		{
   480			/* wait for fifo to be populated or for request to terminate*/
   481			dev_dbg(device->dev, "thread: going to wait for new messages");
   482			wait_event_interruptible(device->tx_wait_queue,
   483						 ( !kfifo_is_empty(&device->tx_fifo) ||
   484						    kthread_should_stop() ));
   485			if ( kthread_should_stop() )
   486				return 0;
   487	
   488			/* get data from fifo in the following order:
   489			   - tx_cfg
   490			   - size of message
   491			   - message */
   492			mutex_lock(&device->tx_fifo_lock);
   493	
   494			retval = kfifo_out(&device->tx_fifo, &tx_cfg, sizeof(tx_cfg));
   495			if (retval != sizeof(tx_cfg))
   496			{
   497				dev_dbg(device->dev, "reading tx_cfg from fifo failed: got %d byte(s), expected %d", retval, (unsigned int)sizeof(tx_cfg) );
   498				mutex_unlock(&device->tx_fifo_lock);
   499				continue;
   500			}
   501	
   502			retval = kfifo_out(&device->tx_fifo, &size, sizeof(size_t));
   503			if (retval != sizeof(size_t))
   504			{
   505				dev_dbg(device->dev, "reading msg size from fifo failed: got %d, expected %d", retval, (unsigned int)sizeof(size_t) );
   506				mutex_unlock(&device->tx_fifo_lock);
   507				continue;
   508			}
   509	
   510			/* use fixed message length, if requested */
   511			if (tx_cfg.fixed_message_length != 0)
   512				size = tx_cfg.fixed_message_length;
   513	
   514			/* increase size, if len byte is requested */
   515			if (tx_cfg.enable_length_byte == optionOn)
   516				size++;
   517	
   518			/* increase size, if adr byte is requested */
   519			if (tx_cfg.enable_address_byte == optionOn)
   520				size++;
   521	
   522			/* prime buffer */
   523			memset(buffer, 0, size);
   524			position = 0;
   525	
   526			/* add length byte, if requested */
   527			if (tx_cfg.enable_length_byte  == optionOn)
   528				buffer[position++] = size-1; /* according to spec length byte itself must be excluded from the length calculation */
   529	
   530			/* add adr byte, if requested */
   531			if (tx_cfg.enable_address_byte == optionOn)
   532				buffer[position++] = tx_cfg.address_byte;
   533	
   534			/* finally get message data from fifo */
   535			retval = kfifo_out(&device->tx_fifo, &buffer[position], sizeof(buffer)-position );
   536			dev_dbg(device->dev, "read %d message byte(s) from fifo queue.", retval);
   537			mutex_unlock(&device->tx_fifo_lock);
   538	
   539			/* if rx is active, we need to interrupt the waiting for
   540			   incoming telegrams, to be able to send something.
   541			   We are only allowed, if currently no reception takes
   542			   place otherwise we need to  wait for the incoming telegram
   543			   to finish */
   544			wait_event_interruptible(device->tx_wait_queue,
   545						 !device->rx_active ||
   546						  device->interrupt_rx_allowed == true);
   547	
   548			/* prevent race conditions
   549			   irq will be reenabled after tx config is set */
   550			disable_irq(device->irq_num[DIO0]);
   551			device->tx_active = true;
   552	
   553			if (device->rx_active && rx_interrupted == false)
   554			{
   555				/* rx is currently waiting for a telegram;
   556				   we need to set the radio module to standby */
   557				SET_CHECKED(rf69_set_mode(device->spi, standby));
   558				rx_interrupted = true;
   559			}
   560	
   561			/* clear fifo, set fifo threshold, set payload length */
   562			SET_CHECKED(rf69_set_mode(spi, standby)); /* this clears the fifo */
   563			SET_CHECKED(rf69_set_fifo_threshold(spi, FIFO_THRESHOLD));
   564			if (tx_cfg.enable_length_byte == optionOn)
   565			{
   566				SET_CHECKED(rf69_set_payload_length(spi, size * tx_cfg.repetitions));
   567			}
   568			else
   569			{
   570				SET_CHECKED(rf69_set_payload_length(spi, 0));
   571			}
   572	
   573			/* configure the rf chip */
   574			rf69_set_tx_cfg(device, &tx_cfg);
   575	
   576			/* enable fifo level interrupt */
   577			SET_CHECKED(rf69_set_dio_mapping(spi, DIO1, DIO_FifoLevel));
   578			device->irq_state[DIO1] = DIO_FifoLevel;
   579			irq_set_irq_type(device->irq_num[DIO1], IRQ_TYPE_EDGE_FALLING);
   580	
   581			/* enable packet sent interrupt */
   582			SET_CHECKED(rf69_set_dio_mapping(spi, DIO0, DIO_PacketSent));
   583			device->irq_state[DIO0] = DIO_PacketSent;
   584			irq_set_irq_type(device->irq_num[DIO0], IRQ_TYPE_EDGE_RISING);
   585			enable_irq(device->irq_num[DIO0]); /* was disabled by rx active check */
   586	
   587			/* enable transmission */
   588			SET_CHECKED(rf69_set_mode(spi, transmit));
   589	
   590			/* transfer this msg (and repetitions) to chip fifo */
   591			device->free_in_fifo = FIFO_SIZE;
   592			position = 0;
   593			repetitions = tx_cfg.repetitions;
   594			while( (repetitions > 0) && (size > position) )
   595			{
   596				if ( (size - position) > device->free_in_fifo)
   597				{	/* msg to big for fifo - take a part */
   598					int temp = device->free_in_fifo;
   599					device->free_in_fifo = 0;
   600					rf69_write_fifo(spi,
   601					                &buffer[position],
   602					                temp);
   603					position +=temp;
   604				}
   605				else
   606				{	/* msg fits into fifo - take all */
   607					device->free_in_fifo -= size;
   608					repetitions--;
   609					rf69_write_fifo(spi,
   610							&buffer[position],
   611							(size - position) );
   612					position = 0; /* reset for next repetition */
   613				}
   614	
   615				retval = wait_event_interruptible(device->fifo_wait_queue,
   616								  device->free_in_fifo > 0);
   617				if (retval) { printk("ABORT\n"); goto abort; }
   618			}
   619	
   620			/* we are done. Wait for packet to get sent */
   621			dev_dbg(device->dev, "thread: wiat for packet to get sent/fifo to be empty");
   622			wait_event_interruptible(device->fifo_wait_queue,
   623						 device->free_in_fifo == FIFO_SIZE ||
   624						 kthread_should_stop() );
   625			if ( kthread_should_stop() )	printk("ABORT\n");
   626	
   627	
   628			/* STOP_TRANSMISSION */
   629			dev_dbg(device->dev, "thread: Packet sent. Set mode to stby.");
   630			SET_CHECKED(rf69_set_mode(spi, standby));
   631	
   632			/* everything sent? */
   633			if ( kfifo_is_empty(&device->tx_fifo) )
   634			{
   635	abort:
   636				if (rx_interrupted)
   637				{
   638					rx_interrupted = false;
   639					pi433_start_rx(device);
   640				}
   641				device->tx_active = false;
   642				wake_up_interruptible(&device->rx_wait_queue);
   643			}
   644		}
 > 645	}
   646	

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation

Attachment: .config.gz
Description: application/gzip

_______________________________________________
devel mailing list
devel@xxxxxxxxxxxxxxxxxxxxxx
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel

[Index of Archives]     [Linux Driver Backports]     [DMA Engine]     [Linux GPIO]     [Linux SPI]     [Video for Linux]     [Linux USB Devel]     [Linux Coverity]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]
  Powered by Linux